From 47ad4b8b0a348a8c501066b5e686debe12a6f557 Mon Sep 17 00:00:00 2001 From: melvyn2 Date: Sun, 8 May 2022 12:35:20 -0700 Subject: [PATCH 01/24] Add old steamapi dylibs to game_clean --- game_clean/copy/bin/libsteam_api.so | Bin 0 -> 202648 bytes .../copy/bin/libsteamnetworkingsockets.so | Bin 0 -> 2401923 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 game_clean/copy/bin/libsteam_api.so create mode 100644 game_clean/copy/bin/libsteamnetworkingsockets.so diff --git a/game_clean/copy/bin/libsteam_api.so b/game_clean/copy/bin/libsteam_api.so new file mode 100644 index 0000000000000000000000000000000000000000..6fbb7df968c149c0b98f71bc23865a01d174d275 GIT binary patch literal 202648 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

#gjkMN^fLk{eQ6P86JB{nc4HB| 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

8}aE2+SInOL}Tw;-BR#;=5>)d3M+iY`>`|PsE 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�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%0A}mpT)-=f1HE3|a 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

!_E+GtDSpo~ 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

FH-(4-yvssD?5;sEjoFchCgb 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 fcKeWhpt~pbXT`?x|0;dD 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

Jpu}N61J$7BYByWGmJLpKLij#VSD&;7* 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 F{1;+{C-wjU literal 0 HcmV?d00001 From ef3995b88be24202a783946b03c51857d9c32ca5 Mon Sep 17 00:00:00 2001 From: ReplayCoding Date: Sat, 18 Feb 2023 17:47:42 -0800 Subject: [PATCH 02/24] add some stuff to gitignore contains things that will be added in a later commit --- .gitignore | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 816ba9a0f..4af63aadc 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ ipch *.idb *.sln *.recipe +*.project pythonenv*/ /src/enc_temp_folder @@ -27,6 +28,7 @@ pythonenv*/ *.a *.la *.o +*.so *.lo *.Plo *.obj @@ -37,6 +39,7 @@ pythonenv*/ *.mak *.mak.vpc_crc *.xcodeproj/ +src/devtools/bin/vpc_linux obj*/ !src/devtools/*.mak !src/utils/smdlexp/smdlexp.mak @@ -239,9 +242,10 @@ src/unittests/testprocess/testprocess.exe !src/lib/common/lgLcd.lib !src/lib/common/libcurl.lib !src/lib/common/libjpeg.lib +!src/lib/common/linux32/libSDL2-2.0.so.0 !src/lib/common/linux32/libSDL2_mixer.a -!src/lib/common/linux32/libcrypto.a -!src/lib/common/linux32/libcryptopp.a +!src/lib/common/ubuntu12_32/libcrypto.a +!src/lib/common/ubuntu12_32/libcryptopp.a !src/lib/common/linux32/libcurl.a !src/lib/common/linux32/libcurlssl.a !src/lib/common/linux32/libjpeg.a From 47d56dddb416c5040fa1b4467a231a163279e49a Mon Sep 17 00:00:00 2001 From: ReplayCoding Date: Sat, 18 Feb 2023 16:34:57 -0800 Subject: [PATCH 03/24] add scripts to build repo build.sh contains references to external libs which aren't added in this commit. Co-authored-by: melvyn2 Co-authored-by: HurricanePootis Co-authored-by: interrupt --- game_clean/copy/hl2.sh | 73 +++++++++++++++++++++ game_clean/copy/start_server.sh | 7 +++ game_clean/copy/start_tf2.sh | 7 +++ game_clean/create_clean_linux.sh | 80 +++++++++++++++++++++++ game_clean/link.sh | 53 ++++++++++++++++ src/build.sh | 94 ++++++++++++++++++++++++++++ src/devtools/makefile_base_posix.mak | 35 +++++++++++ src/vpc_scripts/groups.vgc | 40 ++++++------ 8 files changed, 369 insertions(+), 20 deletions(-) create mode 100755 game_clean/copy/hl2.sh create mode 100755 game_clean/copy/start_server.sh create mode 100755 game_clean/copy/start_tf2.sh create mode 100755 game_clean/create_clean_linux.sh create mode 100755 game_clean/link.sh create mode 100755 src/build.sh diff --git a/game_clean/copy/hl2.sh b/game_clean/copy/hl2.sh new file mode 100755 index 000000000..c08398d23 --- /dev/null +++ b/game_clean/copy/hl2.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +# figure out the absolute path to the script being run a bit +# non-obvious, the ${0%/*} pulls the path out of $0, cd's into the +# specified directory, then uses $PWD to figure out where that +# directory lives - and all this in a subshell, so we don't affect +# $PWD + +GAMEROOT=$(cd "${0%/*}" && echo $PWD) + +#determine platform +UNAME=`uname` +if [ "$UNAME" == "Darwin" ]; then + # Workaround OS X El Capitan 10.11 System Integrity Protection (SIP) which does not allow + # DYLD_INSERT_LIBRARIES to be set for system processes. + if [ "$STEAM_DYLD_INSERT_LIBRARIES" != "" ] && [ "$DYLD_INSERT_LIBRARIES" == "" ]; then + export DYLD_INSERT_LIBRARIES="$STEAM_DYLD_INSERT_LIBRARIES" + fi + # prepend our lib path to LD_LIBRARY_PATH + export DYLD_LIBRARY_PATH="${GAMEROOT}"/bin:$DYLD_LIBRARY_PATH +elif [ "$UNAME" == "Linux" ]; then + # prepend our lib path to LD_LIBRARY_PATH + export LD_LIBRARY_PATH="${GAMEROOT}"/bin:$LD_LIBRARY_PATH +fi + +if [ -z $GAMEEXE ]; then + if [ "$UNAME" == "Darwin" ]; then + GAMEEXE=hl2_osx + elif [ "$UNAME" == "Linux" ]; then + GAMEEXE=hl2_linux + fi +fi + +ulimit -n 2048 + +# enable nVidia threaded optimizations +export __GL_THREADED_OPTIMIZATIONS=1 + +# and launch the game +cd "$GAMEROOT" + +# Enable path match if we are running with loose files +if [ -f pathmatch.inf ]; then + export ENABLE_PATHMATCH=1 +fi + +# Do the following for strace: +# GAME_DEBUGGER="strace -f -o strace.log" +# Do the following for tcmalloc +# LD_PRELOAD=../src/thirdparty/gperftools-2.0/.libs/libtcmalloc_debug.so:$LD_PRELOAD + +STATUS=42 +while [ $STATUS -eq 42 ]; do + if [ "${GAME_DEBUGGER}" == "gdb" ] || [ "${GAME_DEBUGGER}" == "cgdb" ]; then + ARGSFILE=$(mktemp $USER.hl2.gdb.XXXX) + echo b main > "$ARGSFILE" + + # Set the LD_PRELOAD varname in the debugger, and unset the global version. This makes it so that + # gameoverlayrenderer.so and the other preload objects aren't loaded in our debugger's process. + echo set env LD_PRELOAD=$LD_PRELOAD >> "$ARGSFILE" + echo show env LD_PRELOAD >> "$ARGSFILE" + unset LD_PRELOAD + + echo run $@ >> "$ARGSFILE" + echo show args >> "$ARGSFILE" + ${GAME_DEBUGGER} "${GAMEROOT}"/${GAMEEXE} -x "$ARGSFILE" + rm "$ARGSFILE" + else + ${GAME_DEBUGGER} "${GAMEROOT}"/${GAMEEXE} "$@" + fi + STATUS=$? +done +exit $STATUS diff --git a/game_clean/copy/start_server.sh b/game_clean/copy/start_server.sh new file mode 100755 index 000000000..b2281c6a5 --- /dev/null +++ b/game_clean/copy/start_server.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -e +cd "$(dirname "$0")" + +ARGS="+sv_pure 1 +maxplayers 32 +sv_lan 1" + +"$(pwd)"/srcds_linux -game tf -insecure -console -nomaster ${ARGS} $@ diff --git a/game_clean/copy/start_tf2.sh b/game_clean/copy/start_tf2.sh new file mode 100755 index 000000000..b7e93023a --- /dev/null +++ b/game_clean/copy/start_tf2.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -e +cd "$(dirname "$0")" + +ARGS="-steam -game tf -insecure -novid -nojoy -nosteamcontroller -nobreakpad" + +$HOME/.steam/bin32/steam-runtime/run.sh ${LAUNCH_PREFIX} "$(pwd)"/hl2.sh ${ARGS} $@ diff --git a/game_clean/create_clean_linux.sh b/game_clean/create_clean_linux.sh new file mode 100755 index 000000000..d2d78f7d5 --- /dev/null +++ b/game_clean/create_clean_linux.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +# +# TODO: Properly handle dedicated server builds +# Run script within the directory +BIN_DIR=$(dirname "$(readlink -fn "$0")") +cd "${BIN_DIR}" || exit 2 + +set -e + +DEV_DIR=../game +CLEAN_DIR=../game_dist +CLEAN_DEBUG_DIR=${CLEAN_DIR}_debug +rm -rf ${CLEAN_DIR} +rm -rf ${CLEAN_DEBUG_DIR} +mkdir -p ${CLEAN_DIR}/{bin,tf/bin} +mkdir -p ${CLEAN_DEBUG_DIR}/{bin,tf/bin} +cp -rf copy/* ${CLEAN_DIR} + +DLL_EXT=.so +DBG_EXT=.dbg +MAP_EXT=.map + +declare -a EXECUTABLES=( + {hl2,srcds}_linux + bin/vtf2tga_linux32 + bin/vpk_linux32 + ) + +declare -a DLLS=( + bin/bsppack + bin/bugreporter_public + bin/datacache + bin/engine + bin/filesystem_stdio + bin/GameUI + bin/inputsystem + bin/launcher + bin/libtier0 + bin/libtogl + bin/libvstdlib + bin/materialsystem + bin/replay + bin/scenefilecache + bin/ServerBrowser + bin/shaderapidx9 + bin/shaderapiempty + bin/soundemittersystem + bin/sourcevr + bin/stdshader_dx9 + bin/studiorender + bin/vgui2 + bin/vguimatsurface + bin/vtex_dll + tf/bin/client + tf/bin/server + ) + +for F in "${EXECUTABLES[@]}"; do + # This will fail at least once, since either hl2 or srcds exists, but not both. + cp -f ${DEV_DIR}/${F} ${CLEAN_DIR}/${F} || true + cp -f ${DEV_DIR}/${F}$MAP_EXT ${CLEAN_DEBUG_DIR}/${F}$MAP_EXT || true + cp -f ${DEV_DIR}/${F}$DBG_EXT ${CLEAN_DEBUG_DIR}/${F}$DBG_EXT || true +done + +for F in "${DLLS[@]}"; do + cp -f ${DEV_DIR}/${F}$DLL_EXT ${CLEAN_DIR}/${F}$DLL_EXT + cp -f ${DEV_DIR}/${F}$DLL_EXT$DBG_EXT ${CLEAN_DEBUG_DIR}/${F}$DLL_EXT$DBG_EXT +done + +declare -a FILES_REPO=( + ../LICENSE_SDK + ../.github/README.md + ../thirdpartylegalnotices.txt + ./link.sh + ) + +for F in "${FILES_REPO[@]}"; do + ORIG=$(basename ${F}) + cp -f ${F} ${CLEAN_DIR}/${ORIG} +done diff --git a/game_clean/link.sh b/game_clean/link.sh new file mode 100755 index 000000000..24583cd17 --- /dev/null +++ b/game_clean/link.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +# NOTE: Do not set -e, some cp commands fail because they don't overwrite existing files, which we want +cd "$(dirname "$0")" || exit 1 + +if [[ -n "$1" ]]; then + ORIGINAL_INSTALL_DIR="$1" +else + ORIGINAL_INSTALL_DIR="${HOME}/.steam/steam/steamapps/common/Team Fortress 2/" +fi + +if [[ ! -d "$ORIGINAL_INSTALL_DIR" ]]; then + echo Failed to find TF2 at \'"${ORIGINAL_INSTALL_DIR}"\' + echo Did you move your steam library? + echo If so, pass the path to your TF2 installation after \'link.sh\' + echo If you already did so, check your supplied path + exit 1 +fi + + +OUTPUT_DIR="$PWD" +# Hack to detect if we're a in a dist build, or dev build. +if [[ -d "./copy" ]]; then + OUTPUT_DIR="../game" + # If we're a dev build, we need to copy over the clean files + cp -rfT copy/ $OUTPUT_DIR +fi + +link_dir() { + ln -sn "${ORIGINAL_INSTALL_DIR}/$1" "$OUTPUT_DIR/$1" +} + +link_glob() { + ln -sn "${ORIGINAL_INSTALL_DIR}/$1/"*"$2" "$OUTPUT_DIR/$1/" +} + +copy () { + cp -rfT --remove-destination "${ORIGINAL_INSTALL_DIR}/$1" "$OUTPUT_DIR/$1" +} + + +link_dir hl2 +link_dir platform +link_dir tf/maps +mkdir $OUTPUT_DIR/tf/materials +link_dir tf/materials/models +link_dir tf/materials/vgui +link_dir tf/media +link_dir tf/resource +link_dir tf/scripts + +link_glob bin '' 2> >(grep -v "File exists") +link_glob tf '.vpk' +link_glob tf '.cache' diff --git a/src/build.sh b/src/build.sh new file mode 100755 index 000000000..1a799dd8c --- /dev/null +++ b/src/build.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash +set -e # Stop on error +cd "$(dirname "$0")" + +if pwd | grep -q " "; then + echo "You have cloned the source directory into a path with spaces" + echo "This will break a lot of thirdparty build scripts" + echo "Please move the source directory somewhere without a space in the path" + exit 1 +fi + +# Defaults +MAKE_SRT_FLAGS="NO_CHROOT=1 STEAM_RUNTIME_PATH=" +MAKE_CFG="CFG=release" +MAKE_VERBOSE="" +VPC_GROUP="port" +CORES=$(nproc) +# shellcheck disable=SC2155 +export CC="$(pwd)/devtools/bin/linux/ccache gcc" +# shellcheck disable=SC2155 +export CXX="$(pwd)/devtools/bin/linux/ccache g++" +export VALVE_NO_AUTO_P4=1 + +while [[ ${1:0:1} == '-' ]]; do + case "${1}" in + "-v") + MAKE_VERBOSE=1 + ;; + "-d") + MAKE_CFG="CFG=debug" + ;; + "-c") + shift + if [[ $1 == ?(-)+([[:digit:]]) ]]; then + CORES=$1 + else + echo "Not a number: ${1}" + exit 1 + fi + ;; + "-l") + # shellcheck disable=SC2155 + export CC="$(pwd)/devtools/bin/linux/ccache clang" + # shellcheck disable=SC2155 + export CXX="$(pwd)/devtools/bin/linux/ccache clang++" + VPC_FLAGS+=" /define:CLANG" + ;; + "-s") + VPC_GROUP="dedicated" + VPC_FLAGS+=" /define:DEDICATED" + ;; + *) + echo "Unknown flag ${1}" + exit 1 + ;; + esac + shift +done + +build_thirdparty() { + if [[ ! -f "thirdparty/$1/$2" ]]; then + pushd . + cd "thirdparty/$1/" + local EXTRA_CFLAGS=$3 + local CFLAGS="-m32 -D_GLIBCXX_USE_CXX11_ABI=0 ${EXTRA_CFLAGS}" + autoreconf -i + chmod u+x configure + ./configure "CFLAGS=${CFLAGS}" \ + "CXXFLAGS=${CFLAGS}" \ + "LDFLAGS=-m32" + make "-j$CORES" + popd + fi +} + +build_thirdparty "protobuf-2.6.1" "src/.libs/libprotobuf.a" +build_thirdparty "libedit-3.1" "src/.libs/libedit.a" "-std=c99" +build_thirdparty "gperftools-2.0" ".libs/libtcmalloc_minimal.so" "-fpermissive -w" + +pushd . + +cd "./external/vpc/utils/vpc" +# shellcheck disable=SC2086 +make "-j$CORES" CC="$CC" CXX="$CXX" + +popd + +# shellcheck disable=SC2086 # we want arguments to be split +devtools/bin/vpc_linux /define:WORKSHOP_IMPORT_DISABLE /define:SIXENSE_DISABLE /define:NO_X360_XDK \ + /define:RAD_TELEMETRY_DISABLED /nofpo /tf ${VPC_FLAGS} "+${VPC_GROUP}" /mksln games + +mkdir -p "../game" +time make "${MAKE_SRT_FLAGS}" MAKE_VERBOSE="${MAKE_VERBOSE}" ${MAKE_CFG} \ + MAKE_JOBS="$CORES" -f games.mak "$@" diff --git a/src/devtools/makefile_base_posix.mak b/src/devtools/makefile_base_posix.mak index 0e121d4d2..ba5fd34ed 100644 --- a/src/devtools/makefile_base_posix.mak +++ b/src/devtools/makefile_base_posix.mak @@ -92,9 +92,13 @@ ifeq ($(CLANG_BUILD),1) BASE_CXXFLAGS += -ftemplate-depth=900 # Needed for older versions of clang (newer versions are compatible with gcc syntax) PCH_CXXFLAGS += -emit-pch + + PCH_CXXFLAGS += -fcolor-diagnostics else # GCC specific - better PCH behavior w/ccache and better debugging information BASE_CFLAGS += -fpch-preprocess -fvar-tracking-assignments + + BASE_CFLAGS+= -fdiagnostics-color=always endif DEFINES += -DVPROF_LEVEL=1 -DGNUC -DNO_HOOK_MALLOC @@ -218,6 +222,37 @@ WARN_FLAGS += -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-value WARN_FLAGS += -Wno-invalid-offsetof -Wno-float-equal -Wno-reorder -Werror=return-type WARN_FLAGS += -fdiagnostics-show-option -Wformat -Wformat-security +# note(replaycoding): Ideally we would fix the code to get rid of these +# warnings, there are likely some nasty bugs hiding behind this, especially on +# newer compilers. +WARN_FLAGS += \ + -Wno-misleading-indentation \ + -Wno-maybe-uninitialized \ + -Wno-class-memaccess \ + -Wno-sign-compare \ + -Wno-deprecated-declarations \ + -Wno-int-in-bool-context \ + -Wno-ignored-attributes \ + -Wno-stringop-truncation \ + -Wno-stringop-overflow \ + -Wno-unused-but-set-variable \ + -Wno-switch \ + -Wno-packed-not-aligned \ + -Wno-nonnull-compare \ + -Wno-delete-non-virtual-dtor \ + -Wno-address \ + -Wno-comment \ + -Wno-conversion-null \ + -Wno-format-overflow \ + -Wno-catch-value \ + -Wno-unused-local-typedefs \ + -Wno-placement-new \ + -Wno-sequence-point \ + -Wno-logical-not-parentheses \ + -Wno-uninitialized \ + -Wno-cpp \ + -Wno-parentheses + ifeq ($(TARGET_PLATFORM),linux64) # nocona = pentium4 + 64bit + MMX, SSE, SSE2, SSE3 - no SSSE3 (that's three s's - added in core2) ARCH_FLAGS += -march=$(MARCH_TARGET) -mtune=core2 diff --git a/src/vpc_scripts/groups.vgc b/src/vpc_scripts/groups.vgc index f806f357b..36ad0b607 100644 --- a/src/vpc_scripts/groups.vgc +++ b/src/vpc_scripts/groups.vgc @@ -471,11 +471,11 @@ $Group "dedicated" "dmxloader" "engine" "gcsdk" - "havana_constraints" - "hk_base" - "hk_math" - "ivp_compactbuilder" - "ivp_physics" +// "havana_constraints" +// "hk_base" +// "hk_math" +// "ivp_compactbuilder" +// "ivp_physics" "jpeglib" "lzma" "materialsystem" @@ -494,7 +494,7 @@ $Group "dedicated" "tier2" "tier3" "unitlib" - "vphysics" +// "vphysics" "vpklib" "vstdlib" "vtf" @@ -526,20 +526,20 @@ $Group "port" "studiorender" "scenefilecache" "datacache" - "hk_base" - "hk_math" - "havana_constraints" - "ivp_physics" - "ivp_compactbuilder" - "vphysics" + // "hk_base" + // "hk_math" + // "havana_constraints" + // "ivp_physics" + // "ivp_compactbuilder" + // "vphysics" "shaderlib" "shaderapiempty" "materialsystem" "matsys_controls" "vgui_controls" - "vaudio_miles" - "vaudio_speex" - "vaudio_celt" + // "vaudio_miles" + // "vaudio_speex" + // "vaudio_celt" "engine" "choreoobjects" "launcher_main" @@ -559,7 +559,7 @@ $Group "port" "togl" "shaderapidx9" "stdshader_dx9" - "bugreporter_filequeue" + // "bugreporter_filequeue" "bugreporter_public" "lzma" "networksystem" @@ -578,10 +578,10 @@ $Group "port" "vpk" "vpklib" "vtf2tga" - "video_bink" - "video_quicktime" - "video_webm" - "video_services" + // "video_bink" + // "video_quicktime" + // "video_webm" + // "video_services" } // Abbreviated version of the 'everything' group for Source licensees From 551435d058cf8628c95815ea47d774e597b4eb86 Mon Sep 17 00:00:00 2001 From: ReplayCoding Date: Sun, 19 Feb 2023 00:02:11 -0800 Subject: [PATCH 04/24] fix vpc crashing at runtime VPC will segfault unless it's built as 32bit --- src/external/vpc/utils/vpc/Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/external/vpc/utils/vpc/Makefile b/src/external/vpc/utils/vpc/Makefile index 1bf7b0534..033782e68 100644 --- a/src/external/vpc/utils/vpc/Makefile +++ b/src/external/vpc/utils/vpc/Makefile @@ -207,7 +207,7 @@ CFLAGS+= -arch i386 -fasm-blocks endif ifeq "$(OS)" "Linux" -CFLAGS+= -DPLATFORM_LINUX -D_LINUX -DLINUX +CFLAGS+= -DPLATFORM_LINUX -D_LINUX -DLINUX -m32 endif ifeq ($(CYGWIN),1) @@ -230,6 +230,10 @@ ifeq "$(OS)" "Darwin" LINK+= -arch i386 endif +ifeq "$(OS)" "Linux" +LINK+= -m32 +endif + # Build rules all: $(OUTFILE) ../../../../devtools/bin/vpc$(EXE_POSTFIX) From 940f7b25ca151188ca481d72a35c2cc5ca931454 Mon Sep 17 00:00:00 2001 From: ReplayCoding Date: Sat, 18 Feb 2023 16:57:25 -0800 Subject: [PATCH 05/24] fix case-sensitivity issues linux paths are case-sensitive, some code doesn't expect this --- src/gameui/GameUI.vpc | 2 +- src/materialsystem/stdshaders/debugluxel.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gameui/GameUI.vpc b/src/gameui/GameUI.vpc index bf782c2a1..e762fd75c 100644 --- a/src/gameui/GameUI.vpc +++ b/src/gameui/GameUI.vpc @@ -116,7 +116,7 @@ $Project "GameUI" $File "$SRCDIR\common\IVGuiModuleLoader.h" $File "$SRCDIR\common\GameUI\ObjectList.h" $File "$SRCDIR\public\savegame_version.h" - $File "$SRCDIR\Tracker\common\TrackerMessageFlags.h" + $File "$SRCDIR\tracker\common\TrackerMessageFlags.h" $File "$SRCDIR\common\ValveCDKeyGameAndTerritoryCodes.h" $File "$SRCDIR\common\language.h" $File "$SRCDIR\common\imageutils.h" diff --git a/src/materialsystem/stdshaders/debugluxel.cpp b/src/materialsystem/stdshaders/debugluxel.cpp index 328dfb6bb..f180bc386 100644 --- a/src/materialsystem/stdshaders/debugluxel.cpp +++ b/src/materialsystem/stdshaders/debugluxel.cpp @@ -6,7 +6,7 @@ // $NoKeywords: $ //===========================================================================// -#include "shaderlib/CShader.h" +#include "shaderlib/cshader.h" #include "debugluxel_ps20b.inc" #include "debugluxel_ps20.inc" From fddb453abea1d7a516491ce9f250f5a1c5d5f7b1 Mon Sep 17 00:00:00 2001 From: ReplayCoding Date: Sat, 18 Feb 2023 16:40:18 -0800 Subject: [PATCH 06/24] use system freetype headers TF2 already uses the system library, and these headers are broken anyways. --- src/common/freetype/config/ftconfig-32.h | 350 -- src/common/freetype/config/ftconfig-64.h | 350 -- src/common/freetype/config/ftconfig.h | 14 - src/common/freetype/config/ftheader.h | 729 ---- src/common/freetype/config/ftmodule.h | 22 - src/common/freetype/config/ftoption.h | 669 ---- src/common/freetype/config/ftstdlib.h | 180 - src/common/freetype/freetype.h | 3434 ----------------- src/common/freetype/ftbbox.h | 94 - src/common/freetype/ftbdf.h | 200 - src/common/freetype/ftbitmap.h | 206 - src/common/freetype/ftcache.h | 1110 ------ src/common/freetype/ftchapters.h | 100 - src/common/freetype/fterrdef.h | 239 -- src/common/freetype/fterrors.h | 206 - src/common/freetype/ftgasp.h | 113 - src/common/freetype/ftglyph.h | 575 --- src/common/freetype/ftgxval.h | 358 -- src/common/freetype/ftgzip.h | 102 - src/common/freetype/ftimage.h | 1237 ------ src/common/freetype/ftincrem.h | 331 -- src/common/freetype/ftlcdfil.h | 166 - src/common/freetype/ftlist.h | 273 -- src/common/freetype/ftlzw.h | 99 - src/common/freetype/ftmac.h | 272 -- src/common/freetype/ftmm.h | 378 -- src/common/freetype/ftmodapi.h | 406 -- src/common/freetype/ftmoderr.h | 155 - src/common/freetype/ftotval.h | 198 - src/common/freetype/ftoutln.h | 526 --- src/common/freetype/ftpfr.h | 172 - src/common/freetype/ftrender.h | 229 -- src/common/freetype/ftsizes.h | 159 - src/common/freetype/ftsnames.h | 170 - src/common/freetype/ftstroke.h | 716 ---- src/common/freetype/ftsynth.h | 73 - src/common/freetype/ftsystem.h | 346 -- src/common/freetype/fttrigon.h | 350 -- src/common/freetype/fttypes.h | 583 --- src/common/freetype/ftwinfnt.h | 263 -- src/common/freetype/ftxf86.h | 80 - src/common/freetype/t1tables.h | 450 --- src/common/freetype/ttnameid.h | 1132 ------ src/common/freetype/tttables.h | 756 ---- src/common/freetype/tttags.h | 99 - src/common/freetype/ttunpat.h | 59 - src/vgui2/vgui_surfacelib/vgui_surfacelib.vpc | 7 + src/vguimatsurface/vguimatsurface.vpc | 2 + 48 files changed, 9 insertions(+), 18729 deletions(-) delete mode 100644 src/common/freetype/config/ftconfig-32.h delete mode 100644 src/common/freetype/config/ftconfig-64.h delete mode 100644 src/common/freetype/config/ftconfig.h delete mode 100644 src/common/freetype/config/ftheader.h delete mode 100644 src/common/freetype/config/ftmodule.h delete mode 100644 src/common/freetype/config/ftoption.h delete mode 100644 src/common/freetype/config/ftstdlib.h delete mode 100644 src/common/freetype/freetype.h delete mode 100644 src/common/freetype/ftbbox.h delete mode 100644 src/common/freetype/ftbdf.h delete mode 100644 src/common/freetype/ftbitmap.h delete mode 100644 src/common/freetype/ftcache.h delete mode 100644 src/common/freetype/ftchapters.h delete mode 100644 src/common/freetype/fterrdef.h delete mode 100644 src/common/freetype/fterrors.h delete mode 100644 src/common/freetype/ftgasp.h delete mode 100644 src/common/freetype/ftglyph.h delete mode 100644 src/common/freetype/ftgxval.h delete mode 100644 src/common/freetype/ftgzip.h delete mode 100644 src/common/freetype/ftimage.h delete mode 100644 src/common/freetype/ftincrem.h delete mode 100644 src/common/freetype/ftlcdfil.h delete mode 100644 src/common/freetype/ftlist.h delete mode 100644 src/common/freetype/ftlzw.h delete mode 100644 src/common/freetype/ftmac.h delete mode 100644 src/common/freetype/ftmm.h delete mode 100644 src/common/freetype/ftmodapi.h delete mode 100644 src/common/freetype/ftmoderr.h delete mode 100644 src/common/freetype/ftotval.h delete mode 100644 src/common/freetype/ftoutln.h delete mode 100644 src/common/freetype/ftpfr.h delete mode 100644 src/common/freetype/ftrender.h delete mode 100644 src/common/freetype/ftsizes.h delete mode 100644 src/common/freetype/ftsnames.h delete mode 100644 src/common/freetype/ftstroke.h delete mode 100644 src/common/freetype/ftsynth.h delete mode 100644 src/common/freetype/ftsystem.h delete mode 100644 src/common/freetype/fttrigon.h delete mode 100644 src/common/freetype/fttypes.h delete mode 100644 src/common/freetype/ftwinfnt.h delete mode 100644 src/common/freetype/ftxf86.h delete mode 100644 src/common/freetype/t1tables.h delete mode 100644 src/common/freetype/ttnameid.h delete mode 100644 src/common/freetype/tttables.h delete mode 100644 src/common/freetype/tttags.h delete mode 100644 src/common/freetype/ttunpat.h diff --git a/src/common/freetype/config/ftconfig-32.h b/src/common/freetype/config/ftconfig-32.h deleted file mode 100644 index 3b447508c..000000000 --- a/src/common/freetype/config/ftconfig-32.h +++ /dev/null @@ -1,350 +0,0 @@ -/* ftconfig.h. Generated from ftconfig.in by configure. */ -/***************************************************************************/ -/* */ -/* ftconfig.in */ -/* */ -/* UNIX-specific configuration file (specification only). */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This header file contains a number of macro definitions that are used */ - /* by the rest of the engine. Most of the macros here are automatically */ - /* determined at compile time, and you should not need to change it to */ - /* port FreeType, except to compile the library with a non-ANSI */ - /* compiler. */ - /* */ - /* Note however that if some specific modifications are needed, we */ - /* advise you to place a modified copy in your build directory. */ - /* */ - /* The build directory is usually `freetype/builds/', and */ - /* contains system-specific files that are always included first when */ - /* building the library. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTCONFIG_H__ -#define __FTCONFIG_H__ - -#include -#include FT_CONFIG_OPTIONS_H -#include FT_CONFIG_STANDARD_LIBRARY_H - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* PLATFORM-SPECIFIC CONFIGURATION MACROS */ - /* */ - /* These macros can be toggled to suit a specific system. The current */ - /* ones are defaults used to compile FreeType in an ANSI C environment */ - /* (16bit compilers are also supported). Copy this file to your own */ - /* `freetype/builds/' directory, and edit it to port the engine. */ - /* */ - /*************************************************************************/ - - -#define HAVE_UNISTD_H 1 -#define HAVE_FCNTL_H 1 - -#define SIZEOF_INT 4 -#define SIZEOF_LONG 4 - - -#define FT_SIZEOF_INT SIZEOF_INT -#define FT_SIZEOF_LONG SIZEOF_LONG - -#define FT_CHAR_BIT CHAR_BIT - - /* Preferred alignment of data */ -#define FT_ALIGNMENT 8 - - - /* FT_UNUSED is a macro used to indicate that a given parameter is not */ - /* used -- this is only used to get rid of unpleasant compiler warnings */ -#ifndef FT_UNUSED -#define FT_UNUSED( arg ) ( (arg) = (arg) ) -#endif - - - /*************************************************************************/ - /* */ - /* AUTOMATIC CONFIGURATION MACROS */ - /* */ - /* These macros are computed from the ones defined above. Don't touch */ - /* their definition, unless you know precisely what you are doing. No */ - /* porter should need to mess with them. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Mac support */ - /* */ - /* This is the only necessary change, so it is defined here instead */ - /* providing a new configuration file. */ - /* */ -#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \ - ( defined( __MWERKS__ ) && defined( macintosh ) ) - /* no Carbon frameworks for 64bit 10.4.x */ -#include "AvailabilityMacros.h" -#if defined( __LP64__ ) && \ - ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 ) -#define DARWIN_NO_CARBON 1 -#else -#define FT_MACINTOSH 1 -#endif -#endif - - - /* Fix compiler warning with sgi compiler */ -#if defined( __sgi ) && !defined( __GNUC__ ) -#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 ) -#pragma set woff 3505 -#endif -#endif - - - /*************************************************************************/ - /* */ - /* IntN types */ - /* */ - /* Used to guarantee the size of some specific integers. */ - /* */ - typedef signed short FT_Int16; - typedef unsigned short FT_UInt16; - -#if FT_SIZEOF_INT == 4 - - typedef signed int FT_Int32; - typedef unsigned int FT_UInt32; - -#elif FT_SIZEOF_LONG == 4 - - typedef signed long FT_Int32; - typedef unsigned long FT_UInt32; - -#else -#error "no 32bit type found -- please check your configuration files" -#endif - - - /* look up an integer type that is at least 32 bits */ -#if FT_SIZEOF_INT >= 4 - - typedef int FT_Fast; - typedef unsigned int FT_UFast; - -#elif FT_SIZEOF_LONG >= 4 - - typedef long FT_Fast; - typedef unsigned long FT_UFast; - -#endif - - - /* determine whether we have a 64-bit int type for platforms without */ - /* Autoconf */ -#if FT_SIZEOF_LONG == 8 - - /* FT_LONG64 must be defined if a 64-bit type is available */ -#define FT_LONG64 -#define FT_INT64 long - -#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */ - - /* this compiler provides the __int64 type */ -#define FT_LONG64 -#define FT_INT64 __int64 - -#elif defined( __BORLANDC__ ) /* Borland C++ */ - - /* XXXX: We should probably check the value of __BORLANDC__ in order */ - /* to test the compiler version. */ - - /* this compiler provides the __int64 type */ -#define FT_LONG64 -#define FT_INT64 __int64 - -#elif defined( __WATCOMC__ ) /* Watcom C++ */ - - /* Watcom doesn't provide 64-bit data types */ - -#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */ - -#define FT_LONG64 -#define FT_INT64 long long int - -#elif defined( __GNUC__ ) - - /* GCC provides the `long long' type */ -#define FT_LONG64 -#define FT_INT64 long long int - -#endif /* FT_SIZEOF_LONG == 8 */ - - -#define FT_BEGIN_STMNT do { -#define FT_END_STMNT } while ( 0 ) -#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT - - - /*************************************************************************/ - /* */ - /* A 64-bit data type will create compilation problems if you compile */ - /* in strict ANSI mode. To avoid them, we disable their use if */ - /* __STDC__ is defined. You can however ignore this rule by */ - /* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */ - /* */ -#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 ) - -#ifdef __STDC__ - - /* Undefine the 64-bit macros in strict ANSI compilation mode. */ - /* Since `#undef' doesn't survive in configuration header files */ - /* we use the postprocessing facility of AC_CONFIG_HEADERS to */ - /* replace the leading `/' with `#'. */ -#undef FT_LONG64 -#undef FT_INT64 - -#endif /* __STDC__ */ - -#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */ - - -#ifdef FT_MAKE_OPTION_SINGLE_OBJECT - -#define FT_LOCAL( x ) static x -#define FT_LOCAL_DEF( x ) static x - -#else - -#ifdef __cplusplus -#define FT_LOCAL( x ) extern "C" x -#define FT_LOCAL_DEF( x ) extern "C" x -#else -#define FT_LOCAL( x ) extern x -#define FT_LOCAL_DEF( x ) x -#endif - -#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */ - - -#ifndef FT_BASE - -#ifdef __cplusplus -#define FT_BASE( x ) extern "C" x -#else -#define FT_BASE( x ) extern x -#endif - -#endif /* !FT_BASE */ - - -#ifndef FT_BASE_DEF - -#ifdef __cplusplus -#define FT_BASE_DEF( x ) x -#else -#define FT_BASE_DEF( x ) x -#endif - -#endif /* !FT_BASE_DEF */ - - -#ifndef FT_EXPORT - -#ifdef __cplusplus -#define FT_EXPORT( x ) extern "C" x -#else -#define FT_EXPORT( x ) extern x -#endif - -#endif /* !FT_EXPORT */ - - -#ifndef FT_EXPORT_DEF - -#ifdef __cplusplus -#define FT_EXPORT_DEF( x ) extern "C" x -#else -#define FT_EXPORT_DEF( x ) extern x -#endif - -#endif /* !FT_EXPORT_DEF */ - - -#ifndef FT_EXPORT_VAR - -#ifdef __cplusplus -#define FT_EXPORT_VAR( x ) extern "C" x -#else -#define FT_EXPORT_VAR( x ) extern x -#endif - -#endif /* !FT_EXPORT_VAR */ - - /* The following macros are needed to compile the library with a */ - /* C++ compiler and with 16bit compilers. */ - /* */ - - /* This is special. Within C++, you must specify `extern "C"' for */ - /* functions which are used via function pointers, and you also */ - /* must do that for structures which contain function pointers to */ - /* assure C linkage -- it's not possible to have (local) anonymous */ - /* functions which are accessed by (global) function pointers. */ - /* */ - /* */ - /* FT_CALLBACK_DEF is used to _define_ a callback function. */ - /* */ - /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */ - /* contains pointers to callback functions. */ - /* */ - /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */ - /* that contains pointers to callback functions. */ - /* */ - /* */ - /* Some 16bit compilers have to redefine these macros to insert */ - /* the infamous `_cdecl' or `__fastcall' declarations. */ - /* */ -#ifndef FT_CALLBACK_DEF -#ifdef __cplusplus -#define FT_CALLBACK_DEF( x ) extern "C" x -#else -#define FT_CALLBACK_DEF( x ) static x -#endif -#endif /* FT_CALLBACK_DEF */ - -#ifndef FT_CALLBACK_TABLE -#ifdef __cplusplus -#define FT_CALLBACK_TABLE extern "C" -#define FT_CALLBACK_TABLE_DEF extern "C" -#else -#define FT_CALLBACK_TABLE extern -#define FT_CALLBACK_TABLE_DEF /* nothing */ -#endif -#endif /* FT_CALLBACK_TABLE */ - - -FT_END_HEADER - - -#endif /* __FTCONFIG_H__ */ - - -/* END */ diff --git a/src/common/freetype/config/ftconfig-64.h b/src/common/freetype/config/ftconfig-64.h deleted file mode 100644 index d0765b058..000000000 --- a/src/common/freetype/config/ftconfig-64.h +++ /dev/null @@ -1,350 +0,0 @@ -/* ftconfig.h. Generated from ftconfig.in by configure. */ -/***************************************************************************/ -/* */ -/* ftconfig.in */ -/* */ -/* UNIX-specific configuration file (specification only). */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This header file contains a number of macro definitions that are used */ - /* by the rest of the engine. Most of the macros here are automatically */ - /* determined at compile time, and you should not need to change it to */ - /* port FreeType, except to compile the library with a non-ANSI */ - /* compiler. */ - /* */ - /* Note however that if some specific modifications are needed, we */ - /* advise you to place a modified copy in your build directory. */ - /* */ - /* The build directory is usually `freetype/builds/', and */ - /* contains system-specific files that are always included first when */ - /* building the library. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTCONFIG_H__ -#define __FTCONFIG_H__ - -#include -#include FT_CONFIG_OPTIONS_H -#include FT_CONFIG_STANDARD_LIBRARY_H - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* PLATFORM-SPECIFIC CONFIGURATION MACROS */ - /* */ - /* These macros can be toggled to suit a specific system. The current */ - /* ones are defaults used to compile FreeType in an ANSI C environment */ - /* (16bit compilers are also supported). Copy this file to your own */ - /* `freetype/builds/' directory, and edit it to port the engine. */ - /* */ - /*************************************************************************/ - - -#define HAVE_UNISTD_H 1 -#define HAVE_FCNTL_H 1 - -#define SIZEOF_INT 4 -#define SIZEOF_LONG 8 - - -#define FT_SIZEOF_INT SIZEOF_INT -#define FT_SIZEOF_LONG SIZEOF_LONG - -#define FT_CHAR_BIT CHAR_BIT - - /* Preferred alignment of data */ -#define FT_ALIGNMENT 8 - - - /* FT_UNUSED is a macro used to indicate that a given parameter is not */ - /* used -- this is only used to get rid of unpleasant compiler warnings */ -#ifndef FT_UNUSED -#define FT_UNUSED( arg ) ( (arg) = (arg) ) -#endif - - - /*************************************************************************/ - /* */ - /* AUTOMATIC CONFIGURATION MACROS */ - /* */ - /* These macros are computed from the ones defined above. Don't touch */ - /* their definition, unless you know precisely what you are doing. No */ - /* porter should need to mess with them. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Mac support */ - /* */ - /* This is the only necessary change, so it is defined here instead */ - /* providing a new configuration file. */ - /* */ -#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \ - ( defined( __MWERKS__ ) && defined( macintosh ) ) - /* no Carbon frameworks for 64bit 10.4.x */ -#include "AvailabilityMacros.h" -#if defined( __LP64__ ) && \ - ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 ) -#define DARWIN_NO_CARBON 1 -#else -#define FT_MACINTOSH 1 -#endif -#endif - - - /* Fix compiler warning with sgi compiler */ -#if defined( __sgi ) && !defined( __GNUC__ ) -#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 ) -#pragma set woff 3505 -#endif -#endif - - - /*************************************************************************/ - /* */ - /* IntN types */ - /* */ - /* Used to guarantee the size of some specific integers. */ - /* */ - typedef signed short FT_Int16; - typedef unsigned short FT_UInt16; - -#if FT_SIZEOF_INT == 4 - - typedef signed int FT_Int32; - typedef unsigned int FT_UInt32; - -#elif FT_SIZEOF_LONG == 4 - - typedef signed long FT_Int32; - typedef unsigned long FT_UInt32; - -#else -#error "no 32bit type found -- please check your configuration files" -#endif - - - /* look up an integer type that is at least 32 bits */ -#if FT_SIZEOF_INT >= 4 - - typedef int FT_Fast; - typedef unsigned int FT_UFast; - -#elif FT_SIZEOF_LONG >= 4 - - typedef long FT_Fast; - typedef unsigned long FT_UFast; - -#endif - - - /* determine whether we have a 64-bit int type for platforms without */ - /* Autoconf */ -#if FT_SIZEOF_LONG == 8 - - /* FT_LONG64 must be defined if a 64-bit type is available */ -#define FT_LONG64 -#define FT_INT64 long - -#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */ - - /* this compiler provides the __int64 type */ -#define FT_LONG64 -#define FT_INT64 __int64 - -#elif defined( __BORLANDC__ ) /* Borland C++ */ - - /* XXXX: We should probably check the value of __BORLANDC__ in order */ - /* to test the compiler version. */ - - /* this compiler provides the __int64 type */ -#define FT_LONG64 -#define FT_INT64 __int64 - -#elif defined( __WATCOMC__ ) /* Watcom C++ */ - - /* Watcom doesn't provide 64-bit data types */ - -#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */ - -#define FT_LONG64 -#define FT_INT64 long long int - -#elif defined( __GNUC__ ) - - /* GCC provides the `long long' type */ -#define FT_LONG64 -#define FT_INT64 long long int - -#endif /* FT_SIZEOF_LONG == 8 */ - - -#define FT_BEGIN_STMNT do { -#define FT_END_STMNT } while ( 0 ) -#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT - - - /*************************************************************************/ - /* */ - /* A 64-bit data type will create compilation problems if you compile */ - /* in strict ANSI mode. To avoid them, we disable their use if */ - /* __STDC__ is defined. You can however ignore this rule by */ - /* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */ - /* */ -#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 ) - -#ifdef __STDC__ - - /* Undefine the 64-bit macros in strict ANSI compilation mode. */ - /* Since `#undef' doesn't survive in configuration header files */ - /* we use the postprocessing facility of AC_CONFIG_HEADERS to */ - /* replace the leading `/' with `#'. */ -#undef FT_LONG64 -#undef FT_INT64 - -#endif /* __STDC__ */ - -#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */ - - -#ifdef FT_MAKE_OPTION_SINGLE_OBJECT - -#define FT_LOCAL( x ) static x -#define FT_LOCAL_DEF( x ) static x - -#else - -#ifdef __cplusplus -#define FT_LOCAL( x ) extern "C" x -#define FT_LOCAL_DEF( x ) extern "C" x -#else -#define FT_LOCAL( x ) extern x -#define FT_LOCAL_DEF( x ) x -#endif - -#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */ - - -#ifndef FT_BASE - -#ifdef __cplusplus -#define FT_BASE( x ) extern "C" x -#else -#define FT_BASE( x ) extern x -#endif - -#endif /* !FT_BASE */ - - -#ifndef FT_BASE_DEF - -#ifdef __cplusplus -#define FT_BASE_DEF( x ) x -#else -#define FT_BASE_DEF( x ) x -#endif - -#endif /* !FT_BASE_DEF */ - - -#ifndef FT_EXPORT - -#ifdef __cplusplus -#define FT_EXPORT( x ) extern "C" x -#else -#define FT_EXPORT( x ) extern x -#endif - -#endif /* !FT_EXPORT */ - - -#ifndef FT_EXPORT_DEF - -#ifdef __cplusplus -#define FT_EXPORT_DEF( x ) extern "C" x -#else -#define FT_EXPORT_DEF( x ) extern x -#endif - -#endif /* !FT_EXPORT_DEF */ - - -#ifndef FT_EXPORT_VAR - -#ifdef __cplusplus -#define FT_EXPORT_VAR( x ) extern "C" x -#else -#define FT_EXPORT_VAR( x ) extern x -#endif - -#endif /* !FT_EXPORT_VAR */ - - /* The following macros are needed to compile the library with a */ - /* C++ compiler and with 16bit compilers. */ - /* */ - - /* This is special. Within C++, you must specify `extern "C"' for */ - /* functions which are used via function pointers, and you also */ - /* must do that for structures which contain function pointers to */ - /* assure C linkage -- it's not possible to have (local) anonymous */ - /* functions which are accessed by (global) function pointers. */ - /* */ - /* */ - /* FT_CALLBACK_DEF is used to _define_ a callback function. */ - /* */ - /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */ - /* contains pointers to callback functions. */ - /* */ - /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */ - /* that contains pointers to callback functions. */ - /* */ - /* */ - /* Some 16bit compilers have to redefine these macros to insert */ - /* the infamous `_cdecl' or `__fastcall' declarations. */ - /* */ -#ifndef FT_CALLBACK_DEF -#ifdef __cplusplus -#define FT_CALLBACK_DEF( x ) extern "C" x -#else -#define FT_CALLBACK_DEF( x ) static x -#endif -#endif /* FT_CALLBACK_DEF */ - -#ifndef FT_CALLBACK_TABLE -#ifdef __cplusplus -#define FT_CALLBACK_TABLE extern "C" -#define FT_CALLBACK_TABLE_DEF extern "C" -#else -#define FT_CALLBACK_TABLE extern -#define FT_CALLBACK_TABLE_DEF /* nothing */ -#endif -#endif /* FT_CALLBACK_TABLE */ - - -FT_END_HEADER - - -#endif /* __FTCONFIG_H__ */ - - -/* END */ diff --git a/src/common/freetype/config/ftconfig.h b/src/common/freetype/config/ftconfig.h deleted file mode 100644 index 8d4a074b6..000000000 --- a/src/common/freetype/config/ftconfig.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef __FTCONFIG_H__MULTILIB -#define __FTCONFIG_H__MULTILIB - -#include - -#if __WORDSIZE == 32 -# include "ftconfig-32.h" -#elif __WORDSIZE == 64 -# include "ftconfig-64.h" -#else -# error "unexpected value for __WORDSIZE macro" -#endif - -#endif diff --git a/src/common/freetype/config/ftheader.h b/src/common/freetype/config/ftheader.h deleted file mode 100644 index b957d05be..000000000 --- a/src/common/freetype/config/ftheader.h +++ /dev/null @@ -1,729 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftheader.h */ -/* */ -/* Build macros of the FreeType 2 library. */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - -#ifndef __FT_HEADER_H__ -#define __FT_HEADER_H__ - - - /*@***********************************************************************/ - /* */ - /* */ - /* FT_BEGIN_HEADER */ - /* */ - /* */ - /* This macro is used in association with @FT_END_HEADER in header */ - /* files to ensure that the declarations within are properly */ - /* encapsulated in an `extern "C" { .. }' block when included from a */ - /* C++ compiler. */ - /* */ -#ifdef __cplusplus -#define FT_BEGIN_HEADER extern "C" { -#else -#define FT_BEGIN_HEADER /* nothing */ -#endif - - - /*@***********************************************************************/ - /* */ - /* */ - /* FT_END_HEADER */ - /* */ - /* */ - /* This macro is used in association with @FT_BEGIN_HEADER in header */ - /* files to ensure that the declarations within are properly */ - /* encapsulated in an `extern "C" { .. }' block when included from a */ - /* C++ compiler. */ - /* */ -#ifdef __cplusplus -#define FT_END_HEADER } -#else -#define FT_END_HEADER /* nothing */ -#endif - - - /*************************************************************************/ - /* */ - /* Aliases for the FreeType 2 public and configuration files. */ - /* */ - /*************************************************************************/ - - /*************************************************************************/ - /* */ - /*

*/ - /* header_file_macros */ - /* */ - /* */ - /* Header File Macros */ - /* */ - /* <Abstract> */ - /* Macro definitions used to #include specific header files. */ - /* */ - /* <Description> */ - /* The following macros are defined to the name of specific */ - /* FreeType 2 header files. They can be used directly in #include */ - /* statements as in: */ - /* */ - /* { */ - /* #include FT_FREETYPE_H */ - /* #include FT_MULTIPLE_MASTERS_H */ - /* #include FT_GLYPH_H */ - /* } */ - /* */ - /* There are several reasons why we are now using macros to name */ - /* public header files. The first one is that such macros are not */ - /* limited to the infamous 8.3 naming rule required by DOS (and */ - /* `FT_MULTIPLE_MASTERS_H' is a lot more meaningful than `ftmm.h'). */ - /* */ - /* The second reason is that it allows for more flexibility in the */ - /* way FreeType 2 is installed on a given system. */ - /* */ - /*************************************************************************/ - - - /* configuration files */ - - /************************************************************************* - * - * @macro: - * FT_CONFIG_CONFIG_H - * - * @description: - * A macro used in #include statements to name the file containing - * FreeType 2 configuration data. - * - */ -#ifndef FT_CONFIG_CONFIG_H -#define FT_CONFIG_CONFIG_H <freetype/config/ftconfig.h> -#endif - - - /************************************************************************* - * - * @macro: - * FT_CONFIG_STANDARD_LIBRARY_H - * - * @description: - * A macro used in #include statements to name the file containing - * FreeType 2 interface to the standard C library functions. - * - */ -#ifndef FT_CONFIG_STANDARD_LIBRARY_H -#define FT_CONFIG_STANDARD_LIBRARY_H <freetype/config/ftstdlib.h> -#endif - - - /************************************************************************* - * - * @macro: - * FT_CONFIG_OPTIONS_H - * - * @description: - * A macro used in #include statements to name the file containing - * FreeType 2 project-specific configuration options. - * - */ -#ifndef FT_CONFIG_OPTIONS_H -#define FT_CONFIG_OPTIONS_H <freetype/config/ftoption.h> -#endif - - - /************************************************************************* - * - * @macro: - * FT_CONFIG_MODULES_H - * - * @description: - * A macro used in #include statements to name the file containing the - * list of FreeType 2 modules that are statically linked to new library - * instances in @FT_Init_FreeType. - * - */ -#ifndef FT_CONFIG_MODULES_H -#define FT_CONFIG_MODULES_H <freetype/config/ftmodule.h> -#endif - - - /* public headers */ - - /************************************************************************* - * - * @macro: - * FT_FREETYPE_H - * - * @description: - * A macro used in #include statements to name the file containing the - * base FreeType 2 API. - * - */ -#define FT_FREETYPE_H <freetype/freetype.h> - - - /************************************************************************* - * - * @macro: - * FT_ERRORS_H - * - * @description: - * A macro used in #include statements to name the file containing the - * list of FreeType 2 error codes (and messages). - * - * It is included by @FT_FREETYPE_H. - * - */ -#define FT_ERRORS_H <freetype/fterrors.h> - - - /************************************************************************* - * - * @macro: - * FT_MODULE_ERRORS_H - * - * @description: - * A macro used in #include statements to name the file containing the - * list of FreeType 2 module error offsets (and messages). - * - */ -#define FT_MODULE_ERRORS_H <freetype/ftmoderr.h> - - - /************************************************************************* - * - * @macro: - * FT_SYSTEM_H - * - * @description: - * A macro used in #include statements to name the file containing the - * FreeType 2 interface to low-level operations (i.e., memory management - * and stream i/o). - * - * It is included by @FT_FREETYPE_H. - * - */ -#define FT_SYSTEM_H <freetype/ftsystem.h> - - - /************************************************************************* - * - * @macro: - * FT_IMAGE_H - * - * @description: - * A macro used in #include statements to name the file containing type - * definitions related to glyph images (i.e., bitmaps, outlines, - * scan-converter parameters). - * - * It is included by @FT_FREETYPE_H. - * - */ -#define FT_IMAGE_H <freetype/ftimage.h> - - - /************************************************************************* - * - * @macro: - * FT_TYPES_H - * - * @description: - * A macro used in #include statements to name the file containing the - * basic data types defined by FreeType 2. - * - * It is included by @FT_FREETYPE_H. - * - */ -#define FT_TYPES_H <freetype/fttypes.h> - - - /************************************************************************* - * - * @macro: - * FT_LIST_H - * - * @description: - * A macro used in #include statements to name the file containing the - * list management API of FreeType 2. - * - * (Most applications will never need to include this file.) - * - */ -#define FT_LIST_H <freetype/ftlist.h> - - - /************************************************************************* - * - * @macro: - * FT_OUTLINE_H - * - * @description: - * A macro used in #include statements to name the file containing the - * scalable outline management API of FreeType 2. - * - */ -#define FT_OUTLINE_H <freetype/ftoutln.h> - - - /************************************************************************* - * - * @macro: - * FT_SIZES_H - * - * @description: - * A macro used in #include statements to name the file containing the - * API which manages multiple @FT_Size objects per face. - * - */ -#define FT_SIZES_H <freetype/ftsizes.h> - - - /************************************************************************* - * - * @macro: - * FT_MODULE_H - * - * @description: - * A macro used in #include statements to name the file containing the - * module management API of FreeType 2. - * - */ -#define FT_MODULE_H <freetype/ftmodapi.h> - - - /************************************************************************* - * - * @macro: - * FT_RENDER_H - * - * @description: - * A macro used in #include statements to name the file containing the - * renderer module management API of FreeType 2. - * - */ -#define FT_RENDER_H <freetype/ftrender.h> - - - /************************************************************************* - * - * @macro: - * FT_TYPE1_TABLES_H - * - * @description: - * A macro used in #include statements to name the file containing the - * types and API specific to the Type 1 format. - * - */ -#define FT_TYPE1_TABLES_H <freetype/t1tables.h> - - - /************************************************************************* - * - * @macro: - * FT_TRUETYPE_IDS_H - * - * @description: - * A macro used in #include statements to name the file containing the - * enumeration values which identify name strings, languages, encodings, - * etc. This file really contains a _large_ set of constant macro - * definitions, taken from the TrueType and OpenType specifications. - * - */ -#define FT_TRUETYPE_IDS_H <freetype/ttnameid.h> - - - /************************************************************************* - * - * @macro: - * FT_TRUETYPE_TABLES_H - * - * @description: - * A macro used in #include statements to name the file containing the - * types and API specific to the TrueType (as well as OpenType) format. - * - */ -#define FT_TRUETYPE_TABLES_H <freetype/tttables.h> - - - /************************************************************************* - * - * @macro: - * FT_TRUETYPE_TAGS_H - * - * @description: - * A macro used in #include statements to name the file containing the - * definitions of TrueType four-byte `tags' which identify blocks in - * SFNT-based font formats (i.e., TrueType and OpenType). - * - */ -#define FT_TRUETYPE_TAGS_H <freetype/tttags.h> - - - /************************************************************************* - * - * @macro: - * FT_BDF_H - * - * @description: - * A macro used in #include statements to name the file containing the - * definitions of an API which accesses BDF-specific strings from a - * face. - * - */ -#define FT_BDF_H <freetype/ftbdf.h> - - - /************************************************************************* - * - * @macro: - * FT_GZIP_H - * - * @description: - * A macro used in #include statements to name the file containing the - * definitions of an API which supports gzip-compressed files. - * - */ -#define FT_GZIP_H <freetype/ftgzip.h> - - - /************************************************************************* - * - * @macro: - * FT_LZW_H - * - * @description: - * A macro used in #include statements to name the file containing the - * definitions of an API which supports LZW-compressed files. - * - */ -#define FT_LZW_H <freetype/ftlzw.h> - - - /************************************************************************* - * - * @macro: - * FT_WINFONTS_H - * - * @description: - * A macro used in #include statements to name the file containing the - * definitions of an API which supports Windows FNT files. - * - */ -#define FT_WINFONTS_H <freetype/ftwinfnt.h> - - - /************************************************************************* - * - * @macro: - * FT_GLYPH_H - * - * @description: - * A macro used in #include statements to name the file containing the - * API of the optional glyph management component. - * - */ -#define FT_GLYPH_H <freetype/ftglyph.h> - - - /************************************************************************* - * - * @macro: - * FT_BITMAP_H - * - * @description: - * A macro used in #include statements to name the file containing the - * API of the optional bitmap conversion component. - * - */ -#define FT_BITMAP_H <freetype/ftbitmap.h> - - - /************************************************************************* - * - * @macro: - * FT_BBOX_H - * - * @description: - * A macro used in #include statements to name the file containing the - * API of the optional exact bounding box computation routines. - * - */ -#define FT_BBOX_H <freetype/ftbbox.h> - - - /************************************************************************* - * - * @macro: - * FT_CACHE_H - * - * @description: - * A macro used in #include statements to name the file containing the - * API of the optional FreeType 2 cache sub-system. - * - */ -#define FT_CACHE_H <freetype/ftcache.h> - - - /************************************************************************* - * - * @macro: - * FT_CACHE_IMAGE_H - * - * @description: - * A macro used in #include statements to name the file containing the - * `glyph image' API of the FreeType 2 cache sub-system. - * - * It is used to define a cache for @FT_Glyph elements. You can also - * use the API defined in @FT_CACHE_SMALL_BITMAPS_H if you only need to - * store small glyph bitmaps, as it will use less memory. - * - * This macro is deprecated. Simply include @FT_CACHE_H to have all - * glyph image-related cache declarations. - * - */ -#define FT_CACHE_IMAGE_H FT_CACHE_H - - - /************************************************************************* - * - * @macro: - * FT_CACHE_SMALL_BITMAPS_H - * - * @description: - * A macro used in #include statements to name the file containing the - * `small bitmaps' API of the FreeType 2 cache sub-system. - * - * It is used to define a cache for small glyph bitmaps in a relatively - * memory-efficient way. You can also use the API defined in - * @FT_CACHE_IMAGE_H if you want to cache arbitrary glyph images, - * including scalable outlines. - * - * This macro is deprecated. Simply include @FT_CACHE_H to have all - * small bitmaps-related cache declarations. - * - */ -#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H - - - /************************************************************************* - * - * @macro: - * FT_CACHE_CHARMAP_H - * - * @description: - * A macro used in #include statements to name the file containing the - * `charmap' API of the FreeType 2 cache sub-system. - * - * This macro is deprecated. Simply include @FT_CACHE_H to have all - * charmap-based cache declarations. - * - */ -#define FT_CACHE_CHARMAP_H FT_CACHE_H - - - /************************************************************************* - * - * @macro: - * FT_MAC_H - * - * @description: - * A macro used in #include statements to name the file containing the - * Macintosh-specific FreeType 2 API. The latter is used to access - * fonts embedded in resource forks. - * - * This header file must be explicitly included by client applications - * compiled on the Mac (note that the base API still works though). - * - */ -#define FT_MAC_H <freetype/ftmac.h> - - - /************************************************************************* - * - * @macro: - * FT_MULTIPLE_MASTERS_H - * - * @description: - * A macro used in #include statements to name the file containing the - * optional multiple-masters management API of FreeType 2. - * - */ -#define FT_MULTIPLE_MASTERS_H <freetype/ftmm.h> - - - /************************************************************************* - * - * @macro: - * FT_SFNT_NAMES_H - * - * @description: - * A macro used in #include statements to name the file containing the - * optional FreeType 2 API which accesses embedded `name' strings in - * SFNT-based font formats (i.e., TrueType and OpenType). - * - */ -#define FT_SFNT_NAMES_H <freetype/ftsnames.h> - - - /************************************************************************* - * - * @macro: - * FT_OPENTYPE_VALIDATE_H - * - * @description: - * A macro used in #include statements to name the file containing the - * optional FreeType 2 API which validates OpenType tables (BASE, GDEF, - * GPOS, GSUB, JSTF). - * - */ -#define FT_OPENTYPE_VALIDATE_H <freetype/ftotval.h> - - - /************************************************************************* - * - * @macro: - * FT_GX_VALIDATE_H - * - * @description: - * A macro used in #include statements to name the file containing the - * optional FreeType 2 API which validates TrueTypeGX/AAT tables (feat, - * mort, morx, bsln, just, kern, opbd, trak, prop). - * - */ -#define FT_GX_VALIDATE_H <freetype/ftgxval.h> - - - /************************************************************************* - * - * @macro: - * FT_PFR_H - * - * @description: - * A macro used in #include statements to name the file containing the - * FreeType 2 API which accesses PFR-specific data. - * - */ -#define FT_PFR_H <freetype/ftpfr.h> - - - /************************************************************************* - * - * @macro: - * FT_STROKER_H - * - * @description: - * A macro used in #include statements to name the file containing the - * FreeType 2 API which provides functions to stroke outline paths. - */ -#define FT_STROKER_H <freetype/ftstroke.h> - - - /************************************************************************* - * - * @macro: - * FT_SYNTHESIS_H - * - * @description: - * A macro used in #include statements to name the file containing the - * FreeType 2 API which performs artificial obliquing and emboldening. - */ -#define FT_SYNTHESIS_H <freetype/ftsynth.h> - - - /************************************************************************* - * - * @macro: - * FT_XFREE86_H - * - * @description: - * A macro used in #include statements to name the file containing the - * FreeType 2 API which provides functions specific to the XFree86 and - * X.Org X11 servers. - */ -#define FT_XFREE86_H <freetype/ftxf86.h> - - - /************************************************************************* - * - * @macro: - * FT_TRIGONOMETRY_H - * - * @description: - * A macro used in #include statements to name the file containing the - * FreeType 2 API which performs trigonometric computations (e.g., - * cosines and arc tangents). - */ -#define FT_TRIGONOMETRY_H <freetype/fttrigon.h> - - - /************************************************************************* - * - * @macro: - * FT_LCD_FILTER_H - * - * @description: - * A macro used in #include statements to name the file containing the - * FreeType 2 API which performs color filtering for subpixel rendering. - */ -#define FT_LCD_FILTER_H <freetype/ftlcdfil.h> - - - /************************************************************************* - * - * @macro: - * FT_GASP_H - * - * @description: - * A macro used in #include statements to name the file containing the - * FreeType 2 API which returns entries from the TrueType GASP table. - */ -#define FT_GASP_H <freetype/ftgasp.h> - - - /* */ - -#define FT_ERROR_DEFINITIONS_H <freetype/fterrdef.h> - - - /* The internals of the cache sub-system are no longer exposed. We */ - /* default to FT_CACHE_H at the moment just in case, but we know of */ - /* no rogue client that uses them. */ - /* */ -#define FT_CACHE_MANAGER_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_MRU_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_MANAGER_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_CACHE_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_GLYPH_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_IMAGE_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_SBITS_H <freetype/ftcache.h> - - -#define FT_INCREMENTAL_H <freetype/ftincrem.h> - -#define FT_TRUETYPE_UNPATENTED_H <freetype/ttunpat.h> - - - /* - * Include internal headers definitions from <freetype/internal/...> - * only when building the library. - */ -#ifdef FT2_BUILD_LIBRARY -#define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h> -#include FT_INTERNAL_INTERNAL_H -#endif /* FT2_BUILD_LIBRARY */ - - -#endif /* __FT2_BUILD_H__ */ - - -/* END */ diff --git a/src/common/freetype/config/ftmodule.h b/src/common/freetype/config/ftmodule.h deleted file mode 100644 index c28052b7f..000000000 --- a/src/common/freetype/config/ftmodule.h +++ /dev/null @@ -1,22 +0,0 @@ -/* This is a generated file. */ -FT_USE_MODULE(tt_driver_class) -FT_USE_MODULE(t1_driver_class) -FT_USE_MODULE(cff_driver_class) -FT_USE_MODULE(t1cid_driver_class) -FT_USE_MODULE(pfr_driver_class) -FT_USE_MODULE(t42_driver_class) -FT_USE_MODULE(winfnt_driver_class) -FT_USE_MODULE(pcf_driver_class) -FT_USE_MODULE(bdf_driver_class) -FT_USE_MODULE(sfnt_module_class) -FT_USE_MODULE(autofit_module_class) -FT_USE_MODULE(pshinter_module_class) -FT_USE_MODULE(ft_raster1_renderer_class) -FT_USE_MODULE(ft_smooth_renderer_class) -FT_USE_MODULE(ft_smooth_lcd_renderer_class) -FT_USE_MODULE(ft_smooth_lcdv_renderer_class) -FT_USE_MODULE(gxv_module_class) -FT_USE_MODULE(otv_module_class) -FT_USE_MODULE(psaux_module_class) -FT_USE_MODULE(psnames_module_class) -/* EOF */ diff --git a/src/common/freetype/config/ftoption.h b/src/common/freetype/config/ftoption.h deleted file mode 100644 index 532848da7..000000000 --- a/src/common/freetype/config/ftoption.h +++ /dev/null @@ -1,669 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftoption.h */ -/* */ -/* User-selectable configuration macros (specification only). */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTOPTION_H__ -#define __FTOPTION_H__ - - -#include <ft2build.h> - - -FT_BEGIN_HEADER - - /*************************************************************************/ - /* */ - /* USER-SELECTABLE CONFIGURATION MACROS */ - /* */ - /* This file contains the default configuration macro definitions for */ - /* a standard build of the FreeType library. There are three ways to */ - /* use this file to build project-specific versions of the library: */ - /* */ - /* - You can modify this file by hand, but this is not recommended in */ - /* cases where you would like to build several versions of the */ - /* library from a single source directory. */ - /* */ - /* - You can put a copy of this file in your build directory, more */ - /* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */ - /* is the name of a directory that is included _before_ the FreeType */ - /* include path during compilation. */ - /* */ - /* The default FreeType Makefiles and Jamfiles use the build */ - /* directory `builds/<system>' by default, but you can easily change */ - /* that for your own projects. */ - /* */ - /* - Copy the file <ft2build.h> to `$BUILD/ft2build.h' and modify it */ - /* slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to */ - /* locate this file during the build. For example, */ - /* */ - /* #define FT_CONFIG_OPTIONS_H <myftoptions.h> */ - /* #include <freetype/config/ftheader.h> */ - /* */ - /* will use `$BUILD/myftoptions.h' instead of this file for macro */ - /* definitions. */ - /* */ - /* Note also that you can similarly pre-define the macro */ - /* FT_CONFIG_MODULES_H used to locate the file listing of the modules */ - /* that are statically linked to the library at compile time. By */ - /* default, this file is <freetype/config/ftmodule.h>. */ - /* */ - /* We highly recommend using the third method whenever possible. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /*************************************************************************/ - /**** ****/ - /**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/ - /**** ****/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Uncomment the line below if you want to activate sub-pixel rendering */ - /* (a.k.a. LCD rendering, or ClearType) in this build of the library. */ - /* */ - /* Note that this feature is covered by several Microsoft patents */ - /* and should not be activated in any default build of the library. */ - /* */ - /* This macro has no impact on the FreeType API, only on its */ - /* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */ - /* FT_Render_Glyph still generates a bitmap that is 3 times larger than */ - /* the original size; the difference will be that each triplet of */ - /* subpixels has R=G=B. */ - /* */ - /* This is done to allow FreeType clients to run unmodified, forcing */ - /* them to display normal gray-level anti-aliased glyphs. */ - /* */ -/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ - - - /*************************************************************************/ - /* */ - /* Many compilers provide a non-ANSI 64-bit data type that can be used */ - /* by FreeType to speed up some computations. However, this will create */ - /* some problems when compiling the library in strict ANSI mode. */ - /* */ - /* For this reason, the use of 64-bit integers is normally disabled when */ - /* the __STDC__ macro is defined. You can however disable this by */ - /* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */ - /* */ - /* For most compilers, this will only create compilation warnings when */ - /* building the library. */ - /* */ - /* ObNote: The compiler-specific 64-bit integers are detected in the */ - /* file `ftconfig.h' either statically or through the */ - /* `configure' script on supported platforms. */ - /* */ -#undef FT_CONFIG_OPTION_FORCE_INT64 - - - /*************************************************************************/ - /* */ - /* LZW-compressed file support. */ - /* */ - /* FreeType now handles font files that have been compressed with the */ - /* `compress' program. This is mostly used to parse many of the PCF */ - /* files that come with various X11 distributions. The implementation */ - /* uses NetBSD's `zopen' to partially uncompress the file on the fly */ - /* (see src/lzw/ftgzip.c). */ - /* */ - /* Define this macro if you want to enable this `feature'. */ - /* */ -#define FT_CONFIG_OPTION_USE_LZW - - - /*************************************************************************/ - /* */ - /* Gzip-compressed file support. */ - /* */ - /* FreeType now handles font files that have been compressed with the */ - /* `gzip' program. This is mostly used to parse many of the PCF files */ - /* that come with XFree86. The implementation uses `zlib' to */ - /* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */ - /* */ - /* Define this macro if you want to enable this `feature'. See also */ - /* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */ - /* */ -#define FT_CONFIG_OPTION_USE_ZLIB - - - /*************************************************************************/ - /* */ - /* ZLib library selection */ - /* */ - /* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */ - /* It allows FreeType's `ftgzip' component to link to the system's */ - /* installation of the ZLib library. This is useful on systems like */ - /* Unix or VMS where it generally is already available. */ - /* */ - /* If you let it undefined, the component will use its own copy */ - /* of the zlib sources instead. These have been modified to be */ - /* included directly within the component and *not* export external */ - /* function names. This allows you to link any program with FreeType */ - /* _and_ ZLib without linking conflicts. */ - /* */ - /* Do not #undef this macro here since the build system might define */ - /* it for certain configurations only. */ - /* */ -/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */ - - - /*************************************************************************/ - /* */ - /* DLL export compilation */ - /* */ - /* When compiling FreeType as a DLL, some systems/compilers need a */ - /* special keyword in front OR after the return type of function */ - /* declarations. */ - /* */ - /* Two macros are used within the FreeType source code to define */ - /* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */ - /* */ - /* FT_EXPORT( return_type ) */ - /* */ - /* is used in a function declaration, as in */ - /* */ - /* FT_EXPORT( FT_Error ) */ - /* FT_Init_FreeType( FT_Library* alibrary ); */ - /* */ - /* */ - /* FT_EXPORT_DEF( return_type ) */ - /* */ - /* is used in a function definition, as in */ - /* */ - /* FT_EXPORT_DEF( FT_Error ) */ - /* FT_Init_FreeType( FT_Library* alibrary ) */ - /* { */ - /* ... some code ... */ - /* return FT_Err_Ok; */ - /* } */ - /* */ - /* You can provide your own implementation of FT_EXPORT and */ - /* FT_EXPORT_DEF here if you want. If you leave them undefined, they */ - /* will be later automatically defined as `extern return_type' to */ - /* allow normal compilation. */ - /* */ - /* Do not #undef these macros here since the build system might define */ - /* them for certain configurations only. */ - /* */ -/* #define FT_EXPORT(x) extern x */ -/* #define FT_EXPORT_DEF(x) x */ - - - /*************************************************************************/ - /* */ - /* Glyph Postscript Names handling */ - /* */ - /* By default, FreeType 2 is compiled with the `PSNames' module. This */ - /* module is in charge of converting a glyph name string into a */ - /* Unicode value, or return a Macintosh standard glyph name for the */ - /* use with the TrueType `post' table. */ - /* */ - /* Undefine this macro if you do not want `PSNames' compiled in your */ - /* build of FreeType. This has the following effects: */ - /* */ - /* - The TrueType driver will provide its own set of glyph names, */ - /* if you build it to support postscript names in the TrueType */ - /* `post' table. */ - /* */ - /* - The Type 1 driver will not be able to synthetize a Unicode */ - /* charmap out of the glyphs found in the fonts. */ - /* */ - /* You would normally undefine this configuration macro when building */ - /* a version of FreeType that doesn't contain a Type 1 or CFF driver. */ - /* */ -#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES - - - /*************************************************************************/ - /* */ - /* Postscript Names to Unicode Values support */ - /* */ - /* By default, FreeType 2 is built with the `PSNames' module compiled */ - /* in. Among other things, the module is used to convert a glyph name */ - /* into a Unicode value. This is especially useful in order to */ - /* synthetize on the fly a Unicode charmap from the CFF/Type 1 driver */ - /* through a big table named the `Adobe Glyph List' (AGL). */ - /* */ - /* Undefine this macro if you do not want the Adobe Glyph List */ - /* compiled in your `PSNames' module. The Type 1 driver will not be */ - /* able to synthetize a Unicode charmap out of the glyphs found in the */ - /* fonts. */ - /* */ -#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST - - - /*************************************************************************/ - /* */ - /* Support for Mac fonts */ - /* */ - /* Define this macro if you want support for outline fonts in Mac */ - /* format (mac dfont, mac resource, macbinary containing a mac */ - /* resource) on non-Mac platforms. */ - /* */ - /* Note that the `FOND' resource isn't checked. */ - /* */ -#define FT_CONFIG_OPTION_MAC_FONTS - - - /*************************************************************************/ - /* */ - /* Guessing methods to access embedded resource forks */ - /* */ - /* Enable extra Mac fonts support on non-Mac platforms (e.g. */ - /* GNU/Linux). */ - /* */ - /* Resource forks which include fonts data are stored sometimes in */ - /* locations which users or developers don't expected. In some cases, */ - /* resource forks start with some offset from the head of a file. In */ - /* other cases, the actual resource fork is stored in file different */ - /* from what the user specifies. If this option is activated, */ - /* FreeType tries to guess whether such offsets or different file */ - /* names must be used. */ - /* */ - /* Note that normal, direct access of resource forks is controlled via */ - /* the FT_CONFIG_OPTION_MAC_FONTS option. */ - /* */ -#ifdef FT_CONFIG_OPTION_MAC_FONTS -#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK -#endif - - - /*************************************************************************/ - /* */ - /* Allow the use of FT_Incremental_Interface to load typefaces that */ - /* contain no glyph data, but supply it via a callback function. */ - /* This allows FreeType to be used with the PostScript language, using */ - /* the GhostScript interpreter. */ - /* */ -/* #define FT_CONFIG_OPTION_INCREMENTAL */ - - - /*************************************************************************/ - /* */ - /* The size in bytes of the render pool used by the scan-line converter */ - /* to do all of its work. */ - /* */ - /* This must be greater than 4KByte if you use FreeType to rasterize */ - /* glyphs; otherwise, you may set it to zero to avoid unnecessary */ - /* allocation of the render pool. */ - /* */ -#define FT_RENDER_POOL_SIZE 16384L - - - /*************************************************************************/ - /* */ - /* FT_MAX_MODULES */ - /* */ - /* The maximum number of modules that can be registered in a single */ - /* FreeType library object. 32 is the default. */ - /* */ -#define FT_MAX_MODULES 32 - - - /*************************************************************************/ - /* */ - /* Debug level */ - /* */ - /* FreeType can be compiled in debug or trace mode. In debug mode, */ - /* errors are reported through the `ftdebug' component. In trace */ - /* mode, additional messages are sent to the standard output during */ - /* execution. */ - /* */ - /* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */ - /* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */ - /* */ - /* Don't define any of these macros to compile in `release' mode! */ - /* */ - /* Do not #undef these macros here since the build system might define */ - /* them for certain configurations only. */ - /* */ -/* #define FT_DEBUG_LEVEL_ERROR */ -/* #define FT_DEBUG_LEVEL_TRACE */ - - - /*************************************************************************/ - /* */ - /* Memory Debugging */ - /* */ - /* FreeType now comes with an integrated memory debugger that is */ - /* capable of detecting simple errors like memory leaks or double */ - /* deletes. To compile it within your build of the library, you */ - /* should define FT_DEBUG_MEMORY here. */ - /* */ - /* Note that the memory debugger is only activated at runtime when */ - /* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */ - /* */ - /* Do not #undef this macro here since the build system might define */ - /* it for certain configurations only. */ - /* */ -/* #define FT_DEBUG_MEMORY */ - - - /*************************************************************************/ - /* */ - /* Module errors */ - /* */ - /* If this macro is set (which is _not_ the default), the higher byte */ - /* of an error code gives the module in which the error has occurred, */ - /* while the lower byte is the real error code. */ - /* */ - /* Setting this macro makes sense for debugging purposes only, since */ - /* it would break source compatibility of certain programs that use */ - /* FreeType 2. */ - /* */ - /* More details can be found in the files ftmoderr.h and fterrors.h. */ - /* */ -#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS - - - - /*************************************************************************/ - /*************************************************************************/ - /**** ****/ - /**** S F N T D R I V E R C O N F I G U R A T I O N ****/ - /**** ****/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support */ - /* embedded bitmaps in all formats using the SFNT module (namely */ - /* TrueType & OpenType). */ - /* */ -#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to */ - /* load and enumerate the glyph Postscript names in a TrueType or */ - /* OpenType file. */ - /* */ - /* Note that when you do not compile the `PSNames' module by undefining */ - /* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will */ - /* contain additional code used to read the PS Names table from a font. */ - /* */ - /* (By default, the module uses `PSNames' to extract glyph names.) */ - /* */ -#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */ - /* access the internal name table in a SFNT-based format like TrueType */ - /* or OpenType. The name table contains various strings used to */ - /* describe the font, like family name, copyright, version, etc. It */ - /* does not contain any glyph name though. */ - /* */ - /* Accessing SFNT names is done through the functions declared in */ - /* `freetype/ftnames.h'. */ - /* */ -#define TT_CONFIG_OPTION_SFNT_NAMES - - - /*************************************************************************/ - /* */ - /* TrueType CMap support */ - /* */ - /* Here you can fine-tune which TrueType CMap table format shall be */ - /* supported. */ -#define TT_CONFIG_CMAP_FORMAT_0 -#define TT_CONFIG_CMAP_FORMAT_2 -#define TT_CONFIG_CMAP_FORMAT_4 -#define TT_CONFIG_CMAP_FORMAT_6 -#define TT_CONFIG_CMAP_FORMAT_8 -#define TT_CONFIG_CMAP_FORMAT_10 -#define TT_CONFIG_CMAP_FORMAT_12 - - - /*************************************************************************/ - /*************************************************************************/ - /**** ****/ - /**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/ - /**** ****/ - /*************************************************************************/ - /*************************************************************************/ - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */ - /* a bytecode interpreter in the TrueType driver. Note that there are */ - /* important patent issues related to the use of the interpreter. */ - /* */ - /* By undefining this, you will only compile the code necessary to load */ - /* TrueType glyphs without hinting. */ - /* */ - /* Do not #undef this macro here, since the build system might */ - /* define it for certain configurations only. */ - /* */ -/* #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER */ - - - /*************************************************************************/ - /* */ - /* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */ - /* of the TrueType bytecode interpreter is used that doesn't implement */ - /* any of the patented opcodes and algorithms. Note that the */ - /* the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* if you */ - /* define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; with other words, */ - /* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */ - /* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time. */ - /* */ - /* This macro is only useful for a small number of font files (mostly */ - /* for Asian scripts) that require bytecode interpretation to properly */ - /* load glyphs. For all other fonts, this produces unpleasant results, */ - /* thus the unpatented interpreter is never used to load glyphs from */ - /* TrueType fonts unless one of the following two options is used. */ - /* */ - /* - The unpatented interpreter is explicitly activated by the user */ - /* through the FT_PARAM_TAG_UNPATENTED_HINTING parameter tag */ - /* when opening the FT_Face. */ - /* */ - /* - FreeType detects that the FT_Face corresponds to one of the */ - /* `trick' fonts (e.g., `Mingliu') it knows about. The font engine */ - /* contains a hard-coded list of font names and other matching */ - /* parameters (see function `tt_face_init' in file */ - /* `src/truetype/ttobjs.c'). */ - /* */ - /* Here a sample code snippet for using FT_PARAM_TAG_UNPATENTED_HINTING. */ - /* */ - /* { */ - /* FT_Parameter parameter; */ - /* FT_Open_Args open_args; */ - /* */ - /* */ - /* parameter.tag = FT_PARAM_TAG_UNPATENTED_HINTING; */ - /* */ - /* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; */ - /* open_args.pathname = my_font_pathname; */ - /* open_args.num_params = 1; */ - /* open_args.params = ¶meter; */ - /* */ - /* error = FT_Open_Face( library, &open_args, index, &face ); */ - /* ... */ - /* } */ - /* */ -#define TT_CONFIG_OPTION_UNPATENTED_HINTING - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType */ - /* bytecode interpreter with a huge switch statement, rather than a call */ - /* table. This results in smaller and faster code for a number of */ - /* architectures. */ - /* */ - /* Note however that on some compiler/processor combinations, undefining */ - /* this macro will generate faster, though larger, code. */ - /* */ -#define TT_CONFIG_OPTION_INTERPRETER_SWITCH - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */ - /* TrueType glyph loader to use Apple's definition of how to handle */ - /* component offsets in composite glyphs. */ - /* */ - /* Apple and MS disagree on the default behavior of component offsets */ - /* in composites. Apple says that they should be scaled by the scaling */ - /* factors in the transformation matrix (roughly, it's more complex) */ - /* while MS says they should not. OpenType defines two bits in the */ - /* composite flags array which can be used to disambiguate, but old */ - /* fonts will not have them. */ - /* */ - /* http://partners.adobe.com/asn/developer/opentype/glyf.html */ - /* http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html */ - /* */ -#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */ - /* support for Apple's distortable font technology (fvar, gvar, cvar, */ - /* and avar tables). This has many similarities to Type 1 Multiple */ - /* Masters support. */ - /* */ -#define TT_CONFIG_OPTION_GX_VAR_SUPPORT - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_BDF if you want to include support for */ - /* an embedded `BDF ' table within SFNT-based bitmap formats. */ - /* */ -#define TT_CONFIG_OPTION_BDF - - - /*************************************************************************/ - /*************************************************************************/ - /**** ****/ - /**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/ - /**** ****/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* T1_MAX_DICT_DEPTH is the maximal depth of nest dictionaries and */ - /* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */ - /* required. */ - /* */ -#define T1_MAX_DICT_DEPTH 5 - - - /*************************************************************************/ - /* */ - /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */ - /* calls during glyph loading. */ - /* */ -#define T1_MAX_SUBRS_CALLS 16 - - - /*************************************************************************/ - /* */ - /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */ - /* minimum of 16 is required. */ - /* */ - /* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */ - /* */ -#define T1_MAX_CHARSTRINGS_OPERANDS 256 - - - /*************************************************************************/ - /* */ - /* Define this configuration macro if you want to prevent the */ - /* compilation of `t1afm', which is in charge of reading Type 1 AFM */ - /* files into an existing face. Note that if set, the T1 driver will be */ - /* unable to produce kerning distances. */ - /* */ -#undef T1_CONFIG_OPTION_NO_AFM - - - /*************************************************************************/ - /* */ - /* Define this configuration macro if you want to prevent the */ - /* compilation of the Multiple Masters font support in the Type 1 */ - /* driver. */ - /* */ -#undef T1_CONFIG_OPTION_NO_MM_SUPPORT - - - /*************************************************************************/ - /*************************************************************************/ - /**** ****/ - /**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/ - /**** ****/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Compile autofit module with CJK script support. */ - /* */ -#define AF_CONFIG_OPTION_CJK - - /*************************************************************************/ - /* */ - /* Compile autofit module with Indic script support. */ - /* */ -#define AF_CONFIG_OPTION_INDIC - - /* */ - - - /* - * Define this variable if you want to keep the layout of internal - * structures that was used prior to FreeType 2.2. This also compiles in - * a few obsolete functions to avoid linking problems on typical Unix - * distributions. - * - * For embedded systems or building a new distribution from scratch, it - * is recommended to disable the macro since it reduces the library's code - * size and activates a few memory-saving optimizations as well. - */ -#define FT_CONFIG_OPTION_OLD_INTERNALS - - - /* - * This variable is defined if either unpatented or native TrueType - * hinting is requested by the definitions above. - */ -#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER -#define TT_USE_BYTECODE_INTERPRETER -#elif defined TT_CONFIG_OPTION_UNPATENTED_HINTING -#define TT_USE_BYTECODE_INTERPRETER -#endif - -FT_END_HEADER - - -#endif /* __FTOPTION_H__ */ - - -/* END */ diff --git a/src/common/freetype/config/ftstdlib.h b/src/common/freetype/config/ftstdlib.h deleted file mode 100644 index f923f3e4c..000000000 --- a/src/common/freetype/config/ftstdlib.h +++ /dev/null @@ -1,180 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftstdlib.h */ -/* */ -/* ANSI-specific library and header configuration file (specification */ -/* only). */ -/* */ -/* Copyright 2002, 2003, 2004, 2005, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This file is used to group all #includes to the ANSI C library that */ - /* FreeType normally requires. It also defines macros to rename the */ - /* standard functions within the FreeType source code. */ - /* */ - /* Load a file which defines __FTSTDLIB_H__ before this one to override */ - /* it. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTSTDLIB_H__ -#define __FTSTDLIB_H__ - - -#include <stddef.h> - -#define ft_ptrdiff_t ptrdiff_t - - - /**********************************************************************/ - /* */ - /* integer limits */ - /* */ - /* UINT_MAX and ULONG_MAX are used to automatically compute the size */ - /* of `int' and `long' in bytes at compile-time. So far, this works */ - /* for all platforms the library has been tested on. */ - /* */ - /* Note that on the extremely rare platforms that do not provide */ - /* integer types that are _exactly_ 16 and 32 bits wide (e.g. some */ - /* old Crays where `int' is 36 bits), we do not make any guarantee */ - /* about the correct behaviour of FT2 with all fonts. */ - /* */ - /* In these case, `ftconfig.h' will refuse to compile anyway with a */ - /* message like `couldn't find 32-bit type' or something similar. */ - /* */ - /* IMPORTANT NOTE: We do not define aliases for heap management and */ - /* i/o routines (i.e. malloc/free/fopen/fread/...) */ - /* since these functions should all be encapsulated */ - /* by platform-specific implementations of */ - /* `ftsystem.c'. */ - /* */ - /**********************************************************************/ - - -#include <limits.h> - -#define FT_CHAR_BIT CHAR_BIT -#define FT_INT_MAX INT_MAX -#define FT_UINT_MAX UINT_MAX -#define FT_ULONG_MAX ULONG_MAX - - - /**********************************************************************/ - /* */ - /* character and string processing */ - /* */ - /**********************************************************************/ - - -#include <string.h> - -#define ft_memchr memchr -#define ft_memcmp memcmp -#define ft_memcpy memcpy -#define ft_memmove memmove -#define ft_memset memset -#define ft_strcat strcat -#define ft_strcmp strcmp -#define ft_strcpy strcpy -#define ft_strlen strlen -#define ft_strncmp strncmp -#define ft_strncpy strncpy -#define ft_strrchr strrchr -#define ft_strstr strstr - - - /**********************************************************************/ - /* */ - /* file handling */ - /* */ - /**********************************************************************/ - - -#include <stdio.h> - -#define FT_FILE FILE -#define ft_fclose fclose -#define ft_fopen fopen -#define ft_fread fread -#define ft_fseek fseek -#define ft_ftell ftell -#define ft_sprintf sprintf - - - /**********************************************************************/ - /* */ - /* sorting */ - /* */ - /**********************************************************************/ - - -#include <stdlib.h> - -#define ft_qsort qsort - -#define ft_exit exit /* only used to exit from unhandled exceptions */ - - - /**********************************************************************/ - /* */ - /* memory allocation */ - /* */ - /**********************************************************************/ - - -#define ft_scalloc calloc -#define ft_sfree free -#define ft_smalloc malloc -#define ft_srealloc realloc - - - /**********************************************************************/ - /* */ - /* miscellaneous */ - /* */ - /**********************************************************************/ - - -#define ft_atol atol -#define ft_labs labs - - - /**********************************************************************/ - /* */ - /* execution control */ - /* */ - /**********************************************************************/ - - -#include <setjmp.h> - -#define ft_jmp_buf jmp_buf /* note: this cannot be a typedef since */ - /* jmp_buf is defined as a macro */ - /* on certain platforms */ - -#define ft_longjmp longjmp -#define ft_setjmp( b ) setjmp( *(jmp_buf*) &(b) ) /* same thing here */ - - - /* the following is only used for debugging purposes, i.e., if */ - /* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined */ - -#include <stdarg.h> - - -#endif /* __FTSTDLIB_H__ */ - - -/* END */ diff --git a/src/common/freetype/freetype.h b/src/common/freetype/freetype.h deleted file mode 100644 index dbca087e5..000000000 --- a/src/common/freetype/freetype.h +++ /dev/null @@ -1,3434 +0,0 @@ -/***************************************************************************/ -/* */ -/* freetype.h */ -/* */ -/* FreeType high-level API and common types (specification only). */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef FT_FREETYPE_H -#error "`ft2build.h' hasn't been included yet!" -#error "Please always use macros to include FreeType header files." -#error "Example:" -#error " #include <ft2build.h>" -#error " #include FT_FREETYPE_H" -#endif - - - /*************************************************************************/ - /* */ - /* The `raster' component duplicates some of the declarations in */ - /* freetype.h for stand-alone use if _FREETYPE_ isn't defined. */ - /* */ - /*************************************************************************/ - - -#ifndef __FREETYPE_H__ -#define __FREETYPE_H__ - - -#include <ft2build.h> -#include FT_CONFIG_CONFIG_H -#include FT_ERRORS_H -#include FT_TYPES_H - - -FT_BEGIN_HEADER - - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* user_allocation */ - /* */ - /* <Title> */ - /* User allocation */ - /* */ - /* <Abstract> */ - /* How client applications should allocate FreeType data structures. */ - /* */ - /* <Description> */ - /* FreeType assumes that structures allocated by the user and passed */ - /* as arguments are zeroed out except for the actual data. With */ - /* other words, it is recommended to use `calloc' (or variants of it) */ - /* instead of `malloc' for allocation. */ - /* */ - /*************************************************************************/ - - - - /*************************************************************************/ - /*************************************************************************/ - /* */ - /* B A S I C T Y P E S */ - /* */ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* base_interface */ - /* */ - /* <Title> */ - /* Base Interface */ - /* */ - /* <Abstract> */ - /* The FreeType 2 base font interface. */ - /* */ - /* <Description> */ - /* This section describes the public high-level API of FreeType 2. */ - /* */ - /* <Order> */ - /* FT_Library */ - /* FT_Face */ - /* FT_Size */ - /* FT_GlyphSlot */ - /* FT_CharMap */ - /* FT_Encoding */ - /* */ - /* FT_FaceRec */ - /* */ - /* FT_FACE_FLAG_SCALABLE */ - /* FT_FACE_FLAG_FIXED_SIZES */ - /* FT_FACE_FLAG_FIXED_WIDTH */ - /* FT_FACE_FLAG_HORIZONTAL */ - /* FT_FACE_FLAG_VERTICAL */ - /* FT_FACE_FLAG_SFNT */ - /* FT_FACE_FLAG_KERNING */ - /* FT_FACE_FLAG_MULTIPLE_MASTERS */ - /* FT_FACE_FLAG_GLYPH_NAMES */ - /* FT_FACE_FLAG_EXTERNAL_STREAM */ - /* FT_FACE_FLAG_FAST_GLYPHS */ - /* FT_FACE_FLAG_HINTER */ - /* */ - /* FT_STYLE_FLAG_BOLD */ - /* FT_STYLE_FLAG_ITALIC */ - /* */ - /* FT_SizeRec */ - /* FT_Size_Metrics */ - /* */ - /* FT_GlyphSlotRec */ - /* FT_Glyph_Metrics */ - /* FT_SubGlyph */ - /* */ - /* FT_Bitmap_Size */ - /* */ - /* FT_Init_FreeType */ - /* FT_Done_FreeType */ - /* */ - /* FT_New_Face */ - /* FT_Done_Face */ - /* FT_New_Memory_Face */ - /* FT_Open_Face */ - /* FT_Open_Args */ - /* FT_Parameter */ - /* FT_Attach_File */ - /* FT_Attach_Stream */ - /* */ - /* FT_Set_Char_Size */ - /* FT_Set_Pixel_Sizes */ - /* FT_Request_Size */ - /* FT_Select_Size */ - /* FT_Size_Request_Type */ - /* FT_Size_Request */ - /* FT_Set_Transform */ - /* FT_Load_Glyph */ - /* FT_Get_Char_Index */ - /* FT_Get_Name_Index */ - /* FT_Load_Char */ - /* */ - /* FT_OPEN_MEMORY */ - /* FT_OPEN_STREAM */ - /* FT_OPEN_PATHNAME */ - /* FT_OPEN_DRIVER */ - /* FT_OPEN_PARAMS */ - /* */ - /* FT_LOAD_DEFAULT */ - /* FT_LOAD_RENDER */ - /* FT_LOAD_MONOCHROME */ - /* FT_LOAD_LINEAR_DESIGN */ - /* FT_LOAD_NO_SCALE */ - /* FT_LOAD_NO_HINTING */ - /* FT_LOAD_NO_BITMAP */ - /* FT_LOAD_CROP_BITMAP */ - /* */ - /* FT_LOAD_VERTICAL_LAYOUT */ - /* FT_LOAD_IGNORE_TRANSFORM */ - /* FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH */ - /* FT_LOAD_FORCE_AUTOHINT */ - /* FT_LOAD_NO_RECURSE */ - /* FT_LOAD_PEDANTIC */ - /* */ - /* FT_LOAD_TARGET_NORMAL */ - /* FT_LOAD_TARGET_LIGHT */ - /* FT_LOAD_TARGET_MONO */ - /* FT_LOAD_TARGET_LCD */ - /* FT_LOAD_TARGET_LCD_V */ - /* */ - /* FT_Render_Glyph */ - /* FT_Render_Mode */ - /* FT_Get_Kerning */ - /* FT_Kerning_Mode */ - /* FT_Get_Track_Kerning */ - /* FT_Get_Glyph_Name */ - /* FT_Get_Postscript_Name */ - /* */ - /* FT_CharMapRec */ - /* FT_Select_Charmap */ - /* FT_Set_Charmap */ - /* FT_Get_Charmap_Index */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Glyph_Metrics */ - /* */ - /* <Description> */ - /* A structure used to model the metrics of a single glyph. The */ - /* values are expressed in 26.6 fractional pixel format; if the flag */ - /* @FT_LOAD_NO_SCALE has been used while loading the glyph, values */ - /* are expressed in font units instead. */ - /* */ - /* <Fields> */ - /* width :: */ - /* The glyph's width. */ - /* */ - /* height :: */ - /* The glyph's height. */ - /* */ - /* horiBearingX :: */ - /* Left side bearing for horizontal layout. */ - /* */ - /* horiBearingY :: */ - /* Top side bearing for horizontal layout. */ - /* */ - /* horiAdvance :: */ - /* Advance width for horizontal layout. */ - /* */ - /* vertBearingX :: */ - /* Left side bearing for vertical layout. */ - /* */ - /* vertBearingY :: */ - /* Top side bearing for vertical layout. */ - /* */ - /* vertAdvance :: */ - /* Advance height for vertical layout. */ - /* */ - typedef struct FT_Glyph_Metrics_ - { - FT_Pos width; - FT_Pos height; - - FT_Pos horiBearingX; - FT_Pos horiBearingY; - FT_Pos horiAdvance; - - FT_Pos vertBearingX; - FT_Pos vertBearingY; - FT_Pos vertAdvance; - - } FT_Glyph_Metrics; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Bitmap_Size */ - /* */ - /* <Description> */ - /* This structure models the metrics of a bitmap strike (i.e., a set */ - /* of glyphs for a given point size and resolution) in a bitmap font. */ - /* It is used for the `available_sizes' field of @FT_Face. */ - /* */ - /* <Fields> */ - /* height :: The vertical distance, in pixels, between two */ - /* consecutive baselines. It is always positive. */ - /* */ - /* width :: The average width, in pixels, of all glyphs in the */ - /* strike. */ - /* */ - /* size :: The nominal size of the strike in 26.6 fractional */ - /* points. This field is not very useful. */ - /* */ - /* x_ppem :: The horizontal ppem (nominal width) in 26.6 fractional */ - /* pixels. */ - /* */ - /* y_ppem :: The vertical ppem (nominal height) in 26.6 fractional */ - /* pixels. */ - /* */ - /* <Note> */ - /* Windows FNT: */ - /* The nominal size given in a FNT font is not reliable. Thus when */ - /* the driver finds it incorrect, it sets `size' to some calculated */ - /* values and sets `x_ppem' and `y_ppem' to the pixel width and */ - /* height given in the font, respectively. */ - /* */ - /* TrueType embedded bitmaps: */ - /* `size', `width', and `height' values are not contained in the */ - /* bitmap strike itself. They are computed from the global font */ - /* parameters. */ - /* */ - typedef struct FT_Bitmap_Size_ - { - FT_Short height; - FT_Short width; - - FT_Pos size; - - FT_Pos x_ppem; - FT_Pos y_ppem; - - } FT_Bitmap_Size; - - - /*************************************************************************/ - /*************************************************************************/ - /* */ - /* O B J E C T C L A S S E S */ - /* */ - /*************************************************************************/ - /*************************************************************************/ - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Library */ - /* */ - /* <Description> */ - /* A handle to a FreeType library instance. Each `library' is */ - /* completely independent from the others; it is the `root' of a set */ - /* of objects like fonts, faces, sizes, etc. */ - /* */ - /* It also embeds a memory manager (see @FT_Memory), as well as a */ - /* scan-line converter object (see @FT_Raster). */ - /* */ - /* For multi-threading applications each thread should have its own */ - /* FT_Library object. */ - /* */ - /* <Note> */ - /* Library objects are normally created by @FT_Init_FreeType, and */ - /* destroyed with @FT_Done_FreeType. */ - /* */ - typedef struct FT_LibraryRec_ *FT_Library; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Module */ - /* */ - /* <Description> */ - /* A handle to a given FreeType module object. Each module can be a */ - /* font driver, a renderer, or anything else that provides services */ - /* to the formers. */ - /* */ - typedef struct FT_ModuleRec_* FT_Module; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Driver */ - /* */ - /* <Description> */ - /* A handle to a given FreeType font driver object. Each font driver */ - /* is a special module capable of creating faces from font files. */ - /* */ - typedef struct FT_DriverRec_* FT_Driver; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Renderer */ - /* */ - /* <Description> */ - /* A handle to a given FreeType renderer. A renderer is a special */ - /* module in charge of converting a glyph image to a bitmap, when */ - /* necessary. Each renderer supports a given glyph image format, and */ - /* one or more target surface depths. */ - /* */ - typedef struct FT_RendererRec_* FT_Renderer; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Face */ - /* */ - /* <Description> */ - /* A handle to a given typographic face object. A face object models */ - /* a given typeface, in a given style. */ - /* */ - /* <Note> */ - /* Each face object also owns a single @FT_GlyphSlot object, as well */ - /* as one or more @FT_Size objects. */ - /* */ - /* Use @FT_New_Face or @FT_Open_Face to create a new face object from */ - /* a given filepathname or a custom input stream. */ - /* */ - /* Use @FT_Done_Face to destroy it (along with its slot and sizes). */ - /* */ - /* <Also> */ - /* The @FT_FaceRec details the publicly accessible fields of a given */ - /* face object. */ - /* */ - typedef struct FT_FaceRec_* FT_Face; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Size */ - /* */ - /* <Description> */ - /* A handle to an object used to model a face scaled to a given */ - /* character size. */ - /* */ - /* <Note> */ - /* Each @FT_Face has an _active_ @FT_Size object that is used by */ - /* functions like @FT_Load_Glyph to determine the scaling */ - /* transformation which is used to load and hint glyphs and metrics. */ - /* */ - /* You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, */ - /* @FT_Request_Size or even @FT_Select_Size to change the content */ - /* (i.e., the scaling values) of the active @FT_Size. */ - /* */ - /* You can use @FT_New_Size to create additional size objects for a */ - /* given @FT_Face, but they won't be used by other functions until */ - /* you activate it through @FT_Activate_Size. Only one size can be */ - /* activated at any given time per face. */ - /* */ - /* <Also> */ - /* The @FT_SizeRec structure details the publicly accessible fields */ - /* of a given size object. */ - /* */ - typedef struct FT_SizeRec_* FT_Size; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_GlyphSlot */ - /* */ - /* <Description> */ - /* A handle to a given `glyph slot'. A slot is a container where it */ - /* is possible to load any one of the glyphs contained in its parent */ - /* face. */ - /* */ - /* In other words, each time you call @FT_Load_Glyph or */ - /* @FT_Load_Char, the slot's content is erased by the new glyph data, */ - /* i.e., the glyph's metrics, its image (bitmap or outline), and */ - /* other control information. */ - /* */ - /* <Also> */ - /* @FT_GlyphSlotRec details the publicly accessible glyph fields. */ - /* */ - typedef struct FT_GlyphSlotRec_* FT_GlyphSlot; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_CharMap */ - /* */ - /* <Description> */ - /* A handle to a given character map. A charmap is used to translate */ - /* character codes in a given encoding into glyph indexes for its */ - /* parent's face. Some font formats may provide several charmaps per */ - /* font. */ - /* */ - /* Each face object owns zero or more charmaps, but only one of them */ - /* can be `active' and used by @FT_Get_Char_Index or @FT_Load_Char. */ - /* */ - /* The list of available charmaps in a face is available through the */ - /* `face->num_charmaps' and `face->charmaps' fields of @FT_FaceRec. */ - /* */ - /* The currently active charmap is available as `face->charmap'. */ - /* You should call @FT_Set_Charmap to change it. */ - /* */ - /* <Note> */ - /* When a new face is created (either through @FT_New_Face or */ - /* @FT_Open_Face), the library looks for a Unicode charmap within */ - /* the list and automatically activates it. */ - /* */ - /* <Also> */ - /* The @FT_CharMapRec details the publicly accessible fields of a */ - /* given character map. */ - /* */ - typedef struct FT_CharMapRec_* FT_CharMap; - - - /*************************************************************************/ - /* */ - /* <Macro> */ - /* FT_ENC_TAG */ - /* */ - /* <Description> */ - /* This macro converts four-letter tags into an unsigned long. It is */ - /* used to define `encoding' identifiers (see @FT_Encoding). */ - /* */ - /* <Note> */ - /* Since many 16bit compilers don't like 32bit enumerations, you */ - /* should redefine this macro in case of problems to something like */ - /* this: */ - /* */ - /* { */ - /* #define FT_ENC_TAG( value, a, b, c, d ) value */ - /* } */ - /* */ - /* to get a simple enumeration without assigning special numbers. */ - /* */ - -#ifndef FT_ENC_TAG -#define FT_ENC_TAG( value, a, b, c, d ) \ - value = ( ( (FT_UInt32)(a) << 24 ) | \ - ( (FT_UInt32)(b) << 16 ) | \ - ( (FT_UInt32)(c) << 8 ) | \ - (FT_UInt32)(d) ) - -#endif /* FT_ENC_TAG */ - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Encoding */ - /* */ - /* <Description> */ - /* An enumeration used to specify character sets supported by */ - /* charmaps. Used in the @FT_Select_Charmap API function. */ - /* */ - /* <Note> */ - /* Despite the name, this enumeration lists specific character */ - /* repertories (i.e., charsets), and not text encoding methods (e.g., */ - /* UTF-8, UTF-16, GB2312_EUC, etc.). */ - /* */ - /* Because of 32-bit charcodes defined in Unicode (i.e., surrogates), */ - /* all character codes must be expressed as FT_Longs. */ - /* */ - /* Other encodings might be defined in the future. */ - /* */ - /* <Values> */ - /* FT_ENCODING_NONE :: */ - /* The encoding value 0 is reserved. */ - /* */ - /* FT_ENCODING_UNICODE :: */ - /* Corresponds to the Unicode character set. This value covers */ - /* all versions of the Unicode repertoire, including ASCII and */ - /* Latin-1. Most fonts include a Unicode charmap, but not all */ - /* of them. */ - /* */ - /* FT_ENCODING_MS_SYMBOL :: */ - /* Corresponds to the Microsoft Symbol encoding, used to encode */ - /* mathematical symbols in the 32..255 character code range. For */ - /* more information, see `http://www.ceviz.net/symbol.htm'. */ - /* */ - /* FT_ENCODING_SJIS :: */ - /* Corresponds to Japanese SJIS encoding. More info at */ - /* at `http://langsupport.japanreference.com/encoding.shtml'. */ - /* See note on multi-byte encodings below. */ - /* */ - /* FT_ENCODING_GB2312 :: */ - /* Corresponds to an encoding system for Simplified Chinese as used */ - /* used in mainland China. */ - /* */ - /* FT_ENCODING_BIG5 :: */ - /* Corresponds to an encoding system for Traditional Chinese as used */ - /* in Taiwan and Hong Kong. */ - /* */ - /* FT_ENCODING_WANSUNG :: */ - /* Corresponds to the Korean encoding system known as Wansung. */ - /* For more information see */ - /* `http://www.microsoft.com/typography/unicode/949.txt'. */ - /* */ - /* FT_ENCODING_JOHAB :: */ - /* The Korean standard character set (KS C-5601-1992), which */ - /* corresponds to MS Windows code page 1361. This character set */ - /* includes all possible Hangeul character combinations. */ - /* */ - /* FT_ENCODING_ADOBE_LATIN_1 :: */ - /* Corresponds to a Latin-1 encoding as defined in a Type 1 */ - /* Postscript font. It is limited to 256 character codes. */ - /* */ - /* FT_ENCODING_ADOBE_STANDARD :: */ - /* Corresponds to the Adobe Standard encoding, as found in Type 1, */ - /* CFF, and OpenType/CFF fonts. It is limited to 256 character */ - /* codes. */ - /* */ - /* FT_ENCODING_ADOBE_EXPERT :: */ - /* Corresponds to the Adobe Expert encoding, as found in Type 1, */ - /* CFF, and OpenType/CFF fonts. It is limited to 256 character */ - /* codes. */ - /* */ - /* FT_ENCODING_ADOBE_CUSTOM :: */ - /* Corresponds to a custom encoding, as found in Type 1, CFF, and */ - /* OpenType/CFF fonts. It is limited to 256 character codes. */ - /* */ - /* FT_ENCODING_APPLE_ROMAN :: */ - /* Corresponds to the 8-bit Apple roman encoding. Many TrueType and */ - /* OpenType fonts contain a charmap for this encoding, since older */ - /* versions of Mac OS are able to use it. */ - /* */ - /* FT_ENCODING_OLD_LATIN_2 :: */ - /* This value is deprecated and was never used nor reported by */ - /* FreeType. Don't use or test for it. */ - /* */ - /* FT_ENCODING_MS_SJIS :: */ - /* Same as FT_ENCODING_SJIS. Deprecated. */ - /* */ - /* FT_ENCODING_MS_GB2312 :: */ - /* Same as FT_ENCODING_GB2312. Deprecated. */ - /* */ - /* FT_ENCODING_MS_BIG5 :: */ - /* Same as FT_ENCODING_BIG5. Deprecated. */ - /* */ - /* FT_ENCODING_MS_WANSUNG :: */ - /* Same as FT_ENCODING_WANSUNG. Deprecated. */ - /* */ - /* FT_ENCODING_MS_JOHAB :: */ - /* Same as FT_ENCODING_JOHAB. Deprecated. */ - /* */ - /* <Note> */ - /* By default, FreeType automatically synthetizes a Unicode charmap */ - /* for Postscript fonts, using their glyph names dictionaries. */ - /* However, it also reports the encodings defined explicitly in the */ - /* font file, for the cases when they are needed, with the Adobe */ - /* values as well. */ - /* */ - /* FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap */ - /* is neither Unicode nor ISO-8859-1 (otherwise it is set to */ - /* FT_ENCODING_UNICODE). Use @FT_Get_BDF_Charset_ID to find out which */ - /* encoding is really present. If, for example, the `cs_registry' */ - /* field is `KOI8' and the `cs_encoding' field is `R', the font is */ - /* encoded in KOI8-R. */ - /* */ - /* FT_ENCODING_NONE is always set (with a single exception) by the */ - /* winfonts driver. Use @FT_Get_WinFNT_Header and examine the */ - /* `charset' field of the @FT_WinFNT_HeaderRec structure to find out */ - /* which encoding is really present. For example, */ - /* @FT_WinFNT_ID_CP1251 (204) means Windows code page 1251 (for */ - /* Russian). */ - /* */ - /* FT_ENCODING_NONE is set if `platform_id' is @TT_PLATFORM_MACINTOSH */ - /* and `encoding_id' is not @TT_MAC_ID_ROMAN (otherwise it is set to */ - /* FT_ENCODING_APPLE_ROMAN). */ - /* */ - /* If `platform_id' is @TT_PLATFORM_MACINTOSH, use the function c */ - /* @FT_Get_CMap_Language_ID to query the Mac language ID which may be */ - /* needed to be able to distinguish Apple encoding variants. See */ - /* */ - /* http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/README.TXT */ - /* */ - /* to get an idea how to do that. Basically, if the language ID is 0, */ - /* don't use it, otherwise subtract 1 from the language ID. Then */ - /* examine `encoding_id'. If, for example, `encoding_id' is */ - /* @TT_MAC_ID_ROMAN and the language ID (minus 1) is */ - /* `TT_MAC_LANGID_GREEK', it is the Greek encoding, not Roman. */ - /* @TT_MAC_ID_ARABIC with `TT_MAC_LANGID_FARSI' means the Farsi */ - /* variant the Arabic encoding. */ - /* */ - typedef enum FT_Encoding_ - { - FT_ENC_TAG( FT_ENCODING_NONE, 0, 0, 0, 0 ), - - FT_ENC_TAG( FT_ENCODING_MS_SYMBOL, 's', 'y', 'm', 'b' ), - FT_ENC_TAG( FT_ENCODING_UNICODE, 'u', 'n', 'i', 'c' ), - - FT_ENC_TAG( FT_ENCODING_SJIS, 's', 'j', 'i', 's' ), - FT_ENC_TAG( FT_ENCODING_GB2312, 'g', 'b', ' ', ' ' ), - FT_ENC_TAG( FT_ENCODING_BIG5, 'b', 'i', 'g', '5' ), - FT_ENC_TAG( FT_ENCODING_WANSUNG, 'w', 'a', 'n', 's' ), - FT_ENC_TAG( FT_ENCODING_JOHAB, 'j', 'o', 'h', 'a' ), - - /* for backwards compatibility */ - FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS, - FT_ENCODING_MS_GB2312 = FT_ENCODING_GB2312, - FT_ENCODING_MS_BIG5 = FT_ENCODING_BIG5, - FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG, - FT_ENCODING_MS_JOHAB = FT_ENCODING_JOHAB, - - FT_ENC_TAG( FT_ENCODING_ADOBE_STANDARD, 'A', 'D', 'O', 'B' ), - FT_ENC_TAG( FT_ENCODING_ADOBE_EXPERT, 'A', 'D', 'B', 'E' ), - FT_ENC_TAG( FT_ENCODING_ADOBE_CUSTOM, 'A', 'D', 'B', 'C' ), - FT_ENC_TAG( FT_ENCODING_ADOBE_LATIN_1, 'l', 'a', 't', '1' ), - - FT_ENC_TAG( FT_ENCODING_OLD_LATIN_2, 'l', 'a', 't', '2' ), - - FT_ENC_TAG( FT_ENCODING_APPLE_ROMAN, 'a', 'r', 'm', 'n' ) - - } FT_Encoding; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* ft_encoding_xxx */ - /* */ - /* <Description> */ - /* These constants are deprecated; use the corresponding @FT_Encoding */ - /* values instead. */ - /* */ -#define ft_encoding_none FT_ENCODING_NONE -#define ft_encoding_unicode FT_ENCODING_UNICODE -#define ft_encoding_symbol FT_ENCODING_MS_SYMBOL -#define ft_encoding_latin_1 FT_ENCODING_ADOBE_LATIN_1 -#define ft_encoding_latin_2 FT_ENCODING_OLD_LATIN_2 -#define ft_encoding_sjis FT_ENCODING_SJIS -#define ft_encoding_gb2312 FT_ENCODING_GB2312 -#define ft_encoding_big5 FT_ENCODING_BIG5 -#define ft_encoding_wansung FT_ENCODING_WANSUNG -#define ft_encoding_johab FT_ENCODING_JOHAB - -#define ft_encoding_adobe_standard FT_ENCODING_ADOBE_STANDARD -#define ft_encoding_adobe_expert FT_ENCODING_ADOBE_EXPERT -#define ft_encoding_adobe_custom FT_ENCODING_ADOBE_CUSTOM -#define ft_encoding_apple_roman FT_ENCODING_APPLE_ROMAN - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_CharMapRec */ - /* */ - /* <Description> */ - /* The base charmap structure. */ - /* */ - /* <Fields> */ - /* face :: A handle to the parent face object. */ - /* */ - /* encoding :: An @FT_Encoding tag identifying the charmap. Use */ - /* this with @FT_Select_Charmap. */ - /* */ - /* platform_id :: An ID number describing the platform for the */ - /* following encoding ID. This comes directly from */ - /* the TrueType specification and should be emulated */ - /* for other formats. */ - /* */ - /* encoding_id :: A platform specific encoding number. This also */ - /* comes from the TrueType specification and should be */ - /* emulated similarly. */ - /* */ - typedef struct FT_CharMapRec_ - { - FT_Face face; - FT_Encoding encoding; - FT_UShort platform_id; - FT_UShort encoding_id; - - } FT_CharMapRec; - - - /*************************************************************************/ - /*************************************************************************/ - /* */ - /* B A S E O B J E C T C L A S S E S */ - /* */ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Face_Internal */ - /* */ - /* <Description> */ - /* An opaque handle to an `FT_Face_InternalRec' structure, used to */ - /* model private data of a given @FT_Face object. */ - /* */ - /* This structure might change between releases of FreeType 2 and is */ - /* not generally available to client applications. */ - /* */ - typedef struct FT_Face_InternalRec_* FT_Face_Internal; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_FaceRec */ - /* */ - /* <Description> */ - /* FreeType root face class structure. A face object models a */ - /* typeface in a font file. */ - /* */ - /* <Fields> */ - /* num_faces :: The number of faces in the font file. Some */ - /* font formats can have multiple faces in */ - /* a font file. */ - /* */ - /* face_index :: The index of the face in the font file. It */ - /* is set to 0 if there is only one face in */ - /* the font file. */ - /* */ - /* face_flags :: A set of bit flags that give important */ - /* information about the face; see */ - /* @FT_FACE_FLAG_XXX for the details. */ - /* */ - /* style_flags :: A set of bit flags indicating the style of */ - /* the face; see @FT_STYLE_FLAG_XXX for the */ - /* details. */ - /* */ - /* num_glyphs :: The number of glyphs in the face. If the */ - /* face is scalable and has sbits (see */ - /* `num_fixed_sizes'), it is set to the number */ - /* of outline glyphs. */ - /* */ - /* family_name :: The face's family name. This is an ASCII */ - /* string, usually in English, which describes */ - /* the typeface's family (like `Times New */ - /* Roman', `Bodoni', `Garamond', etc). This */ - /* is a least common denominator used to list */ - /* fonts. Some formats (TrueType & OpenType) */ - /* provide localized and Unicode versions of */ - /* this string. Applications should use the */ - /* format specific interface to access them. */ - /* */ - /* style_name :: The face's style name. This is an ASCII */ - /* string, usually in English, which describes */ - /* the typeface's style (like `Italic', */ - /* `Bold', `Condensed', etc). Not all font */ - /* formats provide a style name, so this field */ - /* is optional, and can be set to NULL. As */ - /* for `family_name', some formats provide */ - /* localized and Unicode versions of this */ - /* string. Applications should use the format */ - /* specific interface to access them. */ - /* */ - /* num_fixed_sizes :: The number of bitmap strikes in the face. */ - /* Even if the face is scalable, there might */ - /* still be bitmap strikes, which are called */ - /* `sbits' in that case. */ - /* */ - /* available_sizes :: An array of @FT_Bitmap_Size for all bitmap */ - /* strikes in the face. It is set to NULL if */ - /* there is no bitmap strike. */ - /* */ - /* num_charmaps :: The number of charmaps in the face. */ - /* */ - /* charmaps :: An array of the charmaps of the face. */ - /* */ - /* generic :: A field reserved for client uses. See the */ - /* @FT_Generic type description. */ - /* */ - /* bbox :: The font bounding box. Coordinates are */ - /* expressed in font units (see */ - /* `units_per_EM'). The box is large enough */ - /* to contain any glyph from the font. Thus, */ - /* `bbox.yMax' can be seen as the `maximal */ - /* ascender', and `bbox.yMin' as the `minimal */ - /* descender'. Only relevant for scalable */ - /* formats. */ - /* */ - /* units_per_EM :: The number of font units per EM square for */ - /* this face. This is typically 2048 for */ - /* TrueType fonts, and 1000 for Type 1 fonts. */ - /* Only relevant for scalable formats. */ - /* */ - /* ascender :: The typographic ascender of the face, */ - /* expressed in font units. For font formats */ - /* not having this information, it is set to */ - /* `bbox.yMax'. Only relevant for scalable */ - /* formats. */ - /* */ - /* descender :: The typographic descender of the face, */ - /* expressed in font units. For font formats */ - /* not having this information, it is set to */ - /* `bbox.yMin'. Note that this field is */ - /* usually negative. Only relevant for */ - /* scalable formats. */ - /* */ - /* height :: The height is the vertical distance */ - /* between two consecutive baselines, */ - /* expressed in font units. It is always */ - /* positive. Only relevant for scalable */ - /* formats. */ - /* */ - /* max_advance_width :: The maximal advance width, in font units, */ - /* for all glyphs in this face. This can be */ - /* used to make word wrapping computations */ - /* faster. Only relevant for scalable */ - /* formats. */ - /* */ - /* max_advance_height :: The maximal advance height, in font units, */ - /* for all glyphs in this face. This is only */ - /* relevant for vertical layouts, and is set */ - /* to `height' for fonts that do not provide */ - /* vertical metrics. Only relevant for */ - /* scalable formats. */ - /* */ - /* underline_position :: The position, in font units, of the */ - /* underline line for this face. It's the */ - /* center of the underlining stem. Only */ - /* relevant for scalable formats. */ - /* */ - /* underline_thickness :: The thickness, in font units, of the */ - /* underline for this face. Only relevant for */ - /* scalable formats. */ - /* */ - /* glyph :: The face's associated glyph slot(s). */ - /* */ - /* size :: The current active size for this face. */ - /* */ - /* charmap :: The current active charmap for this face. */ - /* */ - /* <Note> */ - /* Fields may be changed after a call to @FT_Attach_File or */ - /* @FT_Attach_Stream. */ - /* */ - typedef struct FT_FaceRec_ - { - FT_Long num_faces; - FT_Long face_index; - - FT_Long face_flags; - FT_Long style_flags; - - FT_Long num_glyphs; - - FT_String* family_name; - FT_String* style_name; - - FT_Int num_fixed_sizes; - FT_Bitmap_Size* available_sizes; - - FT_Int num_charmaps; - FT_CharMap* charmaps; - - FT_Generic generic; - - /*# The following member variables (down to `underline_thickness') */ - /*# are only relevant to scalable outlines; cf. @FT_Bitmap_Size */ - /*# for bitmap fonts. */ - FT_BBox bbox; - - FT_UShort units_per_EM; - FT_Short ascender; - FT_Short descender; - FT_Short height; - - FT_Short max_advance_width; - FT_Short max_advance_height; - - FT_Short underline_position; - FT_Short underline_thickness; - - FT_GlyphSlot glyph; - FT_Size size; - FT_CharMap charmap; - - /*@private begin */ - - FT_Driver driver; - FT_Memory memory; - FT_Stream stream; - - FT_ListRec sizes_list; - - FT_Generic autohint; - void* extensions; - - FT_Face_Internal internal; - - /*@private end */ - - } FT_FaceRec; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_FACE_FLAG_XXX */ - /* */ - /* <Description> */ - /* A list of bit flags used in the `face_flags' field of the */ - /* @FT_FaceRec structure. They inform client applications of */ - /* properties of the corresponding face. */ - /* */ - /* <Values> */ - /* FT_FACE_FLAG_SCALABLE :: */ - /* Indicates that the face contains outline glyphs. This doesn't */ - /* prevent bitmap strikes, i.e., a face can have both this and */ - /* and @FT_FACE_FLAG_FIXED_SIZES set. */ - /* */ - /* FT_FACE_FLAG_FIXED_SIZES :: */ - /* Indicates that the face contains bitmap strikes. See also the */ - /* `num_fixed_sizes' and `available_sizes' fields of @FT_FaceRec. */ - /* */ - /* FT_FACE_FLAG_FIXED_WIDTH :: */ - /* Indicates that the face contains fixed-width characters (like */ - /* Courier, Lucido, MonoType, etc.). */ - /* */ - /* FT_FACE_FLAG_SFNT :: */ - /* Indicates that the face uses the `sfnt' storage scheme. For */ - /* now, this means TrueType and OpenType. */ - /* */ - /* FT_FACE_FLAG_HORIZONTAL :: */ - /* Indicates that the face contains horizontal glyph metrics. This */ - /* should be set for all common formats. */ - /* */ - /* FT_FACE_FLAG_VERTICAL :: */ - /* Indicates that the face contains vertical glyph metrics. This */ - /* is only available in some formats, not all of them. */ - /* */ - /* FT_FACE_FLAG_KERNING :: */ - /* Indicates that the face contains kerning information. If set, */ - /* the kerning distance can be retrieved through the function */ - /* @FT_Get_Kerning. Otherwise the function always return the */ - /* vector (0,0). Note that FreeType doesn't handle kerning data */ - /* from the `GPOS' table (as present in some OpenType fonts). */ - /* */ - /* FT_FACE_FLAG_FAST_GLYPHS :: */ - /* THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. */ - /* */ - /* FT_FACE_FLAG_MULTIPLE_MASTERS :: */ - /* Indicates that the font contains multiple masters and is capable */ - /* of interpolating between them. See the multiple-masters */ - /* specific API for details. */ - /* */ - /* FT_FACE_FLAG_GLYPH_NAMES :: */ - /* Indicates that the font contains glyph names that can be */ - /* retrieved through @FT_Get_Glyph_Name. Note that some TrueType */ - /* fonts contain broken glyph name tables. Use the function */ - /* @FT_Has_PS_Glyph_Names when needed. */ - /* */ - /* FT_FACE_FLAG_EXTERNAL_STREAM :: */ - /* Used internally by FreeType to indicate that a face's stream was */ - /* provided by the client application and should not be destroyed */ - /* when @FT_Done_Face is called. Don't read or test this flag. */ - /* */ - /* FT_FACE_FLAG_HINTER :: */ - /* Set if the font driver has a hinting machine of its own. For */ - /* example, with TrueType fonts, it makes sense to use data from */ - /* the SFNT `gasp' table only if the native TrueType hinting engine */ - /* (with the bytecode interpreter) is available and active. */ - /* */ -#define FT_FACE_FLAG_SCALABLE ( 1L << 0 ) -#define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 ) -#define FT_FACE_FLAG_FIXED_WIDTH ( 1L << 2 ) -#define FT_FACE_FLAG_SFNT ( 1L << 3 ) -#define FT_FACE_FLAG_HORIZONTAL ( 1L << 4 ) -#define FT_FACE_FLAG_VERTICAL ( 1L << 5 ) -#define FT_FACE_FLAG_KERNING ( 1L << 6 ) -#define FT_FACE_FLAG_FAST_GLYPHS ( 1L << 7 ) -#define FT_FACE_FLAG_MULTIPLE_MASTERS ( 1L << 8 ) -#define FT_FACE_FLAG_GLYPH_NAMES ( 1L << 9 ) -#define FT_FACE_FLAG_EXTERNAL_STREAM ( 1L << 10 ) -#define FT_FACE_FLAG_HINTER ( 1L << 11 ) - - /* */ - - - /************************************************************************* - * - * @macro: - * FT_HAS_HORIZONTAL( face ) - * - * @description: - * A macro that returns true whenever a face object contains - * horizontal metrics (this is true for all font formats though). - * - * @also: - * @FT_HAS_VERTICAL can be used to check for vertical metrics. - * - */ -#define FT_HAS_HORIZONTAL( face ) \ - ( face->face_flags & FT_FACE_FLAG_HORIZONTAL ) - - - /************************************************************************* - * - * @macro: - * FT_HAS_VERTICAL( face ) - * - * @description: - * A macro that returns true whenever a face object contains vertical - * metrics. - * - */ -#define FT_HAS_VERTICAL( face ) \ - ( face->face_flags & FT_FACE_FLAG_VERTICAL ) - - - /************************************************************************* - * - * @macro: - * FT_HAS_KERNING( face ) - * - * @description: - * A macro that returns true whenever a face object contains kerning - * data that can be accessed with @FT_Get_Kerning. - * - */ -#define FT_HAS_KERNING( face ) \ - ( face->face_flags & FT_FACE_FLAG_KERNING ) - - - /************************************************************************* - * - * @macro: - * FT_IS_SCALABLE( face ) - * - * @description: - * A macro that returns true whenever a face object contains a scalable - * font face (true for TrueType, Type 1, Type 42, CID, OpenType/CFF, - * and PFR font formats. - * - */ -#define FT_IS_SCALABLE( face ) \ - ( face->face_flags & FT_FACE_FLAG_SCALABLE ) - - - /************************************************************************* - * - * @macro: - * FT_IS_SFNT( face ) - * - * @description: - * A macro that returns true whenever a face object contains a font - * whose format is based on the SFNT storage scheme. This usually - * means: TrueType fonts, OpenType fonts, as well as SFNT-based embedded - * bitmap fonts. - * - * If this macro is true, all functions defined in @FT_SFNT_NAMES_H and - * @FT_TRUETYPE_TABLES_H are available. - * - */ -#define FT_IS_SFNT( face ) \ - ( face->face_flags & FT_FACE_FLAG_SFNT ) - - - /************************************************************************* - * - * @macro: - * FT_IS_FIXED_WIDTH( face ) - * - * @description: - * A macro that returns true whenever a face object contains a font face - * that contains fixed-width (or `monospace', `fixed-pitch', etc.) - * glyphs. - * - */ -#define FT_IS_FIXED_WIDTH( face ) \ - ( face->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) - - - /************************************************************************* - * - * @macro: - * FT_HAS_FIXED_SIZES( face ) - * - * @description: - * A macro that returns true whenever a face object contains some - * embedded bitmaps. See the `available_sizes' field of the - * @FT_FaceRec structure. - * - */ -#define FT_HAS_FIXED_SIZES( face ) \ - ( face->face_flags & FT_FACE_FLAG_FIXED_SIZES ) - - /* */ - - - /************************************************************************* - * - * @macro: - * FT_HAS_FAST_GLYPHS( face ) - * - * @description: - * Deprecated. - * - */ -#define FT_HAS_FAST_GLYPHS( face ) 0 - - - /************************************************************************* - * - * @macro: - * FT_HAS_GLYPH_NAMES( face ) - * - * @description: - * A macro that returns true whenever a face object contains some glyph - * names that can be accessed through @FT_Get_Glyph_Name. - * - */ -#define FT_HAS_GLYPH_NAMES( face ) \ - ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) - - - /************************************************************************* - * - * @macro: - * FT_HAS_MULTIPLE_MASTERS( face ) - * - * @description: - * A macro that returns true whenever a face object contains some - * multiple masters. The functions provided by @FT_MULTIPLE_MASTERS_H - * are then available to choose the exact design you want. - * - */ -#define FT_HAS_MULTIPLE_MASTERS( face ) \ - ( face->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS ) - - - /*************************************************************************/ - /* */ - /* <Constant> */ - /* FT_STYLE_FLAG_XXX */ - /* */ - /* <Description> */ - /* A list of bit-flags used to indicate the style of a given face. */ - /* These are used in the `style_flags' field of @FT_FaceRec. */ - /* */ - /* <Values> */ - /* FT_STYLE_FLAG_ITALIC :: */ - /* Indicates that a given face is italicized. */ - /* */ - /* FT_STYLE_FLAG_BOLD :: */ - /* Indicates that a given face is bold. */ - /* */ -#define FT_STYLE_FLAG_ITALIC ( 1 << 0 ) -#define FT_STYLE_FLAG_BOLD ( 1 << 1 ) - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Size_Internal */ - /* */ - /* <Description> */ - /* An opaque handle to an `FT_Size_InternalRec' structure, used to */ - /* model private data of a given FT_Size object. */ - /* */ - typedef struct FT_Size_InternalRec_* FT_Size_Internal; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Size_Metrics */ - /* */ - /* <Description> */ - /* The size metrics structure gives the metrics of a size object. */ - /* */ - /* <Fields> */ - /* x_ppem :: The width of the scaled EM square in pixels, hence */ - /* the term `ppem' (pixels per EM). It is also */ - /* referred to as `nominal width'. */ - /* */ - /* y_ppem :: The height of the scaled EM square in pixels, */ - /* hence the term `ppem' (pixels per EM). It is also */ - /* referred to as `nominal height'. */ - /* */ - /* x_scale :: A 16.16 fractional scaling value used to convert */ - /* horizontal metrics from font units to 26.6 */ - /* fractional pixels. Only relevant for scalable */ - /* font formats. */ - /* */ - /* y_scale :: A 16.16 fractional scaling value used to convert */ - /* vertical metrics from font units to 26.6 */ - /* fractional pixels. Only relevant for scalable */ - /* font formats. */ - /* */ - /* ascender :: The ascender in 26.6 fractional pixels. See */ - /* @FT_FaceRec for the details. */ - /* */ - /* descender :: The descender in 26.6 fractional pixels. See */ - /* @FT_FaceRec for the details. */ - /* */ - /* height :: The height in 26.6 fractional pixels. See */ - /* @FT_FaceRec for the details. */ - /* */ - /* max_advance :: The maximal advance width in 26.6 fractional */ - /* pixels. See @FT_FaceRec for the details. */ - /* */ - /* <Note> */ - /* The scaling values, if relevant, are determined first during a */ - /* size changing operation. The remaining fields are then set by the */ - /* driver. For scalable formats, they are usually set to scaled */ - /* values of the corresponding fields in @FT_FaceRec. */ - /* */ - /* Note that due to glyph hinting, these values might not be exact */ - /* for certain fonts. Thus they must be treated as unreliable */ - /* with an error margin of at least one pixel! */ - /* */ - /* Indeed, the only way to get the exact metrics is to render _all_ */ - /* glyphs. As this would be a definite performance hit, it is up to */ - /* client applications to perform such computations. */ - /* */ - /* The FT_Size_Metrics structure is valid for bitmap fonts also. */ - /* */ - typedef struct FT_Size_Metrics_ - { - FT_UShort x_ppem; /* horizontal pixels per EM */ - FT_UShort y_ppem; /* vertical pixels per EM */ - - FT_Fixed x_scale; /* scaling values used to convert font */ - FT_Fixed y_scale; /* units to 26.6 fractional pixels */ - - FT_Pos ascender; /* ascender in 26.6 frac. pixels */ - FT_Pos descender; /* descender in 26.6 frac. pixels */ - FT_Pos height; /* text height in 26.6 frac. pixels */ - FT_Pos max_advance; /* max horizontal advance, in 26.6 pixels */ - - } FT_Size_Metrics; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_SizeRec */ - /* */ - /* <Description> */ - /* FreeType root size class structure. A size object models a face */ - /* object at a given size. */ - /* */ - /* <Fields> */ - /* face :: Handle to the parent face object. */ - /* */ - /* generic :: A typeless pointer, which is unused by the FreeType */ - /* library or any of its drivers. It can be used by */ - /* client applications to link their own data to each size */ - /* object. */ - /* */ - /* metrics :: Metrics for this size object. This field is read-only. */ - /* */ - typedef struct FT_SizeRec_ - { - FT_Face face; /* parent face object */ - FT_Generic generic; /* generic pointer for client uses */ - FT_Size_Metrics metrics; /* size metrics */ - FT_Size_Internal internal; - - } FT_SizeRec; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_SubGlyph */ - /* */ - /* <Description> */ - /* The subglyph structure is an internal object used to describe */ - /* subglyphs (for example, in the case of composites). */ - /* */ - /* <Note> */ - /* The subglyph implementation is not part of the high-level API, */ - /* hence the forward structure declaration. */ - /* */ - /* You can however retrieve subglyph information with */ - /* @FT_Get_SubGlyph_Info. */ - /* */ - typedef struct FT_SubGlyphRec_* FT_SubGlyph; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Slot_Internal */ - /* */ - /* <Description> */ - /* An opaque handle to an `FT_Slot_InternalRec' structure, used to */ - /* model private data of a given FT_GlyphSlot object. */ - /* */ - typedef struct FT_Slot_InternalRec_* FT_Slot_Internal; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_GlyphSlotRec */ - /* */ - /* <Description> */ - /* FreeType root glyph slot class structure. A glyph slot is a */ - /* container where individual glyphs can be loaded, be they in */ - /* outline or bitmap format. */ - /* */ - /* <Fields> */ - /* library :: A handle to the FreeType library instance */ - /* this slot belongs to. */ - /* */ - /* face :: A handle to the parent face object. */ - /* */ - /* next :: In some cases (like some font tools), several */ - /* glyph slots per face object can be a good */ - /* thing. As this is rare, the glyph slots are */ - /* listed through a direct, single-linked list */ - /* using its `next' field. */ - /* */ - /* generic :: A typeless pointer which is unused by the */ - /* FreeType library or any of its drivers. It */ - /* can be used by client applications to link */ - /* their own data to each glyph slot object. */ - /* */ - /* metrics :: The metrics of the last loaded glyph in the */ - /* slot. The returned values depend on the last */ - /* load flags (see the @FT_Load_Glyph API */ - /* function) and can be expressed either in 26.6 */ - /* fractional pixels or font units. */ - /* */ - /* Note that even when the glyph image is */ - /* transformed, the metrics are not. */ - /* */ - /* linearHoriAdvance :: The advance width of the unhinted glyph. */ - /* Its value is expressed in 16.16 fractional */ - /* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */ - /* when loading the glyph. This field can be */ - /* important to perform correct WYSIWYG layout. */ - /* Only relevant for outline glyphs. */ - /* */ - /* linearVertAdvance :: The advance height of the unhinted glyph. */ - /* Its value is expressed in 16.16 fractional */ - /* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */ - /* when loading the glyph. This field can be */ - /* important to perform correct WYSIWYG layout. */ - /* Only relevant for outline glyphs. */ - /* */ - /* advance :: This is the transformed advance width for the */ - /* glyph. */ - /* */ - /* format :: This field indicates the format of the image */ - /* contained in the glyph slot. Typically */ - /* @FT_GLYPH_FORMAT_BITMAP, */ - /* @FT_GLYPH_FORMAT_OUTLINE, or */ - /* @FT_GLYPH_FORMAT_COMPOSITE, but others are */ - /* possible. */ - /* */ - /* bitmap :: This field is used as a bitmap descriptor */ - /* when the slot format is */ - /* @FT_GLYPH_FORMAT_BITMAP. Note that the */ - /* address and content of the bitmap buffer can */ - /* change between calls of @FT_Load_Glyph and a */ - /* few other functions. */ - /* */ - /* bitmap_left :: This is the bitmap's left bearing expressed */ - /* in integer pixels. Of course, this is only */ - /* valid if the format is */ - /* @FT_GLYPH_FORMAT_BITMAP. */ - /* */ - /* bitmap_top :: This is the bitmap's top bearing expressed in */ - /* integer pixels. Remember that this is the */ - /* distance from the baseline to the top-most */ - /* glyph scanline, upwards y-coordinates being */ - /* *positive*. */ - /* */ - /* outline :: The outline descriptor for the current glyph */ - /* image if its format is */ - /* @FT_GLYPH_FORMAT_OUTLINE. Once a glyph is */ - /* loaded, `outline' can be transformed, */ - /* distorted, embolded, etc. However, it must */ - /* not be freed. */ - /* */ - /* num_subglyphs :: The number of subglyphs in a composite glyph. */ - /* This field is only valid for the composite */ - /* glyph format that should normally only be */ - /* loaded with the @FT_LOAD_NO_RECURSE flag. */ - /* For now this is internal to FreeType. */ - /* */ - /* subglyphs :: An array of subglyph descriptors for */ - /* composite glyphs. There are `num_subglyphs' */ - /* elements in there. Currently internal to */ - /* FreeType. */ - /* */ - /* control_data :: Certain font drivers can also return the */ - /* control data for a given glyph image (e.g. */ - /* TrueType bytecode, Type 1 charstrings, etc.). */ - /* This field is a pointer to such data. */ - /* */ - /* control_len :: This is the length in bytes of the control */ - /* data. */ - /* */ - /* other :: Really wicked formats can use this pointer to */ - /* present their own glyph image to client */ - /* applications. Note that the application */ - /* needs to know about the image format. */ - /* */ - /* lsb_delta :: The difference between hinted and unhinted */ - /* left side bearing while autohinting is */ - /* active. Zero otherwise. */ - /* */ - /* rsb_delta :: The difference between hinted and unhinted */ - /* right side bearing while autohinting is */ - /* active. Zero otherwise. */ - /* */ - /* <Note> */ - /* If @FT_Load_Glyph is called with default flags (see */ - /* @FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in */ - /* its native format (e.g., an outline glyph for TrueType and Type 1 */ - /* formats). */ - /* */ - /* This image can later be converted into a bitmap by calling */ - /* @FT_Render_Glyph. This function finds the current renderer for */ - /* the native image's format then invokes it. */ - /* */ - /* The renderer is in charge of transforming the native image through */ - /* the slot's face transformation fields, then convert it into a */ - /* bitmap that is returned in `slot->bitmap'. */ - /* */ - /* Note that `slot->bitmap_left' and `slot->bitmap_top' are also used */ - /* to specify the position of the bitmap relative to the current pen */ - /* position (e.g., coordinates (0,0) on the baseline). Of course, */ - /* `slot->format' is also changed to @FT_GLYPH_FORMAT_BITMAP. */ - /* */ - /* <Note> */ - /* Here a small pseudo code fragment which shows how to use */ - /* `lsb_delta' and `rsb_delta': */ - /* */ - /* { */ - /* FT_Pos origin_x = 0; */ - /* FT_Pos prev_rsb_delta = 0; */ - /* */ - /* */ - /* for all glyphs do */ - /* <compute kern between current and previous glyph and add it to */ - /* `origin_x'> */ - /* */ - /* <load glyph with `FT_Load_Glyph'> */ - /* */ - /* if ( prev_rsb_delta - face->glyph->lsb_delta >= 32 ) */ - /* origin_x -= 64; */ - /* else if ( prev_rsb_delta - face->glyph->lsb_delta < -32 ) */ - /* origin_x += 64; */ - /* */ - /* prev_rsb_delta = face->glyph->rsb_delta; */ - /* */ - /* <save glyph image, or render glyph, or ...> */ - /* */ - /* origin_x += face->glyph->advance.x; */ - /* endfor */ - /* } */ - /* */ - typedef struct FT_GlyphSlotRec_ - { - FT_Library library; - FT_Face face; - FT_GlyphSlot next; - FT_UInt reserved; /* retained for binary compatibility */ - FT_Generic generic; - - FT_Glyph_Metrics metrics; - FT_Fixed linearHoriAdvance; - FT_Fixed linearVertAdvance; - FT_Vector advance; - - FT_Glyph_Format format; - - FT_Bitmap bitmap; - FT_Int bitmap_left; - FT_Int bitmap_top; - - FT_Outline outline; - - FT_UInt num_subglyphs; - FT_SubGlyph subglyphs; - - void* control_data; - long control_len; - - FT_Pos lsb_delta; - FT_Pos rsb_delta; - - void* other; - - FT_Slot_Internal internal; - - } FT_GlyphSlotRec; - - - /*************************************************************************/ - /*************************************************************************/ - /* */ - /* F U N C T I O N S */ - /* */ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Init_FreeType */ - /* */ - /* <Description> */ - /* Initialize a new FreeType library object. The set of modules */ - /* that are registered by this function is determined at build time. */ - /* */ - /* <Output> */ - /* alibrary :: A handle to a new library object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Init_FreeType( FT_Library *alibrary ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_FreeType */ - /* */ - /* <Description> */ - /* Destroy a given FreeType library object and all of its children, */ - /* including resources, drivers, faces, sizes, etc. */ - /* */ - /* <Input> */ - /* library :: A handle to the target library object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Done_FreeType( FT_Library library ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_OPEN_XXX */ - /* */ - /* <Description> */ - /* A list of bit-field constants used within the `flags' field of the */ - /* @FT_Open_Args structure. */ - /* */ - /* <Values> */ - /* FT_OPEN_MEMORY :: This is a memory-based stream. */ - /* */ - /* FT_OPEN_STREAM :: Copy the stream from the `stream' field. */ - /* */ - /* FT_OPEN_PATHNAME :: Create a new input stream from a C */ - /* path name. */ - /* */ - /* FT_OPEN_DRIVER :: Use the `driver' field. */ - /* */ - /* FT_OPEN_PARAMS :: Use the `num_params' and `params' fields. */ - /* */ - /* ft_open_memory :: Deprecated; use @FT_OPEN_MEMORY instead. */ - /* */ - /* ft_open_stream :: Deprecated; use @FT_OPEN_STREAM instead. */ - /* */ - /* ft_open_pathname :: Deprecated; use @FT_OPEN_PATHNAME instead. */ - /* */ - /* ft_open_driver :: Deprecated; use @FT_OPEN_DRIVER instead. */ - /* */ - /* ft_open_params :: Deprecated; use @FT_OPEN_PARAMS instead. */ - /* */ - /* <Note> */ - /* The `FT_OPEN_MEMORY', `FT_OPEN_STREAM', and `FT_OPEN_PATHNAME' */ - /* flags are mutually exclusive. */ - /* */ -#define FT_OPEN_MEMORY 0x1 -#define FT_OPEN_STREAM 0x2 -#define FT_OPEN_PATHNAME 0x4 -#define FT_OPEN_DRIVER 0x8 -#define FT_OPEN_PARAMS 0x10 - -#define ft_open_memory FT_OPEN_MEMORY /* deprecated */ -#define ft_open_stream FT_OPEN_STREAM /* deprecated */ -#define ft_open_pathname FT_OPEN_PATHNAME /* deprecated */ -#define ft_open_driver FT_OPEN_DRIVER /* deprecated */ -#define ft_open_params FT_OPEN_PARAMS /* deprecated */ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Parameter */ - /* */ - /* <Description> */ - /* A simple structure used to pass more or less generic parameters */ - /* to @FT_Open_Face. */ - /* */ - /* <Fields> */ - /* tag :: A four-byte identification tag. */ - /* */ - /* data :: A pointer to the parameter data. */ - /* */ - /* <Note> */ - /* The ID and function of parameters are driver-specific. */ - /* */ - typedef struct FT_Parameter_ - { - FT_ULong tag; - FT_Pointer data; - - } FT_Parameter; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Open_Args */ - /* */ - /* <Description> */ - /* A structure used to indicate how to open a new font file or */ - /* stream. A pointer to such a structure can be used as a parameter */ - /* for the functions @FT_Open_Face and @FT_Attach_Stream. */ - /* */ - /* <Fields> */ - /* flags :: A set of bit flags indicating how to use the */ - /* structure. */ - /* */ - /* memory_base :: The first byte of the file in memory. */ - /* */ - /* memory_size :: The size in bytes of the file in memory. */ - /* */ - /* pathname :: A pointer to an 8-bit file pathname. */ - /* */ - /* stream :: A handle to a source stream object. */ - /* */ - /* driver :: This field is exclusively used by @FT_Open_Face; */ - /* it simply specifies the font driver to use to open */ - /* the face. If set to 0, FreeType tries to load the */ - /* face with each one of the drivers in its list. */ - /* */ - /* num_params :: The number of extra parameters. */ - /* */ - /* params :: Extra parameters passed to the font driver when */ - /* opening a new face. */ - /* */ - /* <Note> */ - /* The stream type is determined by the contents of `flags' which */ - /* are tested in the following order by @FT_Open_Face: */ - /* */ - /* If the `FT_OPEN_MEMORY' bit is set, assume that this is a */ - /* memory file of `memory_size' bytes, located at `memory_address'. */ - /* The data are are not copied, and the client is responsible for */ - /* releasing and destroying them _after_ the corresponding call to */ - /* @FT_Done_Face. */ - /* */ - /* Otherwise, if the `FT_OPEN_STREAM' bit is set, assume that a */ - /* custom input stream `stream' is used. */ - /* */ - /* Otherwise, if the `FT_OPEN_PATHNAME' bit is set, assume that this */ - /* is a normal file and use `pathname' to open it. */ - /* */ - /* If the `FT_OPEN_DRIVER' bit is set, @FT_Open_Face only tries to */ - /* open the file with the driver whose handler is in `driver'. */ - /* */ - /* If the `FT_OPEN_PARAMS' bit is set, the parameters given by */ - /* `num_params' and `params' is used. They are ignored otherwise. */ - /* */ - /* Ideally, both the `pathname' and `params' fields should be tagged */ - /* as `const'; this is missing for API backwards compatibility. With */ - /* other words, applications should treat them as read-only. */ - /* */ - typedef struct FT_Open_Args_ - { - FT_UInt flags; - const FT_Byte* memory_base; - FT_Long memory_size; - FT_String* pathname; - FT_Stream stream; - FT_Module driver; - FT_Int num_params; - FT_Parameter* params; - - } FT_Open_Args; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Face */ - /* */ - /* <Description> */ - /* This function calls @FT_Open_Face to open a font by its pathname. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* pathname :: A path to the font file. */ - /* */ - /* face_index :: The index of the face within the font. The first */ - /* face has index 0. */ - /* */ - /* <Output> */ - /* aface :: A handle to a new face object. If `face_index' is */ - /* greater than or equal to zero, it must be non-NULL. */ - /* See @FT_Open_Face for more details. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Face( FT_Library library, - const char* filepathname, - FT_Long face_index, - FT_Face *aface ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Memory_Face */ - /* */ - /* <Description> */ - /* This function calls @FT_Open_Face to open a font which has been */ - /* loaded into memory. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* file_base :: A pointer to the beginning of the font data. */ - /* */ - /* file_size :: The size of the memory chunk used by the font data. */ - /* */ - /* face_index :: The index of the face within the font. The first */ - /* face has index 0. */ - /* */ - /* <Output> */ - /* aface :: A handle to a new face object. If `face_index' is */ - /* greater than or equal to zero, it must be non-NULL. */ - /* See @FT_Open_Face for more details. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* You must not deallocate the memory before calling @FT_Done_Face. */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Memory_Face( FT_Library library, - const FT_Byte* file_base, - FT_Long file_size, - FT_Long face_index, - FT_Face *aface ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Open_Face */ - /* */ - /* <Description> */ - /* Create a face object from a given resource described by */ - /* @FT_Open_Args. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* args :: A pointer to an `FT_Open_Args' structure which must */ - /* be filled by the caller. */ - /* */ - /* face_index :: The index of the face within the font. The first */ - /* face has index 0. */ - /* */ - /* <Output> */ - /* aface :: A handle to a new face object. If `face_index' is */ - /* greater than or equal to zero, it must be non-NULL. */ - /* See note below. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* Unlike FreeType 1.x, this function automatically creates a glyph */ - /* slot for the face object which can be accessed directly through */ - /* `face->glyph'. */ - /* */ - /* FT_Open_Face can be used to quickly check whether the font */ - /* format of a given font resource is supported by FreeType. If the */ - /* `face_index' field is negative, the function's return value is 0 */ - /* if the font format is recognized, or non-zero otherwise; */ - /* the function returns a more or less empty face handle in `*aface' */ - /* (if `aface' isn't NULL). The only useful field in this special */ - /* case is `face->num_faces' which gives the number of faces within */ - /* the font file. After examination, the returned @FT_Face structure */ - /* should be deallocated with a call to @FT_Done_Face. */ - /* */ - /* Each new face object created with this function also owns a */ - /* default @FT_Size object, accessible as `face->size'. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Open_Face( FT_Library library, - const FT_Open_Args* args, - FT_Long face_index, - FT_Face *aface ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Attach_File */ - /* */ - /* <Description> */ - /* This function calls @FT_Attach_Stream to attach a file. */ - /* */ - /* <InOut> */ - /* face :: The target face object. */ - /* */ - /* <Input> */ - /* filepathname :: The pathname. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Attach_File( FT_Face face, - const char* filepathname ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Attach_Stream */ - /* */ - /* <Description> */ - /* `Attach' data to a face object. Normally, this is used to read */ - /* additional information for the face object. For example, you can */ - /* attach an AFM file that comes with a Type 1 font to get the */ - /* kerning values and other metrics. */ - /* */ - /* <InOut> */ - /* face :: The target face object. */ - /* */ - /* <Input> */ - /* parameters :: A pointer to @FT_Open_Args which must be filled by */ - /* the caller. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The meaning of the `attach' (i.e., what really happens when the */ - /* new file is read) is not fixed by FreeType itself. It really */ - /* depends on the font format (and thus the font driver). */ - /* */ - /* Client applications are expected to know what they are doing */ - /* when invoking this function. Most drivers simply do not implement */ - /* file attachments. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Attach_Stream( FT_Face face, - FT_Open_Args* parameters ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_Face */ - /* */ - /* <Description> */ - /* Discard a given face object, as well as all of its child slots and */ - /* sizes. */ - /* */ - /* <Input> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Done_Face( FT_Face face ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Select_Size */ - /* */ - /* <Description> */ - /* Select a bitmap strike. */ - /* */ - /* <InOut> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Input> */ - /* strike_index :: The index of the bitmap strike in the */ - /* `available_sizes' field of @FT_FaceRec structure. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Select_Size( FT_Face face, - FT_Int strike_index ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Size_Request_Type */ - /* */ - /* <Description> */ - /* An enumeration type that lists the supported size request types. */ - /* */ - /* <Values> */ - /* FT_SIZE_REQUEST_TYPE_NOMINAL :: */ - /* The nominal size. The `units_per_EM' field of @FT_FaceRec is */ - /* used to determine both scaling values. */ - /* */ - /* FT_SIZE_REQUEST_TYPE_REAL_DIM :: */ - /* The real dimension. The sum of the the `Ascender' and (minus */ - /* of) the `Descender' fields of @FT_FaceRec are used to determine */ - /* both scaling values. */ - /* */ - /* FT_SIZE_REQUEST_TYPE_BBOX :: */ - /* The font bounding box. The width and height of the `bbox' field */ - /* of @FT_FaceRec are used to determine the horizontal and vertical */ - /* scaling value, respectively. */ - /* */ - /* FT_SIZE_REQUEST_TYPE_CELL :: */ - /* The `max_advance_width' field of @FT_FaceRec is used to */ - /* determine the horizontal scaling value; the vertical scaling */ - /* value is determined the same way as */ - /* @FT_SIZE_REQUEST_TYPE_REAL_DIM does. Finally, both scaling */ - /* values are set to the smaller one. This type is useful if you */ - /* want to specify the font size for, say, a window of a given */ - /* dimension and 80x24 cells. */ - /* */ - /* FT_SIZE_REQUEST_TYPE_SCALES :: */ - /* Specify the scaling values directly. */ - /* */ - /* <Note> */ - /* The above descriptions only apply to scalable formats. For bitmap */ - /* formats, the behaviour is up to the driver. */ - /* */ - /* See the note section of @FT_Size_Metrics if you wonder how size */ - /* requesting relates to scaling values. */ - /* */ - typedef enum FT_Size_Request_Type_ - { - FT_SIZE_REQUEST_TYPE_NOMINAL, - FT_SIZE_REQUEST_TYPE_REAL_DIM, - FT_SIZE_REQUEST_TYPE_BBOX, - FT_SIZE_REQUEST_TYPE_CELL, - FT_SIZE_REQUEST_TYPE_SCALES, - - FT_SIZE_REQUEST_TYPE_MAX - - } FT_Size_Request_Type; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Size_RequestRec */ - /* */ - /* <Description> */ - /* A structure used to model a size request. */ - /* */ - /* <Fields> */ - /* type :: See @FT_Size_Request_Type. */ - /* */ - /* width :: The desired width. */ - /* */ - /* height :: The desired height. */ - /* */ - /* horiResolution :: The horizontal resolution. If set to zero, */ - /* `width' is treated as a 26.6 fractional pixel */ - /* value. */ - /* */ - /* vertResolution :: The vertical resolution. If set to zero, */ - /* `height' is treated as a 26.6 fractional pixel */ - /* value. */ - /* */ - /* <Note> */ - /* If `width' is zero, then the horizontal scaling value is set */ - /* equal to the vertical scaling value, and vice versa. */ - /* */ - typedef struct FT_Size_RequestRec_ - { - FT_Size_Request_Type type; - FT_Long width; - FT_Long height; - FT_UInt horiResolution; - FT_UInt vertResolution; - - } FT_Size_RequestRec, *FT_Size_Request; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Request_Size */ - /* */ - /* <Description> */ - /* Resize the scale of the active @FT_Size object in a face. */ - /* */ - /* <InOut> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Input> */ - /* req :: A pointer to a @FT_Size_RequestRec. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* Although drivers may select the bitmap strike matching the */ - /* request, you should not rely on this if you intend to select a */ - /* particular bitmap strike. Use @FT_Select_Size instead in that */ - /* case. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Request_Size( FT_Face face, - FT_Size_Request req ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Char_Size */ - /* */ - /* <Description> */ - /* This function calls @FT_Request_Size to request the nominal size */ - /* (in points). */ - /* */ - /* <InOut> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Input> */ - /* char_width :: The nominal width, in 26.6 fractional points. */ - /* */ - /* char_height :: The nominal height, in 26.6 fractional points. */ - /* */ - /* horz_resolution :: The horizontal resolution in dpi. */ - /* */ - /* vert_resolution :: The vertical resolution in dpi. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* If either the character width or height is zero, it is set equal */ - /* to the other value. */ - /* */ - /* If either the horizontal or vertical resolution is zero, it is set */ - /* equal to the other value. */ - /* */ - /* A character width or height smaller than 1pt is set to 1pt; if */ - /* both resolution values are zero, they are set to 72dpi. */ - /* */ - - FT_EXPORT( FT_Error ) - FT_Set_Char_Size( FT_Face face, - FT_F26Dot6 char_width, - FT_F26Dot6 char_height, - FT_UInt horz_resolution, - FT_UInt vert_resolution ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Pixel_Sizes */ - /* */ - /* <Description> */ - /* This function calls @FT_Request_Size to request the nominal size */ - /* (in pixels). */ - /* */ - /* <InOut> */ - /* face :: A handle to the target face object. */ - /* */ - /* <Input> */ - /* pixel_width :: The nominal width, in pixels. */ - /* */ - /* pixel_height :: The nominal height, in pixels. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_Pixel_Sizes( FT_Face face, - FT_UInt pixel_width, - FT_UInt pixel_height ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Load_Glyph */ - /* */ - /* <Description> */ - /* A function used to load a single glyph into the glyph slot of a */ - /* face object. */ - /* */ - /* <InOut> */ - /* face :: A handle to the target face object where the glyph */ - /* is loaded. */ - /* */ - /* <Input> */ - /* glyph_index :: The index of the glyph in the font file. For */ - /* CID-keyed fonts (either in PS or in CFF format) */ - /* this argument specifies the CID value. */ - /* */ - /* load_flags :: A flag indicating what to load for this glyph. The */ - /* @FT_LOAD_XXX constants can be used to control the */ - /* glyph loading process (e.g., whether the outline */ - /* should be scaled, whether to load bitmaps or not, */ - /* whether to hint the outline, etc). */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The loaded glyph may be transformed. See @FT_Set_Transform for */ - /* the details. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Load_Glyph( FT_Face face, - FT_UInt glyph_index, - FT_Int32 load_flags ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Load_Char */ - /* */ - /* <Description> */ - /* A function used to load a single glyph into the glyph slot of a */ - /* face object, according to its character code. */ - /* */ - /* <InOut> */ - /* face :: A handle to a target face object where the glyph */ - /* is loaded. */ - /* */ - /* <Input> */ - /* char_code :: The glyph's character code, according to the */ - /* current charmap used in the face. */ - /* */ - /* load_flags :: A flag indicating what to load for this glyph. The */ - /* @FT_LOAD_XXX constants can be used to control the */ - /* glyph loading process (e.g., whether the outline */ - /* should be scaled, whether to load bitmaps or not, */ - /* whether to hint the outline, etc). */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Load_Char( FT_Face face, - FT_ULong char_code, - FT_Int32 load_flags ); - - - /************************************************************************* - * - * @enum: - * FT_LOAD_XXX - * - * @description: - * A list of bit-field constants used with @FT_Load_Glyph to indicate - * what kind of operations to perform during glyph loading. - * - * @values: - * FT_LOAD_DEFAULT :: - * Corresponding to 0, this value is used as the default glyph load - * operation. In this case, the following happens: - * - * 1. FreeType looks for a bitmap for the glyph corresponding to the - * face's current size. If one is found, the function returns. - * The bitmap data can be accessed from the glyph slot (see note - * below). - * - * 2. If no embedded bitmap is searched or found, FreeType looks for a - * scalable outline. If one is found, it is loaded from the font - * file, scaled to device pixels, then `hinted' to the pixel grid - * in order to optimize it. The outline data can be accessed from - * the glyph slot (see note below). - * - * Note that by default, the glyph loader doesn't render outlines into - * bitmaps. The following flags are used to modify this default - * behaviour to more specific and useful cases. - * - * FT_LOAD_NO_SCALE :: - * Don't scale the outline glyph loaded, but keep it in font units. - * - * This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and - * unsets @FT_LOAD_RENDER. - * - * FT_LOAD_NO_HINTING :: - * Disable hinting. This generally generates `blurrier' bitmap glyph - * when the glyph is rendered in any of the anti-aliased modes. See - * also the note below. - * - * This flag is implied by @FT_LOAD_NO_SCALE. - * - * FT_LOAD_RENDER :: - * Call @FT_Render_Glyph after the glyph is loaded. By default, the - * glyph is rendered in @FT_RENDER_MODE_NORMAL mode. This can be - * overridden by @FT_LOAD_TARGET_XXX or @FT_LOAD_MONOCHROME. - * - * This flag is unset by @FT_LOAD_NO_SCALE. - * - * FT_LOAD_NO_BITMAP :: - * Ignore bitmap strikes when loading. Bitmap-only fonts ignore this - * flag. - * - * @FT_LOAD_NO_SCALE always sets this flag. - * - * FT_LOAD_VERTICAL_LAYOUT :: - * Load the glyph for vertical text layout. _Don't_ use it as it is - * problematic currently. - * - * FT_LOAD_FORCE_AUTOHINT :: - * Indicates that the auto-hinter is preferred over the font's native - * hinter. See also the note below. - * - * FT_LOAD_CROP_BITMAP :: - * Indicates that the font driver should crop the loaded bitmap glyph - * (i.e., remove all space around its black bits). Not all drivers - * implement this. - * - * FT_LOAD_PEDANTIC :: - * Indicates that the font driver should perform pedantic verifications - * during glyph loading. This is mostly used to detect broken glyphs - * in fonts. By default, FreeType tries to handle broken fonts also. - * - * FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH :: - * Indicates that the font driver should ignore the global advance - * width defined in the font. By default, that value is used as the - * advance width for all glyphs when the face has - * @FT_FACE_FLAG_FIXED_WIDTH set. - * - * This flag exists for historical reasons (to support buggy CJK - * fonts). - * - * FT_LOAD_NO_RECURSE :: - * This flag is only used internally. It merely indicates that the - * font driver should not load composite glyphs recursively. Instead, - * it should set the `num_subglyph' and `subglyphs' values of the - * glyph slot accordingly, and set `glyph->format' to - * @FT_GLYPH_FORMAT_COMPOSITE. - * - * The description of sub-glyphs is not available to client - * applications for now. - * - * This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM. - * - * FT_LOAD_IGNORE_TRANSFORM :: - * Indicates that the transform matrix set by @FT_Set_Transform should - * be ignored. - * - * FT_LOAD_MONOCHROME :: - * This flag is used with @FT_LOAD_RENDER to indicate that you want to - * render an outline glyph to a 1-bit monochrome bitmap glyph, with - * 8 pixels packed into each byte of the bitmap data. - * - * Note that this has no effect on the hinting algorithm used. You - * should use @FT_LOAD_TARGET_MONO instead so that the - * monochrome-optimized hinting algorithm is used. - * - * FT_LOAD_LINEAR_DESIGN :: - * Indicates that the `linearHoriAdvance' and `linearVertAdvance' - * fields of @FT_GlyphSlotRec should be kept in font units. See - * @FT_GlyphSlotRec for details. - * - * FT_LOAD_NO_AUTOHINT :: - * Disable auto-hinter. See also the note below. - * - * @note: - * By default, hinting is enabled and the font's native hinter (see - * @FT_FACE_FLAG_HINTER) is preferred over the auto-hinter. You can - * disable hinting by setting @FT_LOAD_NO_HINTING or change the - * precedence by setting @FT_LOAD_FORCE_AUTOHINT. You can also set - * @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be - * used at all. - * - * Besides deciding which hinter to use, you can also decide which - * hinting algorithm to use. See @FT_LOAD_TARGET_XXX for details. - */ -#define FT_LOAD_DEFAULT 0x0 -#define FT_LOAD_NO_SCALE 0x1 -#define FT_LOAD_NO_HINTING 0x2 -#define FT_LOAD_RENDER 0x4 -#define FT_LOAD_NO_BITMAP 0x8 -#define FT_LOAD_VERTICAL_LAYOUT 0x10 -#define FT_LOAD_FORCE_AUTOHINT 0x20 -#define FT_LOAD_CROP_BITMAP 0x40 -#define FT_LOAD_PEDANTIC 0x80 -#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH 0x200 -#define FT_LOAD_NO_RECURSE 0x400 -#define FT_LOAD_IGNORE_TRANSFORM 0x800 -#define FT_LOAD_MONOCHROME 0x1000 -#define FT_LOAD_LINEAR_DESIGN 0x2000 - - /* temporary hack! */ -#define FT_LOAD_SBITS_ONLY 0x4000 -#define FT_LOAD_NO_AUTOHINT 0x8000U - - /* */ - - - /************************************************************************** - * - * @enum: - * FT_LOAD_TARGET_XXX - * - * @description: - * A list of values that are used to select a specific hinting algorithm - * to use by the hinter. You should OR one of these values to your - * `load_flags' when calling @FT_Load_Glyph. - * - * Note that font's native hinters may ignore the hinting algorithm you - * have specified (e.g., the TrueType bytecode interpreter). You can set - * @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used. - * - * Also note that @FT_LOAD_TARGET_LIGHT is an exception, in that it - * always implies @FT_LOAD_FORCE_AUTOHINT. - * - * @values: - * FT_LOAD_TARGET_NORMAL :: - * This corresponds to the default hinting algorithm, optimized for - * standard gray-level rendering. For monochrome output, use - * @FT_LOAD_TARGET_MONO instead. - * - * FT_LOAD_TARGET_LIGHT :: - * A lighter hinting algorithm for non-monochrome modes. Many - * generated glyphs are more fuzzy but better resemble its original - * shape. A bit like rendering on Mac OS X. - * - * As a special exception, this target implies @FT_LOAD_FORCE_AUTOHINT. - * - * FT_LOAD_TARGET_MONO :: - * Strong hinting algorithm that should only be used for monochrome - * output. The result is probably unpleasant if the glyph is rendered - * in non-monochrome modes. - * - * FT_LOAD_TARGET_LCD :: - * A variant of @FT_LOAD_TARGET_NORMAL optimized for horizontally - * decimated LCD displays. - * - * FT_LOAD_TARGET_LCD_V :: - * A variant of @FT_LOAD_TARGET_NORMAL optimized for vertically - * decimated LCD displays. - * - * @note: - * You should use only _one_ of the FT_LOAD_TARGET_XXX values in your - * `load_flags'. They can't be ORed. - * - * If @FT_LOAD_RENDER is also set, the glyph is rendered in the - * corresponding mode (i.e., the mode which matches the used algorithm - * best) unless @FT_LOAD_MONOCHROME is set. - * - * You can use a hinting algorithm that doesn't correspond to the same - * rendering mode. As an example, it is possible to use the `light' - * hinting algorithm and have the results rendered in horizontal LCD - * pixel mode, with code like - * - * { - * FT_Load_Glyph( face, glyph_index, - * load_flags | FT_LOAD_TARGET_LIGHT ); - * - * FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD ); - * } - */ - -#define FT_LOAD_TARGET_( x ) ( (FT_Int32)( (x) & 15 ) << 16 ) - -#define FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL ) -#define FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT ) -#define FT_LOAD_TARGET_MONO FT_LOAD_TARGET_( FT_RENDER_MODE_MONO ) -#define FT_LOAD_TARGET_LCD FT_LOAD_TARGET_( FT_RENDER_MODE_LCD ) -#define FT_LOAD_TARGET_LCD_V FT_LOAD_TARGET_( FT_RENDER_MODE_LCD_V ) - - - /* - * @macro: - * FT_LOAD_TARGET_MODE - * - * @description: - * Return the @FT_Render_Mode corresponding to a given - * @FT_LOAD_TARGET_XXX value. - */ - -#define FT_LOAD_TARGET_MODE( x ) ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) ) - - /* */ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Transform */ - /* */ - /* <Description> */ - /* A function used to set the transformation that is applied to glyph */ - /* images when they are loaded into a glyph slot through */ - /* @FT_Load_Glyph. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Input> */ - /* matrix :: A pointer to the transformation's 2x2 matrix. Use 0 for */ - /* the identity matrix. */ - /* delta :: A pointer to the translation vector. Use 0 for the null */ - /* vector. */ - /* */ - /* <Note> */ - /* The transformation is only applied to scalable image formats after */ - /* the glyph has been loaded. It means that hinting is unaltered by */ - /* the transformation and is performed on the character size given in */ - /* the last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes. */ - /* */ - /* Note that this also transforms the `face.glyph.advance' field, but */ - /* *not* the values in `face.glyph.metrics'. */ - /* */ - FT_EXPORT( void ) - FT_Set_Transform( FT_Face face, - FT_Matrix* matrix, - FT_Vector* delta ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Render_Mode */ - /* */ - /* <Description> */ - /* An enumeration type that lists the render modes supported by */ - /* FreeType 2. Each mode corresponds to a specific type of scanline */ - /* conversion performed on the outline. */ - /* */ - /* For bitmap fonts the `bitmap->pixel_mode' field in the */ - /* @FT_GlyphSlotRec structure gives the format of the returned */ - /* bitmap. */ - /* */ - /* <Values> */ - /* FT_RENDER_MODE_NORMAL :: */ - /* This is the default render mode; it corresponds to 8-bit */ - /* anti-aliased bitmaps, using 256 levels of opacity. */ - /* */ - /* FT_RENDER_MODE_LIGHT :: */ - /* This is equivalent to @FT_RENDER_MODE_NORMAL. It is only */ - /* defined as a separate value because render modes are also used */ - /* indirectly to define hinting algorithm selectors. See */ - /* @FT_LOAD_TARGET_XXX for details. */ - /* */ - /* FT_RENDER_MODE_MONO :: */ - /* This mode corresponds to 1-bit bitmaps. */ - /* */ - /* FT_RENDER_MODE_LCD :: */ - /* This mode corresponds to horizontal RGB and BGR sub-pixel */ - /* displays, like LCD-screens. It produces 8-bit bitmaps that are */ - /* 3 times the width of the original glyph outline in pixels, and */ - /* which use the @FT_PIXEL_MODE_LCD mode. */ - /* */ - /* FT_RENDER_MODE_LCD_V :: */ - /* This mode corresponds to vertical RGB and BGR sub-pixel displays */ - /* (like PDA screens, rotated LCD displays, etc.). It produces */ - /* 8-bit bitmaps that are 3 times the height of the original */ - /* glyph outline in pixels and use the @FT_PIXEL_MODE_LCD_V mode. */ - /* */ - /* <Note> */ - /* The LCD-optimized glyph bitmaps produced by FT_Render_Glyph are */ - /* _not_ _filtered_ to reduce color-fringes. It is up to the caller */ - /* to perform this pass. */ - /* */ - typedef enum FT_Render_Mode_ - { - FT_RENDER_MODE_NORMAL = 0, - FT_RENDER_MODE_LIGHT, - FT_RENDER_MODE_MONO, - FT_RENDER_MODE_LCD, - FT_RENDER_MODE_LCD_V, - - FT_RENDER_MODE_MAX - - } FT_Render_Mode; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* ft_render_mode_xxx */ - /* */ - /* <Description> */ - /* These constants are deprecated. Use the corresponding */ - /* @FT_Render_Mode values instead. */ - /* */ - /* <Values> */ - /* ft_render_mode_normal :: see @FT_RENDER_MODE_NORMAL */ - /* ft_render_mode_mono :: see @FT_RENDER_MODE_MONO */ - /* */ -#define ft_render_mode_normal FT_RENDER_MODE_NORMAL -#define ft_render_mode_mono FT_RENDER_MODE_MONO - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Render_Glyph */ - /* */ - /* <Description> */ - /* Convert a given glyph image to a bitmap. It does so by inspecting */ - /* the glyph image format, finding the relevant renderer, and */ - /* invoking it. */ - /* */ - /* <InOut> */ - /* slot :: A handle to the glyph slot containing the image to */ - /* convert. */ - /* */ - /* <Input> */ - /* render_mode :: This is the render mode used to render the glyph */ - /* image into a bitmap. See @FT_Render_Mode for a */ - /* list of possible values. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Render_Glyph( FT_GlyphSlot slot, - FT_Render_Mode render_mode ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Kerning_Mode */ - /* */ - /* <Description> */ - /* An enumeration used to specify which kerning values to return in */ - /* @FT_Get_Kerning. */ - /* */ - /* <Values> */ - /* FT_KERNING_DEFAULT :: Return scaled and grid-fitted kerning */ - /* distances (value is 0). */ - /* */ - /* FT_KERNING_UNFITTED :: Return scaled but un-grid-fitted kerning */ - /* distances. */ - /* */ - /* FT_KERNING_UNSCALED :: Return the kerning vector in original font */ - /* units. */ - /* */ - typedef enum FT_Kerning_Mode_ - { - FT_KERNING_DEFAULT = 0, - FT_KERNING_UNFITTED, - FT_KERNING_UNSCALED - - } FT_Kerning_Mode; - - - /*************************************************************************/ - /* */ - /* <Const> */ - /* ft_kerning_default */ - /* */ - /* <Description> */ - /* This constant is deprecated. Please use @FT_KERNING_DEFAULT */ - /* instead. */ - /* */ -#define ft_kerning_default FT_KERNING_DEFAULT - - - /*************************************************************************/ - /* */ - /* <Const> */ - /* ft_kerning_unfitted */ - /* */ - /* <Description> */ - /* This constant is deprecated. Please use @FT_KERNING_UNFITTED */ - /* instead. */ - /* */ -#define ft_kerning_unfitted FT_KERNING_UNFITTED - - - /*************************************************************************/ - /* */ - /* <Const> */ - /* ft_kerning_unscaled */ - /* */ - /* <Description> */ - /* This constant is deprecated. Please use @FT_KERNING_UNSCALED */ - /* instead. */ - /* */ -#define ft_kerning_unscaled FT_KERNING_UNSCALED - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Kerning */ - /* */ - /* <Description> */ - /* Return the kerning vector between two glyphs of a same face. */ - /* */ - /* <Input> */ - /* face :: A handle to a source face object. */ - /* */ - /* left_glyph :: The index of the left glyph in the kern pair. */ - /* */ - /* right_glyph :: The index of the right glyph in the kern pair. */ - /* */ - /* kern_mode :: See @FT_Kerning_Mode for more information. */ - /* Determines the scale and dimension of the returned */ - /* kerning vector. */ - /* */ - /* <Output> */ - /* akerning :: The kerning vector. This is either in font units */ - /* or in pixels (26.6 format) for scalable formats, */ - /* and in pixels for fixed-sizes formats. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* Only horizontal layouts (left-to-right & right-to-left) are */ - /* supported by this method. Other layouts, or more sophisticated */ - /* kernings, are out of the scope of this API function -- they can be */ - /* implemented through format-specific interfaces. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Kerning( FT_Face face, - FT_UInt left_glyph, - FT_UInt right_glyph, - FT_UInt kern_mode, - FT_Vector *akerning ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Track_Kerning */ - /* */ - /* <Description> */ - /* Return the track kerning for a given face object at a given size. */ - /* */ - /* <Input> */ - /* face :: A handle to a source face object. */ - /* */ - /* point_size :: The point size in 16.16 fractional points. */ - /* */ - /* degree :: The degree of tightness. */ - /* */ - /* <Output> */ - /* akerning :: The kerning in 16.16 fractional points. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Track_Kerning( FT_Face face, - FT_Fixed point_size, - FT_Int degree, - FT_Fixed* akerning ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Glyph_Name */ - /* */ - /* <Description> */ - /* Retrieve the ASCII name of a given glyph in a face. This only */ - /* works for those faces where @FT_HAS_GLYPH_NAMES(face) returns 1. */ - /* */ - /* <Input> */ - /* face :: A handle to a source face object. */ - /* */ - /* glyph_index :: The glyph index. */ - /* */ - /* buffer_max :: The maximal number of bytes available in the */ - /* buffer. */ - /* */ - /* <Output> */ - /* buffer :: A pointer to a target buffer where the name is */ - /* copied to. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* An error is returned if the face doesn't provide glyph names or if */ - /* the glyph index is invalid. In all cases of failure, the first */ - /* byte of `buffer' is set to 0 to indicate an empty name. */ - /* */ - /* The glyph name is truncated to fit within the buffer if it is too */ - /* long. The returned string is always zero-terminated. */ - /* */ - /* This function is not compiled within the library if the config */ - /* macro `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is defined in */ - /* `include/freetype/config/ftoptions.h'. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Glyph_Name( FT_Face face, - FT_UInt glyph_index, - FT_Pointer buffer, - FT_UInt buffer_max ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Postscript_Name */ - /* */ - /* <Description> */ - /* Retrieve the ASCII Postscript name of a given face, if available. */ - /* This only works with Postscript and TrueType fonts. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Return> */ - /* A pointer to the face's Postscript name. NULL if unavailable. */ - /* */ - /* <Note> */ - /* The returned pointer is owned by the face and is destroyed with */ - /* it. */ - /* */ - FT_EXPORT( const char* ) - FT_Get_Postscript_Name( FT_Face face ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Select_Charmap */ - /* */ - /* <Description> */ - /* Select a given charmap by its encoding tag (as listed in */ - /* `freetype.h'). */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Input> */ - /* encoding :: A handle to the selected encoding. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* This function returns an error if no charmap in the face */ - /* corresponds to the encoding queried here. */ - /* */ - /* Because many fonts contain more than a single cmap for Unicode */ - /* encoding, this function has some special code to select the one */ - /* which covers Unicode best. It is thus preferable to */ - /* @FT_Set_Charmap in this case. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Select_Charmap( FT_Face face, - FT_Encoding encoding ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Charmap */ - /* */ - /* <Description> */ - /* Select a given charmap for character code to glyph index mapping. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Input> */ - /* charmap :: A handle to the selected charmap. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* This function returns an error if the charmap is not part of */ - /* the face (i.e., if it is not listed in the `face->charmaps' */ - /* table). */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_Charmap( FT_Face face, - FT_CharMap charmap ); - - - /************************************************************************* - * - * @function: - * FT_Get_Charmap_Index - * - * @description: - * Retrieve index of a given charmap. - * - * @input: - * charmap :: - * A handle to a charmap. - * - * @return: - * The index into the array of character maps within the face to which - * `charmap' belongs. - * - */ - FT_EXPORT( FT_Int ) - FT_Get_Charmap_Index( FT_CharMap charmap ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Char_Index */ - /* */ - /* <Description> */ - /* Return the glyph index of a given character code. This function */ - /* uses a charmap object to do the mapping. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* charcode :: The character code. */ - /* */ - /* <Return> */ - /* The glyph index. 0 means `undefined character code'. */ - /* */ - /* <Note> */ - /* If you use FreeType to manipulate the contents of font files */ - /* directly, be aware that the glyph index returned by this function */ - /* doesn't always correspond to the internal indices used within */ - /* the file. This is done to ensure that value 0 always corresponds */ - /* to the `missing glyph'. */ - /* */ - FT_EXPORT( FT_UInt ) - FT_Get_Char_Index( FT_Face face, - FT_ULong charcode ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_First_Char */ - /* */ - /* <Description> */ - /* This function is used to return the first character code in the */ - /* current charmap of a given face. It also returns the */ - /* corresponding glyph index. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Output> */ - /* agindex :: Glyph index of first character code. 0 if charmap is */ - /* empty. */ - /* */ - /* <Return> */ - /* The charmap's first character code. */ - /* */ - /* <Note> */ - /* You should use this function with @FT_Get_Next_Char to be able to */ - /* parse all character codes available in a given charmap. The code */ - /* should look like this: */ - /* */ - /* { */ - /* FT_ULong charcode; */ - /* FT_UInt gindex; */ - /* */ - /* */ - /* charcode = FT_Get_First_Char( face, &gindex ); */ - /* while ( gindex != 0 ) */ - /* { */ - /* ... do something with (charcode,gindex) pair ... */ - /* */ - /* charcode = FT_Get_Next_Char( face, charcode, &gindex ); */ - /* } */ - /* } */ - /* */ - /* Note that `*agindex' is set to 0 if the charmap is empty. The */ - /* result itself can be 0 in two cases: if the charmap is empty or */ - /* when the value 0 is the first valid character code. */ - /* */ - FT_EXPORT( FT_ULong ) - FT_Get_First_Char( FT_Face face, - FT_UInt *agindex ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Next_Char */ - /* */ - /* <Description> */ - /* This function is used to return the next character code in the */ - /* current charmap of a given face following the value `char_code', */ - /* as well as the corresponding glyph index. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* char_code :: The starting character code. */ - /* */ - /* <Output> */ - /* agindex :: Glyph index of first character code. 0 if charmap */ - /* is empty. */ - /* */ - /* <Return> */ - /* The charmap's next character code. */ - /* */ - /* <Note> */ - /* You should use this function with @FT_Get_First_Char to walk */ - /* over all character codes available in a given charmap. See the */ - /* note for this function for a simple code example. */ - /* */ - /* Note that `*agindex' is set to 0 when there are no more codes in */ - /* the charmap. */ - /* */ - FT_EXPORT( FT_ULong ) - FT_Get_Next_Char( FT_Face face, - FT_ULong char_code, - FT_UInt *agindex ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Name_Index */ - /* */ - /* <Description> */ - /* Return the glyph index of a given glyph name. This function uses */ - /* driver specific objects to do the translation. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* glyph_name :: The glyph name. */ - /* */ - /* <Return> */ - /* The glyph index. 0 means `undefined character code'. */ - /* */ - FT_EXPORT( FT_UInt ) - FT_Get_Name_Index( FT_Face face, - FT_String* glyph_name ); - - - /************************************************************************* - * - * @macro: - * FT_SUBGLYPH_FLAG_XXX - * - * @description: - * A list of constants used to describe subglyphs. Please refer to the - * TrueType specification for the meaning of the various flags. - * - * @values: - * FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS :: - * FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES :: - * FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID :: - * FT_SUBGLYPH_FLAG_SCALE :: - * FT_SUBGLYPH_FLAG_XY_SCALE :: - * FT_SUBGLYPH_FLAG_2X2 :: - * FT_SUBGLYPH_FLAG_USE_MY_METRICS :: - * - */ -#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1 -#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2 -#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4 -#define FT_SUBGLYPH_FLAG_SCALE 8 -#define FT_SUBGLYPH_FLAG_XY_SCALE 0x40 -#define FT_SUBGLYPH_FLAG_2X2 0x80 -#define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200 - - - /************************************************************************* - * - * @func: - * FT_Get_SubGlyph_Info - * - * @description: - * Retrieve a description of a given subglyph. Only use it if - * `glyph->format' is @FT_GLYPH_FORMAT_COMPOSITE, or an error is - * returned. - * - * @input: - * glyph :: - * The source glyph slot. - * - * sub_index :: - * The index of subglyph. Must be less than `glyph->num_subglyphs'. - * - * @output: - * p_index :: - * The glyph index of the subglyph. - * - * p_flags :: - * The subglyph flags, see @FT_SUBGLYPH_FLAG_XXX. - * - * p_arg1 :: - * The subglyph's first argument (if any). - * - * p_arg2 :: - * The subglyph's second argument (if any). - * - * p_transform :: - * The subglyph transformation (if any). - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * The values of `*p_arg1', `*p_arg2', and `*p_transform' must be - * interpreted depending on the flags returned in `*p_flags'. See the - * TrueType specification for details. - * - */ - FT_EXPORT( FT_Error ) - FT_Get_SubGlyph_Info( FT_GlyphSlot glyph, - FT_UInt sub_index, - FT_Int *p_index, - FT_UInt *p_flags, - FT_Int *p_arg1, - FT_Int *p_arg2, - FT_Matrix *p_transform ); - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* computations */ - /* */ - /* <Title> */ - /* Computations */ - /* */ - /* <Abstract> */ - /* Crunching fixed numbers and vectors. */ - /* */ - /* <Description> */ - /* This section contains various functions used to perform */ - /* computations on 16.16 fixed-float numbers or 2d vectors. */ - /* */ - /* <Order> */ - /* FT_MulDiv */ - /* FT_MulFix */ - /* FT_DivFix */ - /* FT_RoundFix */ - /* FT_CeilFix */ - /* FT_FloorFix */ - /* FT_Vector_Transform */ - /* FT_Matrix_Multiply */ - /* FT_Matrix_Invert */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_MulDiv */ - /* */ - /* <Description> */ - /* A very simple function used to perform the computation `(a*b)/c' */ - /* with maximal accuracy (it uses a 64-bit intermediate integer */ - /* whenever necessary). */ - /* */ - /* This function isn't necessarily as fast as some processor specific */ - /* operations, but is at least completely portable. */ - /* */ - /* <Input> */ - /* a :: The first multiplier. */ - /* b :: The second multiplier. */ - /* c :: The divisor. */ - /* */ - /* <Return> */ - /* The result of `(a*b)/c'. This function never traps when trying to */ - /* divide by zero; it simply returns `MaxInt' or `MinInt' depending */ - /* on the signs of `a' and `b'. */ - /* */ - FT_EXPORT( FT_Long ) - FT_MulDiv( FT_Long a, - FT_Long b, - FT_Long c ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_MulFix */ - /* */ - /* <Description> */ - /* A very simple function used to perform the computation */ - /* `(a*b)/0x10000' with maximal accuracy. Most of the time this is */ - /* used to multiply a given value by a 16.16 fixed float factor. */ - /* */ - /* <Input> */ - /* a :: The first multiplier. */ - /* b :: The second multiplier. Use a 16.16 factor here whenever */ - /* possible (see note below). */ - /* */ - /* <Return> */ - /* The result of `(a*b)/0x10000'. */ - /* */ - /* <Note> */ - /* This function has been optimized for the case where the absolute */ - /* value of `a' is less than 2048, and `b' is a 16.16 scaling factor. */ - /* As this happens mainly when scaling from notional units to */ - /* fractional pixels in FreeType, it resulted in noticeable speed */ - /* improvements between versions 2.x and 1.x. */ - /* */ - /* As a conclusion, always try to place a 16.16 factor as the */ - /* _second_ argument of this function; this can make a great */ - /* difference. */ - /* */ - FT_EXPORT( FT_Long ) - FT_MulFix( FT_Long a, - FT_Long b ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_DivFix */ - /* */ - /* <Description> */ - /* A very simple function used to perform the computation */ - /* `(a*0x10000)/b' with maximal accuracy. Most of the time, this is */ - /* used to divide a given value by a 16.16 fixed float factor. */ - /* */ - /* <Input> */ - /* a :: The first multiplier. */ - /* b :: The second multiplier. Use a 16.16 factor here whenever */ - /* possible (see note below). */ - /* */ - /* <Return> */ - /* The result of `(a*0x10000)/b'. */ - /* */ - /* <Note> */ - /* The optimization for FT_DivFix() is simple: If (a << 16) fits in */ - /* 32 bits, then the division is computed directly. Otherwise, we */ - /* use a specialized version of @FT_MulDiv. */ - /* */ - FT_EXPORT( FT_Long ) - FT_DivFix( FT_Long a, - FT_Long b ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_RoundFix */ - /* */ - /* <Description> */ - /* A very simple function used to round a 16.16 fixed number. */ - /* */ - /* <Input> */ - /* a :: The number to be rounded. */ - /* */ - /* <Return> */ - /* The result of `(a + 0x8000) & -0x10000'. */ - /* */ - FT_EXPORT( FT_Fixed ) - FT_RoundFix( FT_Fixed a ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_CeilFix */ - /* */ - /* <Description> */ - /* A very simple function used to compute the ceiling function of a */ - /* 16.16 fixed number. */ - /* */ - /* <Input> */ - /* a :: The number for which the ceiling function is to be computed. */ - /* */ - /* <Return> */ - /* The result of `(a + 0x10000 - 1) & -0x10000'. */ - /* */ - FT_EXPORT( FT_Fixed ) - FT_CeilFix( FT_Fixed a ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_FloorFix */ - /* */ - /* <Description> */ - /* A very simple function used to compute the floor function of a */ - /* 16.16 fixed number. */ - /* */ - /* <Input> */ - /* a :: The number for which the floor function is to be computed. */ - /* */ - /* <Return> */ - /* The result of `a & -0x10000'. */ - /* */ - FT_EXPORT( FT_Fixed ) - FT_FloorFix( FT_Fixed a ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Vector_Transform */ - /* */ - /* <Description> */ - /* Transform a single vector through a 2x2 matrix. */ - /* */ - /* <InOut> */ - /* vector :: The target vector to transform. */ - /* */ - /* <Input> */ - /* matrix :: A pointer to the source 2x2 matrix. */ - /* */ - /* <Note> */ - /* The result is undefined if either `vector' or `matrix' is invalid. */ - /* */ - FT_EXPORT( void ) - FT_Vector_Transform( FT_Vector* vec, - const FT_Matrix* matrix ); - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* version */ - /* */ - /* <Title> */ - /* FreeType Version */ - /* */ - /* <Abstract> */ - /* Functions and macros related to FreeType versions. */ - /* */ - /* <Description> */ - /* Note that those functions and macros are of limited use because */ - /* even a new release of FreeType with only documentation changes */ - /* increases the version number. */ - /* */ - /*************************************************************************/ - - - /************************************************************************* - * - * @enum: - * FREETYPE_XXX - * - * @description: - * These three macros identify the FreeType source code version. - * Use @FT_Library_Version to access them at runtime. - * - * @values: - * FREETYPE_MAJOR :: The major version number. - * FREETYPE_MINOR :: The minor version number. - * FREETYPE_PATCH :: The patch level. - * - * @note: - * The version number of FreeType if built as a dynamic link library - * with the `libtool' package is _not_ controlled by these three - * macros. - */ -#define FREETYPE_MAJOR 2 -#define FREETYPE_MINOR 3 -#define FREETYPE_PATCH 5 - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Library_Version */ - /* */ - /* <Description> */ - /* Return the version of the FreeType library being used. This is */ - /* useful when dynamically linking to the library, since one cannot */ - /* use the macros @FREETYPE_MAJOR, @FREETYPE_MINOR, and */ - /* @FREETYPE_PATCH. */ - /* */ - /* <Input> */ - /* library :: A source library handle. */ - /* */ - /* <Output> */ - /* amajor :: The major version number. */ - /* */ - /* aminor :: The minor version number. */ - /* */ - /* apatch :: The patch version number. */ - /* */ - /* <Note> */ - /* The reason why this function takes a `library' argument is because */ - /* certain programs implement library initialization in a custom way */ - /* that doesn't use @FT_Init_FreeType. */ - /* */ - /* In such cases, the library version might not be available before */ - /* the library object has been created. */ - /* */ - FT_EXPORT( void ) - FT_Library_Version( FT_Library library, - FT_Int *amajor, - FT_Int *aminor, - FT_Int *apatch ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_CheckTrueTypePatents */ - /* */ - /* <Description> */ - /* Parse all bytecode instructions of a TrueType font file to check */ - /* whether any of the patented opcodes are used. This is only useful */ - /* if you want to be able to use the unpatented hinter with */ - /* fonts that do *not* use these opcodes. */ - /* */ - /* Note that this function parses *all* glyph instructions in the */ - /* font file, which may be slow. */ - /* */ - /* <Input> */ - /* face :: A face handle. */ - /* */ - /* <Return> */ - /* 1 if this is a TrueType font that uses one of the patented */ - /* opcodes, 0 otherwise. */ - /* */ - /* <Since> */ - /* 2.3.5 */ - /* */ - FT_EXPORT( FT_Bool ) - FT_Face_CheckTrueTypePatents( FT_Face face ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_SetUnpatentedHinting */ - /* */ - /* <Description> */ - /* Enable or disable the unpatented hinter for a given face. */ - /* Only enable it if you have determined that the face doesn't */ - /* use any patented opcodes (see @FT_Face_CheckTrueTypePatents). */ - /* */ - /* <Input> */ - /* face :: A face handle. */ - /* */ - /* value :: New boolean setting. */ - /* */ - /* <Return> */ - /* The old setting value. This will always be false if this is not */ - /* a SFNT font, or if the unpatented hinter is not compiled in this */ - /* instance of the library. */ - /* */ - /* <Since> */ - /* 2.3.5 */ - /* */ - FT_EXPORT( FT_Bool ) - FT_Face_SetUnpatentedHinting( FT_Face face, - FT_Bool value ); - - /* */ - - -FT_END_HEADER - -#endif /* __FREETYPE_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftbbox.h b/src/common/freetype/ftbbox.h deleted file mode 100644 index 5f79c3274..000000000 --- a/src/common/freetype/ftbbox.h +++ /dev/null @@ -1,94 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftbbox.h */ -/* */ -/* FreeType exact bbox computation (specification). */ -/* */ -/* Copyright 1996-2001, 2003 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This component has a _single_ role: to compute exact outline bounding */ - /* boxes. */ - /* */ - /* It is separated from the rest of the engine for various technical */ - /* reasons. It may well be integrated in `ftoutln' later. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTBBOX_H__ -#define __FTBBOX_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* outline_processing */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Get_BBox */ - /* */ - /* <Description> */ - /* Computes the exact bounding box of an outline. This is slower */ - /* than computing the control box. However, it uses an advanced */ - /* algorithm which returns _very_ quickly when the two boxes */ - /* coincide. Otherwise, the outline Bézier arcs are walked over to */ - /* extract their extrema. */ - /* */ - /* <Input> */ - /* outline :: A pointer to the source outline. */ - /* */ - /* <Output> */ - /* abbox :: The outline's exact bounding box. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Get_BBox( FT_Outline* outline, - FT_BBox *abbox ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FTBBOX_H__ */ - - -/* END */ - - -/* Local Variables: */ -/* coding: utf-8 */ -/* End: */ diff --git a/src/common/freetype/ftbdf.h b/src/common/freetype/ftbdf.h deleted file mode 100644 index 955569481..000000000 --- a/src/common/freetype/ftbdf.h +++ /dev/null @@ -1,200 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftbdf.h */ -/* */ -/* FreeType API for accessing BDF-specific strings (specification). */ -/* */ -/* Copyright 2002, 2003, 2004, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTBDF_H__ -#define __FTBDF_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* bdf_fonts */ - /* */ - /* <Title> */ - /* BDF Files */ - /* */ - /* <Abstract> */ - /* BDF specific API. */ - /* */ - /* <Description> */ - /* This section contains the declaration of BDF specific functions. */ - /* */ - /*************************************************************************/ - - - /********************************************************************** - * - * @enum: - * FT_PropertyType - * - * @description: - * A list of BDF property types. - * - * @values: - * BDF_PROPERTY_TYPE_NONE :: - * Value 0 is used to indicate a missing property. - * - * BDF_PROPERTY_TYPE_ATOM :: - * Property is a string atom. - * - * BDF_PROPERTY_TYPE_INTEGER :: - * Property is a 32-bit signed integer. - * - * BDF_PROPERTY_TYPE_CARDINAL :: - * Property is a 32-bit unsigned integer. - */ - typedef enum BDF_PropertyType_ - { - BDF_PROPERTY_TYPE_NONE = 0, - BDF_PROPERTY_TYPE_ATOM = 1, - BDF_PROPERTY_TYPE_INTEGER = 2, - BDF_PROPERTY_TYPE_CARDINAL = 3 - - } BDF_PropertyType; - - - /********************************************************************** - * - * @type: - * BDF_Property - * - * @description: - * A handle to a @BDF_PropertyRec structure to model a given - * BDF/PCF property. - */ - typedef struct BDF_PropertyRec_* BDF_Property; - - - /********************************************************************** - * - * @struct: - * BDF_PropertyRec - * - * @description: - * This structure models a given BDF/PCF property. - * - * @fields: - * type :: - * The property type. - * - * u.atom :: - * The atom string, if type is @BDF_PROPERTY_TYPE_ATOM. - * - * u.integer :: - * A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER. - * - * u.cardinal :: - * An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL. - */ - typedef struct BDF_PropertyRec_ - { - BDF_PropertyType type; - union { - const char* atom; - FT_Int32 integer; - FT_UInt32 cardinal; - - } u; - - } BDF_PropertyRec; - - - /********************************************************************** - * - * @function: - * FT_Get_BDF_Charset_ID - * - * @description: - * Retrieves a BDF font character set identity, according to - * the BDF specification. - * - * @input: - * face :: - * A handle to the input face. - * - * @output: - * acharset_encoding :: - * Charset encoding, as a C string, owned by the face. - * - * acharset_registry :: - * Charset registry, as a C string, owned by the face. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * This function only works with BDF faces, returning an error otherwise. - */ - FT_EXPORT( FT_Error ) - FT_Get_BDF_Charset_ID( FT_Face face, - const char* *acharset_encoding, - const char* *acharset_registry ); - - - /********************************************************************** - * - * @function: - * FT_Get_BDF_Property - * - * @description: - * Retrieves a BDF property from a BDF or PCF font file. - * - * @input: - * face :: A handle to the input face. - * - * name :: The property name. - * - * @output: - * aproperty :: The property. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * This function works with BDF _and_ PCF fonts. It returns an error - * otherwise. It also returns an error if the property is not in the - * font. - * - * In case of error, `aproperty->type' is always set to - * @BDF_PROPERTY_TYPE_NONE. - */ - FT_EXPORT( FT_Error ) - FT_Get_BDF_Property( FT_Face face, - const char* prop_name, - BDF_PropertyRec *aproperty ); - - /* */ - -FT_END_HEADER - -#endif /* __FTBDF_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftbitmap.h b/src/common/freetype/ftbitmap.h deleted file mode 100644 index 337d888ea..000000000 --- a/src/common/freetype/ftbitmap.h +++ /dev/null @@ -1,206 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftbitmap.h */ -/* */ -/* FreeType utility functions for converting 1bpp, 2bpp, 4bpp, and 8bpp */ -/* bitmaps into 8bpp format (specification). */ -/* */ -/* Copyright 2004, 2005, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTBITMAP_H__ -#define __FTBITMAP_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* bitmap_handling */ - /* */ - /* <Title> */ - /* Bitmap Handling */ - /* */ - /* <Abstract> */ - /* Handling FT_Bitmap objects. */ - /* */ - /* <Description> */ - /* This section contains functions for converting FT_Bitmap objects. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_New */ - /* */ - /* <Description> */ - /* Initialize a pointer to an @FT_Bitmap structure. */ - /* */ - /* <InOut> */ - /* abitmap :: A pointer to the bitmap structure. */ - /* */ - FT_EXPORT( void ) - FT_Bitmap_New( FT_Bitmap *abitmap ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Copy */ - /* */ - /* <Description> */ - /* Copies an bitmap into another one. */ - /* */ - /* <Input> */ - /* library :: A handle to a library object. */ - /* */ - /* source :: A handle to the source bitmap. */ - /* */ - /* <Output> */ - /* target :: A handle to the target bitmap. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Bitmap_Copy( FT_Library library, - const FT_Bitmap *source, - FT_Bitmap *target); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Embolden */ - /* */ - /* <Description> */ - /* Embolden a bitmap. The new bitmap will be about `xStrength' */ - /* pixels wider and `yStrength' pixels higher. The left and bottom */ - /* borders are kept unchanged. */ - /* */ - /* <Input> */ - /* library :: A handle to a library object. */ - /* */ - /* xStrength :: How strong the glyph is emboldened horizontally. */ - /* Expressed in 26.6 pixel format. */ - /* */ - /* yStrength :: How strong the glyph is emboldened vertically. */ - /* Expressed in 26.6 pixel format. */ - /* */ - /* <InOut> */ - /* bitmap :: A handle to the target bitmap. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The current implementation restricts `xStrength' to be less than */ - /* or equal to 8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO. */ - /* */ - /* If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, */ - /* you should call `FT_GlyphSlot_Own_Bitmap' on the slot first. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Bitmap_Embolden( FT_Library library, - FT_Bitmap* bitmap, - FT_Pos xStrength, - FT_Pos yStrength ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Convert */ - /* */ - /* <Description> */ - /* Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, or 8bpp to a */ - /* bitmap object with depth 8bpp, making the number of used bytes per */ - /* line (a.k.a. the `pitch') a multiple of `alignment'. */ - /* */ - /* <Input> */ - /* library :: A handle to a library object. */ - /* */ - /* source :: The source bitmap. */ - /* */ - /* alignment :: The pitch of the bitmap is a multiple of this */ - /* parameter. Common values are 1, 2, or 4. */ - /* */ - /* <Output> */ - /* target :: The target bitmap. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* It is possible to call @FT_Bitmap_Convert multiple times without */ - /* calling @FT_Bitmap_Done (the memory is simply reallocated). */ - /* */ - /* Use @FT_Bitmap_Done to finally remove the bitmap object. */ - /* */ - /* The `library' argument is taken to have access to FreeType's */ - /* memory handling functions. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Bitmap_Convert( FT_Library library, - const FT_Bitmap *source, - FT_Bitmap *target, - FT_Int alignment ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Done */ - /* */ - /* <Description> */ - /* Destroy a bitmap object created with @FT_Bitmap_New. */ - /* */ - /* <Input> */ - /* library :: A handle to a library object. */ - /* */ - /* bitmap :: The bitmap object to be freed. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The `library' argument is taken to have access to FreeType's */ - /* memory handling functions. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Bitmap_Done( FT_Library library, - FT_Bitmap *bitmap ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FTBITMAP_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftcache.h b/src/common/freetype/ftcache.h deleted file mode 100644 index 721aa16f3..000000000 --- a/src/common/freetype/ftcache.h +++ /dev/null @@ -1,1110 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftcache.h */ -/* */ -/* FreeType Cache subsystem (specification). */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTCACHE_H__ -#define __FTCACHE_H__ - - -#include <ft2build.h> -#include FT_GLYPH_H - - -FT_BEGIN_HEADER - - - /************************************************************************* - * - * <Section> - * cache_subsystem - * - * <Title> - * Cache Sub-System - * - * <Abstract> - * How to cache face, size, and glyph data with FreeType 2. - * - * <Description> - * This section describes the FreeType 2 cache sub-system, which is used - * to limit the number of concurrently opened @FT_Face and @FT_Size - * objects, as well as caching information like character maps and glyph - * images while limiting their maximum memory usage. - * - * Note that all types and functions begin with the `FTC_' prefix. - * - * The cache is highly portable and thus doesn't know anything about the - * fonts installed on your system, or how to access them. This implies - * the following scheme: - * - * First, available or installed font faces are uniquely identified by - * @FTC_FaceID values, provided to the cache by the client. Note that - * the cache only stores and compares these values, and doesn't try to - * interpret them in any way. - * - * Second, the cache calls, only when needed, a client-provided function - * to convert a @FTC_FaceID into a new @FT_Face object. The latter is - * then completely managed by the cache, including its termination - * through @FT_Done_Face. - * - * Clients are free to map face IDs to anything else. The most simple - * usage is to associate them to a (pathname,face_index) pair that is - * used to call @FT_New_Face. However, more complex schemes are also - * possible. - * - * Note that for the cache to work correctly, the face ID values must be - * *persistent*, which means that the contents they point to should not - * change at runtime, or that their value should not become invalid. - * - * If this is unavoidable (e.g., when a font is uninstalled at runtime), - * you should call @FTC_Manager_RemoveFaceID as soon as possible, to let - * the cache get rid of any references to the old @FTC_FaceID it may - * keep internally. Failure to do so will lead to incorrect behaviour - * or even crashes. - * - * To use the cache, start with calling @FTC_Manager_New to create a new - * @FTC_Manager object, which models a single cache instance. You can - * then look up @FT_Face and @FT_Size objects with - * @FTC_Manager_LookupFace and @FTC_Manager_LookupSize, respectively. - * - * If you want to use the charmap caching, call @FTC_CMapCache_New, then - * later use @FTC_CMapCache_Lookup to perform the equivalent of - * @FT_Get_Char_Index, only much faster. - * - * If you want to use the @FT_Glyph caching, call @FTC_ImageCache, then - * later use @FTC_ImageCache_Lookup to retrieve the corresponding - * @FT_Glyph objects from the cache. - * - * If you need lots of small bitmaps, it is much more memory efficient - * to call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup. This - * returns @FTC_SBitRec structures, which are used to store small - * bitmaps directly. (A small bitmap is one whose metrics and - * dimensions all fit into 8-bit integers). - * - * We hope to also provide a kerning cache in the near future. - * - * - * <Order> - * FTC_Manager - * FTC_FaceID - * FTC_Face_Requester - * - * FTC_Manager_New - * FTC_Manager_Reset - * FTC_Manager_Done - * FTC_Manager_LookupFace - * FTC_Manager_LookupSize - * FTC_Manager_RemoveFaceID - * - * FTC_Node - * FTC_Node_Unref - * - * FTC_ImageCache - * FTC_ImageCache_New - * FTC_ImageCache_Lookup - * - * FTC_SBit - * FTC_SBitCache - * FTC_SBitCache_New - * FTC_SBitCache_Lookup - * - * FTC_CMapCache - * FTC_CMapCache_New - * FTC_CMapCache_Lookup - * - *************************************************************************/ - - - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** BASIC TYPE DEFINITIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - - - /************************************************************************* - * - * @type: FTC_FaceID - * - * @description: - * An opaque pointer type that is used to identity face objects. The - * contents of such objects is application-dependent. - * - * These pointers are typically used to point to a user-defined - * structure containing a font file path, and face index. - * - * @note: - * Never use NULL as a valid @FTC_FaceID. - * - * Face IDs are passed by the client to the cache manager, which calls, - * when needed, the @FTC_Face_Requester to translate them into new - * @FT_Face objects. - * - * If the content of a given face ID changes at runtime, or if the value - * becomes invalid (e.g., when uninstalling a font), you should - * immediately call @FTC_Manager_RemoveFaceID before any other cache - * function. - * - * Failure to do so will result in incorrect behaviour or even - * memory leaks and crashes. - */ - typedef struct FTC_FaceIDRec_* FTC_FaceID; - - - /************************************************************************ - * - * @functype: - * FTC_Face_Requester - * - * @description: - * A callback function provided by client applications. It is used by - * the cache manager to translate a given @FTC_FaceID into a new valid - * @FT_Face object, on demand. - * - * <Input> - * face_id :: - * The face ID to resolve. - * - * library :: - * A handle to a FreeType library object. - * - * req_data :: - * Application-provided request data (see note below). - * - * <Output> - * aface :: - * A new @FT_Face handle. - * - * <Return> - * FreeType error code. 0 means success. - * - * <Note> - * The third parameter `req_data' is the same as the one passed by the - * client when @FTC_Manager_New is called. - * - * The face requester should not perform funny things on the returned - * face object, like creating a new @FT_Size for it, or setting a - * transformation through @FT_Set_Transform! - */ - typedef FT_Error - (*FTC_Face_Requester)( FTC_FaceID face_id, - FT_Library library, - FT_Pointer request_data, - FT_Face* aface ); - - /* */ - -#define FT_POINTER_TO_ULONG( p ) ( (FT_ULong)(FT_Pointer)(p) ) - -#define FTC_FACE_ID_HASH( i ) \ - ((FT_UInt32)(( FT_POINTER_TO_ULONG( i ) >> 3 ) ^ \ - ( FT_POINTER_TO_ULONG( i ) << 7 ) ) ) - - - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** CACHE MANAGER OBJECT *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_Manager */ - /* */ - /* <Description> */ - /* This object corresponds to one instance of the cache-subsystem. */ - /* It is used to cache one or more @FT_Face objects, along with */ - /* corresponding @FT_Size objects. */ - /* */ - /* The manager intentionally limits the total number of opened */ - /* @FT_Face and @FT_Size objects to control memory usage. See the */ - /* `max_faces' and `max_sizes' parameters of @FTC_Manager_New. */ - /* */ - /* The manager is also used to cache `nodes' of various types while */ - /* limiting their total memory usage. */ - /* */ - /* All limitations are enforced by keeping lists of managed objects */ - /* in most-recently-used order, and flushing old nodes to make room */ - /* for new ones. */ - /* */ - typedef struct FTC_ManagerRec_* FTC_Manager; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_Node */ - /* */ - /* <Description> */ - /* An opaque handle to a cache node object. Each cache node is */ - /* reference-counted. A node with a count of 0 might be flushed */ - /* out of a full cache whenever a lookup request is performed. */ - /* */ - /* If you lookup nodes, you have the ability to `acquire' them, i.e., */ - /* to increment their reference count. This will prevent the node */ - /* from being flushed out of the cache until you explicitly `release' */ - /* it (see @FTC_Node_Unref). */ - /* */ - /* See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup. */ - /* */ - typedef struct FTC_NodeRec_* FTC_Node; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_New */ - /* */ - /* <Description> */ - /* Creates a new cache manager. */ - /* */ - /* <Input> */ - /* library :: The parent FreeType library handle to use. */ - /* */ - /* max_faces :: Maximum number of opened @FT_Face objects managed by */ - /* this cache instance. Use 0 for defaults. */ - /* */ - /* max_sizes :: Maximum number of opened @FT_Size objects managed by */ - /* this cache instance. Use 0 for defaults. */ - /* */ - /* max_bytes :: Maximum number of bytes to use for cached data nodes. */ - /* Use 0 for defaults. Note that this value does not */ - /* account for managed @FT_Face and @FT_Size objects. */ - /* */ - /* requester :: An application-provided callback used to translate */ - /* face IDs into real @FT_Face objects. */ - /* */ - /* req_data :: A generic pointer that is passed to the requester */ - /* each time it is called (see @FTC_Face_Requester). */ - /* */ - /* <Output> */ - /* amanager :: A handle to a new manager object. 0 in case of */ - /* failure. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FTC_Manager_New( FT_Library library, - FT_UInt max_faces, - FT_UInt max_sizes, - FT_ULong max_bytes, - FTC_Face_Requester requester, - FT_Pointer req_data, - FTC_Manager *amanager ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_Reset */ - /* */ - /* <Description> */ - /* Empties a given cache manager. This simply gets rid of all the */ - /* currently cached @FT_Face and @FT_Size objects within the manager. */ - /* */ - /* <InOut> */ - /* manager :: A handle to the manager. */ - /* */ - FT_EXPORT( void ) - FTC_Manager_Reset( FTC_Manager manager ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_Done */ - /* */ - /* <Description> */ - /* Destroys a given manager after emptying it. */ - /* */ - /* <Input> */ - /* manager :: A handle to the target cache manager object. */ - /* */ - FT_EXPORT( void ) - FTC_Manager_Done( FTC_Manager manager ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_LookupFace */ - /* */ - /* <Description> */ - /* Retrieves the @FT_Face object that corresponds to a given face ID */ - /* through a cache manager. */ - /* */ - /* <Input> */ - /* manager :: A handle to the cache manager. */ - /* */ - /* face_id :: The ID of the face object. */ - /* */ - /* <Output> */ - /* aface :: A handle to the face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The returned @FT_Face object is always owned by the manager. You */ - /* should never try to discard it yourself. */ - /* */ - /* The @FT_Face object doesn't necessarily have a current size object */ - /* (i.e., face->size can be 0). If you need a specific `font size', */ - /* use @FTC_Manager_LookupSize instead. */ - /* */ - /* Never change the face's transformation matrix (i.e., never call */ - /* the @FT_Set_Transform function) on a returned face! If you need */ - /* to transform glyphs, do it yourself after glyph loading. */ - /* */ - /* When you perform a lookup, out-of-memory errors are detected */ - /* _within_ the lookup and force incremental flushes of the cache */ - /* until enough memory is released for the lookup to succeed. */ - /* */ - /* If a lookup fails with `FT_Err_Out_Of_Memory' the cache has */ - /* already been completely flushed, and still no memory was available */ - /* for the operation. */ - /* */ - FT_EXPORT( FT_Error ) - FTC_Manager_LookupFace( FTC_Manager manager, - FTC_FaceID face_id, - FT_Face *aface ); - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FTC_ScalerRec */ - /* */ - /* <Description> */ - /* A structure used to describe a given character size in either */ - /* pixels or points to the cache manager. See */ - /* @FTC_Manager_LookupSize. */ - /* */ - /* <Fields> */ - /* face_id :: The source face ID. */ - /* */ - /* width :: The character width. */ - /* */ - /* height :: The character height. */ - /* */ - /* pixel :: A Boolean. If 1, the `width' and `height' fields are */ - /* interpreted as integer pixel character sizes. */ - /* Otherwise, they are expressed as 1/64th of points. */ - /* */ - /* x_res :: Only used when `pixel' is value 0 to indicate the */ - /* horizontal resolution in dpi. */ - /* */ - /* y_res :: Only used when `pixel' is value 0 to indicate the */ - /* vertical resolution in dpi. */ - /* */ - /* <Note> */ - /* This type is mainly used to retrieve @FT_Size objects through the */ - /* cache manager. */ - /* */ - typedef struct FTC_ScalerRec_ - { - FTC_FaceID face_id; - FT_UInt width; - FT_UInt height; - FT_Int pixel; - FT_UInt x_res; - FT_UInt y_res; - - } FTC_ScalerRec, *FTC_Scaler; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_LookupSize */ - /* */ - /* <Description> */ - /* Retrieve the @FT_Size object that corresponds to a given */ - /* @FTC_ScalerRec pointer through a cache manager. */ - /* */ - /* <Input> */ - /* manager :: A handle to the cache manager. */ - /* */ - /* scaler :: A scaler handle. */ - /* */ - /* <Output> */ - /* asize :: A handle to the size object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The returned @FT_Size object is always owned by the manager. You */ - /* should never try to discard it by yourself. */ - /* */ - /* You can access the parent @FT_Face object simply as `size->face' */ - /* if you need it. Note that this object is also owned by the */ - /* manager. */ - /* */ - /* <Note> */ - /* When you perform a lookup, out-of-memory errors are detected */ - /* _within_ the lookup and force incremental flushes of the cache */ - /* until enough memory is released for the lookup to succeed. */ - /* */ - /* If a lookup fails with `FT_Err_Out_Of_Memory' the cache has */ - /* already been completely flushed, and still no memory is available */ - /* for the operation. */ - /* */ - FT_EXPORT( FT_Error ) - FTC_Manager_LookupSize( FTC_Manager manager, - FTC_Scaler scaler, - FT_Size *asize ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Node_Unref */ - /* */ - /* <Description> */ - /* Decrement a cache node's internal reference count. When the count */ - /* reaches 0, it is not destroyed but becomes eligible for subsequent */ - /* cache flushes. */ - /* */ - /* <Input> */ - /* node :: The cache node handle. */ - /* */ - /* manager :: The cache manager handle. */ - /* */ - FT_EXPORT( void ) - FTC_Node_Unref( FTC_Node node, - FTC_Manager manager ); - - - /************************************************************************* - * - * @function: - * FTC_Manager_RemoveFaceID - * - * @description: - * A special function used to indicate to the cache manager that - * a given @FTC_FaceID is no longer valid, either because its - * content changed, or because it was deallocated or uninstalled. - * - * @input: - * manager :: - * The cache manager handle. - * - * face_id :: - * The @FTC_FaceID to be removed. - * - * @note: - * This function flushes all nodes from the cache corresponding to this - * `face_id', with the exception of nodes with a non-null reference - * count. - * - * Such nodes are however modified internally so as to never appear - * in later lookups with the same `face_id' value, and to be immediately - * destroyed when released by all their users. - * - */ - FT_EXPORT( void ) - FTC_Manager_RemoveFaceID( FTC_Manager manager, - FTC_FaceID face_id ); - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* cache_subsystem */ - /* */ - /*************************************************************************/ - - /************************************************************************* - * - * @type: - * FTC_CMapCache - * - * @description: - * An opaque handle used to model a charmap cache. This cache is to - * hold character codes -> glyph indices mappings. - * - */ - typedef struct FTC_CMapCacheRec_* FTC_CMapCache; - - - /************************************************************************* - * - * @function: - * FTC_CMapCache_New - * - * @description: - * Create a new charmap cache. - * - * @input: - * manager :: - * A handle to the cache manager. - * - * @output: - * acache :: - * A new cache handle. NULL in case of error. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * Like all other caches, this one will be destroyed with the cache - * manager. - * - */ - FT_EXPORT( FT_Error ) - FTC_CMapCache_New( FTC_Manager manager, - FTC_CMapCache *acache ); - - - /************************************************************************ - * - * @function: - * FTC_CMapCache_Lookup - * - * @description: - * Translate a character code into a glyph index, using the charmap - * cache. - * - * @input: - * cache :: - * A charmap cache handle. - * - * face_id :: - * The source face ID. - * - * cmap_index :: - * The index of the charmap in the source face. - * - * char_code :: - * The character code (in the corresponding charmap). - * - * @return: - * Glyph index. 0 means `no glyph'. - * - */ - FT_EXPORT( FT_UInt ) - FTC_CMapCache_Lookup( FTC_CMapCache cache, - FTC_FaceID face_id, - FT_Int cmap_index, - FT_UInt32 char_code ); - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* cache_subsystem */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** IMAGE CACHE OBJECT *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - - - /************************************************************************* - * - * @struct: - * FTC_ImageTypeRec - * - * @description: - * A structure used to model the type of images in a glyph cache. - * - * @fields: - * face_id :: - * The face ID. - * - * width :: - * The width in pixels. - * - * height :: - * The height in pixels. - * - * flags :: - * The load flags, as in @FT_Load_Glyph. - * - */ - typedef struct FTC_ImageTypeRec_ - { - FTC_FaceID face_id; - FT_Int width; - FT_Int height; - FT_Int32 flags; - - } FTC_ImageTypeRec; - - - /************************************************************************* - * - * @type: - * FTC_ImageType - * - * @description: - * A handle to an @FTC_ImageTypeRec structure. - * - */ - typedef struct FTC_ImageTypeRec_* FTC_ImageType; - - - /* */ - - -#define FTC_IMAGE_TYPE_COMPARE( d1, d2 ) \ - ( (d1)->face_id == (d2)->face_id && \ - (d1)->width == (d2)->width && \ - (d1)->flags == (d2)->flags ) - -#define FTC_IMAGE_TYPE_HASH( d ) \ - (FT_UFast)( FTC_FACE_ID_HASH( (d)->face_id ) ^ \ - ( (d)->width << 8 ) ^ (d)->height ^ \ - ( (d)->flags << 4 ) ) - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_ImageCache */ - /* */ - /* <Description> */ - /* A handle to an glyph image cache object. They are designed to */ - /* hold many distinct glyph images while not exceeding a certain */ - /* memory threshold. */ - /* */ - typedef struct FTC_ImageCacheRec_* FTC_ImageCache; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_ImageCache_New */ - /* */ - /* <Description> */ - /* Creates a new glyph image cache. */ - /* */ - /* <Input> */ - /* manager :: The parent manager for the image cache. */ - /* */ - /* <Output> */ - /* acache :: A handle to the new glyph image cache object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FTC_ImageCache_New( FTC_Manager manager, - FTC_ImageCache *acache ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_ImageCache_Lookup */ - /* */ - /* <Description> */ - /* Retrieves a given glyph image from a glyph image cache. */ - /* */ - /* <Input> */ - /* cache :: A handle to the source glyph image cache. */ - /* */ - /* type :: A pointer to a glyph image type descriptor. */ - /* */ - /* gindex :: The glyph index to retrieve. */ - /* */ - /* <Output> */ - /* aglyph :: The corresponding @FT_Glyph object. 0 in case of */ - /* failure. */ - /* */ - /* anode :: Used to return the address of of the corresponding cache */ - /* node after incrementing its reference count (see note */ - /* below). */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The returned glyph is owned and managed by the glyph image cache. */ - /* Never try to transform or discard it manually! You can however */ - /* create a copy with @FT_Glyph_Copy and modify the new one. */ - /* */ - /* If `anode' is _not_ NULL, it receives the address of the cache */ - /* node containing the glyph image, after increasing its reference */ - /* count. This ensures that the node (as well as the @FT_Glyph) will */ - /* always be kept in the cache until you call @FTC_Node_Unref to */ - /* `release' it. */ - /* */ - /* If `anode' is NULL, the cache node is left unchanged, which means */ - /* that the @FT_Glyph could be flushed out of the cache on the next */ - /* call to one of the caching sub-system APIs. Don't assume that it */ - /* is persistent! */ - /* */ - FT_EXPORT( FT_Error ) - FTC_ImageCache_Lookup( FTC_ImageCache cache, - FTC_ImageType type, - FT_UInt gindex, - FT_Glyph *aglyph, - FTC_Node *anode ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_ImageCache_LookupScaler */ - /* */ - /* <Description> */ - /* A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec */ - /* to specify the face ID and its size. */ - /* */ - /* <Input> */ - /* cache :: A handle to the source glyph image cache. */ - /* */ - /* scaler :: A pointer to a scaler descriptor. */ - /* */ - /* load_flags :: The corresponding load flags. */ - /* */ - /* gindex :: The glyph index to retrieve. */ - /* */ - /* <Output> */ - /* aglyph :: The corresponding @FT_Glyph object. 0 in case of */ - /* failure. */ - /* */ - /* anode :: Used to return the address of of the corresponding */ - /* cache node after incrementing its reference count */ - /* (see note below). */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The returned glyph is owned and managed by the glyph image cache. */ - /* Never try to transform or discard it manually! You can however */ - /* create a copy with @FT_Glyph_Copy and modify the new one. */ - /* */ - /* If `anode' is _not_ NULL, it receives the address of the cache */ - /* node containing the glyph image, after increasing its reference */ - /* count. This ensures that the node (as well as the @FT_Glyph) will */ - /* always be kept in the cache until you call @FTC_Node_Unref to */ - /* `release' it. */ - /* */ - /* If `anode' is NULL, the cache node is left unchanged, which means */ - /* that the @FT_Glyph could be flushed out of the cache on the next */ - /* call to one of the caching sub-system APIs. Don't assume that it */ - /* is persistent! */ - /* */ - FT_EXPORT( FT_Error ) - FTC_ImageCache_LookupScaler( FTC_ImageCache cache, - FTC_Scaler scaler, - FT_ULong load_flags, - FT_UInt gindex, - FT_Glyph *aglyph, - FTC_Node *anode ); - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_SBit */ - /* */ - /* <Description> */ - /* A handle to a small bitmap descriptor. See the @FTC_SBitRec */ - /* structure for details. */ - /* */ - typedef struct FTC_SBitRec_* FTC_SBit; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FTC_SBitRec */ - /* */ - /* <Description> */ - /* A very compact structure used to describe a small glyph bitmap. */ - /* */ - /* <Fields> */ - /* width :: The bitmap width in pixels. */ - /* */ - /* height :: The bitmap height in pixels. */ - /* */ - /* left :: The horizontal distance from the pen position to the */ - /* left bitmap border (a.k.a. `left side bearing', or */ - /* `lsb'). */ - /* */ - /* top :: The vertical distance from the pen position (on the */ - /* baseline) to the upper bitmap border (a.k.a. `top */ - /* side bearing'). The distance is positive for upwards */ - /* Y coordinates. */ - /* */ - /* format :: The format of the glyph bitmap (monochrome or gray). */ - /* */ - /* max_grays :: Maximum gray level value (in the range 1 to 255). */ - /* */ - /* pitch :: The number of bytes per bitmap line. May be positive */ - /* or negative. */ - /* */ - /* xadvance :: The horizontal advance width in pixels. */ - /* */ - /* yadvance :: The vertical advance height in pixels. */ - /* */ - /* buffer :: A pointer to the bitmap pixels. */ - /* */ - typedef struct FTC_SBitRec_ - { - FT_Byte width; - FT_Byte height; - FT_Char left; - FT_Char top; - - FT_Byte format; - FT_Byte max_grays; - FT_Short pitch; - FT_Char xadvance; - FT_Char yadvance; - - FT_Byte* buffer; - - } FTC_SBitRec; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_SBitCache */ - /* */ - /* <Description> */ - /* A handle to a small bitmap cache. These are special cache objects */ - /* used to store small glyph bitmaps (and anti-aliased pixmaps) in a */ - /* much more efficient way than the traditional glyph image cache */ - /* implemented by @FTC_ImageCache. */ - /* */ - typedef struct FTC_SBitCacheRec_* FTC_SBitCache; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_SBitCache_New */ - /* */ - /* <Description> */ - /* Creates a new cache to store small glyph bitmaps. */ - /* */ - /* <Input> */ - /* manager :: A handle to the source cache manager. */ - /* */ - /* <Output> */ - /* acache :: A handle to the new sbit cache. NULL in case of error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FTC_SBitCache_New( FTC_Manager manager, - FTC_SBitCache *acache ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_SBitCache_Lookup */ - /* */ - /* <Description> */ - /* Looks up a given small glyph bitmap in a given sbit cache and */ - /* `lock' it to prevent its flushing from the cache until needed. */ - /* */ - /* <Input> */ - /* cache :: A handle to the source sbit cache. */ - /* */ - /* type :: A pointer to the glyph image type descriptor. */ - /* */ - /* gindex :: The glyph index. */ - /* */ - /* <Output> */ - /* sbit :: A handle to a small bitmap descriptor. */ - /* */ - /* anode :: Used to return the address of of the corresponding cache */ - /* node after incrementing its reference count (see note */ - /* below). */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The small bitmap descriptor and its bit buffer are owned by the */ - /* cache and should never be freed by the application. They might */ - /* as well disappear from memory on the next cache lookup, so don't */ - /* treat them as persistent data. */ - /* */ - /* The descriptor's `buffer' field is set to 0 to indicate a missing */ - /* glyph bitmap. */ - /* */ - /* If `anode' is _not_ NULL, it receives the address of the cache */ - /* node containing the bitmap, after increasing its reference count. */ - /* This ensures that the node (as well as the image) will always be */ - /* kept in the cache until you call @FTC_Node_Unref to `release' it. */ - /* */ - /* If `anode' is NULL, the cache node is left unchanged, which means */ - /* that the bitmap could be flushed out of the cache on the next */ - /* call to one of the caching sub-system APIs. Don't assume that it */ - /* is persistent! */ - /* */ - FT_EXPORT( FT_Error ) - FTC_SBitCache_Lookup( FTC_SBitCache cache, - FTC_ImageType type, - FT_UInt gindex, - FTC_SBit *sbit, - FTC_Node *anode ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_SBitCache_LookupScaler */ - /* */ - /* <Description> */ - /* A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec */ - /* to specify the face ID and its size. */ - /* */ - /* <Input> */ - /* cache :: A handle to the source sbit cache. */ - /* */ - /* scaler :: A pointer to the scaler descriptor. */ - /* */ - /* load_flags :: The corresponding load flags. */ - /* */ - /* gindex :: The glyph index. */ - /* */ - /* <Output> */ - /* sbit :: A handle to a small bitmap descriptor. */ - /* */ - /* anode :: Used to return the address of of the corresponding */ - /* cache node after incrementing its reference count */ - /* (see note below). */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The small bitmap descriptor and its bit buffer are owned by the */ - /* cache and should never be freed by the application. They might */ - /* as well disappear from memory on the next cache lookup, so don't */ - /* treat them as persistent data. */ - /* */ - /* The descriptor's `buffer' field is set to 0 to indicate a missing */ - /* glyph bitmap. */ - /* */ - /* If `anode' is _not_ NULL, it receives the address of the cache */ - /* node containing the bitmap, after increasing its reference count. */ - /* This ensures that the node (as well as the image) will always be */ - /* kept in the cache until you call @FTC_Node_Unref to `release' it. */ - /* */ - /* If `anode' is NULL, the cache node is left unchanged, which means */ - /* that the bitmap could be flushed out of the cache on the next */ - /* call to one of the caching sub-system APIs. Don't assume that it */ - /* is persistent! */ - /* */ - FT_EXPORT( FT_Error ) - FTC_SBitCache_LookupScaler( FTC_SBitCache cache, - FTC_Scaler scaler, - FT_ULong load_flags, - FT_UInt gindex, - FTC_SBit *sbit, - FTC_Node *anode ); - - - /* */ - -#ifdef FT_CONFIG_OPTION_OLD_INTERNALS - - /*@***********************************************************************/ - /* */ - /* <Struct> */ - /* FTC_FontRec */ - /* */ - /* <Description> */ - /* A simple structure used to describe a given `font' to the cache */ - /* manager. Note that a `font' is the combination of a given face */ - /* with a given character size. */ - /* */ - /* <Fields> */ - /* face_id :: The ID of the face to use. */ - /* */ - /* pix_width :: The character width in integer pixels. */ - /* */ - /* pix_height :: The character height in integer pixels. */ - /* */ - typedef struct FTC_FontRec_ - { - FTC_FaceID face_id; - FT_UShort pix_width; - FT_UShort pix_height; - - } FTC_FontRec; - - - /* */ - - -#define FTC_FONT_COMPARE( f1, f2 ) \ - ( (f1)->face_id == (f2)->face_id && \ - (f1)->pix_width == (f2)->pix_width && \ - (f1)->pix_height == (f2)->pix_height ) - -#define FTC_FONT_HASH( f ) \ - (FT_UInt32)( FTC_FACE_ID_HASH((f)->face_id) ^ \ - ((f)->pix_width << 8) ^ \ - ((f)->pix_height) ) - - typedef FTC_FontRec* FTC_Font; - - - FT_EXPORT( FT_Error ) - FTC_Manager_Lookup_Face( FTC_Manager manager, - FTC_FaceID face_id, - FT_Face *aface ); - - FT_EXPORT( FT_Error ) - FTC_Manager_Lookup_Size( FTC_Manager manager, - FTC_Font font, - FT_Face *aface, - FT_Size *asize ); - -#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */ - - - /* */ - -FT_END_HEADER - -#endif /* __FTCACHE_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftchapters.h b/src/common/freetype/ftchapters.h deleted file mode 100644 index bd812c8e6..000000000 --- a/src/common/freetype/ftchapters.h +++ /dev/null @@ -1,100 +0,0 @@ -/***************************************************************************/ -/* */ -/* This file defines the structure of the FreeType reference. */ -/* It is used by the python script which generates the HTML files. */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* general_remarks */ -/* */ -/* <Title> */ -/* General Remarks */ -/* */ -/* <Sections> */ -/* user_allocation */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* core_api */ -/* */ -/* <Title> */ -/* Core API */ -/* */ -/* <Sections> */ -/* version */ -/* basic_types */ -/* base_interface */ -/* glyph_management */ -/* mac_specific */ -/* sizes_management */ -/* header_file_macros */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* format_specific */ -/* */ -/* <Title> */ -/* Format-Specific API */ -/* */ -/* <Sections> */ -/* multiple_masters */ -/* truetype_tables */ -/* type1_tables */ -/* sfnt_names */ -/* bdf_fonts */ -/* pfr_fonts */ -/* winfnt_fonts */ -/* font_formats */ -/* gasp_table */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* cache_subsystem */ -/* */ -/* <Title> */ -/* Cache Sub-System */ -/* */ -/* <Sections> */ -/* cache_subsystem */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* support_api */ -/* */ -/* <Title> */ -/* Support API */ -/* */ -/* <Sections> */ -/* computations */ -/* list_processing */ -/* outline_processing */ -/* bitmap_handling */ -/* raster */ -/* glyph_stroker */ -/* system_interface */ -/* module_management */ -/* gzip */ -/* lzw */ -/* lcd_filtering */ -/* */ -/***************************************************************************/ diff --git a/src/common/freetype/fterrdef.h b/src/common/freetype/fterrdef.h deleted file mode 100644 index d7ad256bd..000000000 --- a/src/common/freetype/fterrdef.h +++ /dev/null @@ -1,239 +0,0 @@ -/***************************************************************************/ -/* */ -/* fterrdef.h */ -/* */ -/* FreeType error codes (specification). */ -/* */ -/* Copyright 2002, 2004, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*******************************************************************/ - /*******************************************************************/ - /***** *****/ - /***** LIST OF ERROR CODES/MESSAGES *****/ - /***** *****/ - /*******************************************************************/ - /*******************************************************************/ - - - /* You need to define both FT_ERRORDEF_ and FT_NOERRORDEF_ before */ - /* including this file. */ - - - /* generic errors */ - - FT_NOERRORDEF_( Ok, 0x00, \ - "no error" ) - - FT_ERRORDEF_( Cannot_Open_Resource, 0x01, \ - "cannot open resource" ) - FT_ERRORDEF_( Unknown_File_Format, 0x02, \ - "unknown file format" ) - FT_ERRORDEF_( Invalid_File_Format, 0x03, \ - "broken file" ) - FT_ERRORDEF_( Invalid_Version, 0x04, \ - "invalid FreeType version" ) - FT_ERRORDEF_( Lower_Module_Version, 0x05, \ - "module version is too low" ) - FT_ERRORDEF_( Invalid_Argument, 0x06, \ - "invalid argument" ) - FT_ERRORDEF_( Unimplemented_Feature, 0x07, \ - "unimplemented feature" ) - FT_ERRORDEF_( Invalid_Table, 0x08, \ - "broken table" ) - FT_ERRORDEF_( Invalid_Offset, 0x09, \ - "broken offset within table" ) - FT_ERRORDEF_( Array_Too_Large, 0x0A, \ - "array allocation size too large" ) - - /* glyph/character errors */ - - FT_ERRORDEF_( Invalid_Glyph_Index, 0x10, \ - "invalid glyph index" ) - FT_ERRORDEF_( Invalid_Character_Code, 0x11, \ - "invalid character code" ) - FT_ERRORDEF_( Invalid_Glyph_Format, 0x12, \ - "unsupported glyph image format" ) - FT_ERRORDEF_( Cannot_Render_Glyph, 0x13, \ - "cannot render this glyph format" ) - FT_ERRORDEF_( Invalid_Outline, 0x14, \ - "invalid outline" ) - FT_ERRORDEF_( Invalid_Composite, 0x15, \ - "invalid composite glyph" ) - FT_ERRORDEF_( Too_Many_Hints, 0x16, \ - "too many hints" ) - FT_ERRORDEF_( Invalid_Pixel_Size, 0x17, \ - "invalid pixel size" ) - - /* handle errors */ - - FT_ERRORDEF_( Invalid_Handle, 0x20, \ - "invalid object handle" ) - FT_ERRORDEF_( Invalid_Library_Handle, 0x21, \ - "invalid library handle" ) - FT_ERRORDEF_( Invalid_Driver_Handle, 0x22, \ - "invalid module handle" ) - FT_ERRORDEF_( Invalid_Face_Handle, 0x23, \ - "invalid face handle" ) - FT_ERRORDEF_( Invalid_Size_Handle, 0x24, \ - "invalid size handle" ) - FT_ERRORDEF_( Invalid_Slot_Handle, 0x25, \ - "invalid glyph slot handle" ) - FT_ERRORDEF_( Invalid_CharMap_Handle, 0x26, \ - "invalid charmap handle" ) - FT_ERRORDEF_( Invalid_Cache_Handle, 0x27, \ - "invalid cache manager handle" ) - FT_ERRORDEF_( Invalid_Stream_Handle, 0x28, \ - "invalid stream handle" ) - - /* driver errors */ - - FT_ERRORDEF_( Too_Many_Drivers, 0x30, \ - "too many modules" ) - FT_ERRORDEF_( Too_Many_Extensions, 0x31, \ - "too many extensions" ) - - /* memory errors */ - - FT_ERRORDEF_( Out_Of_Memory, 0x40, \ - "out of memory" ) - FT_ERRORDEF_( Unlisted_Object, 0x41, \ - "unlisted object" ) - - /* stream errors */ - - FT_ERRORDEF_( Cannot_Open_Stream, 0x51, \ - "cannot open stream" ) - FT_ERRORDEF_( Invalid_Stream_Seek, 0x52, \ - "invalid stream seek" ) - FT_ERRORDEF_( Invalid_Stream_Skip, 0x53, \ - "invalid stream skip" ) - FT_ERRORDEF_( Invalid_Stream_Read, 0x54, \ - "invalid stream read" ) - FT_ERRORDEF_( Invalid_Stream_Operation, 0x55, \ - "invalid stream operation" ) - FT_ERRORDEF_( Invalid_Frame_Operation, 0x56, \ - "invalid frame operation" ) - FT_ERRORDEF_( Nested_Frame_Access, 0x57, \ - "nested frame access" ) - FT_ERRORDEF_( Invalid_Frame_Read, 0x58, \ - "invalid frame read" ) - - /* raster errors */ - - FT_ERRORDEF_( Raster_Uninitialized, 0x60, \ - "raster uninitialized" ) - FT_ERRORDEF_( Raster_Corrupted, 0x61, \ - "raster corrupted" ) - FT_ERRORDEF_( Raster_Overflow, 0x62, \ - "raster overflow" ) - FT_ERRORDEF_( Raster_Negative_Height, 0x63, \ - "negative height while rastering" ) - - /* cache errors */ - - FT_ERRORDEF_( Too_Many_Caches, 0x70, \ - "too many registered caches" ) - - /* TrueType and SFNT errors */ - - FT_ERRORDEF_( Invalid_Opcode, 0x80, \ - "invalid opcode" ) - FT_ERRORDEF_( Too_Few_Arguments, 0x81, \ - "too few arguments" ) - FT_ERRORDEF_( Stack_Overflow, 0x82, \ - "stack overflow" ) - FT_ERRORDEF_( Code_Overflow, 0x83, \ - "code overflow" ) - FT_ERRORDEF_( Bad_Argument, 0x84, \ - "bad argument" ) - FT_ERRORDEF_( Divide_By_Zero, 0x85, \ - "division by zero" ) - FT_ERRORDEF_( Invalid_Reference, 0x86, \ - "invalid reference" ) - FT_ERRORDEF_( Debug_OpCode, 0x87, \ - "found debug opcode" ) - FT_ERRORDEF_( ENDF_In_Exec_Stream, 0x88, \ - "found ENDF opcode in execution stream" ) - FT_ERRORDEF_( Nested_DEFS, 0x89, \ - "nested DEFS" ) - FT_ERRORDEF_( Invalid_CodeRange, 0x8A, \ - "invalid code range" ) - FT_ERRORDEF_( Execution_Too_Long, 0x8B, \ - "execution context too long" ) - FT_ERRORDEF_( Too_Many_Function_Defs, 0x8C, \ - "too many function definitions" ) - FT_ERRORDEF_( Too_Many_Instruction_Defs, 0x8D, \ - "too many instruction definitions" ) - FT_ERRORDEF_( Table_Missing, 0x8E, \ - "SFNT font table missing" ) - FT_ERRORDEF_( Horiz_Header_Missing, 0x8F, \ - "horizontal header (hhea) table missing" ) - FT_ERRORDEF_( Locations_Missing, 0x90, \ - "locations (loca) table missing" ) - FT_ERRORDEF_( Name_Table_Missing, 0x91, \ - "name table missing" ) - FT_ERRORDEF_( CMap_Table_Missing, 0x92, \ - "character map (cmap) table missing" ) - FT_ERRORDEF_( Hmtx_Table_Missing, 0x93, \ - "horizontal metrics (hmtx) table missing" ) - FT_ERRORDEF_( Post_Table_Missing, 0x94, \ - "PostScript (post) table missing" ) - FT_ERRORDEF_( Invalid_Horiz_Metrics, 0x95, \ - "invalid horizontal metrics" ) - FT_ERRORDEF_( Invalid_CharMap_Format, 0x96, \ - "invalid character map (cmap) format" ) - FT_ERRORDEF_( Invalid_PPem, 0x97, \ - "invalid ppem value" ) - FT_ERRORDEF_( Invalid_Vert_Metrics, 0x98, \ - "invalid vertical metrics" ) - FT_ERRORDEF_( Could_Not_Find_Context, 0x99, \ - "could not find context" ) - FT_ERRORDEF_( Invalid_Post_Table_Format, 0x9A, \ - "invalid PostScript (post) table format" ) - FT_ERRORDEF_( Invalid_Post_Table, 0x9B, \ - "invalid PostScript (post) table" ) - - /* CFF, CID, and Type 1 errors */ - - FT_ERRORDEF_( Syntax_Error, 0xA0, \ - "opcode syntax error" ) - FT_ERRORDEF_( Stack_Underflow, 0xA1, \ - "argument stack underflow" ) - FT_ERRORDEF_( Ignore, 0xA2, \ - "ignore" ) - - /* BDF errors */ - - FT_ERRORDEF_( Missing_Startfont_Field, 0xB0, \ - "`STARTFONT' field missing" ) - FT_ERRORDEF_( Missing_Font_Field, 0xB1, \ - "`FONT' field missing" ) - FT_ERRORDEF_( Missing_Size_Field, 0xB2, \ - "`SIZE' field missing" ) - FT_ERRORDEF_( Missing_Chars_Field, 0xB3, \ - "`CHARS' field missing" ) - FT_ERRORDEF_( Missing_Startchar_Field, 0xB4, \ - "`STARTCHAR' field missing" ) - FT_ERRORDEF_( Missing_Encoding_Field, 0xB5, \ - "`ENCODING' field missing" ) - FT_ERRORDEF_( Missing_Bbx_Field, 0xB6, \ - "`BBX' field missing" ) - FT_ERRORDEF_( Bbx_Too_Big, 0xB7, \ - "`BBX' too big" ) - FT_ERRORDEF_( Corrupted_Font_Header, 0xB8, \ - "Font header corrupted or missing fields" ) - FT_ERRORDEF_( Corrupted_Font_Glyphs, 0xB9, \ - "Font glyphs corrupted or missing fields" ) - - -/* END */ diff --git a/src/common/freetype/fterrors.h b/src/common/freetype/fterrors.h deleted file mode 100644 index 6600dadd0..000000000 --- a/src/common/freetype/fterrors.h +++ /dev/null @@ -1,206 +0,0 @@ -/***************************************************************************/ -/* */ -/* fterrors.h */ -/* */ -/* FreeType error code handling (specification). */ -/* */ -/* Copyright 1996-2001, 2002, 2004, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This special header file is used to define the handling of FT2 */ - /* enumeration constants. It can also be used to generate error message */ - /* strings with a small macro trick explained below. */ - /* */ - /* I - Error Formats */ - /* ----------------- */ - /* */ - /* The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be */ - /* defined in ftoption.h in order to make the higher byte indicate */ - /* the module where the error has happened (this is not compatible */ - /* with standard builds of FreeType 2). You can then use the macro */ - /* FT_ERROR_BASE macro to extract the generic error code from an */ - /* FT_Error value. */ - /* */ - /* */ - /* II - Error Message strings */ - /* -------------------------- */ - /* */ - /* The error definitions below are made through special macros that */ - /* allow client applications to build a table of error message strings */ - /* if they need it. The strings are not included in a normal build of */ - /* FreeType 2 to save space (most client applications do not use */ - /* them). */ - /* */ - /* To do so, you have to define the following macros before including */ - /* this file: */ - /* */ - /* FT_ERROR_START_LIST :: */ - /* This macro is called before anything else to define the start of */ - /* the error list. It is followed by several FT_ERROR_DEF calls */ - /* (see below). */ - /* */ - /* FT_ERROR_DEF( e, v, s ) :: */ - /* This macro is called to define one single error. */ - /* `e' is the error code identifier (e.g. FT_Err_Invalid_Argument). */ - /* `v' is the error numerical value. */ - /* `s' is the corresponding error string. */ - /* */ - /* FT_ERROR_END_LIST :: */ - /* This macro ends the list. */ - /* */ - /* Additionally, you have to undefine __FTERRORS_H__ before #including */ - /* this file. */ - /* */ - /* Here is a simple example: */ - /* */ - /* { */ - /* #undef __FTERRORS_H__ */ - /* #define FT_ERRORDEF( e, v, s ) { e, s }, */ - /* #define FT_ERROR_START_LIST { */ - /* #define FT_ERROR_END_LIST { 0, 0 } }; */ - /* */ - /* const struct */ - /* { */ - /* int err_code; */ - /* const char* err_msg; */ - /* } ft_errors[] = */ - /* */ - /* #include FT_ERRORS_H */ - /* } */ - /* */ - /*************************************************************************/ - - -#ifndef __FTERRORS_H__ -#define __FTERRORS_H__ - - - /* include module base error codes */ -#include FT_MODULE_ERRORS_H - - - /*******************************************************************/ - /*******************************************************************/ - /***** *****/ - /***** SETUP MACROS *****/ - /***** *****/ - /*******************************************************************/ - /*******************************************************************/ - - -#undef FT_NEED_EXTERN_C - -#undef FT_ERR_XCAT -#undef FT_ERR_CAT - -#define FT_ERR_XCAT( x, y ) x ## y -#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y ) - - - /* FT_ERR_PREFIX is used as a prefix for error identifiers. */ - /* By default, we use `FT_Err_'. */ - /* */ -#ifndef FT_ERR_PREFIX -#define FT_ERR_PREFIX FT_Err_ -#endif - - - /* FT_ERR_BASE is used as the base for module-specific errors. */ - /* */ -#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS - -#ifndef FT_ERR_BASE -#define FT_ERR_BASE FT_Mod_Err_Base -#endif - -#else - -#undef FT_ERR_BASE -#define FT_ERR_BASE 0 - -#endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */ - - - /* If FT_ERRORDEF is not defined, we need to define a simple */ - /* enumeration type. */ - /* */ -#ifndef FT_ERRORDEF - -#define FT_ERRORDEF( e, v, s ) e = v, -#define FT_ERROR_START_LIST enum { -#define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) }; - -#ifdef __cplusplus -#define FT_NEED_EXTERN_C - extern "C" { -#endif - -#endif /* !FT_ERRORDEF */ - - - /* this macro is used to define an error */ -#define FT_ERRORDEF_( e, v, s ) \ - FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s ) - - /* this is only used for <module>_Err_Ok, which must be 0! */ -#define FT_NOERRORDEF_( e, v, s ) \ - FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s ) - - -#ifdef FT_ERROR_START_LIST - FT_ERROR_START_LIST -#endif - - - /* now include the error codes */ -#include FT_ERROR_DEFINITIONS_H - - -#ifdef FT_ERROR_END_LIST - FT_ERROR_END_LIST -#endif - - - /*******************************************************************/ - /*******************************************************************/ - /***** *****/ - /***** SIMPLE CLEANUP *****/ - /***** *****/ - /*******************************************************************/ - /*******************************************************************/ - -#ifdef FT_NEED_EXTERN_C - } -#endif - -#undef FT_ERROR_START_LIST -#undef FT_ERROR_END_LIST - -#undef FT_ERRORDEF -#undef FT_ERRORDEF_ -#undef FT_NOERRORDEF_ - -#undef FT_NEED_EXTERN_C -#undef FT_ERR_CONCAT -#undef FT_ERR_BASE - - /* FT_KEEP_ERR_PREFIX is needed for ftvalid.h */ -#ifndef FT_KEEP_ERR_PREFIX -#undef FT_ERR_PREFIX -#endif - -#endif /* __FTERRORS_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftgasp.h b/src/common/freetype/ftgasp.h deleted file mode 100644 index 97cd33014..000000000 --- a/src/common/freetype/ftgasp.h +++ /dev/null @@ -1,113 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftgasp.h */ -/* */ -/* Access of TrueType's `gasp' table (specification). */ -/* */ -/* Copyright 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef _FT_GASP_H_ -#define _FT_GASP_H_ - -#include <ft2build.h> -#include FT_FREETYPE_H - - /*************************************************************************** - * - * @section: - * gasp_table - * - * @title: - * Gasp Table - * - * @abstract: - * Retrieving TrueType `gasp' table entries - * - * @description: - * The function @FT_Get_Gasp can be used to query a TrueType or OpenType - * font for specific entries in their `gasp' table, if any. This is - * mainly useful when implementing native TrueType hinting with the - * bytecode interpreter to duplicate the Windows text rendering results. - */ - - /************************************************************************* - * - * @enum: - * FT_GASP_XXX - * - * @description: - * A list of values and/or bit-flags returned by the @FT_Get_Gasp - * function. - * - * @values: - * FT_GASP_NO_TABLE :: - * This special value means that there is no GASP table in this face. - * It is up to the client to decide what to do. - * - * FT_GASP_DO_GRIDFIT :: - * Grid-fitting and hinting should be performed at the specified ppem. - * This *really* means TrueType bytecode interpretation. - * - * FT_GASP_DO_GRAY :: - * Anti-aliased rendering should be performed at the specified ppem. - * - * FT_GASP_SYMMETRIC_SMOOTHING :: - * Smoothing along multiple axes must be used with ClearType. - * - * FT_GASP_SYMMETRIC_GRIDFIT :: - * Grid-fitting must be used with ClearType's symmetric smoothing. - * - * @note: - * `ClearType' is Microsoft's implementation of LCD rendering, partly - * protected by patents. - * - * @since: - * 2.3.0 - */ -#define FT_GASP_NO_TABLE -1 -#define FT_GASP_DO_GRIDFIT 0x01 -#define FT_GASP_DO_GRAY 0x02 -#define FT_GASP_SYMMETRIC_SMOOTHING 0x08 -#define FT_GASP_SYMMETRIC_GRIDFIT 0x10 - - - /************************************************************************* - * - * @func: - * FT_Get_Gasp - * - * @description: - * Read the `gasp' table from a TrueType or OpenType font file and - * return the entry corresponding to a given character pixel size. - * - * @input: - * face :: The source face handle. - * ppem :: The vertical character pixel size. - * - * @return: - * Bit flags (see @FT_GASP_XXX), or @FT_GASP_NO_TABLE is there is no - * `gasp' table in the face. - * - * @since: - * 2.3.0 - */ - FT_EXPORT( FT_Int ) - FT_Get_Gasp( FT_Face face, - FT_UInt ppem ); - -/* */ - -#endif /* _FT_GASP_H_ */ - - -/* END */ diff --git a/src/common/freetype/ftglyph.h b/src/common/freetype/ftglyph.h deleted file mode 100644 index 08058dadd..000000000 --- a/src/common/freetype/ftglyph.h +++ /dev/null @@ -1,575 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftglyph.h */ -/* */ -/* FreeType convenience functions to handle glyphs (specification). */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This file contains the definition of several convenience functions */ - /* that can be used by client applications to easily retrieve glyph */ - /* bitmaps and outlines from a given face. */ - /* */ - /* These functions should be optional if you are writing a font server */ - /* or text layout engine on top of FreeType. However, they are pretty */ - /* handy for many other simple uses of the library. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTGLYPH_H__ -#define __FTGLYPH_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* glyph_management */ - /* */ - /* <Title> */ - /* Glyph Management */ - /* */ - /* <Abstract> */ - /* Generic interface to manage individual glyph data. */ - /* */ - /* <Description> */ - /* This section contains definitions used to manage glyph data */ - /* through generic FT_Glyph objects. Each of them can contain a */ - /* bitmap, a vector outline, or even images in other formats. */ - /* */ - /*************************************************************************/ - - - /* forward declaration to a private type */ - typedef struct FT_Glyph_Class_ FT_Glyph_Class; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Glyph */ - /* */ - /* <Description> */ - /* Handle to an object used to model generic glyph images. It is a */ - /* pointer to the @FT_GlyphRec structure and can contain a glyph */ - /* bitmap or pointer. */ - /* */ - /* <Note> */ - /* Glyph objects are not owned by the library. You must thus release */ - /* them manually (through @FT_Done_Glyph) _before_ calling */ - /* @FT_Done_FreeType. */ - /* */ - typedef struct FT_GlyphRec_* FT_Glyph; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_GlyphRec */ - /* */ - /* <Description> */ - /* The root glyph structure contains a given glyph image plus its */ - /* advance width in 16.16 fixed float format. */ - /* */ - /* <Fields> */ - /* library :: A handle to the FreeType library object. */ - /* */ - /* clazz :: A pointer to the glyph's class. Private. */ - /* */ - /* format :: The format of the glyph's image. */ - /* */ - /* advance :: A 16.16 vector that gives the glyph's advance width. */ - /* */ - typedef struct FT_GlyphRec_ - { - FT_Library library; - const FT_Glyph_Class* clazz; - FT_Glyph_Format format; - FT_Vector advance; - - } FT_GlyphRec; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_BitmapGlyph */ - /* */ - /* <Description> */ - /* A handle to an object used to model a bitmap glyph image. This is */ - /* a sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec. */ - /* */ - typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_BitmapGlyphRec */ - /* */ - /* <Description> */ - /* A structure used for bitmap glyph images. This really is a */ - /* `sub-class' of @FT_GlyphRec. */ - /* */ - /* <Fields> */ - /* root :: The root @FT_Glyph fields. */ - /* */ - /* left :: The left-side bearing, i.e., the horizontal distance */ - /* from the current pen position to the left border of the */ - /* glyph bitmap. */ - /* */ - /* top :: The top-side bearing, i.e., the vertical distance from */ - /* the current pen position to the top border of the glyph */ - /* bitmap. This distance is positive for upwards-y! */ - /* */ - /* bitmap :: A descriptor for the bitmap. */ - /* */ - /* <Note> */ - /* You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have */ - /* `glyph->format == FT_GLYPH_FORMAT_BITMAP'. This lets you access */ - /* the bitmap's contents easily. */ - /* */ - /* The corresponding pixel buffer is always owned by @FT_BitmapGlyph */ - /* and is thus created and destroyed with it. */ - /* */ - typedef struct FT_BitmapGlyphRec_ - { - FT_GlyphRec root; - FT_Int left; - FT_Int top; - FT_Bitmap bitmap; - - } FT_BitmapGlyphRec; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_OutlineGlyph */ - /* */ - /* <Description> */ - /* A handle to an object used to model an outline glyph image. This */ - /* is a sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. */ - /* */ - typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_OutlineGlyphRec */ - /* */ - /* <Description> */ - /* A structure used for outline (vectorial) glyph images. This */ - /* really is a `sub-class' of @FT_GlyphRec. */ - /* */ - /* <Fields> */ - /* root :: The root @FT_Glyph fields. */ - /* */ - /* outline :: A descriptor for the outline. */ - /* */ - /* <Note> */ - /* You can typecast a @FT_Glyph to @FT_OutlineGlyph if you have */ - /* `glyph->format == FT_GLYPH_FORMAT_OUTLINE'. This lets you access */ - /* the outline's content easily. */ - /* */ - /* As the outline is extracted from a glyph slot, its coordinates are */ - /* expressed normally in 26.6 pixels, unless the flag */ - /* @FT_LOAD_NO_SCALE was used in @FT_Load_Glyph() or @FT_Load_Char(). */ - /* */ - /* The outline's tables are always owned by the object and are */ - /* destroyed with it. */ - /* */ - typedef struct FT_OutlineGlyphRec_ - { - FT_GlyphRec root; - FT_Outline outline; - - } FT_OutlineGlyphRec; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Glyph */ - /* */ - /* <Description> */ - /* A function used to extract a glyph image from a slot. */ - /* */ - /* <Input> */ - /* slot :: A handle to the source glyph slot. */ - /* */ - /* <Output> */ - /* aglyph :: A handle to the glyph object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Glyph( FT_GlyphSlot slot, - FT_Glyph *aglyph ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Glyph_Copy */ - /* */ - /* <Description> */ - /* A function used to copy a glyph image. Note that the created */ - /* @FT_Glyph object must be released with @FT_Done_Glyph. */ - /* */ - /* <Input> */ - /* source :: A handle to the source glyph object. */ - /* */ - /* <Output> */ - /* target :: A handle to the target glyph object. 0 in case of */ - /* error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Glyph_Copy( FT_Glyph source, - FT_Glyph *target ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Glyph_Transform */ - /* */ - /* <Description> */ - /* Transforms a glyph image if its format is scalable. */ - /* */ - /* <InOut> */ - /* glyph :: A handle to the target glyph object. */ - /* */ - /* <Input> */ - /* matrix :: A pointer to a 2x2 matrix to apply. */ - /* */ - /* delta :: A pointer to a 2d vector to apply. Coordinates are */ - /* expressed in 1/64th of a pixel. */ - /* */ - /* <Return> */ - /* FreeType error code (if not 0, the glyph format is not scalable). */ - /* */ - /* <Note> */ - /* The 2x2 transformation matrix is also applied to the glyph's */ - /* advance vector. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Glyph_Transform( FT_Glyph glyph, - FT_Matrix* matrix, - FT_Vector* delta ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Glyph_BBox_Mode */ - /* */ - /* <Description> */ - /* The mode how the values of @FT_Glyph_Get_CBox are returned. */ - /* */ - /* <Values> */ - /* FT_GLYPH_BBOX_UNSCALED :: */ - /* Return unscaled font units. */ - /* */ - /* FT_GLYPH_BBOX_SUBPIXELS :: */ - /* Return unfitted 26.6 coordinates. */ - /* */ - /* FT_GLYPH_BBOX_GRIDFIT :: */ - /* Return grid-fitted 26.6 coordinates. */ - /* */ - /* FT_GLYPH_BBOX_TRUNCATE :: */ - /* Return coordinates in integer pixels. */ - /* */ - /* FT_GLYPH_BBOX_PIXELS :: */ - /* Return grid-fitted pixel coordinates. */ - /* */ - typedef enum FT_Glyph_BBox_Mode_ - { - FT_GLYPH_BBOX_UNSCALED = 0, - FT_GLYPH_BBOX_SUBPIXELS = 0, - FT_GLYPH_BBOX_GRIDFIT = 1, - FT_GLYPH_BBOX_TRUNCATE = 2, - FT_GLYPH_BBOX_PIXELS = 3 - - } FT_Glyph_BBox_Mode; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* ft_glyph_bbox_xxx */ - /* */ - /* <Description> */ - /* These constants are deprecated. Use the corresponding */ - /* @FT_Glyph_BBox_Mode values instead. */ - /* */ - /* <Values> */ - /* ft_glyph_bbox_unscaled :: See @FT_GLYPH_BBOX_UNSCALED. */ - /* ft_glyph_bbox_subpixels :: See @FT_GLYPH_BBOX_SUBPIXELS. */ - /* ft_glyph_bbox_gridfit :: See @FT_GLYPH_BBOX_GRIDFIT. */ - /* ft_glyph_bbox_truncate :: See @FT_GLYPH_BBOX_TRUNCATE. */ - /* ft_glyph_bbox_pixels :: See @FT_GLYPH_BBOX_PIXELS. */ - /* */ -#define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED -#define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS -#define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT -#define ft_glyph_bbox_truncate FT_GLYPH_BBOX_TRUNCATE -#define ft_glyph_bbox_pixels FT_GLYPH_BBOX_PIXELS - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Glyph_Get_CBox */ - /* */ - /* <Description> */ - /* Return a glyph's `control box'. The control box encloses all the */ - /* outline's points, including Bézier control points. Though it */ - /* coincides with the exact bounding box for most glyphs, it can be */ - /* slightly larger in some situations (like when rotating an outline */ - /* which contains Bézier outside arcs). */ - /* */ - /* Computing the control box is very fast, while getting the bounding */ - /* box can take much more time as it needs to walk over all segments */ - /* and arcs in the outline. To get the latter, you can use the */ - /* `ftbbox' component which is dedicated to this single task. */ - /* */ - /* <Input> */ - /* glyph :: A handle to the source glyph object. */ - /* */ - /* mode :: The mode which indicates how to interpret the returned */ - /* bounding box values. */ - /* */ - /* <Output> */ - /* acbox :: The glyph coordinate bounding box. Coordinates are */ - /* expressed in 1/64th of pixels if it is grid-fitted. */ - /* */ - /* <Note> */ - /* Coordinates are relative to the glyph origin, using the Y-upwards */ - /* convention. */ - /* */ - /* If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode' */ - /* must be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font */ - /* units in 26.6 pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS */ - /* is another name for this constant. */ - /* */ - /* Note that the maximum coordinates are exclusive, which means that */ - /* one can compute the width and height of the glyph image (be it in */ - /* integer or 26.6 pixels) as: */ - /* */ - /* { */ - /* width = bbox.xMax - bbox.xMin; */ - /* height = bbox.yMax - bbox.yMin; */ - /* } */ - /* */ - /* Note also that for 26.6 coordinates, if `bbox_mode' is set to */ - /* @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted, */ - /* which corresponds to: */ - /* */ - /* { */ - /* bbox.xMin = FLOOR(bbox.xMin); */ - /* bbox.yMin = FLOOR(bbox.yMin); */ - /* bbox.xMax = CEILING(bbox.xMax); */ - /* bbox.yMax = CEILING(bbox.yMax); */ - /* } */ - /* */ - /* To get the bbox in pixel coordinates, set `bbox_mode' to */ - /* @FT_GLYPH_BBOX_TRUNCATE. */ - /* */ - /* To get the bbox in grid-fitted pixel coordinates, set `bbox_mode' */ - /* to @FT_GLYPH_BBOX_PIXELS. */ - /* */ - FT_EXPORT( void ) - FT_Glyph_Get_CBox( FT_Glyph glyph, - FT_UInt bbox_mode, - FT_BBox *acbox ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Glyph_To_Bitmap */ - /* */ - /* <Description> */ - /* Converts a given glyph object to a bitmap glyph object. */ - /* */ - /* <InOut> */ - /* the_glyph :: A pointer to a handle to the target glyph. */ - /* */ - /* <Input> */ - /* render_mode :: An enumeration that describe how the data is */ - /* rendered. */ - /* */ - /* origin :: A pointer to a vector used to translate the glyph */ - /* image before rendering. Can be 0 (if no */ - /* translation). The origin is expressed in */ - /* 26.6 pixels. */ - /* */ - /* destroy :: A boolean that indicates that the original glyph */ - /* image should be destroyed by this function. It is */ - /* never destroyed in case of error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The glyph image is translated with the `origin' vector before */ - /* rendering. */ - /* */ - /* The first parameter is a pointer to an @FT_Glyph handle, that will */ - /* be replaced by this function. Typically, you would use (omitting */ - /* error handling): */ - /* */ - /* */ - /* { */ - /* FT_Glyph glyph; */ - /* FT_BitmapGlyph glyph_bitmap; */ - /* */ - /* */ - /* // load glyph */ - /* error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAUT ); */ - /* */ - /* // extract glyph image */ - /* error = FT_Get_Glyph( face->glyph, &glyph ); */ - /* */ - /* // convert to a bitmap (default render mode + destroy old) */ - /* if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) */ - /* { */ - /* error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_DEFAULT, */ - /* 0, 1 ); */ - /* if ( error ) // glyph unchanged */ - /* ... */ - /* } */ - /* */ - /* // access bitmap content by typecasting */ - /* glyph_bitmap = (FT_BitmapGlyph)glyph; */ - /* */ - /* // do funny stuff with it, like blitting/drawing */ - /* ... */ - /* */ - /* // discard glyph image (bitmap or not) */ - /* FT_Done_Glyph( glyph ); */ - /* } */ - /* */ - /* */ - /* This function does nothing if the glyph format isn't scalable. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Glyph_To_Bitmap( FT_Glyph* the_glyph, - FT_Render_Mode render_mode, - FT_Vector* origin, - FT_Bool destroy ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_Glyph */ - /* */ - /* <Description> */ - /* Destroys a given glyph. */ - /* */ - /* <Input> */ - /* glyph :: A handle to the target glyph object. */ - /* */ - FT_EXPORT( void ) - FT_Done_Glyph( FT_Glyph glyph ); - - /* */ - - - /* other helpful functions */ - - /*************************************************************************/ - /* */ - /* <Section> */ - /* computations */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Matrix_Multiply */ - /* */ - /* <Description> */ - /* Performs the matrix operation `b = a*b'. */ - /* */ - /* <Input> */ - /* a :: A pointer to matrix `a'. */ - /* */ - /* <InOut> */ - /* b :: A pointer to matrix `b'. */ - /* */ - /* <Note> */ - /* The result is undefined if either `a' or `b' is zero. */ - /* */ - FT_EXPORT( void ) - FT_Matrix_Multiply( const FT_Matrix* a, - FT_Matrix* b ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Matrix_Invert */ - /* */ - /* <Description> */ - /* Inverts a 2x2 matrix. Returns an error if it can't be inverted. */ - /* */ - /* <InOut> */ - /* matrix :: A pointer to the target matrix. Remains untouched in */ - /* case of error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Matrix_Invert( FT_Matrix* matrix ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FTGLYPH_H__ */ - - -/* END */ - - -/* Local Variables: */ -/* coding: utf-8 */ -/* End: */ diff --git a/src/common/freetype/ftgxval.h b/src/common/freetype/ftgxval.h deleted file mode 100644 index c7ea861a0..000000000 --- a/src/common/freetype/ftgxval.h +++ /dev/null @@ -1,358 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftgxval.h */ -/* */ -/* FreeType API for validating TrueTypeGX/AAT tables (specification). */ -/* */ -/* Copyright 2004, 2005, 2006 by */ -/* Masatake YAMATO, Redhat K.K, */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - -/***************************************************************************/ -/* */ -/* gxvalid is derived from both gxlayout module and otvalid module. */ -/* Development of gxlayout is supported by the Information-technology */ -/* Promotion Agency(IPA), Japan. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTGXVAL_H__ -#define __FTGXVAL_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* gx_validation */ - /* */ - /* <Title> */ - /* TrueTypeGX/AAT Validation */ - /* */ - /* <Abstract> */ - /* An API to validate TrueTypeGX/AAT tables. */ - /* */ - /* <Description> */ - /* This section contains the declaration of functions to validate */ - /* some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, */ - /* trak, prop, lcar). */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* */ - /* Warning: Use FT_VALIDATE_XXX to validate a table. */ - /* Following definitions are for gxvalid developers. */ - /* */ - /* */ - /*************************************************************************/ - -#define FT_VALIDATE_feat_INDEX 0 -#define FT_VALIDATE_mort_INDEX 1 -#define FT_VALIDATE_morx_INDEX 2 -#define FT_VALIDATE_bsln_INDEX 3 -#define FT_VALIDATE_just_INDEX 4 -#define FT_VALIDATE_kern_INDEX 5 -#define FT_VALIDATE_opbd_INDEX 6 -#define FT_VALIDATE_trak_INDEX 7 -#define FT_VALIDATE_prop_INDEX 8 -#define FT_VALIDATE_lcar_INDEX 9 -#define FT_VALIDATE_GX_LAST_INDEX FT_VALIDATE_lcar_INDEX - - - /************************************************************************* - * - * @macro: - * FT_VALIDATE_GX_LENGTH - * - * @description: - * The number of tables checked in this module. Use it as a parameter - * for the `table-length' argument of function @FT_TrueTypeGX_Validate. - */ -#define FT_VALIDATE_GX_LENGTH (FT_VALIDATE_GX_LAST_INDEX + 1) - - /* */ - - /* Up to 0x1000 is used by otvalid. - Ox2xxx is reserved for feature OT extension. */ -#define FT_VALIDATE_GX_START 0x4000 -#define FT_VALIDATE_GX_BITFIELD( tag ) \ - ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX ) - - - /********************************************************************** - * - * @enum: - * FT_VALIDATE_GXXXX - * - * @description: - * A list of bit-field constants used with @FT_TrueTypeGX_Validate to - * indicate which TrueTypeGX/AAT Type tables should be validated. - * - * @values: - * FT_VALIDATE_feat :: - * Validate `feat' table. - * - * FT_VALIDATE_mort :: - * Validate `mort' table. - * - * FT_VALIDATE_morx :: - * Validate `morx' table. - * - * FT_VALIDATE_bsln :: - * Validate `bsln' table. - * - * FT_VALIDATE_just :: - * Validate `just' table. - * - * FT_VALIDATE_kern :: - * Validate `kern' table. - * - * FT_VALIDATE_opbd :: - * Validate `opbd' table. - * - * FT_VALIDATE_trak :: - * Validate `trak' table. - * - * FT_VALIDATE_prop :: - * Validate `prop' table. - * - * FT_VALIDATE_lcar :: - * Validate `lcar' table. - * - * FT_VALIDATE_GX :: - * Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern, - * opbd, trak, prop and lcar). - * - */ - -#define FT_VALIDATE_feat FT_VALIDATE_GX_BITFIELD( feat ) -#define FT_VALIDATE_mort FT_VALIDATE_GX_BITFIELD( mort ) -#define FT_VALIDATE_morx FT_VALIDATE_GX_BITFIELD( morx ) -#define FT_VALIDATE_bsln FT_VALIDATE_GX_BITFIELD( bsln ) -#define FT_VALIDATE_just FT_VALIDATE_GX_BITFIELD( just ) -#define FT_VALIDATE_kern FT_VALIDATE_GX_BITFIELD( kern ) -#define FT_VALIDATE_opbd FT_VALIDATE_GX_BITFIELD( opbd ) -#define FT_VALIDATE_trak FT_VALIDATE_GX_BITFIELD( trak ) -#define FT_VALIDATE_prop FT_VALIDATE_GX_BITFIELD( prop ) -#define FT_VALIDATE_lcar FT_VALIDATE_GX_BITFIELD( lcar ) - -#define FT_VALIDATE_GX ( FT_VALIDATE_feat | \ - FT_VALIDATE_mort | \ - FT_VALIDATE_morx | \ - FT_VALIDATE_bsln | \ - FT_VALIDATE_just | \ - FT_VALIDATE_kern | \ - FT_VALIDATE_opbd | \ - FT_VALIDATE_trak | \ - FT_VALIDATE_prop | \ - FT_VALIDATE_lcar ) - - - /* */ - - /********************************************************************** - * - * @function: - * FT_TrueTypeGX_Validate - * - * @description: - * Validate various TrueTypeGX tables to assure that all offsets and - * indices are valid. The idea is that a higher-level library which - * actually does the text layout can access those tables without - * error checking (which can be quite time consuming). - * - * @input: - * face :: - * A handle to the input face. - * - * validation_flags :: - * A bit field which specifies the tables to be validated. See - * @FT_VALIDATE_GXXXX for possible values. - * - * table_length :: - * The size of the `tables' array. Normally, @FT_VALIDATE_GX_LENGTH - * should be passed. - * - * @output: - * tables :: - * The array where all validated sfnt tables are stored. - * The array itself must be allocated by a client. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * This function only works with TrueTypeGX fonts, returning an error - * otherwise. - * - * After use, the application should deallocate the buffers pointed to by - * each `tables' element, by calling @FT_TrueTypeGX_Free. A NULL value - * indicates that the table either doesn't exist in the font, the - * application hasn't asked for validation, or the validator doesn't have - * the ability to validate the sfnt table. - */ - FT_EXPORT( FT_Error ) - FT_TrueTypeGX_Validate( FT_Face face, - FT_UInt validation_flags, - FT_Bytes tables[FT_VALIDATE_GX_LENGTH], - FT_UInt table_length ); - - - /* */ - - /********************************************************************** - * - * @function: - * FT_TrueTypeGX_Free - * - * @description: - * Free the buffer allocated by TrueTypeGX validator. - * - * @input: - * face :: - * A handle to the input face. - * - * table :: - * The pointer to the buffer allocated by - * @FT_TrueTypeGX_Validate. - * - * @note: - * This function must be used to free the buffer allocated by - * @FT_TrueTypeGX_Validate only. - */ - FT_EXPORT( void ) - FT_TrueTypeGX_Free( FT_Face face, - FT_Bytes table ); - - - /* */ - - /********************************************************************** - * - * @enum: - * FT_VALIDATE_CKERNXXX - * - * @description: - * A list of bit-field constants used with @FT_ClassicKern_Validate - * to indicate the classic kern dialect or dialects. If the selected - * type doesn't fit, @FT_ClassicKern_Validate regards the table as - * invalid. - * - * @values: - * FT_VALIDATE_MS :: - * Handle the `kern' table as a classic Microsoft kern table. - * - * FT_VALIDATE_APPLE :: - * Handle the `kern' table as a classic Apple kern table. - * - * FT_VALIDATE_CKERN :: - * Handle the `kern' as either classic Apple or Microsoft kern table. - */ -#define FT_VALIDATE_MS ( FT_VALIDATE_GX_START << 0 ) -#define FT_VALIDATE_APPLE ( FT_VALIDATE_GX_START << 1 ) - -#define FT_VALIDATE_CKERN ( FT_VALIDATE_MS | FT_VALIDATE_APPLE ) - - - /* */ - - /********************************************************************** - * - * @function: - * FT_ClassicKern_Validate - * - * @description: - * Validate classic (16bit format) kern table to assure that the offsets - * and indices are valid. The idea is that a higher-level library which - * actually does the text layout can access those tables without error - * checking (which can be quite time consuming). - * - * The `kern' table validator in @FT_TrueTypeGX_Validate deals with both - * the new 32bit format and the classic 16bit format, while - * FT_ClassicKern_Validate only supports the classic 16bit format. - * - * @input: - * face :: - * A handle to the input face. - * - * validation_flags :: - * A bit field which specifies the dialect to be validated. See - * @FT_VALIDATE_CKERNXXX for possible values. - * - * @output: - * ckern_table :: - * A pointer to the kern table. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * After use, the application should deallocate the buffers pointed to by - * `ckern_table', by calling @FT_ClassicKern_Free. A NULL value - * indicates that the table doesn't exist in the font. - */ - FT_EXPORT( FT_Error ) - FT_ClassicKern_Validate( FT_Face face, - FT_UInt validation_flags, - FT_Bytes *ckern_table ); - - - /* */ - - /********************************************************************** - * - * @function: - * FT_ClassicKern_Free - * - * @description: - * Free the buffer allocated by classic Kern validator. - * - * @input: - * face :: - * A handle to the input face. - * - * table :: - * The pointer to the buffer that is allocated by - * @FT_ClassicKern_Validate. - * - * @note: - * This function must be used to free the buffer allocated by - * @FT_ClassicKern_Validate only. - */ - FT_EXPORT( void ) - FT_ClassicKern_Free( FT_Face face, - FT_Bytes table ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FTGXVAL_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftgzip.h b/src/common/freetype/ftgzip.h deleted file mode 100644 index 9893437bf..000000000 --- a/src/common/freetype/ftgzip.h +++ /dev/null @@ -1,102 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftgzip.h */ -/* */ -/* Gzip-compressed stream support. */ -/* */ -/* Copyright 2002, 2003, 2004, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTGZIP_H__ -#define __FTGZIP_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - /*************************************************************************/ - /* */ - /* <Section> */ - /* gzip */ - /* */ - /* <Title> */ - /* GZIP Streams */ - /* */ - /* <Abstract> */ - /* Using gzip-compressed font files. */ - /* */ - /* <Description> */ - /* This section contains the declaration of Gzip-specific functions. */ - /* */ - /*************************************************************************/ - - - /************************************************************************ - * - * @function: - * FT_Stream_OpenGzip - * - * @description: - * Open a new stream to parse gzip-compressed font files. This is - * mainly used to support the compressed `*.pcf.gz' fonts that come - * with XFree86. - * - * @input: - * stream :: - * The target embedding stream. - * - * source :: - * The source stream. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * The source stream must be opened _before_ calling this function. - * - * Calling the internal function `FT_Stream_Close' on the new stream will - * *not* call `FT_Stream_Close' on the source stream. None of the stream - * objects will be released to the heap. - * - * The stream implementation is very basic and resets the decompression - * process each time seeking backwards is needed within the stream. - * - * In certain builds of the library, gzip compression recognition is - * automatically handled when calling @FT_New_Face or @FT_Open_Face. - * This means that if no font driver is capable of handling the raw - * compressed file, the library will try to open a gzipped stream from - * it and re-open the face with it. - * - * This function may return `FT_Err_Unimplemented_Feature' if your build - * of FreeType was not compiled with zlib support. - */ - FT_EXPORT( FT_Error ) - FT_Stream_OpenGzip( FT_Stream stream, - FT_Stream source ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTGZIP_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftimage.h b/src/common/freetype/ftimage.h deleted file mode 100644 index 1c428f117..000000000 --- a/src/common/freetype/ftimage.h +++ /dev/null @@ -1,1237 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftimage.h */ -/* */ -/* FreeType glyph image formats and default raster interface */ -/* (specification). */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - /*************************************************************************/ - /* */ - /* Note: A `raster' is simply a scan-line converter, used to render */ - /* FT_Outlines into FT_Bitmaps. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTIMAGE_H__ -#define __FTIMAGE_H__ - - -/* _STANDALONE_ is from ftgrays.c */ -#ifndef _STANDALONE_ -#include <ft2build.h> -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* basic_types */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Pos */ - /* */ - /* <Description> */ - /* The type FT_Pos is a 32-bit integer used to store vectorial */ - /* coordinates. Depending on the context, these can represent */ - /* distances in integer font units, or 16,16, or 26.6 fixed float */ - /* pixel coordinates. */ - /* */ - typedef signed long FT_Pos; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Vector */ - /* */ - /* <Description> */ - /* A simple structure used to store a 2D vector; coordinates are of */ - /* the FT_Pos type. */ - /* */ - /* <Fields> */ - /* x :: The horizontal coordinate. */ - /* y :: The vertical coordinate. */ - /* */ - typedef struct FT_Vector_ - { - FT_Pos x; - FT_Pos y; - - } FT_Vector; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_BBox */ - /* */ - /* <Description> */ - /* A structure used to hold an outline's bounding box, i.e., the */ - /* coordinates of its extrema in the horizontal and vertical */ - /* directions. */ - /* */ - /* <Fields> */ - /* xMin :: The horizontal minimum (left-most). */ - /* */ - /* yMin :: The vertical minimum (bottom-most). */ - /* */ - /* xMax :: The horizontal maximum (right-most). */ - /* */ - /* yMax :: The vertical maximum (top-most). */ - /* */ - typedef struct FT_BBox_ - { - FT_Pos xMin, yMin; - FT_Pos xMax, yMax; - - } FT_BBox; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Pixel_Mode */ - /* */ - /* <Description> */ - /* An enumeration type used to describe the format of pixels in a */ - /* given bitmap. Note that additional formats may be added in the */ - /* future. */ - /* */ - /* <Values> */ - /* FT_PIXEL_MODE_NONE :: */ - /* Value 0 is reserved. */ - /* */ - /* FT_PIXEL_MODE_MONO :: */ - /* A monochrome bitmap, using 1 bit per pixel. Note that pixels */ - /* are stored in most-significant order (MSB), which means that */ - /* the left-most pixel in a byte has value 128. */ - /* */ - /* FT_PIXEL_MODE_GRAY :: */ - /* An 8-bit bitmap, generally used to represent anti-aliased glyph */ - /* images. Each pixel is stored in one byte. Note that the number */ - /* of value `gray' levels is stored in the `num_bytes' field of */ - /* the @FT_Bitmap structure (it generally is 256). */ - /* */ - /* FT_PIXEL_MODE_GRAY2 :: */ - /* A 2-bit/pixel bitmap, used to represent embedded anti-aliased */ - /* bitmaps in font files according to the OpenType specification. */ - /* We haven't found a single font using this format, however. */ - /* */ - /* FT_PIXEL_MODE_GRAY4 :: */ - /* A 4-bit/pixel bitmap, used to represent embedded anti-aliased */ - /* bitmaps in font files according to the OpenType specification. */ - /* We haven't found a single font using this format, however. */ - /* */ - /* FT_PIXEL_MODE_LCD :: */ - /* An 8-bit bitmap, used to represent RGB or BGR decimated glyph */ - /* images used for display on LCD displays; the bitmap is three */ - /* times wider than the original glyph image. See also */ - /* @FT_RENDER_MODE_LCD. */ - /* */ - /* FT_PIXEL_MODE_LCD_V :: */ - /* An 8-bit bitmap, used to represent RGB or BGR decimated glyph */ - /* images used for display on rotated LCD displays; the bitmap */ - /* is three times taller than the original glyph image. See also */ - /* @FT_RENDER_MODE_LCD_V. */ - /* */ - typedef enum FT_Pixel_Mode_ - { - FT_PIXEL_MODE_NONE = 0, - FT_PIXEL_MODE_MONO, - FT_PIXEL_MODE_GRAY, - FT_PIXEL_MODE_GRAY2, - FT_PIXEL_MODE_GRAY4, - FT_PIXEL_MODE_LCD, - FT_PIXEL_MODE_LCD_V, - - FT_PIXEL_MODE_MAX /* do not remove */ - - } FT_Pixel_Mode; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* ft_pixel_mode_xxx */ - /* */ - /* <Description> */ - /* A list of deprecated constants. Use the corresponding */ - /* @FT_Pixel_Mode values instead. */ - /* */ - /* <Values> */ - /* ft_pixel_mode_none :: See @FT_PIXEL_MODE_NONE. */ - /* ft_pixel_mode_mono :: See @FT_PIXEL_MODE_MONO. */ - /* ft_pixel_mode_grays :: See @FT_PIXEL_MODE_GRAY. */ - /* ft_pixel_mode_pal2 :: See @FT_PIXEL_MODE_GRAY2. */ - /* ft_pixel_mode_pal4 :: See @FT_PIXEL_MODE_GRAY4. */ - /* */ -#define ft_pixel_mode_none FT_PIXEL_MODE_NONE -#define ft_pixel_mode_mono FT_PIXEL_MODE_MONO -#define ft_pixel_mode_grays FT_PIXEL_MODE_GRAY -#define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2 -#define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4 - - /* */ - -#if 0 - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Palette_Mode */ - /* */ - /* <Description> */ - /* THIS TYPE IS DEPRECATED. DO NOT USE IT! */ - /* */ - /* An enumeration type to describe the format of a bitmap palette, */ - /* used with ft_pixel_mode_pal4 and ft_pixel_mode_pal8. */ - /* */ - /* <Fields> */ - /* ft_palette_mode_rgb :: The palette is an array of 3-bytes RGB */ - /* records. */ - /* */ - /* ft_palette_mode_rgba :: The palette is an array of 4-bytes RGBA */ - /* records. */ - /* */ - /* <Note> */ - /* As ft_pixel_mode_pal2, pal4 and pal8 are currently unused by */ - /* FreeType, these types are not handled by the library itself. */ - /* */ - typedef enum FT_Palette_Mode_ - { - ft_palette_mode_rgb = 0, - ft_palette_mode_rgba, - - ft_palettte_mode_max /* do not remove */ - - } FT_Palette_Mode; - - /* */ - -#endif - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Bitmap */ - /* */ - /* <Description> */ - /* A structure used to describe a bitmap or pixmap to the raster. */ - /* Note that we now manage pixmaps of various depths through the */ - /* `pixel_mode' field. */ - /* */ - /* <Fields> */ - /* rows :: The number of bitmap rows. */ - /* */ - /* width :: The number of pixels in bitmap row. */ - /* */ - /* pitch :: The pitch's absolute value is the number of bytes */ - /* taken by one bitmap row, including padding. */ - /* However, the pitch is positive when the bitmap has */ - /* a `down' flow, and negative when it has an `up' */ - /* flow. In all cases, the pitch is an offset to add */ - /* to a bitmap pointer in order to go down one row. */ - /* */ - /* buffer :: A typeless pointer to the bitmap buffer. This */ - /* value should be aligned on 32-bit boundaries in */ - /* most cases. */ - /* */ - /* num_grays :: This field is only used with */ - /* @FT_PIXEL_MODE_GRAY; it gives the number of gray */ - /* levels used in the bitmap. */ - /* */ - /* pixel_mode :: The pixel mode, i.e., how pixel bits are stored. */ - /* See @FT_Pixel_Mode for possible values. */ - /* */ - /* palette_mode :: This field is intended for paletted pixel modes; */ - /* it indicates how the palette is stored. Not */ - /* used currently. */ - /* */ - /* palette :: A typeless pointer to the bitmap palette; this */ - /* field is intended for paletted pixel modes. Not */ - /* used currently. */ - /* */ - /* <Note> */ - /* For now, the only pixel modes supported by FreeType are mono and */ - /* grays. However, drivers might be added in the future to support */ - /* more `colorful' options. */ - /* */ - typedef struct FT_Bitmap_ - { - int rows; - int width; - int pitch; - unsigned char* buffer; - short num_grays; - char pixel_mode; - char palette_mode; - void* palette; - - } FT_Bitmap; - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* outline_processing */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Outline */ - /* */ - /* <Description> */ - /* This structure is used to describe an outline to the scan-line */ - /* converter. */ - /* */ - /* <Fields> */ - /* n_contours :: The number of contours in the outline. */ - /* */ - /* n_points :: The number of points in the outline. */ - /* */ - /* points :: A pointer to an array of `n_points' @FT_Vector */ - /* elements, giving the outline's point coordinates. */ - /* */ - /* tags :: A pointer to an array of `n_points' chars, giving */ - /* each outline point's type. If bit 0 is unset, the */ - /* point is `off' the curve, i.e., a Bézier control */ - /* point, while it is `on' when set. */ - /* */ - /* Bit 1 is meaningful for `off' points only. If set, */ - /* it indicates a third-order Bézier arc control point; */ - /* and a second-order control point if unset. */ - /* */ - /* contours :: An array of `n_contours' shorts, giving the end */ - /* point of each contour within the outline. For */ - /* example, the first contour is defined by the points */ - /* `0' to `contours[0]', the second one is defined by */ - /* the points `contours[0]+1' to `contours[1]', etc. */ - /* */ - /* flags :: A set of bit flags used to characterize the outline */ - /* and give hints to the scan-converter and hinter on */ - /* how to convert/grid-fit it. See @FT_OUTLINE_FLAGS. */ - /* */ - typedef struct FT_Outline_ - { - short n_contours; /* number of contours in glyph */ - short n_points; /* number of points in the glyph */ - - FT_Vector* points; /* the outline's points */ - char* tags; /* the points flags */ - short* contours; /* the contour end points */ - - int flags; /* outline masks */ - - } FT_Outline; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_OUTLINE_FLAGS */ - /* */ - /* <Description> */ - /* A list of bit-field constants use for the flags in an outline's */ - /* `flags' field. */ - /* */ - /* <Values> */ - /* FT_OUTLINE_NONE :: Value 0 is reserved. */ - /* */ - /* FT_OUTLINE_OWNER :: If set, this flag indicates that the */ - /* outline's field arrays (i.e., */ - /* `points', `flags' & `contours') are */ - /* `owned' by the outline object, and */ - /* should thus be freed when it is */ - /* destroyed. */ - /* */ - /* FT_OUTLINE_EVEN_ODD_FILL :: By default, outlines are filled using */ - /* the non-zero winding rule. If set to */ - /* 1, the outline will be filled using */ - /* the even-odd fill rule (only works */ - /* with the smooth raster). */ - /* */ - /* FT_OUTLINE_REVERSE_FILL :: By default, outside contours of an */ - /* outline are oriented in clock-wise */ - /* direction, as defined in the TrueType */ - /* specification. This flag is set if */ - /* the outline uses the opposite */ - /* direction (typically for Type 1 */ - /* fonts). This flag is ignored by the */ - /* scan-converter. */ - /* */ - /* FT_OUTLINE_IGNORE_DROPOUTS :: By default, the scan converter will */ - /* try to detect drop-outs in an outline */ - /* and correct the glyph bitmap to */ - /* ensure consistent shape continuity. */ - /* If set, this flag hints the scan-line */ - /* converter to ignore such cases. */ - /* */ - /* FT_OUTLINE_HIGH_PRECISION :: This flag indicates that the */ - /* scan-line converter should try to */ - /* convert this outline to bitmaps with */ - /* the highest possible quality. It is */ - /* typically set for small character */ - /* sizes. Note that this is only a */ - /* hint, that might be completely */ - /* ignored by a given scan-converter. */ - /* */ - /* FT_OUTLINE_SINGLE_PASS :: This flag is set to force a given */ - /* scan-converter to only use a single */ - /* pass over the outline to render a */ - /* bitmap glyph image. Normally, it is */ - /* set for very large character sizes. */ - /* It is only a hint, that might be */ - /* completely ignored by a given */ - /* scan-converter. */ - /* */ -#define FT_OUTLINE_NONE 0x0 -#define FT_OUTLINE_OWNER 0x1 -#define FT_OUTLINE_EVEN_ODD_FILL 0x2 -#define FT_OUTLINE_REVERSE_FILL 0x4 -#define FT_OUTLINE_IGNORE_DROPOUTS 0x8 - -#define FT_OUTLINE_HIGH_PRECISION 0x100 -#define FT_OUTLINE_SINGLE_PASS 0x200 - - - /************************************************************************* - * - * @enum: - * ft_outline_flags - * - * @description: - * These constants are deprecated. Please use the corresponding - * @FT_OUTLINE_FLAGS values. - * - * @values: - * ft_outline_none :: See @FT_OUTLINE_NONE. - * ft_outline_owner :: See @FT_OUTLINE_OWNER. - * ft_outline_even_odd_fill :: See @FT_OUTLINE_EVEN_ODD_FILL. - * ft_outline_reverse_fill :: See @FT_OUTLINE_REVERSE_FILL. - * ft_outline_ignore_dropouts :: See @FT_OUTLINE_IGNORE_DROPOUTS. - * ft_outline_high_precision :: See @FT_OUTLINE_HIGH_PRECISION. - * ft_outline_single_pass :: See @FT_OUTLINE_SINGLE_PASS. - */ -#define ft_outline_none FT_OUTLINE_NONE -#define ft_outline_owner FT_OUTLINE_OWNER -#define ft_outline_even_odd_fill FT_OUTLINE_EVEN_ODD_FILL -#define ft_outline_reverse_fill FT_OUTLINE_REVERSE_FILL -#define ft_outline_ignore_dropouts FT_OUTLINE_IGNORE_DROPOUTS -#define ft_outline_high_precision FT_OUTLINE_HIGH_PRECISION -#define ft_outline_single_pass FT_OUTLINE_SINGLE_PASS - - /* */ - -#define FT_CURVE_TAG( flag ) ( flag & 3 ) - -#define FT_CURVE_TAG_ON 1 -#define FT_CURVE_TAG_CONIC 0 -#define FT_CURVE_TAG_CUBIC 2 - -#define FT_CURVE_TAG_TOUCH_X 8 /* reserved for the TrueType hinter */ -#define FT_CURVE_TAG_TOUCH_Y 16 /* reserved for the TrueType hinter */ - -#define FT_CURVE_TAG_TOUCH_BOTH ( FT_CURVE_TAG_TOUCH_X | \ - FT_CURVE_TAG_TOUCH_Y ) - -#define FT_Curve_Tag_On FT_CURVE_TAG_ON -#define FT_Curve_Tag_Conic FT_CURVE_TAG_CONIC -#define FT_Curve_Tag_Cubic FT_CURVE_TAG_CUBIC -#define FT_Curve_Tag_Touch_X FT_CURVE_TAG_TOUCH_X -#define FT_Curve_Tag_Touch_Y FT_CURVE_TAG_TOUCH_Y - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Outline_MoveToFunc */ - /* */ - /* <Description> */ - /* A function pointer type used to describe the signature of a `move */ - /* to' function during outline walking/decomposition. */ - /* */ - /* A `move to' is emitted to start a new contour in an outline. */ - /* */ - /* <Input> */ - /* to :: A pointer to the target point of the `move to'. */ - /* */ - /* user :: A typeless pointer which is passed from the caller of the */ - /* decomposition function. */ - /* */ - /* <Return> */ - /* Error code. 0 means success. */ - /* */ - typedef int - (*FT_Outline_MoveToFunc)( const FT_Vector* to, - void* user ); - -#define FT_Outline_MoveTo_Func FT_Outline_MoveToFunc - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Outline_LineToFunc */ - /* */ - /* <Description> */ - /* A function pointer type used to describe the signature of a `line */ - /* to' function during outline walking/decomposition. */ - /* */ - /* A `line to' is emitted to indicate a segment in the outline. */ - /* */ - /* <Input> */ - /* to :: A pointer to the target point of the `line to'. */ - /* */ - /* user :: A typeless pointer which is passed from the caller of the */ - /* decomposition function. */ - /* */ - /* <Return> */ - /* Error code. 0 means success. */ - /* */ - typedef int - (*FT_Outline_LineToFunc)( const FT_Vector* to, - void* user ); - -#define FT_Outline_LineTo_Func FT_Outline_LineToFunc - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Outline_ConicToFunc */ - /* */ - /* <Description> */ - /* A function pointer type use to describe the signature of a `conic */ - /* to' function during outline walking/decomposition. */ - /* */ - /* A `conic to' is emitted to indicate a second-order Bézier arc in */ - /* the outline. */ - /* */ - /* <Input> */ - /* control :: An intermediate control point between the last position */ - /* and the new target in `to'. */ - /* */ - /* to :: A pointer to the target end point of the conic arc. */ - /* */ - /* user :: A typeless pointer which is passed from the caller of */ - /* the decomposition function. */ - /* */ - /* <Return> */ - /* Error code. 0 means success. */ - /* */ - typedef int - (*FT_Outline_ConicToFunc)( const FT_Vector* control, - const FT_Vector* to, - void* user ); - -#define FT_Outline_ConicTo_Func FT_Outline_ConicToFunc - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Outline_CubicToFunc */ - /* */ - /* <Description> */ - /* A function pointer type used to describe the signature of a `cubic */ - /* to' function during outline walking/decomposition. */ - /* */ - /* A `cubic to' is emitted to indicate a third-order Bézier arc. */ - /* */ - /* <Input> */ - /* control1 :: A pointer to the first Bézier control point. */ - /* */ - /* control2 :: A pointer to the second Bézier control point. */ - /* */ - /* to :: A pointer to the target end point. */ - /* */ - /* user :: A typeless pointer which is passed from the caller of */ - /* the decomposition function. */ - /* */ - /* <Return> */ - /* Error code. 0 means success. */ - /* */ - typedef int - (*FT_Outline_CubicToFunc)( const FT_Vector* control1, - const FT_Vector* control2, - const FT_Vector* to, - void* user ); - -#define FT_Outline_CubicTo_Func FT_Outline_CubicToFunc - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Outline_Funcs */ - /* */ - /* <Description> */ - /* A structure to hold various function pointers used during outline */ - /* decomposition in order to emit segments, conic, and cubic Béziers, */ - /* as well as `move to' and `close to' operations. */ - /* */ - /* <Fields> */ - /* move_to :: The `move to' emitter. */ - /* */ - /* line_to :: The segment emitter. */ - /* */ - /* conic_to :: The second-order Bézier arc emitter. */ - /* */ - /* cubic_to :: The third-order Bézier arc emitter. */ - /* */ - /* shift :: The shift that is applied to coordinates before they */ - /* are sent to the emitter. */ - /* */ - /* delta :: The delta that is applied to coordinates before they */ - /* are sent to the emitter, but after the shift. */ - /* */ - /* <Note> */ - /* The point coordinates sent to the emitters are the transformed */ - /* version of the original coordinates (this is important for high */ - /* accuracy during scan-conversion). The transformation is simple: */ - /* */ - /* { */ - /* x' = (x << shift) - delta */ - /* y' = (x << shift) - delta */ - /* } */ - /* */ - /* Set the value of `shift' and `delta' to 0 to get the original */ - /* point coordinates. */ - /* */ - typedef struct FT_Outline_Funcs_ - { - FT_Outline_MoveToFunc move_to; - FT_Outline_LineToFunc line_to; - FT_Outline_ConicToFunc conic_to; - FT_Outline_CubicToFunc cubic_to; - - int shift; - FT_Pos delta; - - } FT_Outline_Funcs; - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* basic_types */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Macro> */ - /* FT_IMAGE_TAG */ - /* */ - /* <Description> */ - /* This macro converts four-letter tags to an unsigned long type. */ - /* */ - /* <Note> */ - /* Since many 16bit compilers don't like 32bit enumerations, you */ - /* should redefine this macro in case of problems to something like */ - /* this: */ - /* */ - /* { */ - /* #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value */ - /* } */ - /* */ - /* to get a simple enumeration without assigning special numbers. */ - /* */ -#ifndef FT_IMAGE_TAG -#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \ - value = ( ( (unsigned long)_x1 << 24 ) | \ - ( (unsigned long)_x2 << 16 ) | \ - ( (unsigned long)_x3 << 8 ) | \ - (unsigned long)_x4 ) -#endif /* FT_IMAGE_TAG */ - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Glyph_Format */ - /* */ - /* <Description> */ - /* An enumeration type used to describe the format of a given glyph */ - /* image. Note that this version of FreeType only supports two image */ - /* formats, even though future font drivers will be able to register */ - /* their own format. */ - /* */ - /* <Values> */ - /* FT_GLYPH_FORMAT_NONE :: */ - /* The value 0 is reserved. */ - /* */ - /* FT_GLYPH_FORMAT_COMPOSITE :: */ - /* The glyph image is a composite of several other images. This */ - /* format is _only_ used with @FT_LOAD_NO_RECURSE, and is used to */ - /* report compound glyphs (like accented characters). */ - /* */ - /* FT_GLYPH_FORMAT_BITMAP :: */ - /* The glyph image is a bitmap, and can be described as an */ - /* @FT_Bitmap. You generally need to access the `bitmap' field of */ - /* the @FT_GlyphSlotRec structure to read it. */ - /* */ - /* FT_GLYPH_FORMAT_OUTLINE :: */ - /* The glyph image is a vectorial outline made of line segments */ - /* and Bézier arcs; it can be described as an @FT_Outline; you */ - /* generally want to access the `outline' field of the */ - /* @FT_GlyphSlotRec structure to read it. */ - /* */ - /* FT_GLYPH_FORMAT_PLOTTER :: */ - /* The glyph image is a vectorial path with no inside and outside */ - /* contours. Some Type 1 fonts, like those in the Hershey family, */ - /* contain glyphs in this format. These are described as */ - /* @FT_Outline, but FreeType isn't currently capable of rendering */ - /* them correctly. */ - /* */ - typedef enum FT_Glyph_Format_ - { - FT_IMAGE_TAG( FT_GLYPH_FORMAT_NONE, 0, 0, 0, 0 ), - - FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ), - FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP, 'b', 'i', 't', 's' ), - FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE, 'o', 'u', 't', 'l' ), - FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER, 'p', 'l', 'o', 't' ) - - } FT_Glyph_Format; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* ft_glyph_format_xxx */ - /* */ - /* <Description> */ - /* A list of deprecated constants. Use the corresponding */ - /* @FT_Glyph_Format values instead. */ - /* */ - /* <Values> */ - /* ft_glyph_format_none :: See @FT_GLYPH_FORMAT_NONE. */ - /* ft_glyph_format_composite :: See @FT_GLYPH_FORMAT_COMPOSITE. */ - /* ft_glyph_format_bitmap :: See @FT_GLYPH_FORMAT_BITMAP. */ - /* ft_glyph_format_outline :: See @FT_GLYPH_FORMAT_OUTLINE. */ - /* ft_glyph_format_plotter :: See @FT_GLYPH_FORMAT_PLOTTER. */ - /* */ -#define ft_glyph_format_none FT_GLYPH_FORMAT_NONE -#define ft_glyph_format_composite FT_GLYPH_FORMAT_COMPOSITE -#define ft_glyph_format_bitmap FT_GLYPH_FORMAT_BITMAP -#define ft_glyph_format_outline FT_GLYPH_FORMAT_OUTLINE -#define ft_glyph_format_plotter FT_GLYPH_FORMAT_PLOTTER - - - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** R A S T E R D E F I N I T I O N S *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* A raster is a scan converter, in charge of rendering an outline into */ - /* a a bitmap. This section contains the public API for rasters. */ - /* */ - /* Note that in FreeType 2, all rasters are now encapsulated within */ - /* specific modules called `renderers'. See `freetype/ftrender.h' for */ - /* more details on renderers. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* raster */ - /* */ - /* <Title> */ - /* Scanline Converter */ - /* */ - /* <Abstract> */ - /* How vectorial outlines are converted into bitmaps and pixmaps. */ - /* */ - /* <Description> */ - /* This section contains technical definitions. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Raster */ - /* */ - /* <Description> */ - /* A handle (pointer) to a raster object. Each object can be used */ - /* independently to convert an outline into a bitmap or pixmap. */ - /* */ - typedef struct FT_RasterRec_* FT_Raster; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Span */ - /* */ - /* <Description> */ - /* A structure used to model a single span of gray (or black) pixels */ - /* when rendering a monochrome or anti-aliased bitmap. */ - /* */ - /* <Fields> */ - /* x :: The span's horizontal start position. */ - /* */ - /* len :: The span's length in pixels. */ - /* */ - /* coverage :: The span color/coverage, ranging from 0 (background) */ - /* to 255 (foreground). Only used for anti-aliased */ - /* rendering. */ - /* */ - /* <Note> */ - /* This structure is used by the span drawing callback type named */ - /* @FT_SpanFunc which takes the y-coordinate of the span as a */ - /* a parameter. */ - /* */ - /* The coverage value is always between 0 and 255. */ - /* */ - typedef struct FT_Span_ - { - short x; - unsigned short len; - unsigned char coverage; - - } FT_Span; - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_SpanFunc */ - /* */ - /* <Description> */ - /* A function used as a call-back by the anti-aliased renderer in */ - /* order to let client applications draw themselves the gray pixel */ - /* spans on each scan line. */ - /* */ - /* <Input> */ - /* y :: The scanline's y-coordinate. */ - /* */ - /* count :: The number of spans to draw on this scanline. */ - /* */ - /* spans :: A table of `count' spans to draw on the scanline. */ - /* */ - /* user :: User-supplied data that is passed to the callback. */ - /* */ - /* <Note> */ - /* This callback allows client applications to directly render the */ - /* gray spans of the anti-aliased bitmap to any kind of surfaces. */ - /* */ - /* This can be used to write anti-aliased outlines directly to a */ - /* given background bitmap, and even perform translucency. */ - /* */ - /* Note that the `count' field cannot be greater than a fixed value */ - /* defined by the `FT_MAX_GRAY_SPANS' configuration macro in */ - /* `ftoption.h'. By default, this value is set to 32, which means */ - /* that if there are more than 32 spans on a given scanline, the */ - /* callback is called several times with the same `y' parameter in */ - /* order to draw all callbacks. */ - /* */ - /* Otherwise, the callback is only called once per scan-line, and */ - /* only for those scanlines that do have `gray' pixels on them. */ - /* */ - typedef void - (*FT_SpanFunc)( int y, - int count, - const FT_Span* spans, - void* user ); - -#define FT_Raster_Span_Func FT_SpanFunc - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_BitTest_Func */ - /* */ - /* <Description> */ - /* THIS TYPE IS DEPRECATED. DO NOT USE IT. */ - /* */ - /* A function used as a call-back by the monochrome scan-converter */ - /* to test whether a given target pixel is already set to the drawing */ - /* `color'. These tests are crucial to implement drop-out control */ - /* per-se the TrueType spec. */ - /* */ - /* <Input> */ - /* y :: The pixel's y-coordinate. */ - /* */ - /* x :: The pixel's x-coordinate. */ - /* */ - /* user :: User-supplied data that is passed to the callback. */ - /* */ - /* <Return> */ - /* 1 if the pixel is `set', 0 otherwise. */ - /* */ - typedef int - (*FT_Raster_BitTest_Func)( int y, - int x, - void* user ); - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_BitSet_Func */ - /* */ - /* <Description> */ - /* THIS TYPE IS DEPRECATED. DO NOT USE IT. */ - /* */ - /* A function used as a call-back by the monochrome scan-converter */ - /* to set an individual target pixel. This is crucial to implement */ - /* drop-out control according to the TrueType specification. */ - /* */ - /* <Input> */ - /* y :: The pixel's y-coordinate. */ - /* */ - /* x :: The pixel's x-coordinate. */ - /* */ - /* user :: User-supplied data that is passed to the callback. */ - /* */ - /* <Return> */ - /* 1 if the pixel is `set', 0 otherwise. */ - /* */ - typedef void - (*FT_Raster_BitSet_Func)( int y, - int x, - void* user ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_RASTER_FLAG_XXX */ - /* */ - /* <Description> */ - /* A list of bit flag constants as used in the `flags' field of a */ - /* @FT_Raster_Params structure. */ - /* */ - /* <Values> */ - /* FT_RASTER_FLAG_DEFAULT :: This value is 0. */ - /* */ - /* FT_RASTER_FLAG_AA :: This flag is set to indicate that an */ - /* anti-aliased glyph image should be */ - /* generated. Otherwise, it will be */ - /* monochrome (1-bit). */ - /* */ - /* FT_RASTER_FLAG_DIRECT :: This flag is set to indicate direct */ - /* rendering. In this mode, client */ - /* applications must provide their own span */ - /* callback. This lets them directly */ - /* draw or compose over an existing bitmap. */ - /* If this bit is not set, the target */ - /* pixmap's buffer _must_ be zeroed before */ - /* rendering. */ - /* */ - /* Note that for now, direct rendering is */ - /* only possible with anti-aliased glyphs. */ - /* */ - /* FT_RASTER_FLAG_CLIP :: This flag is only used in direct */ - /* rendering mode. If set, the output will */ - /* be clipped to a box specified in the */ - /* `clip_box' field of the */ - /* @FT_Raster_Params structure. */ - /* */ - /* Note that by default, the glyph bitmap */ - /* is clipped to the target pixmap, except */ - /* in direct rendering mode where all spans */ - /* are generated if no clipping box is set. */ - /* */ -#define FT_RASTER_FLAG_DEFAULT 0x0 -#define FT_RASTER_FLAG_AA 0x1 -#define FT_RASTER_FLAG_DIRECT 0x2 -#define FT_RASTER_FLAG_CLIP 0x4 - - /* deprecated */ -#define ft_raster_flag_default FT_RASTER_FLAG_DEFAULT -#define ft_raster_flag_aa FT_RASTER_FLAG_AA -#define ft_raster_flag_direct FT_RASTER_FLAG_DIRECT -#define ft_raster_flag_clip FT_RASTER_FLAG_CLIP - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Raster_Params */ - /* */ - /* <Description> */ - /* A structure to hold the arguments used by a raster's render */ - /* function. */ - /* */ - /* <Fields> */ - /* target :: The target bitmap. */ - /* */ - /* source :: A pointer to the source glyph image (e.g., an */ - /* @FT_Outline). */ - /* */ - /* flags :: The rendering flags. */ - /* */ - /* gray_spans :: The gray span drawing callback. */ - /* */ - /* black_spans :: The black span drawing callback. */ - /* */ - /* bit_test :: The bit test callback. UNIMPLEMENTED! */ - /* */ - /* bit_set :: The bit set callback. UNIMPLEMENTED! */ - /* */ - /* user :: User-supplied data that is passed to each drawing */ - /* callback. */ - /* */ - /* clip_box :: An optional clipping box. It is only used in */ - /* direct rendering mode. Note that coordinates here */ - /* should be expressed in _integer_ pixels (and not in */ - /* 26.6 fixed-point units). */ - /* */ - /* <Note> */ - /* An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA */ - /* bit flag is set in the `flags' field, otherwise a monochrome */ - /* bitmap is generated. */ - /* */ - /* If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags', the */ - /* raster will call the `gray_spans' callback to draw gray pixel */ - /* spans, in the case of an aa glyph bitmap, it will call */ - /* `black_spans', and `bit_test' and `bit_set' in the case of a */ - /* monochrome bitmap. This allows direct composition over a */ - /* pre-existing bitmap through user-provided callbacks to perform the */ - /* span drawing/composition. */ - /* */ - /* Note that the `bit_test' and `bit_set' callbacks are required when */ - /* rendering a monochrome bitmap, as they are crucial to implement */ - /* correct drop-out control as defined in the TrueType specification. */ - /* */ - typedef struct FT_Raster_Params_ - { - const FT_Bitmap* target; - const void* source; - int flags; - FT_SpanFunc gray_spans; - FT_SpanFunc black_spans; - FT_Raster_BitTest_Func bit_test; /* doesn't work! */ - FT_Raster_BitSet_Func bit_set; /* doesn't work! */ - void* user; - FT_BBox clip_box; - - } FT_Raster_Params; - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_NewFunc */ - /* */ - /* <Description> */ - /* A function used to create a new raster object. */ - /* */ - /* <Input> */ - /* memory :: A handle to the memory allocator. */ - /* */ - /* <Output> */ - /* raster :: A handle to the new raster object. */ - /* */ - /* <Return> */ - /* Error code. 0 means success. */ - /* */ - /* <Note> */ - /* The `memory' parameter is a typeless pointer in order to avoid */ - /* un-wanted dependencies on the rest of the FreeType code. In */ - /* practice, it is an @FT_Memory object, i.e., a handle to the */ - /* standard FreeType memory allocator. However, this field can be */ - /* completely ignored by a given raster implementation. */ - /* */ - typedef int - (*FT_Raster_NewFunc)( void* memory, - FT_Raster* raster ); - -#define FT_Raster_New_Func FT_Raster_NewFunc - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_DoneFunc */ - /* */ - /* <Description> */ - /* A function used to destroy a given raster object. */ - /* */ - /* <Input> */ - /* raster :: A handle to the raster object. */ - /* */ - typedef void - (*FT_Raster_DoneFunc)( FT_Raster raster ); - -#define FT_Raster_Done_Func FT_Raster_DoneFunc - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_ResetFunc */ - /* */ - /* <Description> */ - /* FreeType provides an area of memory called the `render pool', */ - /* available to all registered rasters. This pool can be freely used */ - /* during a given scan-conversion but is shared by all rasters. Its */ - /* content is thus transient. */ - /* */ - /* This function is called each time the render pool changes, or just */ - /* after a new raster object is created. */ - /* */ - /* <Input> */ - /* raster :: A handle to the new raster object. */ - /* */ - /* pool_base :: The address in memory of the render pool. */ - /* */ - /* pool_size :: The size in bytes of the render pool. */ - /* */ - /* <Note> */ - /* Rasters can ignore the render pool and rely on dynamic memory */ - /* allocation if they want to (a handle to the memory allocator is */ - /* passed to the raster constructor). However, this is not */ - /* recommended for efficiency purposes. */ - /* */ - typedef void - (*FT_Raster_ResetFunc)( FT_Raster raster, - unsigned char* pool_base, - unsigned long pool_size ); - -#define FT_Raster_Reset_Func FT_Raster_ResetFunc - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_SetModeFunc */ - /* */ - /* <Description> */ - /* This function is a generic facility to change modes or attributes */ - /* in a given raster. This can be used for debugging purposes, or */ - /* simply to allow implementation-specific `features' in a given */ - /* raster module. */ - /* */ - /* <Input> */ - /* raster :: A handle to the new raster object. */ - /* */ - /* mode :: A 4-byte tag used to name the mode or property. */ - /* */ - /* args :: A pointer to the new mode/property to use. */ - /* */ - typedef int - (*FT_Raster_SetModeFunc)( FT_Raster raster, - unsigned long mode, - void* args ); - -#define FT_Raster_Set_Mode_Func FT_Raster_SetModeFunc - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_RenderFunc */ - /* */ - /* <Description> */ - /* Invokes a given raster to scan-convert a given glyph image into a */ - /* target bitmap. */ - /* */ - /* <Input> */ - /* raster :: A handle to the raster object. */ - /* */ - /* params :: A pointer to an @FT_Raster_Params structure used to */ - /* store the rendering parameters. */ - /* */ - /* <Return> */ - /* Error code. 0 means success. */ - /* */ - /* <Note> */ - /* The exact format of the source image depends on the raster's glyph */ - /* format defined in its @FT_Raster_Funcs structure. It can be an */ - /* @FT_Outline or anything else in order to support a large array of */ - /* glyph formats. */ - /* */ - /* Note also that the render function can fail and return a */ - /* `FT_Err_Unimplemented_Feature' error code if the raster used does */ - /* not support direct composition. */ - /* */ - /* XXX: For now, the standard raster doesn't support direct */ - /* composition but this should change for the final release (see */ - /* the files `demos/src/ftgrays.c' and `demos/src/ftgrays2.c' */ - /* for examples of distinct implementations which support direct */ - /* composition). */ - /* */ - typedef int - (*FT_Raster_RenderFunc)( FT_Raster raster, - const FT_Raster_Params* params ); - -#define FT_Raster_Render_Func FT_Raster_RenderFunc - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Raster_Funcs */ - /* */ - /* <Description> */ - /* A structure used to describe a given raster class to the library. */ - /* */ - /* <Fields> */ - /* glyph_format :: The supported glyph format for this raster. */ - /* */ - /* raster_new :: The raster constructor. */ - /* */ - /* raster_reset :: Used to reset the render pool within the raster. */ - /* */ - /* raster_render :: A function to render a glyph into a given bitmap. */ - /* */ - /* raster_done :: The raster destructor. */ - /* */ - typedef struct FT_Raster_Funcs_ - { - FT_Glyph_Format glyph_format; - FT_Raster_NewFunc raster_new; - FT_Raster_ResetFunc raster_reset; - FT_Raster_SetModeFunc raster_set_mode; - FT_Raster_RenderFunc raster_render; - FT_Raster_DoneFunc raster_done; - - } FT_Raster_Funcs; - - - /* */ - - -FT_END_HEADER - -#endif /* __FTIMAGE_H__ */ - - -/* END */ - - -/* Local Variables: */ -/* coding: utf-8 */ -/* End: */ diff --git a/src/common/freetype/ftincrem.h b/src/common/freetype/ftincrem.h deleted file mode 100644 index 46bc8bdd3..000000000 --- a/src/common/freetype/ftincrem.h +++ /dev/null @@ -1,331 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftincrem.h */ -/* */ -/* FreeType incremental loading (specification). */ -/* */ -/* Copyright 2002, 2003, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTINCREM_H__ -#define __FTINCREM_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - /*************************************************************************** - * - * @section: - * incremental - * - * @title: - * Incremental Loading - * - * @abstract: - * Custom Glyph Loading. - * - * @description: - * This section contains various functions used to perform so-called - * `incremental' glyph loading. This is a mode where all glyphs loaded - * from a given @FT_Face are provided by the client application, - * - * Apart from that, all other tables are loaded normally from the font - * file. This mode is useful when FreeType is used within another - * engine, e.g., a Postscript Imaging Processor. - * - * To enable this mode, you must use @FT_Open_Face, passing an - * @FT_Parameter with the @FT_PARAM_TAG_INCREMENTAL tag and an - * @FT_Incremental_Interface value. See the comments for - * @FT_Incremental_InterfaceRec for an example. - * - */ - - - /*************************************************************************** - * - * @type: - * FT_Incremental - * - * @description: - * An opaque type describing a user-provided object used to implement - * `incremental' glyph loading within FreeType. This is used to support - * embedded fonts in certain environments (e.g., Postscript interpreters), - * where the glyph data isn't in the font file, or must be overridden by - * different values. - * - * @note: - * It is up to client applications to create and implement @FT_Incremental - * objects, as long as they provide implementations for the methods - * @FT_Incremental_GetGlyphDataFunc, @FT_Incremental_FreeGlyphDataFunc - * and @FT_Incremental_GetGlyphMetricsFunc. - * - * See the description of @FT_Incremental_InterfaceRec to understand how - * to use incremental objects with FreeType. - */ - typedef struct FT_IncrementalRec_* FT_Incremental; - - - /*************************************************************************** - * - * @struct: - * FT_Incremental_Metrics - * - * @description: - * A small structure used to contain the basic glyph metrics returned - * by the @FT_Incremental_GetGlyphMetricsFunc method. - * - * @fields: - * bearing_x :: - * Left bearing, in font units. - * - * bearing_y :: - * Top bearing, in font units. - * - * advance :: - * Glyph advance, in font units. - * - * @note: - * These correspond to horizontal or vertical metrics depending on the - * value of the `vertical' argument to the function - * @FT_Incremental_GetGlyphMetricsFunc. - */ - typedef struct FT_Incremental_MetricsRec_ - { - FT_Long bearing_x; - FT_Long bearing_y; - FT_Long advance; - - } FT_Incremental_MetricsRec, *FT_Incremental_Metrics; - - - /*************************************************************************** - * - * @type: - * FT_Incremental_GetGlyphDataFunc - * - * @description: - * A function called by FreeType to access a given glyph's data bytes - * during @FT_Load_Glyph or @FT_Load_Char if incremental loading is - * enabled. - * - * Note that the format of the glyph's data bytes depends on the font - * file format. For TrueType, it must correspond to the raw bytes within - * the `glyf' table. For Postscript formats, it must correspond to the - * *unencrypted* charstring bytes, without any `lenIV' header. It is - * undefined for any other format. - * - * @input: - * incremental :: - * Handle to an opaque @FT_Incremental handle provided by the client - * application. - * - * glyph_index :: - * Index of relevant glyph. - * - * @output: - * adata :: - * A structure describing the returned glyph data bytes (which will be - * accessed as a read-only byte block). - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * If this function returns successfully the method - * @FT_Incremental_FreeGlyphDataFunc will be called later to release - * the data bytes. - * - * Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for - * compound glyphs. - */ - typedef FT_Error - (*FT_Incremental_GetGlyphDataFunc)( FT_Incremental incremental, - FT_UInt glyph_index, - FT_Data* adata ); - - - /*************************************************************************** - * - * @type: - * FT_Incremental_FreeGlyphDataFunc - * - * @description: - * A function used to release the glyph data bytes returned by a - * successful call to @FT_Incremental_GetGlyphDataFunc. - * - * @input: - * incremental :: - * A handle to an opaque @FT_Incremental handle provided by the client - * application. - * - * data :: - * A structure describing the glyph data bytes (which will be accessed - * as a read-only byte block). - */ - typedef void - (*FT_Incremental_FreeGlyphDataFunc)( FT_Incremental incremental, - FT_Data* data ); - - - /*************************************************************************** - * - * @type: - * FT_Incremental_GetGlyphMetricsFunc - * - * @description: - * A function used to retrieve the basic metrics of a given glyph index - * before accessing its data. This is necessary because, in certain - * formats like TrueType, the metrics are stored in a different place from - * the glyph images proper. - * - * @input: - * incremental :: - * A handle to an opaque @FT_Incremental handle provided by the client - * application. - * - * glyph_index :: - * Index of relevant glyph. - * - * vertical :: - * If true, return vertical metrics. - * - * ametrics :: - * This parameter is used for both input and output. - * The original glyph metrics, if any, in font units. If metrics are - * not available all the values must be set to zero. - * - * @output: - * ametrics :: - * The replacement glyph metrics in font units. - * - */ - typedef FT_Error - (*FT_Incremental_GetGlyphMetricsFunc) - ( FT_Incremental incremental, - FT_UInt glyph_index, - FT_Bool vertical, - FT_Incremental_MetricsRec *ametrics ); - - - /************************************************************************** - * - * @struct: - * FT_Incremental_FuncsRec - * - * @description: - * A table of functions for accessing fonts that load data - * incrementally. Used in @FT_Incremental_InterfaceRec. - * - * @fields: - * get_glyph_data :: - * The function to get glyph data. Must not be null. - * - * free_glyph_data :: - * The function to release glyph data. Must not be null. - * - * get_glyph_metrics :: - * The function to get glyph metrics. May be null if the font does - * not provide overriding glyph metrics. - */ - typedef struct FT_Incremental_FuncsRec_ - { - FT_Incremental_GetGlyphDataFunc get_glyph_data; - FT_Incremental_FreeGlyphDataFunc free_glyph_data; - FT_Incremental_GetGlyphMetricsFunc get_glyph_metrics; - - } FT_Incremental_FuncsRec; - - - /*************************************************************************** - * - * @struct: - * FT_Incremental_InterfaceRec - * - * @description: - * A structure to be used with @FT_Open_Face to indicate that the user - * wants to support incremental glyph loading. You should use it with - * @FT_PARAM_TAG_INCREMENTAL as in the following example: - * - * { - * FT_Incremental_InterfaceRec inc_int; - * FT_Parameter parameter; - * FT_Open_Args open_args; - * - * - * // set up incremental descriptor - * inc_int.funcs = my_funcs; - * inc_int.object = my_object; - * - * // set up optional parameter - * parameter.tag = FT_PARAM_TAG_INCREMENTAL; - * parameter.data = &inc_int; - * - * // set up FT_Open_Args structure - * open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; - * open_args.pathname = my_font_pathname; - * open_args.num_params = 1; - * open_args.params = ¶meter; // we use one optional argument - * - * // open the font - * error = FT_Open_Face( library, &open_args, index, &face ); - * ... - * } - */ - typedef struct FT_Incremental_InterfaceRec_ - { - const FT_Incremental_FuncsRec* funcs; - FT_Incremental object; - - } FT_Incremental_InterfaceRec; - - - /*************************************************************************** - * - * @type: - * FT_Incremental_Interface - * - * @description: - * A pointer to an @FT_Incremental_InterfaceRec structure. - * - */ - typedef FT_Incremental_InterfaceRec* FT_Incremental_Interface; - - - /*************************************************************************** - * - * @constant: - * FT_PARAM_TAG_INCREMENTAL - * - * @description: - * A constant used as the tag of @FT_Parameter structures to indicate - * an incremental loading object to be used by FreeType. - * - */ -#define FT_PARAM_TAG_INCREMENTAL FT_MAKE_TAG( 'i', 'n', 'c', 'r' ) - - /* */ - -FT_END_HEADER - -#endif /* __FTINCREM_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftlcdfil.h b/src/common/freetype/ftlcdfil.h deleted file mode 100644 index 9a61377a3..000000000 --- a/src/common/freetype/ftlcdfil.h +++ /dev/null @@ -1,166 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftlcdfil.h */ -/* */ -/* FreeType API for color filtering of subpixel bitmap glyphs */ -/* (specification). */ -/* */ -/* Copyright 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FT_LCD_FILTER_H__ -#define __FT_LCD_FILTER_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - - -FT_BEGIN_HEADER - - /*************************************************************************** - * - * @section: - * lcd_filtering - * - * @title: - * LCD Filtering - * - * @abstract: - * Reduce color fringes of LCD-optimized bitmaps. - * - * @description: - * The @FT_Library_SetLcdFilter API can be used to specify a low-pass - * filter which is then applied to LCD-optimized bitmaps generated - * through @FT_Render_Glyph. This is useful to reduce color fringes - * which would occur with unfiltered rendering. - * - * Note that no filter is active by default, and that this function is - * *not* implemented in default builds of the library. You need to - * #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your `ftoption.h' file - * in order to activate it. - */ - - - /**************************************************************************** - * - * @func: - * FT_LcdFilter - * - * @description: - * A list of values to identify various types of LCD filters. - * - * @values: - * FT_LCD_FILTER_NONE :: - * Do not perform filtering. When used with subpixel rendering, this - * results in sometimes severe color fringes. - * - * FT_LCD_FILTER_DEFAULT :: - * The default filter reduces color fringes considerably, at the cost - * of a slight blurriness in the output. - * - * FT_LCD_FILTER_LIGHT :: - * The light filter is a variant that produces less blurriness at the - * cost of slightly more color fringes than the default one. It might - * be better, depending on taste, your monitor, or your personal vision. - * - * FT_LCD_FILTER_LEGACY :: - * This filter corresponds to the original libXft color filter. It - * provides high contrast output but can exhibit really bad color - * fringes if glyphs are not extremely well hinted to the pixel grid. - * In other words, it only works well if the TrueType bytecode - * interpreter is enabled *and* high-quality hinted fonts are used. - * - * This filter is only provided for comparison purposes, and might be - * disabled or stay unsupported in the future. - * - * @since: - * 2.3.0 - */ - typedef enum - { - FT_LCD_FILTER_NONE = 0, - FT_LCD_FILTER_DEFAULT = 1, - FT_LCD_FILTER_LIGHT = 2, - FT_LCD_FILTER_LEGACY = 16, - - FT_LCD_FILTER_MAX /* do not remove */ - - } FT_LcdFilter; - - - /************************************************************************** - * - * @func: - * FT_Library_SetLcdFilter - * - * @description: - * This function is used to apply color filtering to LCD decimated - * bitmaps, like the ones used when calling @FT_Render_Glyph with - * @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V. - * - * @input: - * library :: - * A handle to the target library instance. - * - * filter :: - * The filter type. - * - * You can use @FT_LCD_FILTER_NONE here to disable this feature, or - * @FT_LCD_FILTER_DEFAULT to use a default filter that should work - * well on most LCD screens. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * This feature is always disabled by default. Clients must make an - * explicit call to this function with a `filter' value other than - * @FT_LCD_FILTER_NONE in order to enable it. - * - * Due to *PATENTS* covering subpixel rendering, this function doesn't - * do anything except returning `FT_Err_Unimplemented_Feature' if the - * configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not - * defined in your build of the library, which should correspond to all - * default builds of FreeType. - * - * The filter affects glyph bitmaps rendered through @FT_Render_Glyph, - * @FT_Outline_Get_Bitmap, @FT_Load_Glyph, and @FT_Load_Char. - * - * It does _not_ affect the output of @FT_Outline_Render and - * @FT_Outline_Get_Bitmap. - * - * If this feature is activated, the dimensions of LCD glyph bitmaps are - * either larger or taller than the dimensions of the corresponding - * outline with regards to the pixel grid. For example, for - * @FT_RENDER_MODE_LCD, the filter adds up to 3 pixels to the left, and - * up to 3 pixels to the right. - * - * The bitmap offset values are adjusted correctly, so clients shouldn't - * need to modify their layout and glyph positioning code when enabling - * the filter. - * - * @since: - * 2.3.0 - */ - FT_EXPORT( FT_Error ) - FT_Library_SetLcdFilter( FT_Library library, - FT_LcdFilter filter ); - - /* */ - - -FT_END_HEADER - -#endif /* __FT_LCD_FILTER_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftlist.h b/src/common/freetype/ftlist.h deleted file mode 100644 index f3223ee8f..000000000 --- a/src/common/freetype/ftlist.h +++ /dev/null @@ -1,273 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftlist.h */ -/* */ -/* Generic list support for FreeType (specification). */ -/* */ -/* Copyright 1996-2001, 2003, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This file implements functions relative to list processing. Its */ - /* data structures are defined in `freetype.h'. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTLIST_H__ -#define __FTLIST_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* list_processing */ - /* */ - /* <Title> */ - /* List Processing */ - /* */ - /* <Abstract> */ - /* Simple management of lists. */ - /* */ - /* <Description> */ - /* This section contains various definitions related to list */ - /* processing using doubly-linked nodes. */ - /* */ - /* <Order> */ - /* FT_List */ - /* FT_ListNode */ - /* FT_ListRec */ - /* FT_ListNodeRec */ - /* */ - /* FT_List_Add */ - /* FT_List_Insert */ - /* FT_List_Find */ - /* FT_List_Remove */ - /* FT_List_Up */ - /* FT_List_Iterate */ - /* FT_List_Iterator */ - /* FT_List_Finalize */ - /* FT_List_Destructor */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Find */ - /* */ - /* <Description> */ - /* Finds the list node for a given listed object. */ - /* */ - /* <Input> */ - /* list :: A pointer to the parent list. */ - /* data :: The address of the listed object. */ - /* */ - /* <Return> */ - /* List node. NULL if it wasn't found. */ - /* */ - FT_EXPORT( FT_ListNode ) - FT_List_Find( FT_List list, - void* data ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Add */ - /* */ - /* <Description> */ - /* Appends an element to the end of a list. */ - /* */ - /* <InOut> */ - /* list :: A pointer to the parent list. */ - /* node :: The node to append. */ - /* */ - FT_EXPORT( void ) - FT_List_Add( FT_List list, - FT_ListNode node ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Insert */ - /* */ - /* <Description> */ - /* Inserts an element at the head of a list. */ - /* */ - /* <InOut> */ - /* list :: A pointer to parent list. */ - /* node :: The node to insert. */ - /* */ - FT_EXPORT( void ) - FT_List_Insert( FT_List list, - FT_ListNode node ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Remove */ - /* */ - /* <Description> */ - /* Removes a node from a list. This function doesn't check whether */ - /* the node is in the list! */ - /* */ - /* <Input> */ - /* node :: The node to remove. */ - /* */ - /* <InOut> */ - /* list :: A pointer to the parent list. */ - /* */ - FT_EXPORT( void ) - FT_List_Remove( FT_List list, - FT_ListNode node ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Up */ - /* */ - /* <Description> */ - /* Moves a node to the head/top of a list. Used to maintain LRU */ - /* lists. */ - /* */ - /* <InOut> */ - /* list :: A pointer to the parent list. */ - /* node :: The node to move. */ - /* */ - FT_EXPORT( void ) - FT_List_Up( FT_List list, - FT_ListNode node ); - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_List_Iterator */ - /* */ - /* <Description> */ - /* An FT_List iterator function which is called during a list parse */ - /* by @FT_List_Iterate. */ - /* */ - /* <Input> */ - /* node :: The current iteration list node. */ - /* */ - /* user :: A typeless pointer passed to @FT_List_Iterate. */ - /* Can be used to point to the iteration's state. */ - /* */ - typedef FT_Error - (*FT_List_Iterator)( FT_ListNode node, - void* user ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Iterate */ - /* */ - /* <Description> */ - /* Parses a list and calls a given iterator function on each element. */ - /* Note that parsing is stopped as soon as one of the iterator calls */ - /* returns a non-zero value. */ - /* */ - /* <Input> */ - /* list :: A handle to the list. */ - /* iterator :: An iterator function, called on each node of the list. */ - /* user :: A user-supplied field which is passed as the second */ - /* argument to the iterator. */ - /* */ - /* <Return> */ - /* The result (a FreeType error code) of the last iterator call. */ - /* */ - FT_EXPORT( FT_Error ) - FT_List_Iterate( FT_List list, - FT_List_Iterator iterator, - void* user ); - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_List_Destructor */ - /* */ - /* <Description> */ - /* An @FT_List iterator function which is called during a list */ - /* finalization by @FT_List_Finalize to destroy all elements in a */ - /* given list. */ - /* */ - /* <Input> */ - /* system :: The current system object. */ - /* */ - /* data :: The current object to destroy. */ - /* */ - /* user :: A typeless pointer passed to @FT_List_Iterate. It can */ - /* be used to point to the iteration's state. */ - /* */ - typedef void - (*FT_List_Destructor)( FT_Memory memory, - void* data, - void* user ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Finalize */ - /* */ - /* <Description> */ - /* Destroys all elements in the list as well as the list itself. */ - /* */ - /* <Input> */ - /* list :: A handle to the list. */ - /* */ - /* destroy :: A list destructor that will be applied to each element */ - /* of the list. */ - /* */ - /* memory :: The current memory object which handles deallocation. */ - /* */ - /* user :: A user-supplied field which is passed as the last */ - /* argument to the destructor. */ - /* */ - FT_EXPORT( void ) - FT_List_Finalize( FT_List list, - FT_List_Destructor destroy, - FT_Memory memory, - void* user ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FTLIST_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftlzw.h b/src/common/freetype/ftlzw.h deleted file mode 100644 index d950653eb..000000000 --- a/src/common/freetype/ftlzw.h +++ /dev/null @@ -1,99 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftlzw.h */ -/* */ -/* LZW-compressed stream support. */ -/* */ -/* Copyright 2004, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTLZW_H__ -#define __FTLZW_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - /*************************************************************************/ - /* */ - /* <Section> */ - /* lzw */ - /* */ - /* <Title> */ - /* LZW Streams */ - /* */ - /* <Abstract> */ - /* Using LZW-compressed font files. */ - /* */ - /* <Description> */ - /* This section contains the declaration of LZW-specific functions. */ - /* */ - /*************************************************************************/ - - /************************************************************************ - * - * @function: - * FT_Stream_OpenLZW - * - * @description: - * Open a new stream to parse LZW-compressed font files. This is - * mainly used to support the compressed `*.pcf.Z' fonts that come - * with XFree86. - * - * @input: - * stream :: The target embedding stream. - * - * source :: The source stream. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * The source stream must be opened _before_ calling this function. - * - * Calling the internal function `FT_Stream_Close' on the new stream will - * *not* call `FT_Stream_Close' on the source stream. None of the stream - * objects will be released to the heap. - * - * The stream implementation is very basic and resets the decompression - * process each time seeking backwards is needed within the stream - * - * In certain builds of the library, LZW compression recognition is - * automatically handled when calling @FT_New_Face or @FT_Open_Face. - * This means that if no font driver is capable of handling the raw - * compressed file, the library will try to open a LZW stream from it - * and re-open the face with it. - * - * This function may return `FT_Err_Unimplemented_Feature' if your build - * of FreeType was not compiled with LZW support. - */ - FT_EXPORT( FT_Error ) - FT_Stream_OpenLZW( FT_Stream stream, - FT_Stream source ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTLZW_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftmac.h b/src/common/freetype/ftmac.h deleted file mode 100644 index 3c6fafe55..000000000 --- a/src/common/freetype/ftmac.h +++ /dev/null @@ -1,272 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftmac.h */ -/* */ -/* Additional Mac-specific API. */ -/* */ -/* Copyright 1996-2001, 2004, 2006, 2007 by */ -/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* NOTE: Include this file after <freetype/freetype.h> and after the */ -/* Mac-specific <Types.h> header (or any other Mac header that */ -/* includes <Types.h>); we use Handle type. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTMAC_H__ -#define __FTMAC_H__ - - -#include <ft2build.h> - - -FT_BEGIN_HEADER - - -/* gcc-3.4.1 and later can warn about functions tagged as deprecated */ -#ifndef FT_DEPRECATED_ATTRIBUTE -#if defined(__GNUC__) && \ - ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))) -#define FT_DEPRECATED_ATTRIBUTE __attribute__((deprecated)) -#else -#define FT_DEPRECATED_ATTRIBUTE -#endif -#endif - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* mac_specific */ - /* */ - /* <Title> */ - /* Mac Specific Interface */ - /* */ - /* <Abstract> */ - /* Only available on the Macintosh. */ - /* */ - /* <Description> */ - /* The following definitions are only available if FreeType is */ - /* compiled on a Macintosh. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Face_From_FOND */ - /* */ - /* <Description> */ - /* Create a new face object from a FOND resource. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* fond :: A FOND resource. */ - /* */ - /* face_index :: Only supported for the -1 `sanity check' special */ - /* case. */ - /* */ - /* <Output> */ - /* aface :: A handle to a new face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Notes> */ - /* This function can be used to create @FT_Face objects from fonts */ - /* that are installed in the system as follows. */ - /* */ - /* { */ - /* fond = GetResource( 'FOND', fontName ); */ - /* error = FT_New_Face_From_FOND( library, fond, 0, &face ); */ - /* } */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Face_From_FOND( FT_Library library, - Handle fond, - FT_Long face_index, - FT_Face *aface ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_GetFile_From_Mac_Name */ - /* */ - /* <Description> */ - /* Return an FSSpec for the disk file containing the named font. */ - /* */ - /* <Input> */ - /* fontName :: Mac OS name of the font (e.g., Times New Roman */ - /* Bold). */ - /* */ - /* <Output> */ - /* pathSpec :: FSSpec to the file. For passing to */ - /* @FT_New_Face_From_FSSpec. */ - /* */ - /* face_index :: Index of the face. For passing to */ - /* @FT_New_Face_From_FSSpec. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_GetFile_From_Mac_Name( const char* fontName, - FSSpec* pathSpec, - FT_Long* face_index ) - FT_DEPRECATED_ATTRIBUTE; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_GetFile_From_Mac_ATS_Name */ - /* */ - /* <Description> */ - /* Return an FSSpec for the disk file containing the named font. */ - /* */ - /* <Input> */ - /* fontName :: Mac OS name of the font in ATS framework. */ - /* */ - /* <Output> */ - /* pathSpec :: FSSpec to the file. For passing to */ - /* @FT_New_Face_From_FSSpec. */ - /* */ - /* face_index :: Index of the face. For passing to */ - /* @FT_New_Face_From_FSSpec. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_GetFile_From_Mac_ATS_Name( const char* fontName, - FSSpec* pathSpec, - FT_Long* face_index ) - FT_DEPRECATED_ATTRIBUTE; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_GetFilePath_From_Mac_ATS_Name */ - /* */ - /* <Description> */ - /* Return a pathname of the disk file and face index for given font */ - /* name which is handled by ATS framework. */ - /* */ - /* <Input> */ - /* fontName :: Mac OS name of the font in ATS framework. */ - /* */ - /* <Output> */ - /* path :: Buffer to store pathname of the file. For passing */ - /* to @FT_New_Face. The client must allocate this */ - /* buffer before calling this function. */ - /* */ - /* maxPathSize :: Lengths of the buffer `path' that client allocated. */ - /* */ - /* face_index :: Index of the face. For passing to @FT_New_Face. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_GetFilePath_From_Mac_ATS_Name( const char* fontName, - UInt8* path, - UInt32 maxPathSize, - FT_Long* face_index ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Face_From_FSSpec */ - /* */ - /* <Description> */ - /* Create a new face object from a given resource and typeface index */ - /* using an FSSpec to the font file. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* spec :: FSSpec to the font file. */ - /* */ - /* face_index :: The index of the face within the resource. The */ - /* first face has index 0. */ - /* <Output> */ - /* aface :: A handle to a new face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* @FT_New_Face_From_FSSpec is identical to @FT_New_Face except */ - /* it accepts an FSSpec instead of a path. */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Face_From_FSSpec( FT_Library library, - const FSSpec *spec, - FT_Long face_index, - FT_Face *aface ) - FT_DEPRECATED_ATTRIBUTE; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Face_From_FSRef */ - /* */ - /* <Description> */ - /* Create a new face object from a given resource and typeface index */ - /* using an FSRef to the font file. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* spec :: FSRef to the font file. */ - /* */ - /* face_index :: The index of the face within the resource. The */ - /* first face has index 0. */ - /* <Output> */ - /* aface :: A handle to a new face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* @FT_New_Face_From_FSRef is identical to @FT_New_Face except */ - /* it accepts an FSRef instead of a path. */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Face_From_FSRef( FT_Library library, - const FSRef *ref, - FT_Long face_index, - FT_Face *aface ) - FT_DEPRECATED_ATTRIBUTE; - - /* */ - - -FT_END_HEADER - - -#endif /* __FTMAC_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftmm.h b/src/common/freetype/ftmm.h deleted file mode 100644 index a9ccfe713..000000000 --- a/src/common/freetype/ftmm.h +++ /dev/null @@ -1,378 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftmm.h */ -/* */ -/* FreeType Multiple Master font interface (specification). */ -/* */ -/* Copyright 1996-2001, 2003, 2004, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTMM_H__ -#define __FTMM_H__ - - -#include <ft2build.h> -#include FT_TYPE1_TABLES_H - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* multiple_masters */ - /* */ - /* <Title> */ - /* Multiple Masters */ - /* */ - /* <Abstract> */ - /* How to manage Multiple Masters fonts. */ - /* */ - /* <Description> */ - /* The following types and functions are used to manage Multiple */ - /* Master fonts, i.e., the selection of specific design instances by */ - /* setting design axis coordinates. */ - /* */ - /* George Williams has extended this interface to make it work with */ - /* both Type 1 Multiple Masters fonts and GX distortable (var) */ - /* fonts. Some of these routines only work with MM fonts, others */ - /* will work with both types. They are similar enough that a */ - /* consistent interface makes sense. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_MM_Axis */ - /* */ - /* <Description> */ - /* A simple structure used to model a given axis in design space for */ - /* Multiple Masters fonts. */ - /* */ - /* This structure can't be used for GX var fonts. */ - /* */ - /* <Fields> */ - /* name :: The axis's name. */ - /* */ - /* minimum :: The axis's minimum design coordinate. */ - /* */ - /* maximum :: The axis's maximum design coordinate. */ - /* */ - typedef struct FT_MM_Axis_ - { - FT_String* name; - FT_Long minimum; - FT_Long maximum; - - } FT_MM_Axis; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Multi_Master */ - /* */ - /* <Description> */ - /* A structure used to model the axes and space of a Multiple Masters */ - /* font. */ - /* */ - /* This structure can't be used for GX var fonts. */ - /* */ - /* <Fields> */ - /* num_axis :: Number of axes. Cannot exceed 4. */ - /* */ - /* num_designs :: Number of designs; should be normally 2^num_axis */ - /* even though the Type 1 specification strangely */ - /* allows for intermediate designs to be present. This */ - /* number cannot exceed 16. */ - /* */ - /* axis :: A table of axis descriptors. */ - /* */ - typedef struct FT_Multi_Master_ - { - FT_UInt num_axis; - FT_UInt num_designs; - FT_MM_Axis axis[T1_MAX_MM_AXIS]; - - } FT_Multi_Master; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Var_Axis */ - /* */ - /* <Description> */ - /* A simple structure used to model a given axis in design space for */ - /* Multiple Masters and GX var fonts. */ - /* */ - /* <Fields> */ - /* name :: The axis's name. */ - /* Not always meaningful for GX. */ - /* */ - /* minimum :: The axis's minimum design coordinate. */ - /* */ - /* def :: The axis's default design coordinate. */ - /* FreeType computes meaningful default values for MM; it */ - /* is then an integer value, not in 16.16 format. */ - /* */ - /* maximum :: The axis's maximum design coordinate. */ - /* */ - /* tag :: The axis's tag (the GX equivalent to `name'). */ - /* FreeType provides default values for MM if possible. */ - /* */ - /* strid :: The entry in `name' table (another GX version of */ - /* `name'). */ - /* Not meaningful for MM. */ - /* */ - typedef struct FT_Var_Axis_ - { - FT_String* name; - - FT_Fixed minimum; - FT_Fixed def; - FT_Fixed maximum; - - FT_ULong tag; - FT_UInt strid; - - } FT_Var_Axis; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Var_Named_Style */ - /* */ - /* <Description> */ - /* A simple structure used to model a named style in a GX var font. */ - /* */ - /* This structure can't be used for MM fonts. */ - /* */ - /* <Fields> */ - /* coords :: The design coordinates for this style. */ - /* This is an array with one entry for each axis. */ - /* */ - /* strid :: The entry in `name' table identifying this style. */ - /* */ - typedef struct FT_Var_Named_Style_ - { - FT_Fixed* coords; - FT_UInt strid; - - } FT_Var_Named_Style; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_MM_Var */ - /* */ - /* <Description> */ - /* A structure used to model the axes and space of a Multiple Masters */ - /* or GX var distortable font. */ - /* */ - /* Some fields are specific to one format and not to the other. */ - /* */ - /* <Fields> */ - /* num_axis :: The number of axes. The maximum value is 4 for */ - /* MM; no limit in GX. */ - /* */ - /* num_designs :: The number of designs; should be normally */ - /* 2^num_axis for MM fonts. Not meaningful for GX */ - /* (where every glyph could have a different */ - /* number of designs). */ - /* */ - /* num_namedstyles :: The number of named styles; only meaningful for */ - /* GX which allows certain design coordinates to */ - /* have a string ID (in the `name' table) */ - /* associated with them. The font can tell the */ - /* user that, for example, Weight=1.5 is `Bold'. */ - /* */ - /* axis :: A table of axis descriptors. */ - /* GX fonts contain slightly more data than MM. */ - /* */ - /* namedstyles :: A table of named styles. */ - /* Only meaningful with GX. */ - /* */ - typedef struct FT_MM_Var_ - { - FT_UInt num_axis; - FT_UInt num_designs; - FT_UInt num_namedstyles; - FT_Var_Axis* axis; - FT_Var_Named_Style* namedstyle; - - } FT_MM_Var; - - - /* */ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Multi_Master */ - /* */ - /* <Description> */ - /* Retrieves the Multiple Master descriptor of a given font. */ - /* */ - /* This function can't be used with GX fonts. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face. */ - /* */ - /* <Output> */ - /* amaster :: The Multiple Masters descriptor. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Multi_Master( FT_Face face, - FT_Multi_Master *amaster ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_MM_Var */ - /* */ - /* <Description> */ - /* Retrieves the Multiple Master/GX var descriptor of a given font. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face. */ - /* */ - /* <Output> */ - /* amaster :: The Multiple Masters descriptor. */ - /* Allocates a data structure, which the user must free */ - /* (a single call to FT_FREE will do it). */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_MM_Var( FT_Face face, - FT_MM_Var* *amaster ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_MM_Design_Coordinates */ - /* */ - /* <Description> */ - /* For Multiple Masters fonts, choose an interpolated font design */ - /* through design coordinates. */ - /* */ - /* This function can't be used with GX fonts. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face. */ - /* */ - /* <Input> */ - /* num_coords :: The number of design coordinates (must be equal to */ - /* the number of axes in the font). */ - /* */ - /* coords :: An array of design coordinates. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_MM_Design_Coordinates( FT_Face face, - FT_UInt num_coords, - FT_Long* coords ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Var_Design_Coordinates */ - /* */ - /* <Description> */ - /* For Multiple Master or GX Var fonts, choose an interpolated font */ - /* design through design coordinates. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face. */ - /* */ - /* <Input> */ - /* num_coords :: The number of design coordinates (must be equal to */ - /* the number of axes in the font). */ - /* */ - /* coords :: An array of design coordinates. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_Var_Design_Coordinates( FT_Face face, - FT_UInt num_coords, - FT_Fixed* coords ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_MM_Blend_Coordinates */ - /* */ - /* <Description> */ - /* For Multiple Masters and GX var fonts, choose an interpolated font */ - /* design through normalized blend coordinates. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face. */ - /* */ - /* <Input> */ - /* num_coords :: The number of design coordinates (must be equal to */ - /* the number of axes in the font). */ - /* */ - /* coords :: The design coordinates array (each element must be */ - /* between 0 and 1.0). */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_MM_Blend_Coordinates( FT_Face face, - FT_UInt num_coords, - FT_Fixed* coords ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Var_Blend_Coordinates */ - /* */ - /* <Description> */ - /* This is another name of @FT_Set_MM_Blend_Coordinates. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_Var_Blend_Coordinates( FT_Face face, - FT_UInt num_coords, - FT_Fixed* coords ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FTMM_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftmodapi.h b/src/common/freetype/ftmodapi.h deleted file mode 100644 index 9cc32aff4..000000000 --- a/src/common/freetype/ftmodapi.h +++ /dev/null @@ -1,406 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftmodapi.h */ -/* */ -/* FreeType modules public interface (specification). */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTMODAPI_H__ -#define __FTMODAPI_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* module_management */ - /* */ - /* <Title> */ - /* Module Management */ - /* */ - /* <Abstract> */ - /* How to add, upgrade, and remove modules from FreeType. */ - /* */ - /* <Description> */ - /* The definitions below are used to manage modules within FreeType. */ - /* Modules can be added, upgraded, and removed at runtime. */ - /* */ - /*************************************************************************/ - - - /* module bit flags */ -#define FT_MODULE_FONT_DRIVER 1 /* this module is a font driver */ -#define FT_MODULE_RENDERER 2 /* this module is a renderer */ -#define FT_MODULE_HINTER 4 /* this module is a glyph hinter */ -#define FT_MODULE_STYLER 8 /* this module is a styler */ - -#define FT_MODULE_DRIVER_SCALABLE 0x100 /* the driver supports */ - /* scalable fonts */ -#define FT_MODULE_DRIVER_NO_OUTLINES 0x200 /* the driver does not */ - /* support vector outlines */ -#define FT_MODULE_DRIVER_HAS_HINTER 0x400 /* the driver provides its */ - /* own hinter */ - - - /* deprecated values */ -#define ft_module_font_driver FT_MODULE_FONT_DRIVER -#define ft_module_renderer FT_MODULE_RENDERER -#define ft_module_hinter FT_MODULE_HINTER -#define ft_module_styler FT_MODULE_STYLER - -#define ft_module_driver_scalable FT_MODULE_DRIVER_SCALABLE -#define ft_module_driver_no_outlines FT_MODULE_DRIVER_NO_OUTLINES -#define ft_module_driver_has_hinter FT_MODULE_DRIVER_HAS_HINTER - - - typedef FT_Pointer FT_Module_Interface; - - typedef FT_Error - (*FT_Module_Constructor)( FT_Module module ); - - typedef void - (*FT_Module_Destructor)( FT_Module module ); - - typedef FT_Module_Interface - (*FT_Module_Requester)( FT_Module module, - const char* name ); - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Module_Class */ - /* */ - /* <Description> */ - /* The module class descriptor. */ - /* */ - /* <Fields> */ - /* module_flags :: Bit flags describing the module. */ - /* */ - /* module_size :: The size of one module object/instance in */ - /* bytes. */ - /* */ - /* module_name :: The name of the module. */ - /* */ - /* module_version :: The version, as a 16.16 fixed number */ - /* (major.minor). */ - /* */ - /* module_requires :: The version of FreeType this module requires, */ - /* as a 16.16 fixed number (major.minor). Starts */ - /* at version 2.0, i.e., 0x20000. */ - /* */ - /* module_init :: A function used to initialize (not create) a */ - /* new module object. */ - /* */ - /* module_done :: A function used to finalize (not destroy) a */ - /* given module object */ - /* */ - /* get_interface :: Queries a given module for a specific */ - /* interface by name. */ - /* */ - typedef struct FT_Module_Class_ - { - FT_ULong module_flags; - FT_Long module_size; - const FT_String* module_name; - FT_Fixed module_version; - FT_Fixed module_requires; - - const void* module_interface; - - FT_Module_Constructor module_init; - FT_Module_Destructor module_done; - FT_Module_Requester get_interface; - - } FT_Module_Class; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Add_Module */ - /* */ - /* <Description> */ - /* Adds a new module to a given library instance. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library object. */ - /* */ - /* <Input> */ - /* clazz :: A pointer to class descriptor for the module. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* An error will be returned if a module already exists by that name, */ - /* or if the module requires a version of FreeType that is too great. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Add_Module( FT_Library library, - const FT_Module_Class* clazz ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Module */ - /* */ - /* <Description> */ - /* Finds a module by its name. */ - /* */ - /* <Input> */ - /* library :: A handle to the library object. */ - /* */ - /* module_name :: The module's name (as an ASCII string). */ - /* */ - /* <Return> */ - /* A module handle. 0 if none was found. */ - /* */ - /* <Note> */ - /* FreeType's internal modules aren't documented very well, and you */ - /* should look up the source code for details. */ - /* */ - FT_EXPORT( FT_Module ) - FT_Get_Module( FT_Library library, - const char* module_name ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Remove_Module */ - /* */ - /* <Description> */ - /* Removes a given module from a library instance. */ - /* */ - /* <InOut> */ - /* library :: A handle to a library object. */ - /* */ - /* <Input> */ - /* module :: A handle to a module object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The module object is destroyed by the function in case of success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Remove_Module( FT_Library library, - FT_Module module ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Library */ - /* */ - /* <Description> */ - /* This function is used to create a new FreeType library instance */ - /* from a given memory object. It is thus possible to use libraries */ - /* with distinct memory allocators within the same program. */ - /* */ - /* <Input> */ - /* memory :: A handle to the original memory object. */ - /* */ - /* <Output> */ - /* alibrary :: A pointer to handle of a new library object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Library( FT_Memory memory, - FT_Library *alibrary ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_Library */ - /* */ - /* <Description> */ - /* Discards a given library object. This closes all drivers and */ - /* discards all resource objects. */ - /* */ - /* <Input> */ - /* library :: A handle to the target library. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Done_Library( FT_Library library ); - -/* */ - - typedef void - (*FT_DebugHook_Func)( void* arg ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Debug_Hook */ - /* */ - /* <Description> */ - /* Sets a debug hook function for debugging the interpreter of a font */ - /* format. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library object. */ - /* */ - /* <Input> */ - /* hook_index :: The index of the debug hook. You should use the */ - /* values defined in `ftobjs.h', e.g., */ - /* `FT_DEBUG_HOOK_TRUETYPE'. */ - /* */ - /* debug_hook :: The function used to debug the interpreter. */ - /* */ - /* <Note> */ - /* Currently, four debug hook slots are available, but only two (for */ - /* the TrueType and the Type 1 interpreter) are defined. */ - /* */ - /* Since the internal headers of FreeType are no longer installed, */ - /* the symbol `FT_DEBUG_HOOK_TRUETYPE' isn't available publicly. */ - /* This is a bug and will be fixed in a forthcoming release. */ - /* */ - FT_EXPORT( void ) - FT_Set_Debug_Hook( FT_Library library, - FT_UInt hook_index, - FT_DebugHook_Func debug_hook ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Add_Default_Modules */ - /* */ - /* <Description> */ - /* Adds the set of default drivers to a given library object. */ - /* This is only useful when you create a library object with */ - /* @FT_New_Library (usually to plug a custom memory manager). */ - /* */ - /* <InOut> */ - /* library :: A handle to a new library object. */ - /* */ - FT_EXPORT( void ) - FT_Add_Default_Modules( FT_Library library ); - - - - /************************************************************************** - * - * @section: - * truetype_engine - * - * @title: - * The TrueType Engine - * - * @abstract: - * TrueType bytecode support. - * - * @description: - * This section contains a function used to query the level of TrueType - * bytecode support compiled in this version of the library. - * - */ - - - /************************************************************************** - * - * @enum: - * FT_TrueTypeEngineType - * - * @description: - * A list of values describing which kind of TrueType bytecode - * engine is implemented in a given FT_Library instance. It is used - * by the @FT_Get_TrueType_Engine_Type function. - * - * @values: - * FT_TRUETYPE_ENGINE_TYPE_NONE :: - * The library doesn't implement any kind of bytecode interpreter. - * - * FT_TRUETYPE_ENGINE_TYPE_UNPATENTED :: - * The library implements a bytecode interpreter that doesn't - * support the patented operations of the TrueType virtual machine. - * - * Its main use is to load certain Asian fonts which position and - * scale glyph components with bytecode instructions. It produces - * bad output for most other fonts. - * - * FT_TRUETYPE_ENGINE_TYPE_PATENTED :: - * The library implements a bytecode interpreter that covers - * the full instruction set of the TrueType virtual machine. - * See the file `docs/PATENTS' for legal aspects. - * - * @since: - * 2.2 - * - */ - typedef enum - { - FT_TRUETYPE_ENGINE_TYPE_NONE = 0, - FT_TRUETYPE_ENGINE_TYPE_UNPATENTED, - FT_TRUETYPE_ENGINE_TYPE_PATENTED - - } FT_TrueTypeEngineType; - - - /************************************************************************** - * - * @func: - * FT_Get_TrueType_Engine_Type - * - * @description: - * Return a @FT_TrueTypeEngineType value to indicate which level of - * the TrueType virtual machine a given library instance supports. - * - * @input: - * library :: - * A library instance. - * - * @return: - * A value indicating which level is supported. - * - * @since: - * 2.2 - * - */ - FT_EXPORT( FT_TrueTypeEngineType ) - FT_Get_TrueType_Engine_Type( FT_Library library ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FTMODAPI_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftmoderr.h b/src/common/freetype/ftmoderr.h deleted file mode 100644 index b0115dd0d..000000000 --- a/src/common/freetype/ftmoderr.h +++ /dev/null @@ -1,155 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftmoderr.h */ -/* */ -/* FreeType module error offsets (specification). */ -/* */ -/* Copyright 2001, 2002, 2003, 2004, 2005 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This file is used to define the FreeType module error offsets. */ - /* */ - /* The lower byte gives the error code, the higher byte gives the */ - /* module. The base module has error offset 0. For example, the error */ - /* `FT_Err_Invalid_File_Format' has value 0x003, the error */ - /* `TT_Err_Invalid_File_Format' has value 0x1103, the error */ - /* `T1_Err_Invalid_File_Format' has value 0x1203, etc. */ - /* */ - /* Undefine the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in ftoption.h */ - /* to make the higher byte always zero (disabling the module error */ - /* mechanism). */ - /* */ - /* It can also be used to create a module error message table easily */ - /* with something like */ - /* */ - /* { */ - /* #undef __FTMODERR_H__ */ - /* #define FT_MODERRDEF( e, v, s ) { FT_Mod_Err_ ## e, s }, */ - /* #define FT_MODERR_START_LIST { */ - /* #define FT_MODERR_END_LIST { 0, 0 } }; */ - /* */ - /* const struct */ - /* { */ - /* int mod_err_offset; */ - /* const char* mod_err_msg */ - /* } ft_mod_errors[] = */ - /* */ - /* #include FT_MODULE_ERRORS_H */ - /* } */ - /* */ - /* To use such a table, all errors must be ANDed with 0xFF00 to remove */ - /* the error code. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTMODERR_H__ -#define __FTMODERR_H__ - - - /*******************************************************************/ - /*******************************************************************/ - /***** *****/ - /***** SETUP MACROS *****/ - /***** *****/ - /*******************************************************************/ - /*******************************************************************/ - - -#undef FT_NEED_EXTERN_C - -#ifndef FT_MODERRDEF - -#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS -#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = v, -#else -#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = 0, -#endif - -#define FT_MODERR_START_LIST enum { -#define FT_MODERR_END_LIST FT_Mod_Err_Max }; - -#ifdef __cplusplus -#define FT_NEED_EXTERN_C - extern "C" { -#endif - -#endif /* !FT_MODERRDEF */ - - - /*******************************************************************/ - /*******************************************************************/ - /***** *****/ - /***** LIST MODULE ERROR BASES *****/ - /***** *****/ - /*******************************************************************/ - /*******************************************************************/ - - -#ifdef FT_MODERR_START_LIST - FT_MODERR_START_LIST -#endif - - - FT_MODERRDEF( Base, 0x000, "base module" ) - FT_MODERRDEF( Autofit, 0x100, "autofitter module" ) - FT_MODERRDEF( BDF, 0x200, "BDF module" ) - FT_MODERRDEF( Cache, 0x300, "cache module" ) - FT_MODERRDEF( CFF, 0x400, "CFF module" ) - FT_MODERRDEF( CID, 0x500, "CID module" ) - FT_MODERRDEF( Gzip, 0x600, "Gzip module" ) - FT_MODERRDEF( LZW, 0x700, "LZW module" ) - FT_MODERRDEF( OTvalid, 0x800, "OpenType validation module" ) - FT_MODERRDEF( PCF, 0x900, "PCF module" ) - FT_MODERRDEF( PFR, 0xA00, "PFR module" ) - FT_MODERRDEF( PSaux, 0xB00, "PS auxiliary module" ) - FT_MODERRDEF( PShinter, 0xC00, "PS hinter module" ) - FT_MODERRDEF( PSnames, 0xD00, "PS names module" ) - FT_MODERRDEF( Raster, 0xE00, "raster module" ) - FT_MODERRDEF( SFNT, 0xF00, "SFNT module" ) - FT_MODERRDEF( Smooth, 0x1000, "smooth raster module" ) - FT_MODERRDEF( TrueType, 0x1100, "TrueType module" ) - FT_MODERRDEF( Type1, 0x1200, "Type 1 module" ) - FT_MODERRDEF( Type42, 0x1300, "Type 42 module" ) - FT_MODERRDEF( Winfonts, 0x1400, "Windows FON/FNT module" ) - - -#ifdef FT_MODERR_END_LIST - FT_MODERR_END_LIST -#endif - - - /*******************************************************************/ - /*******************************************************************/ - /***** *****/ - /***** CLEANUP *****/ - /***** *****/ - /*******************************************************************/ - /*******************************************************************/ - - -#ifdef FT_NEED_EXTERN_C - } -#endif - -#undef FT_MODERR_START_LIST -#undef FT_MODERR_END_LIST -#undef FT_MODERRDEF -#undef FT_NEED_EXTERN_C - - -#endif /* __FTMODERR_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftotval.h b/src/common/freetype/ftotval.h deleted file mode 100644 index 7c488fdf4..000000000 --- a/src/common/freetype/ftotval.h +++ /dev/null @@ -1,198 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftotval.h */ -/* */ -/* FreeType API for validating OpenType tables (specification). */ -/* */ -/* Copyright 2004, 2005, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* */ -/* Warning: This module might be moved to a different library in the */ -/* future to avoid a tight dependency between FreeType and the */ -/* OpenType specification. */ -/* */ -/* */ -/***************************************************************************/ - - -#ifndef __FTOTVAL_H__ -#define __FTOTVAL_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* ot_validation */ - /* */ - /* <Title> */ - /* OpenType Validation */ - /* */ - /* <Abstract> */ - /* An API to validate OpenType tables. */ - /* */ - /* <Description> */ - /* This section contains the declaration of functions to validate */ - /* some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF). */ - /* */ - /*************************************************************************/ - - - /********************************************************************** - * - * @enum: - * FT_VALIDATE_OTXXX - * - * @description: - * A list of bit-field constants used with @FT_OpenType_Validate to - * indicate which OpenType tables should be validated. - * - * @values: - * FT_VALIDATE_BASE :: - * Validate BASE table. - * - * FT_VALIDATE_GDEF :: - * Validate GDEF table. - * - * FT_VALIDATE_GPOS :: - * Validate GPOS table. - * - * FT_VALIDATE_GSUB :: - * Validate GSUB table. - * - * FT_VALIDATE_JSTF :: - * Validate JSTF table. - * - * FT_VALIDATE_OT :: - * Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF). - * - */ -#define FT_VALIDATE_BASE 0x0100 -#define FT_VALIDATE_GDEF 0x0200 -#define FT_VALIDATE_GPOS 0x0400 -#define FT_VALIDATE_GSUB 0x0800 -#define FT_VALIDATE_JSTF 0x1000 - -#define FT_VALIDATE_OT FT_VALIDATE_BASE | \ - FT_VALIDATE_GDEF | \ - FT_VALIDATE_GPOS | \ - FT_VALIDATE_GSUB | \ - FT_VALIDATE_JSTF - - /* */ - - /********************************************************************** - * - * @function: - * FT_OpenType_Validate - * - * @description: - * Validate various OpenType tables to assure that all offsets and - * indices are valid. The idea is that a higher-level library which - * actually does the text layout can access those tables without - * error checking (which can be quite time consuming). - * - * @input: - * face :: - * A handle to the input face. - * - * validation_flags :: - * A bit field which specifies the tables to be validated. See - * @FT_VALIDATE_OTXXX for possible values. - * - * @output: - * BASE_table :: - * A pointer to the BASE table. - * - * GDEF_table :: - * A pointer to the GDEF table. - * - * GPOS_table :: - * A pointer to the GPOS table. - * - * GSUB_table :: - * A pointer to the GSUB table. - * - * JSTF_table :: - * A pointer to the JSTF table. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * This function only works with OpenType fonts, returning an error - * otherwise. - * - * After use, the application should deallocate the five tables with - * @FT_OpenType_Free. A NULL value indicates that the table either - * doesn't exist in the font, or the application hasn't asked for - * validation. - */ - FT_EXPORT( FT_Error ) - FT_OpenType_Validate( FT_Face face, - FT_UInt validation_flags, - FT_Bytes *BASE_table, - FT_Bytes *GDEF_table, - FT_Bytes *GPOS_table, - FT_Bytes *GSUB_table, - FT_Bytes *JSTF_table ); - - /* */ - - /********************************************************************** - * - * @function: - * FT_OpenType_Free - * - * @description: - * Free the buffer allocated by OpenType validator. - * - * @input: - * face :: - * A handle to the input face. - * - * table :: - * The pointer to the buffer that is allocated by - * @FT_OpenType_Validate. - * - * @note: - * This function must be used to free the buffer allocated by - * @FT_OpenType_Validate only. - */ - FT_EXPORT( void ) - FT_OpenType_Free( FT_Face face, - FT_Bytes table ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FTOTVAL_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftoutln.h b/src/common/freetype/ftoutln.h deleted file mode 100644 index 786ae13ed..000000000 --- a/src/common/freetype/ftoutln.h +++ /dev/null @@ -1,526 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftoutln.h */ -/* */ -/* Support for the FT_Outline type used to store glyph shapes of */ -/* most scalable font formats (specification). */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2005, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTOUTLN_H__ -#define __FTOUTLN_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* outline_processing */ - /* */ - /* <Title> */ - /* Outline Processing */ - /* */ - /* <Abstract> */ - /* Functions to create, transform, and render vectorial glyph images. */ - /* */ - /* <Description> */ - /* This section contains routines used to create and destroy scalable */ - /* glyph images known as `outlines'. These can also be measured, */ - /* transformed, and converted into bitmaps and pixmaps. */ - /* */ - /* <Order> */ - /* FT_Outline */ - /* FT_OUTLINE_FLAGS */ - /* FT_Outline_New */ - /* FT_Outline_Done */ - /* FT_Outline_Copy */ - /* FT_Outline_Translate */ - /* FT_Outline_Transform */ - /* FT_Outline_Embolden */ - /* FT_Outline_Reverse */ - /* FT_Outline_Check */ - /* */ - /* FT_Outline_Get_CBox */ - /* FT_Outline_Get_BBox */ - /* */ - /* FT_Outline_Get_Bitmap */ - /* FT_Outline_Render */ - /* */ - /* FT_Outline_Decompose */ - /* FT_Outline_Funcs */ - /* FT_Outline_MoveTo_Func */ - /* FT_Outline_LineTo_Func */ - /* FT_Outline_ConicTo_Func */ - /* FT_Outline_CubicTo_Func */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Decompose */ - /* */ - /* <Description> */ - /* Walks over an outline's structure to decompose it into individual */ - /* segments and Bézier arcs. This function is also able to emit */ - /* `move to' and `close to' operations to indicate the start and end */ - /* of new contours in the outline. */ - /* */ - /* <Input> */ - /* outline :: A pointer to the source target. */ - /* */ - /* func_interface :: A table of `emitters', i.e,. function pointers */ - /* called during decomposition to indicate path */ - /* operations. */ - /* */ - /* <InOut> */ - /* user :: A typeless pointer which is passed to each */ - /* emitter during the decomposition. It can be */ - /* used to store the state during the */ - /* decomposition. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Decompose( FT_Outline* outline, - const FT_Outline_Funcs* func_interface, - void* user ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_New */ - /* */ - /* <Description> */ - /* Creates a new outline of a given size. */ - /* */ - /* <Input> */ - /* library :: A handle to the library object from where the */ - /* outline is allocated. Note however that the new */ - /* outline will *not* necessarily be *freed*, when */ - /* destroying the library, by @FT_Done_FreeType. */ - /* */ - /* numPoints :: The maximal number of points within the outline. */ - /* */ - /* numContours :: The maximal number of contours within the outline. */ - /* */ - /* <Output> */ - /* anoutline :: A handle to the new outline. NULL in case of */ - /* error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The reason why this function takes a `library' parameter is simply */ - /* to use the library's memory allocator. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_New( FT_Library library, - FT_UInt numPoints, - FT_Int numContours, - FT_Outline *anoutline ); - - - FT_EXPORT( FT_Error ) - FT_Outline_New_Internal( FT_Memory memory, - FT_UInt numPoints, - FT_Int numContours, - FT_Outline *anoutline ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Done */ - /* */ - /* <Description> */ - /* Destroys an outline created with @FT_Outline_New. */ - /* */ - /* <Input> */ - /* library :: A handle of the library object used to allocate the */ - /* outline. */ - /* */ - /* outline :: A pointer to the outline object to be discarded. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* If the outline's `owner' field is not set, only the outline */ - /* descriptor will be released. */ - /* */ - /* The reason why this function takes an `library' parameter is */ - /* simply to use ft_mem_free(). */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Done( FT_Library library, - FT_Outline* outline ); - - - FT_EXPORT( FT_Error ) - FT_Outline_Done_Internal( FT_Memory memory, - FT_Outline* outline ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Check */ - /* */ - /* <Description> */ - /* Check the contents of an outline descriptor. */ - /* */ - /* <Input> */ - /* outline :: A handle to a source outline. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Check( FT_Outline* outline ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Get_CBox */ - /* */ - /* <Description> */ - /* Returns an outline's `control box'. The control box encloses all */ - /* the outline's points, including Bézier control points. Though it */ - /* coincides with the exact bounding box for most glyphs, it can be */ - /* slightly larger in some situations (like when rotating an outline */ - /* which contains Bézier outside arcs). */ - /* */ - /* Computing the control box is very fast, while getting the bounding */ - /* box can take much more time as it needs to walk over all segments */ - /* and arcs in the outline. To get the latter, you can use the */ - /* `ftbbox' component which is dedicated to this single task. */ - /* */ - /* <Input> */ - /* outline :: A pointer to the source outline descriptor. */ - /* */ - /* <Output> */ - /* acbox :: The outline's control box. */ - /* */ - FT_EXPORT( void ) - FT_Outline_Get_CBox( const FT_Outline* outline, - FT_BBox *acbox ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Translate */ - /* */ - /* <Description> */ - /* Applies a simple translation to the points of an outline. */ - /* */ - /* <InOut> */ - /* outline :: A pointer to the target outline descriptor. */ - /* */ - /* <Input> */ - /* xOffset :: The horizontal offset. */ - /* */ - /* yOffset :: The vertical offset. */ - /* */ - FT_EXPORT( void ) - FT_Outline_Translate( const FT_Outline* outline, - FT_Pos xOffset, - FT_Pos yOffset ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Copy */ - /* */ - /* <Description> */ - /* Copies an outline into another one. Both objects must have the */ - /* same sizes (number of points & number of contours) when this */ - /* function is called. */ - /* */ - /* <Input> */ - /* source :: A handle to the source outline. */ - /* */ - /* <Output> */ - /* target :: A handle to the target outline. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Copy( const FT_Outline* source, - FT_Outline *target ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Transform */ - /* */ - /* <Description> */ - /* Applies a simple 2x2 matrix to all of an outline's points. Useful */ - /* for applying rotations, slanting, flipping, etc. */ - /* */ - /* <InOut> */ - /* outline :: A pointer to the target outline descriptor. */ - /* */ - /* <Input> */ - /* matrix :: A pointer to the transformation matrix. */ - /* */ - /* <Note> */ - /* You can use @FT_Outline_Translate if you need to translate the */ - /* outline's points. */ - /* */ - FT_EXPORT( void ) - FT_Outline_Transform( const FT_Outline* outline, - const FT_Matrix* matrix ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Embolden */ - /* */ - /* <Description> */ - /* Emboldens an outline. The new outline will be at most 4 times */ - /* `strength' pixels wider and higher. You may think of the left and */ - /* bottom borders as unchanged. */ - /* */ - /* Negative `strength' values to reduce the outline thickness are */ - /* possible also. */ - /* */ - /* <InOut> */ - /* outline :: A handle to the target outline. */ - /* */ - /* <Input> */ - /* strength :: How strong the glyph is emboldened. Expressed in */ - /* 26.6 pixel format. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The used algorithm to increase or decrease the thickness of the */ - /* glyph doesn't change the number of points; this means that certain */ - /* situations like acute angles or intersections are sometimes */ - /* handled incorrectly. */ - /* */ - /* Example call: */ - /* */ - /* { */ - /* FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); */ - /* if ( face->slot->format == FT_GLYPH_FORMAT_OUTLINE ) */ - /* FT_Outline_Embolden( &face->slot->outline, strength ); */ - /* } */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Embolden( FT_Outline* outline, - FT_Pos strength ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Reverse */ - /* */ - /* <Description> */ - /* Reverses the drawing direction of an outline. This is used to */ - /* ensure consistent fill conventions for mirrored glyphs. */ - /* */ - /* <InOut> */ - /* outline :: A pointer to the target outline descriptor. */ - /* */ - /* <Note> */ - /* This functions toggles the bit flag @FT_OUTLINE_REVERSE_FILL in */ - /* the outline's `flags' field. */ - /* */ - /* It shouldn't be used by a normal client application, unless it */ - /* knows what it is doing. */ - /* */ - FT_EXPORT( void ) - FT_Outline_Reverse( FT_Outline* outline ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Get_Bitmap */ - /* */ - /* <Description> */ - /* Renders an outline within a bitmap. The outline's image is simply */ - /* OR-ed to the target bitmap. */ - /* */ - /* <Input> */ - /* library :: A handle to a FreeType library object. */ - /* */ - /* outline :: A pointer to the source outline descriptor. */ - /* */ - /* <InOut> */ - /* abitmap :: A pointer to the target bitmap descriptor. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* This function does NOT CREATE the bitmap, it only renders an */ - /* outline image within the one you pass to it! */ - /* */ - /* It will use the raster corresponding to the default glyph format. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Get_Bitmap( FT_Library library, - FT_Outline* outline, - const FT_Bitmap *abitmap ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Render */ - /* */ - /* <Description> */ - /* Renders an outline within a bitmap using the current scan-convert. */ - /* This functions uses an @FT_Raster_Params structure as an argument, */ - /* allowing advanced features like direct composition, translucency, */ - /* etc. */ - /* */ - /* <Input> */ - /* library :: A handle to a FreeType library object. */ - /* */ - /* outline :: A pointer to the source outline descriptor. */ - /* */ - /* <InOut> */ - /* params :: A pointer to an @FT_Raster_Params structure used to */ - /* describe the rendering operation. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* You should know what you are doing and how @FT_Raster_Params works */ - /* to use this function. */ - /* */ - /* The field `params.source' will be set to `outline' before the scan */ - /* converter is called, which means that the value you give to it is */ - /* actually ignored. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Render( FT_Library library, - FT_Outline* outline, - FT_Raster_Params* params ); - - - /************************************************************************** - * - * @enum: - * FT_Orientation - * - * @description: - * A list of values used to describe an outline's contour orientation. - * - * The TrueType and Postscript specifications use different conventions - * to determine whether outline contours should be filled or unfilled. - * - * @values: - * FT_ORIENTATION_TRUETYPE :: - * According to the TrueType specification, clockwise contours must - * be filled, and counter-clockwise ones must be unfilled. - * - * FT_ORIENTATION_POSTSCRIPT :: - * According to the Postscript specification, counter-clockwise contours - * must be filled, and clockwise ones must be unfilled. - * - * FT_ORIENTATION_FILL_RIGHT :: - * This is identical to @FT_ORIENTATION_TRUETYPE, but is used to - * remember that in TrueType, everything that is to the right of - * the drawing direction of a contour must be filled. - * - * FT_ORIENTATION_FILL_LEFT :: - * This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to - * remember that in Postscript, everything that is to the left of - * the drawing direction of a contour must be filled. - * - * FT_ORIENTATION_NONE :: - * The orientation cannot be determined. That is, different parts of - * the glyph have different orientation. - * - */ - typedef enum - { - FT_ORIENTATION_TRUETYPE = 0, - FT_ORIENTATION_POSTSCRIPT = 1, - FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE, - FT_ORIENTATION_FILL_LEFT = FT_ORIENTATION_POSTSCRIPT, - FT_ORIENTATION_NONE - - } FT_Orientation; - - - /************************************************************************** - * - * @function: - * FT_Outline_Get_Orientation - * - * @description: - * This function analyzes a glyph outline and tries to compute its - * fill orientation (see @FT_Orientation). This is done by computing - * the direction of each global horizontal and/or vertical extrema - * within the outline. - * - * Note that this will return @FT_ORIENTATION_TRUETYPE for empty - * outlines. - * - * @input: - * outline :: - * A handle to the source outline. - * - * @return: - * The orientation. - * - */ - FT_EXPORT( FT_Orientation ) - FT_Outline_Get_Orientation( FT_Outline* outline ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FTOUTLN_H__ */ - - -/* END */ - - -/* Local Variables: */ -/* coding: utf-8 */ -/* End: */ diff --git a/src/common/freetype/ftpfr.h b/src/common/freetype/ftpfr.h deleted file mode 100644 index e2801fd0f..000000000 --- a/src/common/freetype/ftpfr.h +++ /dev/null @@ -1,172 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftpfr.h */ -/* */ -/* FreeType API for accessing PFR-specific data (specification only). */ -/* */ -/* Copyright 2002, 2003, 2004, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTPFR_H__ -#define __FTPFR_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* pfr_fonts */ - /* */ - /* <Title> */ - /* PFR Fonts */ - /* */ - /* <Abstract> */ - /* PFR/TrueDoc specific API. */ - /* */ - /* <Description> */ - /* This section contains the declaration of PFR-specific functions. */ - /* */ - /*************************************************************************/ - - - /********************************************************************** - * - * @function: - * FT_Get_PFR_Metrics - * - * @description: - * Return the outline and metrics resolutions of a given PFR face. - * - * @input: - * face :: Handle to the input face. It can be a non-PFR face. - * - * @output: - * aoutline_resolution :: - * Outline resolution. This is equivalent to `face->units_per_EM'. - * Optional (parameter can be NULL). - * - * ametrics_resolution :: - * Metrics resolution. This is equivalent to `outline_resolution' - * for non-PFR fonts. Optional (parameter can be NULL). - * - * ametrics_x_scale :: - * A 16.16 fixed-point number used to scale distance expressed - * in metrics units to device sub-pixels. This is equivalent to - * `face->size->x_scale', but for metrics only. Optional (parameter - * can be NULL) - * - * ametrics_y_scale :: - * Same as `ametrics_x_scale' but for the vertical direction. - * optional (parameter can be NULL) - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * If the input face is not a PFR, this function will return an error. - * However, in all cases, it will return valid values. - */ - FT_EXPORT( FT_Error ) - FT_Get_PFR_Metrics( FT_Face face, - FT_UInt *aoutline_resolution, - FT_UInt *ametrics_resolution, - FT_Fixed *ametrics_x_scale, - FT_Fixed *ametrics_y_scale ); - - - /********************************************************************** - * - * @function: - * FT_Get_PFR_Kerning - * - * @description: - * Return the kerning pair corresponding to two glyphs in a PFR face. - * The distance is expressed in metrics units, unlike the result of - * @FT_Get_Kerning. - * - * @input: - * face :: A handle to the input face. - * - * left :: Index of the left glyph. - * - * right :: Index of the right glyph. - * - * @output: - * avector :: A kerning vector. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * This function always return distances in original PFR metrics - * units. This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED - * mode, which always returns distances converted to outline units. - * - * You can use the value of the `x_scale' and `y_scale' parameters - * returned by @FT_Get_PFR_Metrics to scale these to device sub-pixels. - */ - FT_EXPORT( FT_Error ) - FT_Get_PFR_Kerning( FT_Face face, - FT_UInt left, - FT_UInt right, - FT_Vector *avector ); - - - /********************************************************************** - * - * @function: - * FT_Get_PFR_Advance - * - * @description: - * Return a given glyph advance, expressed in original metrics units, - * from a PFR font. - * - * @input: - * face :: A handle to the input face. - * - * gindex :: The glyph index. - * - * @output: - * aadvance :: The glyph advance in metrics units. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * You can use the `x_scale' or `y_scale' results of @FT_Get_PFR_Metrics - * to convert the advance to device sub-pixels (i.e., 1/64th of pixels). - */ - FT_EXPORT( FT_Error ) - FT_Get_PFR_Advance( FT_Face face, - FT_UInt gindex, - FT_Pos *aadvance ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTPFR_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftrender.h b/src/common/freetype/ftrender.h deleted file mode 100644 index 5b07f08c2..000000000 --- a/src/common/freetype/ftrender.h +++ /dev/null @@ -1,229 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftrender.h */ -/* */ -/* FreeType renderer modules public interface (specification). */ -/* */ -/* Copyright 1996-2001, 2005, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTRENDER_H__ -#define __FTRENDER_H__ - - -#include <ft2build.h> -#include FT_MODULE_H -#include FT_GLYPH_H - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* module_management */ - /* */ - /*************************************************************************/ - - - /* create a new glyph object */ - typedef FT_Error - (*FT_Glyph_InitFunc)( FT_Glyph glyph, - FT_GlyphSlot slot ); - - /* destroys a given glyph object */ - typedef void - (*FT_Glyph_DoneFunc)( FT_Glyph glyph ); - - typedef void - (*FT_Glyph_TransformFunc)( FT_Glyph glyph, - const FT_Matrix* matrix, - const FT_Vector* delta ); - - typedef void - (*FT_Glyph_GetBBoxFunc)( FT_Glyph glyph, - FT_BBox* abbox ); - - typedef FT_Error - (*FT_Glyph_CopyFunc)( FT_Glyph source, - FT_Glyph target ); - - typedef FT_Error - (*FT_Glyph_PrepareFunc)( FT_Glyph glyph, - FT_GlyphSlot slot ); - -/* deprecated */ -#define FT_Glyph_Init_Func FT_Glyph_InitFunc -#define FT_Glyph_Done_Func FT_Glyph_DoneFunc -#define FT_Glyph_Transform_Func FT_Glyph_TransformFunc -#define FT_Glyph_BBox_Func FT_Glyph_GetBBoxFunc -#define FT_Glyph_Copy_Func FT_Glyph_CopyFunc -#define FT_Glyph_Prepare_Func FT_Glyph_PrepareFunc - - - struct FT_Glyph_Class_ - { - FT_Long glyph_size; - FT_Glyph_Format glyph_format; - FT_Glyph_InitFunc glyph_init; - FT_Glyph_DoneFunc glyph_done; - FT_Glyph_CopyFunc glyph_copy; - FT_Glyph_TransformFunc glyph_transform; - FT_Glyph_GetBBoxFunc glyph_bbox; - FT_Glyph_PrepareFunc glyph_prepare; - }; - - - typedef FT_Error - (*FT_Renderer_RenderFunc)( FT_Renderer renderer, - FT_GlyphSlot slot, - FT_UInt mode, - const FT_Vector* origin ); - - typedef FT_Error - (*FT_Renderer_TransformFunc)( FT_Renderer renderer, - FT_GlyphSlot slot, - const FT_Matrix* matrix, - const FT_Vector* delta ); - - - typedef void - (*FT_Renderer_GetCBoxFunc)( FT_Renderer renderer, - FT_GlyphSlot slot, - FT_BBox* cbox ); - - - typedef FT_Error - (*FT_Renderer_SetModeFunc)( FT_Renderer renderer, - FT_ULong mode_tag, - FT_Pointer mode_ptr ); - -/* deprecated identifiers */ -#define FTRenderer_render FT_Renderer_RenderFunc -#define FTRenderer_transform FT_Renderer_TransformFunc -#define FTRenderer_getCBox FT_Renderer_GetCBoxFunc -#define FTRenderer_setMode FT_Renderer_SetModeFunc - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Renderer_Class */ - /* */ - /* <Description> */ - /* The renderer module class descriptor. */ - /* */ - /* <Fields> */ - /* root :: The root @FT_Module_Class fields. */ - /* */ - /* glyph_format :: The glyph image format this renderer handles. */ - /* */ - /* render_glyph :: A method used to render the image that is in a */ - /* given glyph slot into a bitmap. */ - /* */ - /* set_mode :: A method used to pass additional parameters. */ - /* */ - /* raster_class :: For @FT_GLYPH_FORMAT_OUTLINE renderers only. This */ - /* is a pointer to its raster's class. */ - /* */ - /* raster :: For @FT_GLYPH_FORMAT_OUTLINE renderers only. This */ - /* is a pointer to the corresponding raster object, */ - /* if any. */ - /* */ - typedef struct FT_Renderer_Class_ - { - FT_Module_Class root; - - FT_Glyph_Format glyph_format; - - FT_Renderer_RenderFunc render_glyph; - FT_Renderer_TransformFunc transform_glyph; - FT_Renderer_GetCBoxFunc get_glyph_cbox; - FT_Renderer_SetModeFunc set_mode; - - FT_Raster_Funcs* raster_class; - - } FT_Renderer_Class; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Renderer */ - /* */ - /* <Description> */ - /* Retrieves the current renderer for a given glyph format. */ - /* */ - /* <Input> */ - /* library :: A handle to the library object. */ - /* */ - /* format :: The glyph format. */ - /* */ - /* <Return> */ - /* A renderer handle. 0 if none found. */ - /* */ - /* <Note> */ - /* An error will be returned if a module already exists by that name, */ - /* or if the module requires a version of FreeType that is too great. */ - /* */ - /* To add a new renderer, simply use @FT_Add_Module. To retrieve a */ - /* renderer by its name, use @FT_Get_Module. */ - /* */ - FT_EXPORT( FT_Renderer ) - FT_Get_Renderer( FT_Library library, - FT_Glyph_Format format ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Renderer */ - /* */ - /* <Description> */ - /* Sets the current renderer to use, and set additional mode. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library object. */ - /* */ - /* <Input> */ - /* renderer :: A handle to the renderer object. */ - /* */ - /* num_params :: The number of additional parameters. */ - /* */ - /* parameters :: Additional parameters. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* In case of success, the renderer will be used to convert glyph */ - /* images in the renderer's known format into bitmaps. */ - /* */ - /* This doesn't change the current renderer for other formats. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_Renderer( FT_Library library, - FT_Renderer renderer, - FT_UInt num_params, - FT_Parameter* parameters ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FTRENDER_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftsizes.h b/src/common/freetype/ftsizes.h deleted file mode 100644 index 622df162d..000000000 --- a/src/common/freetype/ftsizes.h +++ /dev/null @@ -1,159 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftsizes.h */ -/* */ -/* FreeType size objects management (specification). */ -/* */ -/* Copyright 1996-2001, 2003, 2004, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Typical application would normally not need to use these functions. */ - /* However, they have been placed in a public API for the rare cases */ - /* where they are needed. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTSIZES_H__ -#define __FTSIZES_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* sizes_management */ - /* */ - /* <Title> */ - /* Size Management */ - /* */ - /* <Abstract> */ - /* Managing multiple sizes per face. */ - /* */ - /* <Description> */ - /* When creating a new face object (e.g., with @FT_New_Face), an */ - /* @FT_Size object is automatically created and used to store all */ - /* pixel-size dependent information, available in the `face->size' */ - /* field. */ - /* */ - /* It is however possible to create more sizes for a given face, */ - /* mostly in order to manage several character pixel sizes of the */ - /* same font family and style. See @FT_New_Size and @FT_Done_Size. */ - /* */ - /* Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only */ - /* modify the contents of the current `active' size; you thus need */ - /* to use @FT_Activate_Size to change it. */ - /* */ - /* 99% of applications won't need the functions provided here, */ - /* especially if they use the caching sub-system, so be cautious */ - /* when using these. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Size */ - /* */ - /* <Description> */ - /* Create a new size object from a given face object. */ - /* */ - /* <Input> */ - /* face :: A handle to a parent face object. */ - /* */ - /* <Output> */ - /* asize :: A handle to a new size object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* You need to call @FT_Activate_Size in order to select the new size */ - /* for upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size, */ - /* @FT_Load_Glyph, @FT_Load_Char, etc. */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Size( FT_Face face, - FT_Size* size ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_Size */ - /* */ - /* <Description> */ - /* Discard a given size object. Note that @FT_Done_Face */ - /* automatically discards all size objects allocated with */ - /* @FT_New_Size. */ - /* */ - /* <Input> */ - /* size :: A handle to a target size object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Done_Size( FT_Size size ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Activate_Size */ - /* */ - /* <Description> */ - /* Even though it is possible to create several size objects for a */ - /* given face (see @FT_New_Size for details), functions like */ - /* @FT_Load_Glyph or @FT_Load_Char only use the last-created one to */ - /* determine the `current character pixel size'. */ - /* */ - /* This function can be used to `activate' a previously created size */ - /* object. */ - /* */ - /* <Input> */ - /* size :: A handle to a target size object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* If `face' is the size's parent face object, this function changes */ - /* the value of `face->size' to the input size handle. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Activate_Size( FT_Size size ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTSIZES_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftsnames.h b/src/common/freetype/ftsnames.h deleted file mode 100644 index 003cbcd12..000000000 --- a/src/common/freetype/ftsnames.h +++ /dev/null @@ -1,170 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftsnames.h */ -/* */ -/* Simple interface to access SFNT name tables (which are used */ -/* to hold font names, copyright info, notices, etc.) (specification). */ -/* */ -/* This is _not_ used to retrieve glyph names! */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FT_SFNT_NAMES_H__ -#define __FT_SFNT_NAMES_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* sfnt_names */ - /* */ - /* <Title> */ - /* SFNT Names */ - /* */ - /* <Abstract> */ - /* Access the names embedded in TrueType and OpenType files. */ - /* */ - /* <Description> */ - /* The TrueType and OpenType specification allow the inclusion of */ - /* a special `names table' in font files. This table contains */ - /* textual (and internationalized) information regarding the font, */ - /* like family name, copyright, version, etc. */ - /* */ - /* The definitions below are used to access them if available. */ - /* */ - /* Note that this has nothing to do with glyph names! */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_SfntName */ - /* */ - /* <Description> */ - /* A structure used to model an SFNT `name' table entry. */ - /* */ - /* <Fields> */ - /* platform_id :: The platform ID for `string'. */ - /* */ - /* encoding_id :: The encoding ID for `string'. */ - /* */ - /* language_id :: The language ID for `string'. */ - /* */ - /* name_id :: An identifier for `string'. */ - /* */ - /* string :: The `name' string. Note that its format differs */ - /* depending on the (platform,encoding) pair. It can */ - /* be a Pascal String, a UTF-16 one, etc. */ - /* */ - /* Generally speaking, the string is not */ - /* zero-terminated. Please refer to the TrueType */ - /* specification for details. */ - /* */ - /* string_len :: The length of `string' in bytes. */ - /* */ - /* <Note> */ - /* Possible values for `platform_id', `encoding_id', `language_id', */ - /* and `name_id' are given in the file `ttnameid.h'. For details */ - /* please refer to the TrueType or OpenType specification. */ - /* */ - /* See also @TT_PLATFORM_XXX, @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, */ - /* @TT_ISO_ID_XXX, and @TT_MS_ID_XXX. */ - /* */ - typedef struct FT_SfntName_ - { - FT_UShort platform_id; - FT_UShort encoding_id; - FT_UShort language_id; - FT_UShort name_id; - - FT_Byte* string; /* this string is *not* null-terminated! */ - FT_UInt string_len; /* in bytes */ - - } FT_SfntName; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Sfnt_Name_Count */ - /* */ - /* <Description> */ - /* Retrieves the number of name strings in the SFNT `name' table. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face. */ - /* */ - /* <Return> */ - /* The number of strings in the `name' table. */ - /* */ - FT_EXPORT( FT_UInt ) - FT_Get_Sfnt_Name_Count( FT_Face face ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Sfnt_Name */ - /* */ - /* <Description> */ - /* Retrieves a string of the SFNT `name' table for a given index. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face. */ - /* */ - /* idx :: The index of the `name' string. */ - /* */ - /* <Output> */ - /* aname :: The indexed @FT_SfntName structure. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* The `string' array returned in the `aname' structure is not */ - /* null-terminated. */ - /* */ - /* Use @FT_Get_Sfnt_Name_Count to get the total number of available */ - /* `name' table entries, then do a loop until you get the right */ - /* platform, encoding, and name ID. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Sfnt_Name( FT_Face face, - FT_UInt idx, - FT_SfntName *aname ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FT_SFNT_NAMES_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftstroke.h b/src/common/freetype/ftstroke.h deleted file mode 100644 index 738b43c1a..000000000 --- a/src/common/freetype/ftstroke.h +++ /dev/null @@ -1,716 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftstroke.h */ -/* */ -/* FreeType path stroker (specification). */ -/* */ -/* Copyright 2002, 2003, 2004, 2005, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FT_STROKE_H__ -#define __FT_STROKE_H__ - -#include <ft2build.h> -#include FT_OUTLINE_H -#include FT_GLYPH_H - - -FT_BEGIN_HEADER - - - /************************************************************************ - * - * @section: - * glyph_stroker - * - * @title: - * Glyph Stroker - * - * @abstract: - * Generating bordered and stroked glyphs. - * - * @description: - * This component generates stroked outlines of a given vectorial - * glyph. It also allows you to retrieve the `outside' and/or the - * `inside' borders of the stroke. - * - * This can be useful to generate `bordered' glyph, i.e., glyphs - * displayed with a coloured (and anti-aliased) border around their - * shape. - */ - - - /************************************************************** - * - * @type: - * FT_Stroker - * - * @description: - * Opaque handler to a path stroker object. - */ - typedef struct FT_StrokerRec_* FT_Stroker; - - - /************************************************************** - * - * @enum: - * FT_Stroker_LineJoin - * - * @description: - * These values determine how two joining lines are rendered - * in a stroker. - * - * @values: - * FT_STROKER_LINEJOIN_ROUND :: - * Used to render rounded line joins. Circular arcs are used - * to join two lines smoothly. - * - * FT_STROKER_LINEJOIN_BEVEL :: - * Used to render beveled line joins; i.e., the two joining lines - * are extended until they intersect. - * - * FT_STROKER_LINEJOIN_MITER :: - * Same as beveled rendering, except that an additional line - * break is added if the angle between the two joining lines - * is too closed (this is useful to avoid unpleasant spikes - * in beveled rendering). - */ - typedef enum - { - FT_STROKER_LINEJOIN_ROUND = 0, - FT_STROKER_LINEJOIN_BEVEL, - FT_STROKER_LINEJOIN_MITER - - } FT_Stroker_LineJoin; - - - /************************************************************** - * - * @enum: - * FT_Stroker_LineCap - * - * @description: - * These values determine how the end of opened sub-paths are - * rendered in a stroke. - * - * @values: - * FT_STROKER_LINECAP_BUTT :: - * The end of lines is rendered as a full stop on the last - * point itself. - * - * FT_STROKER_LINECAP_ROUND :: - * The end of lines is rendered as a half-circle around the - * last point. - * - * FT_STROKER_LINECAP_SQUARE :: - * The end of lines is rendered as a square around the - * last point. - */ - typedef enum - { - FT_STROKER_LINECAP_BUTT = 0, - FT_STROKER_LINECAP_ROUND, - FT_STROKER_LINECAP_SQUARE - - } FT_Stroker_LineCap; - - - /************************************************************** - * - * @enum: - * FT_StrokerBorder - * - * @description: - * These values are used to select a given stroke border - * in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder. - * - * @values: - * FT_STROKER_BORDER_LEFT :: - * Select the left border, relative to the drawing direction. - * - * FT_STROKER_BORDER_RIGHT :: - * Select the right border, relative to the drawing direction. - * - * @note: - * Applications are generally interested in the `inside' and `outside' - * borders. However, there is no direct mapping between these and the - * `left' and `right' ones, since this really depends on the glyph's - * drawing orientation, which varies between font formats. - * - * You can however use @FT_Outline_GetInsideBorder and - * @FT_Outline_GetOutsideBorder to get these. - */ - typedef enum - { - FT_STROKER_BORDER_LEFT = 0, - FT_STROKER_BORDER_RIGHT - - } FT_StrokerBorder; - - - /************************************************************** - * - * @function: - * FT_Outline_GetInsideBorder - * - * @description: - * Retrieve the @FT_StrokerBorder value corresponding to the - * `inside' borders of a given outline. - * - * @input: - * outline :: - * The source outline handle. - * - * @return: - * The border index. @FT_STROKER_BORDER_LEFT for empty or invalid - * outlines. - */ - FT_EXPORT( FT_StrokerBorder ) - FT_Outline_GetInsideBorder( FT_Outline* outline ); - - - /************************************************************** - * - * @function: - * FT_Outline_GetOutsideBorder - * - * @description: - * Retrieve the @FT_StrokerBorder value corresponding to the - * `outside' borders of a given outline. - * - * @input: - * outline :: - * The source outline handle. - * - * @return: - * The border index. @FT_STROKER_BORDER_LEFT for empty or invalid - * outlines. - */ - FT_EXPORT( FT_StrokerBorder ) - FT_Outline_GetOutsideBorder( FT_Outline* outline ); - - - /************************************************************** - * - * @function: - * FT_Stroker_New - * - * @description: - * Create a new stroker object. - * - * @input: - * library :: - * FreeType library handle. - * - * @output: - * astroker :: - * A new stroker object handle. NULL in case of error. - * - * @return: - * FreeType error code. 0 means success. - */ - FT_EXPORT( FT_Error ) - FT_Stroker_New( FT_Library library, - FT_Stroker *astroker ); - - - /************************************************************** - * - * @function: - * FT_Stroker_Set - * - * @description: - * Reset a stroker object's attributes. - * - * @input: - * stroker :: - * The target stroker handle. - * - * radius :: - * The border radius. - * - * line_cap :: - * The line cap style. - * - * line_join :: - * The line join style. - * - * miter_limit :: - * The miter limit for the FT_STROKER_LINEJOIN_MITER style, - * expressed as 16.16 fixed point value. - * - * @note: - * The radius is expressed in the same units that the outline - * coordinates. - */ - FT_EXPORT( void ) - FT_Stroker_Set( FT_Stroker stroker, - FT_Fixed radius, - FT_Stroker_LineCap line_cap, - FT_Stroker_LineJoin line_join, - FT_Fixed miter_limit ); - - - /************************************************************** - * - * @function: - * FT_Stroker_Rewind - * - * @description: - * Reset a stroker object without changing its attributes. - * You should call this function before beginning a new - * series of calls to @FT_Stroker_BeginSubPath or - * @FT_Stroker_EndSubPath. - * - * @input: - * stroker :: - * The target stroker handle. - */ - FT_EXPORT( void ) - FT_Stroker_Rewind( FT_Stroker stroker ); - - - /************************************************************** - * - * @function: - * FT_Stroker_ParseOutline - * - * @description: - * A convenience function used to parse a whole outline with - * the stroker. The resulting outline(s) can be retrieved - * later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export. - * - * @input: - * stroker :: - * The target stroker handle. - * - * outline :: - * The source outline. - * - * opened :: - * A boolean. If 1, the outline is treated as an open path instead - * of a closed one. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * If `opened' is 0 (the default), the outline is treated as a closed - * path, and the stroker will generate two distinct `border' outlines. - * - * If `opened' is 1, the outline is processed as an open path, and the - * stroker will generate a single `stroke' outline. - * - * This function calls @FT_Stroker_Rewind automatically. - */ - FT_EXPORT( FT_Error ) - FT_Stroker_ParseOutline( FT_Stroker stroker, - FT_Outline* outline, - FT_Bool opened ); - - - /************************************************************** - * - * @function: - * FT_Stroker_BeginSubPath - * - * @description: - * Start a new sub-path in the stroker. - * - * @input: - * stroker :: - * The target stroker handle. - * - * to :: - * A pointer to the start vector. - * - * open :: - * A boolean. If 1, the sub-path is treated as an open one. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * This function is useful when you need to stroke a path that is - * not stored as an @FT_Outline object. - */ - FT_EXPORT( FT_Error ) - FT_Stroker_BeginSubPath( FT_Stroker stroker, - FT_Vector* to, - FT_Bool open ); - - - /************************************************************** - * - * @function: - * FT_Stroker_EndSubPath - * - * @description: - * Close the current sub-path in the stroker. - * - * @input: - * stroker :: - * The target stroker handle. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * You should call this function after @FT_Stroker_BeginSubPath. - * If the subpath was not `opened', this function will `draw' a - * single line segment to the start position when needed. - */ - FT_EXPORT( FT_Error ) - FT_Stroker_EndSubPath( FT_Stroker stroker ); - - - /************************************************************** - * - * @function: - * FT_Stroker_LineTo - * - * @description: - * `Draw' a single line segment in the stroker's current sub-path, - * from the last position. - * - * @input: - * stroker :: - * The target stroker handle. - * - * to :: - * A pointer to the destination point. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * You should call this function between @FT_Stroker_BeginSubPath and - * @FT_Stroker_EndSubPath. - */ - FT_EXPORT( FT_Error ) - FT_Stroker_LineTo( FT_Stroker stroker, - FT_Vector* to ); - - - /************************************************************** - * - * @function: - * FT_Stroker_ConicTo - * - * @description: - * `Draw' a single quadratic Bézier in the stroker's current sub-path, - * from the last position. - * - * @input: - * stroker :: - * The target stroker handle. - * - * control :: - * A pointer to a Bézier control point. - * - * to :: - * A pointer to the destination point. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * You should call this function between @FT_Stroker_BeginSubPath and - * @FT_Stroker_EndSubPath. - */ - FT_EXPORT( FT_Error ) - FT_Stroker_ConicTo( FT_Stroker stroker, - FT_Vector* control, - FT_Vector* to ); - - - /************************************************************** - * - * @function: - * FT_Stroker_CubicTo - * - * @description: - * `Draw' a single cubic Bézier in the stroker's current sub-path, - * from the last position. - * - * @input: - * stroker :: - * The target stroker handle. - * - * control1 :: - * A pointer to the first Bézier control point. - * - * control2 :: - * A pointer to second Bézier control point. - * - * to :: - * A pointer to the destination point. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * You should call this function between @FT_Stroker_BeginSubPath and - * @FT_Stroker_EndSubPath. - */ - FT_EXPORT( FT_Error ) - FT_Stroker_CubicTo( FT_Stroker stroker, - FT_Vector* control1, - FT_Vector* control2, - FT_Vector* to ); - - - /************************************************************** - * - * @function: - * FT_Stroker_GetBorderCounts - * - * @description: - * Call this function once you have finished parsing your paths - * with the stroker. It will return the number of points and - * contours necessary to export one of the `border' or `stroke' - * outlines generated by the stroker. - * - * @input: - * stroker :: - * The target stroker handle. - * - * border :: - * The border index. - * - * @output: - * anum_points :: - * The number of points. - * - * anum_contours :: - * The number of contours. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * When an outline, or a sub-path, is `closed', the stroker generates - * two independent `border' outlines, named `left' and `right'. - * - * When the outline, or a sub-path, is `opened', the stroker merges - * the `border' outlines with caps. The `left' border receives all - * points, while the `right' border becomes empty. - * - * Use the function @FT_Stroker_GetCounts instead if you want to - * retrieve the counts associated to both borders. - */ - FT_EXPORT( FT_Error ) - FT_Stroker_GetBorderCounts( FT_Stroker stroker, - FT_StrokerBorder border, - FT_UInt *anum_points, - FT_UInt *anum_contours ); - - - /************************************************************** - * - * @function: - * FT_Stroker_ExportBorder - * - * @description: - * Call this function after @FT_Stroker_GetBorderCounts to - * export the corresponding border to your own @FT_Outline - * structure. - * - * Note that this function will append the border points and - * contours to your outline, but will not try to resize its - * arrays. - * - * @input: - * stroker :: - * The target stroker handle. - * - * border :: - * The border index. - * - * outline :: - * The target outline handle. - * - * @note: - * Always call this function after @FT_Stroker_GetBorderCounts to - * get sure that there is enough room in your @FT_Outline object to - * receive all new data. - * - * When an outline, or a sub-path, is `closed', the stroker generates - * two independent `border' outlines, named `left' and `right' - * - * When the outline, or a sub-path, is `opened', the stroker merges - * the `border' outlines with caps. The `left' border receives all - * points, while the `right' border becomes empty. - * - * Use the function @FT_Stroker_Export instead if you want to - * retrieve all borders at once. - */ - FT_EXPORT( void ) - FT_Stroker_ExportBorder( FT_Stroker stroker, - FT_StrokerBorder border, - FT_Outline* outline ); - - - /************************************************************** - * - * @function: - * FT_Stroker_GetCounts - * - * @description: - * Call this function once you have finished parsing your paths - * with the stroker. It returns the number of points and - * contours necessary to export all points/borders from the stroked - * outline/path. - * - * @input: - * stroker :: - * The target stroker handle. - * - * @output: - * anum_points :: - * The number of points. - * - * anum_contours :: - * The number of contours. - * - * @return: - * FreeType error code. 0 means success. - */ - FT_EXPORT( FT_Error ) - FT_Stroker_GetCounts( FT_Stroker stroker, - FT_UInt *anum_points, - FT_UInt *anum_contours ); - - - /************************************************************** - * - * @function: - * FT_Stroker_Export - * - * @description: - * Call this function after @FT_Stroker_GetBorderCounts to - * export the all borders to your own @FT_Outline structure. - * - * Note that this function will append the border points and - * contours to your outline, but will not try to resize its - * arrays. - * - * @input: - * stroker :: - * The target stroker handle. - * - * outline :: - * The target outline handle. - */ - FT_EXPORT( void ) - FT_Stroker_Export( FT_Stroker stroker, - FT_Outline* outline ); - - - /************************************************************** - * - * @function: - * FT_Stroker_Done - * - * @description: - * Destroy a stroker object. - * - * @input: - * stroker :: - * A stroker handle. Can be NULL. - */ - FT_EXPORT( void ) - FT_Stroker_Done( FT_Stroker stroker ); - - - /************************************************************** - * - * @function: - * FT_Glyph_Stroke - * - * @description: - * Stroke a given outline glyph object with a given stroker. - * - * @inout: - * pglyph :: - * Source glyph handle on input, new glyph handle on output. - * - * @input: - * stroker :: - * A stroker handle. - * - * destroy :: - * A Boolean. If 1, the source glyph object is destroyed - * on success. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * The source glyph is untouched in case of error. - */ - FT_EXPORT( FT_Error ) - FT_Glyph_Stroke( FT_Glyph *pglyph, - FT_Stroker stroker, - FT_Bool destroy ); - - - /************************************************************** - * - * @function: - * FT_Glyph_StrokeBorder - * - * @description: - * Stroke a given outline glyph object with a given stroker, but - * only return either its inside or outside border. - * - * @inout: - * pglyph :: - * Source glyph handle on input, new glyph handle on output. - * - * @input: - * stroker :: - * A stroker handle. - * - * inside :: - * A Boolean. If 1, return the inside border, otherwise - * the outside border. - * - * destroy :: - * A Boolean. If 1, the source glyph object is destroyed - * on success. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * The source glyph is untouched in case of error. - */ - FT_EXPORT( FT_Error ) - FT_Glyph_StrokeBorder( FT_Glyph *pglyph, - FT_Stroker stroker, - FT_Bool inside, - FT_Bool destroy ); - - /* */ - -FT_END_HEADER - -#endif /* __FT_STROKE_H__ */ - - -/* END */ - - -/* Local Variables: */ -/* coding: utf-8 */ -/* End: */ diff --git a/src/common/freetype/ftsynth.h b/src/common/freetype/ftsynth.h deleted file mode 100644 index 36984bf1a..000000000 --- a/src/common/freetype/ftsynth.h +++ /dev/null @@ -1,73 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftsynth.h */ -/* */ -/* FreeType synthesizing code for emboldening and slanting */ -/* (specification). */ -/* */ -/* Copyright 2000-2001, 2003, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /********* *********/ - /********* WARNING, THIS IS ALPHA CODE, THIS API *********/ - /********* IS DUE TO CHANGE UNTIL STRICTLY NOTIFIED BY THE *********/ - /********* FREETYPE DEVELOPMENT TEAM *********/ - /********* *********/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - - -#ifndef __FTSYNTH_H__ -#define __FTSYNTH_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - /* Make sure slot owns slot->bitmap. */ - FT_EXPORT( FT_Error ) - FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot ); - - /* Do not use this function directly! Copy the code to */ - /* your application and modify it to suit your need. */ - FT_EXPORT( void ) - FT_GlyphSlot_Embolden( FT_GlyphSlot slot ); - - - FT_EXPORT( void ) - FT_GlyphSlot_Oblique( FT_GlyphSlot slot ); - - /* */ - -FT_END_HEADER - -#endif /* __FTSYNTH_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftsystem.h b/src/common/freetype/ftsystem.h deleted file mode 100644 index 59cd01982..000000000 --- a/src/common/freetype/ftsystem.h +++ /dev/null @@ -1,346 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftsystem.h */ -/* */ -/* FreeType low-level system interface definition (specification). */ -/* */ -/* Copyright 1996-2001, 2002, 2005 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTSYSTEM_H__ -#define __FTSYSTEM_H__ - - -#include <ft2build.h> - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* system_interface */ - /* */ - /* <Title> */ - /* System Interface */ - /* */ - /* <Abstract> */ - /* How FreeType manages memory and i/o. */ - /* */ - /* <Description> */ - /* This section contains various definitions related to memory */ - /* management and i/o access. You need to understand this */ - /* information if you want to use a custom memory manager or you own */ - /* i/o streams. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* M E M O R Y M A N A G E M E N T */ - /* */ - /*************************************************************************/ - - - /************************************************************************* - * - * @type: - * FT_Memory - * - * @description: - * A handle to a given memory manager object, defined with an - * @FT_MemoryRec structure. - * - */ - typedef struct FT_MemoryRec_* FT_Memory; - - - /************************************************************************* - * - * @functype: - * FT_Alloc_Func - * - * @description: - * A function used to allocate `size' bytes from `memory'. - * - * @input: - * memory :: - * A handle to the source memory manager. - * - * size :: - * The size in bytes to allocate. - * - * @return: - * Address of new memory block. 0 in case of failure. - * - */ - typedef void* - (*FT_Alloc_Func)( FT_Memory memory, - long size ); - - - /************************************************************************* - * - * @functype: - * FT_Free_Func - * - * @description: - * A function used to release a given block of memory. - * - * @input: - * memory :: - * A handle to the source memory manager. - * - * block :: - * The address of the target memory block. - * - */ - typedef void - (*FT_Free_Func)( FT_Memory memory, - void* block ); - - - /************************************************************************* - * - * @functype: - * FT_Realloc_Func - * - * @description: - * A function used to re-allocate a given block of memory. - * - * @input: - * memory :: - * A handle to the source memory manager. - * - * cur_size :: - * The block's current size in bytes. - * - * new_size :: - * The block's requested new size. - * - * block :: - * The block's current address. - * - * @return: - * New block address. 0 in case of memory shortage. - * - * @note: - * In case of error, the old block must still be available. - * - */ - typedef void* - (*FT_Realloc_Func)( FT_Memory memory, - long cur_size, - long new_size, - void* block ); - - - /************************************************************************* - * - * @struct: - * FT_MemoryRec - * - * @description: - * A structure used to describe a given memory manager to FreeType 2. - * - * @fields: - * user :: - * A generic typeless pointer for user data. - * - * alloc :: - * A pointer type to an allocation function. - * - * free :: - * A pointer type to an memory freeing function. - * - * realloc :: - * A pointer type to a reallocation function. - * - */ - struct FT_MemoryRec_ - { - void* user; - FT_Alloc_Func alloc; - FT_Free_Func free; - FT_Realloc_Func realloc; - }; - - - /*************************************************************************/ - /* */ - /* I / O M A N A G E M E N T */ - /* */ - /*************************************************************************/ - - - /************************************************************************* - * - * @type: - * FT_Stream - * - * @description: - * A handle to an input stream. - * - */ - typedef struct FT_StreamRec_* FT_Stream; - - - /************************************************************************* - * - * @struct: - * FT_StreamDesc - * - * @description: - * A union type used to store either a long or a pointer. This is used - * to store a file descriptor or a `FILE*' in an input stream. - * - */ - typedef union FT_StreamDesc_ - { - long value; - void* pointer; - - } FT_StreamDesc; - - - /************************************************************************* - * - * @functype: - * FT_Stream_IoFunc - * - * @description: - * A function used to seek and read data from a given input stream. - * - * @input: - * stream :: - * A handle to the source stream. - * - * offset :: - * The offset of read in stream (always from start). - * - * buffer :: - * The address of the read buffer. - * - * count :: - * The number of bytes to read from the stream. - * - * @return: - * The number of bytes effectively read by the stream. - * - * @note: - * This function might be called to perform a seek or skip operation - * with a `count' of 0. - * - */ - typedef unsigned long - (*FT_Stream_IoFunc)( FT_Stream stream, - unsigned long offset, - unsigned char* buffer, - unsigned long count ); - - - /************************************************************************* - * - * @functype: - * FT_Stream_CloseFunc - * - * @description: - * A function used to close a given input stream. - * - * @input: - * stream :: - * A handle to the target stream. - * - */ - typedef void - (*FT_Stream_CloseFunc)( FT_Stream stream ); - - - /************************************************************************* - * - * @struct: - * FT_StreamRec - * - * @description: - * A structure used to describe an input stream. - * - * @input: - * base :: - * For memory-based streams, this is the address of the first stream - * byte in memory. This field should always be set to NULL for - * disk-based streams. - * - * size :: - * The stream size in bytes. - * - * pos :: - * The current position within the stream. - * - * descriptor :: - * This field is a union that can hold an integer or a pointer. It is - * used by stream implementations to store file descriptors or `FILE*' - * pointers. - * - * pathname :: - * This field is completely ignored by FreeType. However, it is often - * useful during debugging to use it to store the stream's filename - * (where available). - * - * read :: - * The stream's input function. - * - * close :: - * The stream;s close function. - * - * memory :: - * The memory manager to use to preload frames. This is set - * internally by FreeType and shouldn't be touched by stream - * implementations. - * - * cursor :: - * This field is set and used internally by FreeType when parsing - * frames. - * - * limit :: - * This field is set and used internally by FreeType when parsing - * frames. - * - */ - typedef struct FT_StreamRec_ - { - unsigned char* base; - unsigned long size; - unsigned long pos; - - FT_StreamDesc descriptor; - FT_StreamDesc pathname; - FT_Stream_IoFunc read; - FT_Stream_CloseFunc close; - - FT_Memory memory; - unsigned char* cursor; - unsigned char* limit; - - } FT_StreamRec; - - - /* */ - - -FT_END_HEADER - -#endif /* __FTSYSTEM_H__ */ - - -/* END */ diff --git a/src/common/freetype/fttrigon.h b/src/common/freetype/fttrigon.h deleted file mode 100644 index 6b77d2ee5..000000000 --- a/src/common/freetype/fttrigon.h +++ /dev/null @@ -1,350 +0,0 @@ -/***************************************************************************/ -/* */ -/* fttrigon.h */ -/* */ -/* FreeType trigonometric functions (specification). */ -/* */ -/* Copyright 2001, 2003, 2005, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTTRIGON_H__ -#define __FTTRIGON_H__ - -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* computations */ - /* */ - /*************************************************************************/ - - - /************************************************************************* - * - * @type: - * FT_Angle - * - * @description: - * This type is used to model angle values in FreeType. Note that the - * angle is a 16.16 fixed float value expressed in degrees. - * - */ - typedef FT_Fixed FT_Angle; - - - /************************************************************************* - * - * @macro: - * FT_ANGLE_PI - * - * @description: - * The angle pi expressed in @FT_Angle units. - * - */ -#define FT_ANGLE_PI ( 180L << 16 ) - - - /************************************************************************* - * - * @macro: - * FT_ANGLE_2PI - * - * @description: - * The angle 2*pi expressed in @FT_Angle units. - * - */ -#define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 ) - - - /************************************************************************* - * - * @macro: - * FT_ANGLE_PI2 - * - * @description: - * The angle pi/2 expressed in @FT_Angle units. - * - */ -#define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 ) - - - /************************************************************************* - * - * @macro: - * FT_ANGLE_PI4 - * - * @description: - * The angle pi/4 expressed in @FT_Angle units. - * - */ -#define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 ) - - - /************************************************************************* - * - * @function: - * FT_Sin - * - * @description: - * Return the sinus of a given angle in fixed point format. - * - * @input: - * angle :: - * The input angle. - * - * @return: - * The sinus value. - * - * @note: - * If you need both the sinus and cosinus for a given angle, use the - * function @FT_Vector_Unit. - * - */ - FT_EXPORT( FT_Fixed ) - FT_Sin( FT_Angle angle ); - - - /************************************************************************* - * - * @function: - * FT_Cos - * - * @description: - * Return the cosinus of a given angle in fixed point format. - * - * @input: - * angle :: - * The input angle. - * - * @return: - * The cosinus value. - * - * @note: - * If you need both the sinus and cosinus for a given angle, use the - * function @FT_Vector_Unit. - * - */ - FT_EXPORT( FT_Fixed ) - FT_Cos( FT_Angle angle ); - - - /************************************************************************* - * - * @function: - * FT_Tan - * - * @description: - * Return the tangent of a given angle in fixed point format. - * - * @input: - * angle :: - * The input angle. - * - * @return: - * The tangent value. - * - */ - FT_EXPORT( FT_Fixed ) - FT_Tan( FT_Angle angle ); - - - /************************************************************************* - * - * @function: - * FT_Atan2 - * - * @description: - * Return the arc-tangent corresponding to a given vector (x,y) in - * the 2d plane. - * - * @input: - * x :: - * The horizontal vector coordinate. - * - * y :: - * The vertical vector coordinate. - * - * @return: - * The arc-tangent value (i.e. angle). - * - */ - FT_EXPORT( FT_Angle ) - FT_Atan2( FT_Fixed x, - FT_Fixed y ); - - - /************************************************************************* - * - * @function: - * FT_Angle_Diff - * - * @description: - * Return the difference between two angles. The result is always - * constrained to the ]-PI..PI] interval. - * - * @input: - * angle1 :: - * First angle. - * - * angle2 :: - * Second angle. - * - * @return: - * Constrained value of `value2-value1'. - * - */ - FT_EXPORT( FT_Angle ) - FT_Angle_Diff( FT_Angle angle1, - FT_Angle angle2 ); - - - /************************************************************************* - * - * @function: - * FT_Vector_Unit - * - * @description: - * Return the unit vector corresponding to a given angle. After the - * call, the value of `vec.x' will be `sin(angle)', and the value of - * `vec.y' will be `cos(angle)'. - * - * This function is useful to retrieve both the sinus and cosinus of a - * given angle quickly. - * - * @output: - * vec :: - * The address of target vector. - * - * @input: - * angle :: - * The address of angle. - * - */ - FT_EXPORT( void ) - FT_Vector_Unit( FT_Vector* vec, - FT_Angle angle ); - - - /************************************************************************* - * - * @function: - * FT_Vector_Rotate - * - * @description: - * Rotate a vector by a given angle. - * - * @inout: - * vec :: - * The address of target vector. - * - * @input: - * angle :: - * The address of angle. - * - */ - FT_EXPORT( void ) - FT_Vector_Rotate( FT_Vector* vec, - FT_Angle angle ); - - - /************************************************************************* - * - * @function: - * FT_Vector_Length - * - * @description: - * Return the length of a given vector. - * - * @input: - * vec :: - * The address of target vector. - * - * @return: - * The vector length, expressed in the same units that the original - * vector coordinates. - * - */ - FT_EXPORT( FT_Fixed ) - FT_Vector_Length( FT_Vector* vec ); - - - /************************************************************************* - * - * @function: - * FT_Vector_Polarize - * - * @description: - * Compute both the length and angle of a given vector. - * - * @input: - * vec :: - * The address of source vector. - * - * @output: - * length :: - * The vector length. - * - * angle :: - * The vector angle. - * - */ - FT_EXPORT( void ) - FT_Vector_Polarize( FT_Vector* vec, - FT_Fixed *length, - FT_Angle *angle ); - - - /************************************************************************* - * - * @function: - * FT_Vector_From_Polar - * - * @description: - * Compute vector coordinates from a length and angle. - * - * @output: - * vec :: - * The address of source vector. - * - * @input: - * length :: - * The vector length. - * - * angle :: - * The vector angle. - * - */ - FT_EXPORT( void ) - FT_Vector_From_Polar( FT_Vector* vec, - FT_Fixed length, - FT_Angle angle ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTTRIGON_H__ */ - - -/* END */ diff --git a/src/common/freetype/fttypes.h b/src/common/freetype/fttypes.h deleted file mode 100644 index 2340bacd3..000000000 --- a/src/common/freetype/fttypes.h +++ /dev/null @@ -1,583 +0,0 @@ -/***************************************************************************/ -/* */ -/* fttypes.h */ -/* */ -/* FreeType simple types definitions (specification only). */ -/* */ -/* Copyright 1996-2001, 2002, 2004, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTTYPES_H__ -#define __FTTYPES_H__ - - -#include <ft2build.h> -#include FT_CONFIG_CONFIG_H -#include FT_SYSTEM_H -#include FT_IMAGE_H - -#include <stddef.h> - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* basic_types */ - /* */ - /* <Title> */ - /* Basic Data Types */ - /* */ - /* <Abstract> */ - /* The basic data types defined by the library. */ - /* */ - /* <Description> */ - /* This section contains the basic data types defined by FreeType 2, */ - /* ranging from simple scalar types to bitmap descriptors. More */ - /* font-specific structures are defined in a different section. */ - /* */ - /* <Order> */ - /* FT_Byte */ - /* FT_Bytes */ - /* FT_Char */ - /* FT_Int */ - /* FT_UInt */ - /* FT_Short */ - /* FT_UShort */ - /* FT_Long */ - /* FT_ULong */ - /* FT_Bool */ - /* FT_Offset */ - /* FT_PtrDist */ - /* FT_String */ - /* FT_Tag */ - /* FT_Error */ - /* FT_Fixed */ - /* FT_Pointer */ - /* FT_Pos */ - /* FT_Vector */ - /* FT_BBox */ - /* FT_Matrix */ - /* FT_FWord */ - /* FT_UFWord */ - /* FT_F2Dot14 */ - /* FT_UnitVector */ - /* FT_F26Dot6 */ - /* */ - /* */ - /* FT_Generic */ - /* FT_Generic_Finalizer */ - /* */ - /* FT_Bitmap */ - /* FT_Pixel_Mode */ - /* FT_Palette_Mode */ - /* FT_Glyph_Format */ - /* FT_IMAGE_TAG */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Bool */ - /* */ - /* <Description> */ - /* A typedef of unsigned char, used for simple booleans. As usual, */ - /* values 1 and 0 represent true and false, respectively. */ - /* */ - typedef unsigned char FT_Bool; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_FWord */ - /* */ - /* <Description> */ - /* A signed 16-bit integer used to store a distance in original font */ - /* units. */ - /* */ - typedef signed short FT_FWord; /* distance in FUnits */ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_UFWord */ - /* */ - /* <Description> */ - /* An unsigned 16-bit integer used to store a distance in original */ - /* font units. */ - /* */ - typedef unsigned short FT_UFWord; /* unsigned distance */ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Char */ - /* */ - /* <Description> */ - /* A simple typedef for the _signed_ char type. */ - /* */ - typedef signed char FT_Char; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Byte */ - /* */ - /* <Description> */ - /* A simple typedef for the _unsigned_ char type. */ - /* */ - typedef unsigned char FT_Byte; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Bytes */ - /* */ - /* <Description> */ - /* A typedef for constant memory areas. */ - /* */ - typedef const FT_Byte* FT_Bytes; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Tag */ - /* */ - /* <Description> */ - /* A typedef for 32bit tags (as used in the SFNT format). */ - /* */ - typedef FT_UInt32 FT_Tag; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_String */ - /* */ - /* <Description> */ - /* A simple typedef for the char type, usually used for strings. */ - /* */ - typedef char FT_String; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Short */ - /* */ - /* <Description> */ - /* A typedef for signed short. */ - /* */ - typedef signed short FT_Short; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_UShort */ - /* */ - /* <Description> */ - /* A typedef for unsigned short. */ - /* */ - typedef unsigned short FT_UShort; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Int */ - /* */ - /* <Description> */ - /* A typedef for the int type. */ - /* */ - typedef signed int FT_Int; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_UInt */ - /* */ - /* <Description> */ - /* A typedef for the unsigned int type. */ - /* */ - typedef unsigned int FT_UInt; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Long */ - /* */ - /* <Description> */ - /* A typedef for signed long. */ - /* */ - typedef signed long FT_Long; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_ULong */ - /* */ - /* <Description> */ - /* A typedef for unsigned long. */ - /* */ - typedef unsigned long FT_ULong; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_F2Dot14 */ - /* */ - /* <Description> */ - /* A signed 2.14 fixed float type used for unit vectors. */ - /* */ - typedef signed short FT_F2Dot14; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_F26Dot6 */ - /* */ - /* <Description> */ - /* A signed 26.6 fixed float type used for vectorial pixel */ - /* coordinates. */ - /* */ - typedef signed long FT_F26Dot6; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Fixed */ - /* */ - /* <Description> */ - /* This type is used to store 16.16 fixed float values, like scaling */ - /* values or matrix coefficients. */ - /* */ - typedef signed long FT_Fixed; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Error */ - /* */ - /* <Description> */ - /* The FreeType error code type. A value of 0 is always interpreted */ - /* as a successful operation. */ - /* */ - typedef int FT_Error; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Pointer */ - /* */ - /* <Description> */ - /* A simple typedef for a typeless pointer. */ - /* */ - typedef void* FT_Pointer; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Offset */ - /* */ - /* <Description> */ - /* This is equivalent to the ANSI C `size_t' type, i.e., the largest */ - /* _unsigned_ integer type used to express a file size or position, */ - /* or a memory block size. */ - /* */ - typedef size_t FT_Offset; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_PtrDist */ - /* */ - /* <Description> */ - /* This is equivalent to the ANSI C `ptrdiff_t' type, i.e., the */ - /* largest _signed_ integer type used to express the distance */ - /* between two pointers. */ - /* */ - typedef ft_ptrdiff_t FT_PtrDist; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_UnitVector */ - /* */ - /* <Description> */ - /* A simple structure used to store a 2D vector unit vector. Uses */ - /* FT_F2Dot14 types. */ - /* */ - /* <Fields> */ - /* x :: Horizontal coordinate. */ - /* */ - /* y :: Vertical coordinate. */ - /* */ - typedef struct FT_UnitVector_ - { - FT_F2Dot14 x; - FT_F2Dot14 y; - - } FT_UnitVector; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Matrix */ - /* */ - /* <Description> */ - /* A simple structure used to store a 2x2 matrix. Coefficients are */ - /* in 16.16 fixed float format. The computation performed is: */ - /* */ - /* { */ - /* x' = x*xx + y*xy */ - /* y' = x*yx + y*yy */ - /* } */ - /* */ - /* <Fields> */ - /* xx :: Matrix coefficient. */ - /* */ - /* xy :: Matrix coefficient. */ - /* */ - /* yx :: Matrix coefficient. */ - /* */ - /* yy :: Matrix coefficient. */ - /* */ - typedef struct FT_Matrix_ - { - FT_Fixed xx, xy; - FT_Fixed yx, yy; - - } FT_Matrix; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Data */ - /* */ - /* <Description> */ - /* Read-only binary data represented as a pointer and a length. */ - /* */ - /* <Fields> */ - /* pointer :: The data. */ - /* */ - /* length :: The length of the data in bytes. */ - /* */ - typedef struct FT_Data_ - { - const FT_Byte* pointer; - FT_Int length; - - } FT_Data; - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Generic_Finalizer */ - /* */ - /* <Description> */ - /* Describes a function used to destroy the `client' data of any */ - /* FreeType object. See the description of the @FT_Generic type for */ - /* details of usage. */ - /* */ - /* <Input> */ - /* The address of the FreeType object which is under finalization. */ - /* Its client data is accessed through its `generic' field. */ - /* */ - typedef void (*FT_Generic_Finalizer)(void* object); - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Generic */ - /* */ - /* <Description> */ - /* Client applications often need to associate their own data to a */ - /* variety of FreeType core objects. For example, a text layout API */ - /* might want to associate a glyph cache to a given size object. */ - /* */ - /* Most FreeType object contains a `generic' field, of type */ - /* FT_Generic, which usage is left to client applications and font */ - /* servers. */ - /* */ - /* It can be used to store a pointer to client-specific data, as well */ - /* as the address of a `finalizer' function, which will be called by */ - /* FreeType when the object is destroyed (for example, the previous */ - /* client example would put the address of the glyph cache destructor */ - /* in the `finalizer' field). */ - /* */ - /* <Fields> */ - /* data :: A typeless pointer to any client-specified data. This */ - /* field is completely ignored by the FreeType library. */ - /* */ - /* finalizer :: A pointer to a `generic finalizer' function, which */ - /* will be called when the object is destroyed. If this */ - /* field is set to NULL, no code will be called. */ - /* */ - typedef struct FT_Generic_ - { - void* data; - FT_Generic_Finalizer finalizer; - - } FT_Generic; - - - /*************************************************************************/ - /* */ - /* <Macro> */ - /* FT_MAKE_TAG */ - /* */ - /* <Description> */ - /* This macro converts four-letter tags which are used to label */ - /* TrueType tables into an unsigned long to be used within FreeType. */ - /* */ - /* <Note> */ - /* The produced values *must* be 32bit integers. Don't redefine this */ - /* macro. */ - /* */ -#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \ - ( ( (FT_ULong)_x1 << 24 ) | \ - ( (FT_ULong)_x2 << 16 ) | \ - ( (FT_ULong)_x3 << 8 ) | \ - (FT_ULong)_x4 ) - - - /*************************************************************************/ - /*************************************************************************/ - /* */ - /* L I S T M A N A G E M E N T */ - /* */ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* list_processing */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_ListNode */ - /* */ - /* <Description> */ - /* Many elements and objects in FreeType are listed through an */ - /* @FT_List record (see @FT_ListRec). As its name suggests, an */ - /* FT_ListNode is a handle to a single list element. */ - /* */ - typedef struct FT_ListNodeRec_* FT_ListNode; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_List */ - /* */ - /* <Description> */ - /* A handle to a list record (see @FT_ListRec). */ - /* */ - typedef struct FT_ListRec_* FT_List; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_ListNodeRec */ - /* */ - /* <Description> */ - /* A structure used to hold a single list element. */ - /* */ - /* <Fields> */ - /* prev :: The previous element in the list. NULL if first. */ - /* */ - /* next :: The next element in the list. NULL if last. */ - /* */ - /* data :: A typeless pointer to the listed object. */ - /* */ - typedef struct FT_ListNodeRec_ - { - FT_ListNode prev; - FT_ListNode next; - void* data; - - } FT_ListNodeRec; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_ListRec */ - /* */ - /* <Description> */ - /* A structure used to hold a simple doubly-linked list. These are */ - /* used in many parts of FreeType. */ - /* */ - /* <Fields> */ - /* head :: The head (first element) of doubly-linked list. */ - /* */ - /* tail :: The tail (last element) of doubly-linked list. */ - /* */ - typedef struct FT_ListRec_ - { - FT_ListNode head; - FT_ListNode tail; - - } FT_ListRec; - - - /* */ - -#define FT_IS_EMPTY( list ) ( (list).head == 0 ) - - /* return base error code (without module-specific prefix) */ -#define FT_ERROR_BASE( x ) ( (x) & 0xFF ) - - /* return module error code */ -#define FT_ERROR_MODULE( x ) ( (x) & 0xFF00U ) - -#define FT_BOOL( x ) ( (FT_Bool)( x ) ) - -FT_END_HEADER - -#endif /* __FTTYPES_H__ */ - - -/* END */ diff --git a/src/common/freetype/ftwinfnt.h b/src/common/freetype/ftwinfnt.h deleted file mode 100644 index a0063cc73..000000000 --- a/src/common/freetype/ftwinfnt.h +++ /dev/null @@ -1,263 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftwinfnt.h */ -/* */ -/* FreeType API for accessing Windows fnt-specific data. */ -/* */ -/* Copyright 2003, 2004 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTWINFNT_H__ -#define __FTWINFNT_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* winfnt_fonts */ - /* */ - /* <Title> */ - /* Window FNT Files */ - /* */ - /* <Abstract> */ - /* Windows FNT specific API. */ - /* */ - /* <Description> */ - /* This section contains the declaration of Windows FNT specific */ - /* functions. */ - /* */ - /*************************************************************************/ - - - /************************************************************************* - * - * @enum: - * FT_WinFNT_ID_XXX - * - * @description: - * A list of valid values for the `charset' byte in - * @FT_WinFNT_HeaderRec. Exact mapping tables for the various cpXXXX - * encodings (except for cp1361) can be found at ftp://ftp.unicode.org - * in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is - * roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT. - * - * @values: - * FT_WinFNT_ID_DEFAULT :: - * This is used for font enumeration and font creation as a - * `don't care' value. Valid font files don't contain this value. - * When querying for information about the character set of the font - * that is currently selected into a specified device context, this - * return value (of the related Windows API) simply denotes failure. - * - * FT_WinFNT_ID_SYMBOL :: - * There is no known mapping table available. - * - * FT_WinFNT_ID_MAC :: - * Mac Roman encoding. - * - * FT_WinFNT_ID_OEM :: - * From Michael Pöttgen <michael@poettgen.de>: - * - * The `Windows Font Mapping' article says that FT_WinFNT_ID_OEM - * is used for the charset of vector fonts, like `modern.fon', - * `roman.fon', and `script.fon' on Windows. - * - * The `CreateFont' documentation says: The FT_WinFNT_ID_OEM value - * specifies a character set that is operating-system dependent. - * - * The `IFIMETRICS' documentation from the `Windows Driver - * Development Kit' says: This font supports an OEM-specific - * character set. The OEM character set is system dependent. - * - * In general OEM, as opposed to ANSI (i.e., cp1252), denotes the - * second default codepage that most international versions of - * Windows have. It is one of the OEM codepages from - * - * http://www.microsoft.com/globaldev/reference/cphome.mspx, - * - * and is used for the `DOS boxes', to support legacy applications. - * A German Windows version for example usually uses ANSI codepage - * 1252 and OEM codepage 850. - * - * FT_WinFNT_ID_CP874 :: - * A superset of Thai TIS 620 and ISO 8859-11. - * - * FT_WinFNT_ID_CP932 :: - * A superset of Japanese Shift-JIS (with minor deviations). - * - * FT_WinFNT_ID_CP936 :: - * A superset of simplified Chinese GB 2312-1980 (with different - * ordering and minor deviations). - * - * FT_WinFNT_ID_CP949 :: - * A superset of Korean Hangul KS C 5601-1987 (with different - * ordering and minor deviations). - * - * FT_WinFNT_ID_CP950 :: - * A superset of traditional Chinese Big 5 ETen (with different - * ordering and minor deviations). - * - * FT_WinFNT_ID_CP1250 :: - * A superset of East European ISO 8859-2 (with slightly different - * ordering). - * - * FT_WinFNT_ID_CP1251 :: - * A superset of Russian ISO 8859-5 (with different ordering). - * - * FT_WinFNT_ID_CP1252 :: - * ANSI encoding. A superset of ISO 8859-1. - * - * FT_WinFNT_ID_CP1253 :: - * A superset of Greek ISO 8859-7 (with minor modifications). - * - * FT_WinFNT_ID_CP1254 :: - * A superset of Turkish ISO 8859-9. - * - * FT_WinFNT_ID_CP1255 :: - * A superset of Hebrew ISO 8859-8 (with some modifications). - * - * FT_WinFNT_ID_CP1256 :: - * A superset of Arabic ISO 8859-6 (with different ordering). - * - * FT_WinFNT_ID_CP1257 :: - * A superset of Baltic ISO 8859-13 (with some deviations). - * - * FT_WinFNT_ID_CP1258 :: - * For Vietnamese. This encoding doesn't cover all necessary - * characters. - * - * FT_WinFNT_ID_CP1361 :: - * Korean (Johab). - */ - -#define FT_WinFNT_ID_CP1252 0 -#define FT_WinFNT_ID_DEFAULT 1 -#define FT_WinFNT_ID_SYMBOL 2 -#define FT_WinFNT_ID_MAC 77 -#define FT_WinFNT_ID_CP932 128 -#define FT_WinFNT_ID_CP949 129 -#define FT_WinFNT_ID_CP1361 130 -#define FT_WinFNT_ID_CP936 134 -#define FT_WinFNT_ID_CP950 136 -#define FT_WinFNT_ID_CP1253 161 -#define FT_WinFNT_ID_CP1254 162 -#define FT_WinFNT_ID_CP1258 163 -#define FT_WinFNT_ID_CP1255 177 -#define FT_WinFNT_ID_CP1256 178 -#define FT_WinFNT_ID_CP1257 186 -#define FT_WinFNT_ID_CP1251 204 -#define FT_WinFNT_ID_CP874 222 -#define FT_WinFNT_ID_CP1250 238 -#define FT_WinFNT_ID_OEM 255 - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_WinFNT_HeaderRec */ - /* */ - /* <Description> */ - /* Windows FNT Header info. */ - /* */ - typedef struct FT_WinFNT_HeaderRec_ - { - FT_UShort version; - FT_ULong file_size; - FT_Byte copyright[60]; - FT_UShort file_type; - FT_UShort nominal_point_size; - FT_UShort vertical_resolution; - FT_UShort horizontal_resolution; - FT_UShort ascent; - FT_UShort internal_leading; - FT_UShort external_leading; - FT_Byte italic; - FT_Byte underline; - FT_Byte strike_out; - FT_UShort weight; - FT_Byte charset; - FT_UShort pixel_width; - FT_UShort pixel_height; - FT_Byte pitch_and_family; - FT_UShort avg_width; - FT_UShort max_width; - FT_Byte first_char; - FT_Byte last_char; - FT_Byte default_char; - FT_Byte break_char; - FT_UShort bytes_per_row; - FT_ULong device_offset; - FT_ULong face_name_offset; - FT_ULong bits_pointer; - FT_ULong bits_offset; - FT_Byte reserved; - FT_ULong flags; - FT_UShort A_space; - FT_UShort B_space; - FT_UShort C_space; - FT_UShort color_table_offset; - FT_ULong reserved1[4]; - - } FT_WinFNT_HeaderRec, *FT_WinFNT_Header; - - - /********************************************************************** - * - * @function: - * FT_Get_WinFNT_Header - * - * @description: - * Retrieve a Windows FNT font info header. - * - * @input: - * face :: A handle to the input face. - * - * @output: - * aheader :: The WinFNT header. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * This function only works with Windows FNT faces, returning an error - * otherwise. - */ - FT_EXPORT( FT_Error ) - FT_Get_WinFNT_Header( FT_Face face, - FT_WinFNT_HeaderRec *aheader ); - - - /* */ - -FT_END_HEADER - -#endif /* __FTWINFNT_H__ */ - - -/* END */ - - -/* Local Variables: */ -/* coding: utf-8 */ -/* End: */ diff --git a/src/common/freetype/ftxf86.h b/src/common/freetype/ftxf86.h deleted file mode 100644 index ea82abb08..000000000 --- a/src/common/freetype/ftxf86.h +++ /dev/null @@ -1,80 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftxf86.h */ -/* */ -/* Support functions for X11. */ -/* */ -/* Copyright 2002, 2003, 2004, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTXF86_H__ -#define __FTXF86_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* font_formats */ - /* */ - /* <Title> */ - /* Font Formats */ - /* */ - /* <Abstract> */ - /* Getting the font format. */ - /* */ - /* <Description> */ - /* The single function in this section can be used to get the font */ - /* format. Note that this information is not needed normally; */ - /* however, there are special cases (like in PDF devices) where it is */ - /* important to differentiate, in spite of FreeType's uniform API. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_X11_Font_Format */ - /* */ - /* <Description> */ - /* Return a string describing the format of a given face, using values */ - /* which can be used as an X11 FONT_PROPERTY. Possible values are */ - /* `TrueType', `Type 1', `BDF', `PCF', `Type 42', `CID Type 1', `CFF', */ - /* `PFR', and `Windows FNT'. */ - /* */ - /* <Input> */ - /* face :: */ - /* Input face handle. */ - /* */ - /* <Return> */ - /* Font format string. NULL in case of error. */ - /* */ - FT_EXPORT( const char* ) - FT_Get_X11_Font_Format( FT_Face face ); - - /* */ - -FT_END_HEADER - -#endif /* __FTXF86_H__ */ diff --git a/src/common/freetype/t1tables.h b/src/common/freetype/t1tables.h deleted file mode 100644 index 250629d25..000000000 --- a/src/common/freetype/t1tables.h +++ /dev/null @@ -1,450 +0,0 @@ -/***************************************************************************/ -/* */ -/* t1tables.h */ -/* */ -/* Basic Type 1/Type 2 tables definitions and interface (specification */ -/* only). */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __T1TABLES_H__ -#define __T1TABLES_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* type1_tables */ - /* */ - /* <Title> */ - /* Type 1 Tables */ - /* */ - /* <Abstract> */ - /* Type 1 (PostScript) specific font tables. */ - /* */ - /* <Description> */ - /* This section contains the definition of Type 1-specific tables, */ - /* including structures related to other PostScript font formats. */ - /* */ - /*************************************************************************/ - - - /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */ - /* structures in order to support Multiple Master fonts. */ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* PS_FontInfoRec */ - /* */ - /* <Description> */ - /* A structure used to model a Type1/Type2 FontInfo dictionary. Note */ - /* that for Multiple Master fonts, each instance has its own */ - /* FontInfo dictionary. */ - /* */ - typedef struct PS_FontInfoRec - { - FT_String* version; - FT_String* notice; - FT_String* full_name; - FT_String* family_name; - FT_String* weight; - FT_Long italic_angle; - FT_Bool is_fixed_pitch; - FT_Short underline_position; - FT_UShort underline_thickness; - - } PS_FontInfoRec, *PS_FontInfo; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* T1_FontInfo */ - /* */ - /* <Description> */ - /* This type is equivalent to @PS_FontInfoRec. It is deprecated but */ - /* kept to maintain source compatibility between various versions of */ - /* FreeType. */ - /* */ - typedef PS_FontInfoRec T1_FontInfo; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* PS_PrivateRec */ - /* */ - /* <Description> */ - /* A structure used to model a Type1/Type2 private dictionary. Note */ - /* that for Multiple Master fonts, each instance has its own Private */ - /* dictionary. */ - /* */ - typedef struct PS_PrivateRec_ - { - FT_Int unique_id; - FT_Int lenIV; - - FT_Byte num_blue_values; - FT_Byte num_other_blues; - FT_Byte num_family_blues; - FT_Byte num_family_other_blues; - - FT_Short blue_values[14]; - FT_Short other_blues[10]; - - FT_Short family_blues [14]; - FT_Short family_other_blues[10]; - - FT_Fixed blue_scale; - FT_Int blue_shift; - FT_Int blue_fuzz; - - FT_UShort standard_width[1]; - FT_UShort standard_height[1]; - - FT_Byte num_snap_widths; - FT_Byte num_snap_heights; - FT_Bool force_bold; - FT_Bool round_stem_up; - - FT_Short snap_widths [13]; /* including std width */ - FT_Short snap_heights[13]; /* including std height */ - - FT_Fixed expansion_factor; - - FT_Long language_group; - FT_Long password; - - FT_Short min_feature[2]; - - } PS_PrivateRec, *PS_Private; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* T1_Private */ - /* */ - /* <Description> */ - /* This type is equivalent to @PS_PrivateRec. It is deprecated but */ - /* kept to maintain source compatibility between various versions of */ - /* FreeType. */ - /* */ - typedef PS_PrivateRec T1_Private; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* T1_Blend_Flags */ - /* */ - /* <Description> */ - /* A set of flags used to indicate which fields are present in a */ - /* given blend dictionary (font info or private). Used to support */ - /* Multiple Masters fonts. */ - /* */ - typedef enum - { - /*# required fields in a FontInfo blend dictionary */ - T1_BLEND_UNDERLINE_POSITION = 0, - T1_BLEND_UNDERLINE_THICKNESS, - T1_BLEND_ITALIC_ANGLE, - - /*# required fields in a Private blend dictionary */ - T1_BLEND_BLUE_VALUES, - T1_BLEND_OTHER_BLUES, - T1_BLEND_STANDARD_WIDTH, - T1_BLEND_STANDARD_HEIGHT, - T1_BLEND_STEM_SNAP_WIDTHS, - T1_BLEND_STEM_SNAP_HEIGHTS, - T1_BLEND_BLUE_SCALE, - T1_BLEND_BLUE_SHIFT, - T1_BLEND_FAMILY_BLUES, - T1_BLEND_FAMILY_OTHER_BLUES, - T1_BLEND_FORCE_BOLD, - - /*# never remove */ - T1_BLEND_MAX - - } T1_Blend_Flags; - - /* */ - - - /*# backwards compatible definitions */ -#define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION -#define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS -#define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE -#define t1_blend_blue_values T1_BLEND_BLUE_VALUES -#define t1_blend_other_blues T1_BLEND_OTHER_BLUES -#define t1_blend_standard_widths T1_BLEND_STANDARD_WIDTH -#define t1_blend_standard_height T1_BLEND_STANDARD_HEIGHT -#define t1_blend_stem_snap_widths T1_BLEND_STEM_SNAP_WIDTHS -#define t1_blend_stem_snap_heights T1_BLEND_STEM_SNAP_HEIGHTS -#define t1_blend_blue_scale T1_BLEND_BLUE_SCALE -#define t1_blend_blue_shift T1_BLEND_BLUE_SHIFT -#define t1_blend_family_blues T1_BLEND_FAMILY_BLUES -#define t1_blend_family_other_blues T1_BLEND_FAMILY_OTHER_BLUES -#define t1_blend_force_bold T1_BLEND_FORCE_BOLD -#define t1_blend_max T1_BLEND_MAX - - - /* maximum number of Multiple Masters designs, as defined in the spec */ -#define T1_MAX_MM_DESIGNS 16 - - /* maximum number of Multiple Masters axes, as defined in the spec */ -#define T1_MAX_MM_AXIS 4 - - /* maximum number of elements in a design map */ -#define T1_MAX_MM_MAP_POINTS 20 - - - /* this structure is used to store the BlendDesignMap entry for an axis */ - typedef struct PS_DesignMap_ - { - FT_Byte num_points; - FT_Long* design_points; - FT_Fixed* blend_points; - - } PS_DesignMapRec, *PS_DesignMap; - - /* backwards-compatible definition */ - typedef PS_DesignMapRec T1_DesignMap; - - - typedef struct PS_BlendRec_ - { - FT_UInt num_designs; - FT_UInt num_axis; - - FT_String* axis_names[T1_MAX_MM_AXIS]; - FT_Fixed* design_pos[T1_MAX_MM_DESIGNS]; - PS_DesignMapRec design_map[T1_MAX_MM_AXIS]; - - FT_Fixed* weight_vector; - FT_Fixed* default_weight_vector; - - PS_FontInfo font_infos[T1_MAX_MM_DESIGNS + 1]; - PS_Private privates [T1_MAX_MM_DESIGNS + 1]; - - FT_ULong blend_bitflags; - - FT_BBox* bboxes [T1_MAX_MM_DESIGNS + 1]; - - /* since 2.3.0 */ - - /* undocumented, optional: the default design instance; */ - /* corresponds to default_weight_vector -- */ - /* num_default_design_vector == 0 means it is not present */ - /* in the font and associated metrics files */ - FT_UInt default_design_vector[T1_MAX_MM_DESIGNS]; - FT_UInt num_default_design_vector; - - } PS_BlendRec, *PS_Blend; - - - /* backwards-compatible definition */ - typedef PS_BlendRec T1_Blend; - - - typedef struct CID_FaceDictRec_ - { - PS_PrivateRec private_dict; - - FT_UInt len_buildchar; - FT_Fixed forcebold_threshold; - FT_Pos stroke_width; - FT_Fixed expansion_factor; - - FT_Byte paint_type; - FT_Byte font_type; - FT_Matrix font_matrix; - FT_Vector font_offset; - - FT_UInt num_subrs; - FT_ULong subrmap_offset; - FT_Int sd_bytes; - - } CID_FaceDictRec, *CID_FaceDict; - - - /* backwards-compatible definition */ - typedef CID_FaceDictRec CID_FontDict; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_FaceInfoRec */ - /* */ - /* <Description> */ - /* A structure used to represent CID Face information. */ - /* */ - typedef struct CID_FaceInfoRec_ - { - FT_String* cid_font_name; - FT_Fixed cid_version; - FT_Int cid_font_type; - - FT_String* registry; - FT_String* ordering; - FT_Int supplement; - - PS_FontInfoRec font_info; - FT_BBox font_bbox; - FT_ULong uid_base; - - FT_Int num_xuid; - FT_ULong xuid[16]; - - FT_ULong cidmap_offset; - FT_Int fd_bytes; - FT_Int gd_bytes; - FT_ULong cid_count; - - FT_Int num_dicts; - CID_FaceDict font_dicts; - - FT_ULong data_offset; - - } CID_FaceInfoRec, *CID_FaceInfo; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_Info */ - /* */ - /* <Description> */ - /* This type is equivalent to @CID_FaceInfoRec. It is deprecated but */ - /* kept to maintain source compatibility between various versions of */ - /* FreeType. */ - /* */ - typedef CID_FaceInfoRec CID_Info; - - /* */ - - - /************************************************************************ - * - * @function: - * FT_Has_PS_Glyph_Names - * - * @description: - * Return true if a given face provides reliable Postscript glyph - * names. This is similar to using the @FT_HAS_GLYPH_NAMES macro, - * except that certain fonts (mostly TrueType) contain incorrect - * glyph name tables. - * - * When this function returns true, the caller is sure that the glyph - * names returned by @FT_Get_Glyph_Name are reliable. - * - * @input: - * face :: - * face handle - * - * @return: - * Boolean. True if glyph names are reliable. - */ - FT_EXPORT( FT_Int ) - FT_Has_PS_Glyph_Names( FT_Face face ); - - - /************************************************************************ - * - * @function: - * FT_Get_PS_Font_Info - * - * @description: - * Retrieve the @PS_FontInfoRec structure corresponding to a given - * Postscript font. - * - * @input: - * face :: - * Postscript face handle. - * - * @output: - * afont_info :: - * Output font info structure pointer. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * The string pointers within the font info structure are owned by - * the face and don't need to be freed by the caller. - * - * If the font's format is not Postscript-based, this function will - * return the `FT_Err_Invalid_Argument' error code. - */ - FT_EXPORT( FT_Error ) - FT_Get_PS_Font_Info( FT_Face face, - PS_FontInfoRec *afont_info ); - - - /************************************************************************ - * - * @function: - * FT_Get_PS_Font_Private - * - * @description: - * Retrieve the @PS_PrivateRec structure corresponding to a given - * Postscript font. - * - * @input: - * face :: - * Postscript face handle. - * - * @output: - * afont_private :: - * Output private dictionary structure pointer. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * The string pointers within the font info structure are owned by - * the face and don't need to be freed by the caller. - * - * If the font's format is not Postscript-based, this function will - * return the `FT_Err_Invalid_Argument' error code. - */ - FT_EXPORT( FT_Error ) - FT_Get_PS_Font_Private( FT_Face face, - PS_PrivateRec *afont_private ); - - /* */ - - - -FT_END_HEADER - -#endif /* __T1TABLES_H__ */ - - -/* END */ diff --git a/src/common/freetype/ttnameid.h b/src/common/freetype/ttnameid.h deleted file mode 100644 index b9acbdad1..000000000 --- a/src/common/freetype/ttnameid.h +++ /dev/null @@ -1,1132 +0,0 @@ -/***************************************************************************/ -/* */ -/* ttnameid.h */ -/* */ -/* TrueType name ID definitions (specification only). */ -/* */ -/* Copyright 1996-2002, 2003, 2004, 2006, 2007 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __TTNAMEID_H__ -#define __TTNAMEID_H__ - - -#include <ft2build.h> - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* Possible values for the `platform' identifier code in the name */ - /* records of the TTF `name' table. */ - /* */ - /*************************************************************************/ - - - /*********************************************************************** - * - * @enum: - * TT_PLATFORM_XXX - * - * @description: - * A list of valid values for the `platform_id' identifier code in - * @FT_CharMapRec and @FT_SfntName structures. - * - * @values: - * TT_PLATFORM_APPLE_UNICODE :: - * Used by Apple to indicate a Unicode character map and/or name entry. - * See @TT_APPLE_ID_XXX for corresponding `encoding_id' values. Note - * that name entries in this format are coded as big-endian UCS-2 - * character codes _only_. - * - * TT_PLATFORM_MACINTOSH :: - * Used by Apple to indicate a MacOS-specific charmap and/or name entry. - * See @TT_MAC_ID_XXX for corresponding `encoding_id' values. Note that - * most TrueType fonts contain an Apple roman charmap to be usable on - * MacOS systems (even if they contain a Microsoft charmap as well). - * - * TT_PLATFORM_ISO :: - * This value was used to specify Unicode charmaps. It is however - * now deprecated. See @TT_ISO_ID_XXX for a list of corresponding - * `encoding_id' values. - * - * TT_PLATFORM_MICROSOFT :: - * Used by Microsoft to indicate Windows-specific charmaps. See - * @TT_MS_ID_XXX for a list of corresponding `encoding_id' values. - * Note that most fonts contain a Unicode charmap using - * (TT_PLATFORM_MICROSOFT, @TT_MS_ID_UNICODE_CS). - * - * TT_PLATFORM_CUSTOM :: - * Used to indicate application-specific charmaps. - * - * TT_PLATFORM_ADOBE :: - * This value isn't part of any font format specification, but is used - * by FreeType to report Adobe-specific charmaps in an @FT_CharMapRec - * structure. See @TT_ADOBE_ID_XXX. - */ - -#define TT_PLATFORM_APPLE_UNICODE 0 -#define TT_PLATFORM_MACINTOSH 1 -#define TT_PLATFORM_ISO 2 /* deprecated */ -#define TT_PLATFORM_MICROSOFT 3 -#define TT_PLATFORM_CUSTOM 4 -#define TT_PLATFORM_ADOBE 7 /* artificial */ - - - /*********************************************************************** - * - * @enum: - * TT_APPLE_ID_XXX - * - * @description: - * A list of valid values for the `encoding_id' for - * @TT_PLATFORM_APPLE_UNICODE charmaps and name entries. - * - * @values: - * TT_APPLE_ID_DEFAULT :: - * Unicode version 1.0. - * - * TT_APPLE_ID_UNICODE_1_1 :: - * Unicode 1.1; specifies Hangul characters starting at U+34xx. - * - * TT_APPLE_ID_ISO_10646 :: - * Deprecated (identical to preceding). - * - * TT_APPLE_ID_UNICODE_2_0 :: - * Unicode 2.0 and beyond (UTF-16 BMP only). - * - * TT_APPLE_ID_UNICODE_32 :: - * Unicode 3.1 and beyond, using UTF-32. - */ - -#define TT_APPLE_ID_DEFAULT 0 /* Unicode 1.0 */ -#define TT_APPLE_ID_UNICODE_1_1 1 /* specify Hangul at U+34xx */ -#define TT_APPLE_ID_ISO_10646 2 /* deprecated */ -#define TT_APPLE_ID_UNICODE_2_0 3 /* or later */ -#define TT_APPLE_ID_UNICODE_32 4 /* 2.0 or later, full repertoire */ - - - /*********************************************************************** - * - * @enum: - * TT_MAC_ID_XXX - * - * @description: - * A list of valid values for the `encoding_id' for - * @TT_PLATFORM_MACINTOSH charmaps and name entries. - * - * @values: - * TT_MAC_ID_ROMAN :: - * TT_MAC_ID_JAPANESE :: - * TT_MAC_ID_TRADITIONAL_CHINESE :: - * TT_MAC_ID_KOREAN :: - * TT_MAC_ID_ARABIC :: - * TT_MAC_ID_HEBREW :: - * TT_MAC_ID_GREEK :: - * TT_MAC_ID_RUSSIAN :: - * TT_MAC_ID_RSYMBOL :: - * TT_MAC_ID_DEVANAGARI :: - * TT_MAC_ID_GURMUKHI :: - * TT_MAC_ID_GUJARATI :: - * TT_MAC_ID_ORIYA :: - * TT_MAC_ID_BENGALI :: - * TT_MAC_ID_TAMIL :: - * TT_MAC_ID_TELUGU :: - * TT_MAC_ID_KANNADA :: - * TT_MAC_ID_MALAYALAM :: - * TT_MAC_ID_SINHALESE :: - * TT_MAC_ID_BURMESE :: - * TT_MAC_ID_KHMER :: - * TT_MAC_ID_THAI :: - * TT_MAC_ID_LAOTIAN :: - * TT_MAC_ID_GEORGIAN :: - * TT_MAC_ID_ARMENIAN :: - * TT_MAC_ID_MALDIVIAN :: - * TT_MAC_ID_SIMPLIFIED_CHINESE :: - * TT_MAC_ID_TIBETAN :: - * TT_MAC_ID_MONGOLIAN :: - * TT_MAC_ID_GEEZ :: - * TT_MAC_ID_SLAVIC :: - * TT_MAC_ID_VIETNAMESE :: - * TT_MAC_ID_SINDHI :: - * TT_MAC_ID_UNINTERP :: - */ - -#define TT_MAC_ID_ROMAN 0 -#define TT_MAC_ID_JAPANESE 1 -#define TT_MAC_ID_TRADITIONAL_CHINESE 2 -#define TT_MAC_ID_KOREAN 3 -#define TT_MAC_ID_ARABIC 4 -#define TT_MAC_ID_HEBREW 5 -#define TT_MAC_ID_GREEK 6 -#define TT_MAC_ID_RUSSIAN 7 -#define TT_MAC_ID_RSYMBOL 8 -#define TT_MAC_ID_DEVANAGARI 9 -#define TT_MAC_ID_GURMUKHI 10 -#define TT_MAC_ID_GUJARATI 11 -#define TT_MAC_ID_ORIYA 12 -#define TT_MAC_ID_BENGALI 13 -#define TT_MAC_ID_TAMIL 14 -#define TT_MAC_ID_TELUGU 15 -#define TT_MAC_ID_KANNADA 16 -#define TT_MAC_ID_MALAYALAM 17 -#define TT_MAC_ID_SINHALESE 18 -#define TT_MAC_ID_BURMESE 19 -#define TT_MAC_ID_KHMER 20 -#define TT_MAC_ID_THAI 21 -#define TT_MAC_ID_LAOTIAN 22 -#define TT_MAC_ID_GEORGIAN 23 -#define TT_MAC_ID_ARMENIAN 24 -#define TT_MAC_ID_MALDIVIAN 25 -#define TT_MAC_ID_SIMPLIFIED_CHINESE 25 -#define TT_MAC_ID_TIBETAN 26 -#define TT_MAC_ID_MONGOLIAN 27 -#define TT_MAC_ID_GEEZ 28 -#define TT_MAC_ID_SLAVIC 29 -#define TT_MAC_ID_VIETNAMESE 30 -#define TT_MAC_ID_SINDHI 31 -#define TT_MAC_ID_UNINTERP 32 - - - /*********************************************************************** - * - * @enum: - * TT_ISO_ID_XXX - * - * @description: - * A list of valid values for the `encoding_id' for - * @TT_PLATFORM_ISO charmaps and name entries. - * - * Their use is now deprecated. - * - * @values: - * TT_ISO_ID_7BIT_ASCII :: - * ASCII. - * TT_ISO_ID_10646 :: - * ISO/10646. - * TT_ISO_ID_8859_1 :: - * Also known as Latin-1. - */ - -#define TT_ISO_ID_7BIT_ASCII 0 -#define TT_ISO_ID_10646 1 -#define TT_ISO_ID_8859_1 2 - - - /*********************************************************************** - * - * @enum: - * TT_MS_ID_XXX - * - * @description: - * A list of valid values for the `encoding_id' for - * @TT_PLATFORM_MICROSOFT charmaps and name entries. - * - * @values: - * TT_MS_ID_SYMBOL_CS :: - * Corresponds to Microsoft symbol encoding. See - * @FT_ENCODING_MS_SYMBOL. - * - * TT_MS_ID_UNICODE_CS :: - * Corresponds to a Microsoft WGL4 charmap, matching Unicode. See - * @FT_ENCODING_UNICODE. - * - * TT_MS_ID_SJIS :: - * Corresponds to SJIS Japanese encoding. See @FT_ENCODING_SJIS. - * - * TT_MS_ID_GB2312 :: - * Corresponds to Simplified Chinese as used in Mainland China. See - * @FT_ENCODING_GB2312. - * - * TT_MS_ID_BIG_5 :: - * Corresponds to Traditional Chinese as used in Taiwan and Hong Kong. - * See @FT_ENCODING_BIG5. - * - * TT_MS_ID_WANSUNG :: - * Corresponds to Korean Wansung encoding. See @FT_ENCODING_WANSUNG. - * - * TT_MS_ID_JOHAB :: - * Corresponds to Johab encoding. See @FT_ENCODING_JOHAB. - * - * TT_MS_ID_UCS_4 :: - * Corresponds to UCS-4 or UTF-32 charmaps. This has been added to - * the OpenType specification version 1.4 (mid-2001.) - */ - -#define TT_MS_ID_SYMBOL_CS 0 -#define TT_MS_ID_UNICODE_CS 1 -#define TT_MS_ID_SJIS 2 -#define TT_MS_ID_GB2312 3 -#define TT_MS_ID_BIG_5 4 -#define TT_MS_ID_WANSUNG 5 -#define TT_MS_ID_JOHAB 6 -#define TT_MS_ID_UCS_4 10 - - - /*********************************************************************** - * - * @enum: - * TT_ADOBE_ID_XXX - * - * @description: - * A list of valid values for the `encoding_id' for - * @TT_PLATFORM_ADOBE charmaps. This is a FreeType-specific extension! - * - * @values: - * TT_ADOBE_ID_STANDARD :: - * Adobe standard encoding. - * TT_ADOBE_ID_EXPERT :: - * Adobe expert encoding. - * TT_ADOBE_ID_CUSTOM :: - * Adobe custom encoding. - */ - -#define TT_ADOBE_ID_STANDARD 0 -#define TT_ADOBE_ID_EXPERT 1 -#define TT_ADOBE_ID_CUSTOM 2 -#define TT_ADOBE_ID_LATIN_1 3 - - - /*************************************************************************/ - /* */ - /* Possible values of the language identifier field in the name records */ - /* of the TTF `name' table if the `platform' identifier code is */ - /* TT_PLATFORM_MACINTOSH. */ - /* */ - /* The canonical source for the Apple assigned Language ID's is at */ - /* */ - /* http://fonts.apple.com/TTRefMan/RM06/Chap6name.html */ - /* */ -#define TT_MAC_LANGID_ENGLISH 0 -#define TT_MAC_LANGID_FRENCH 1 -#define TT_MAC_LANGID_GERMAN 2 -#define TT_MAC_LANGID_ITALIAN 3 -#define TT_MAC_LANGID_DUTCH 4 -#define TT_MAC_LANGID_SWEDISH 5 -#define TT_MAC_LANGID_SPANISH 6 -#define TT_MAC_LANGID_DANISH 7 -#define TT_MAC_LANGID_PORTUGUESE 8 -#define TT_MAC_LANGID_NORWEGIAN 9 -#define TT_MAC_LANGID_HEBREW 10 -#define TT_MAC_LANGID_JAPANESE 11 -#define TT_MAC_LANGID_ARABIC 12 -#define TT_MAC_LANGID_FINNISH 13 -#define TT_MAC_LANGID_GREEK 14 -#define TT_MAC_LANGID_ICELANDIC 15 -#define TT_MAC_LANGID_MALTESE 16 -#define TT_MAC_LANGID_TURKISH 17 -#define TT_MAC_LANGID_CROATIAN 18 -#define TT_MAC_LANGID_CHINESE_TRADITIONAL 19 -#define TT_MAC_LANGID_URDU 20 -#define TT_MAC_LANGID_HINDI 21 -#define TT_MAC_LANGID_THAI 22 -#define TT_MAC_LANGID_KOREAN 23 -#define TT_MAC_LANGID_LITHUANIAN 24 -#define TT_MAC_LANGID_POLISH 25 -#define TT_MAC_LANGID_HUNGARIAN 26 -#define TT_MAC_LANGID_ESTONIAN 27 -#define TT_MAC_LANGID_LETTISH 28 -#define TT_MAC_LANGID_SAAMISK 29 -#define TT_MAC_LANGID_FAEROESE 30 -#define TT_MAC_LANGID_FARSI 31 -#define TT_MAC_LANGID_RUSSIAN 32 -#define TT_MAC_LANGID_CHINESE_SIMPLIFIED 33 -#define TT_MAC_LANGID_FLEMISH 34 -#define TT_MAC_LANGID_IRISH 35 -#define TT_MAC_LANGID_ALBANIAN 36 -#define TT_MAC_LANGID_ROMANIAN 37 -#define TT_MAC_LANGID_CZECH 38 -#define TT_MAC_LANGID_SLOVAK 39 -#define TT_MAC_LANGID_SLOVENIAN 40 -#define TT_MAC_LANGID_YIDDISH 41 -#define TT_MAC_LANGID_SERBIAN 42 -#define TT_MAC_LANGID_MACEDONIAN 43 -#define TT_MAC_LANGID_BULGARIAN 44 -#define TT_MAC_LANGID_UKRAINIAN 45 -#define TT_MAC_LANGID_BYELORUSSIAN 46 -#define TT_MAC_LANGID_UZBEK 47 -#define TT_MAC_LANGID_KAZAKH 48 -#define TT_MAC_LANGID_AZERBAIJANI 49 -#define TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT 49 -#define TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT 50 -#define TT_MAC_LANGID_ARMENIAN 51 -#define TT_MAC_LANGID_GEORGIAN 52 -#define TT_MAC_LANGID_MOLDAVIAN 53 -#define TT_MAC_LANGID_KIRGHIZ 54 -#define TT_MAC_LANGID_TAJIKI 55 -#define TT_MAC_LANGID_TURKMEN 56 -#define TT_MAC_LANGID_MONGOLIAN 57 -#define TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT 57 -#define TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT 58 -#define TT_MAC_LANGID_PASHTO 59 -#define TT_MAC_LANGID_KURDISH 60 -#define TT_MAC_LANGID_KASHMIRI 61 -#define TT_MAC_LANGID_SINDHI 62 -#define TT_MAC_LANGID_TIBETAN 63 -#define TT_MAC_LANGID_NEPALI 64 -#define TT_MAC_LANGID_SANSKRIT 65 -#define TT_MAC_LANGID_MARATHI 66 -#define TT_MAC_LANGID_BENGALI 67 -#define TT_MAC_LANGID_ASSAMESE 68 -#define TT_MAC_LANGID_GUJARATI 69 -#define TT_MAC_LANGID_PUNJABI 70 -#define TT_MAC_LANGID_ORIYA 71 -#define TT_MAC_LANGID_MALAYALAM 72 -#define TT_MAC_LANGID_KANNADA 73 -#define TT_MAC_LANGID_TAMIL 74 -#define TT_MAC_LANGID_TELUGU 75 -#define TT_MAC_LANGID_SINHALESE 76 -#define TT_MAC_LANGID_BURMESE 77 -#define TT_MAC_LANGID_KHMER 78 -#define TT_MAC_LANGID_LAO 79 -#define TT_MAC_LANGID_VIETNAMESE 80 -#define TT_MAC_LANGID_INDONESIAN 81 -#define TT_MAC_LANGID_TAGALOG 82 -#define TT_MAC_LANGID_MALAY_ROMAN_SCRIPT 83 -#define TT_MAC_LANGID_MALAY_ARABIC_SCRIPT 84 -#define TT_MAC_LANGID_AMHARIC 85 -#define TT_MAC_LANGID_TIGRINYA 86 -#define TT_MAC_LANGID_GALLA 87 -#define TT_MAC_LANGID_SOMALI 88 -#define TT_MAC_LANGID_SWAHILI 89 -#define TT_MAC_LANGID_RUANDA 90 -#define TT_MAC_LANGID_RUNDI 91 -#define TT_MAC_LANGID_CHEWA 92 -#define TT_MAC_LANGID_MALAGASY 93 -#define TT_MAC_LANGID_ESPERANTO 94 -#define TT_MAC_LANGID_WELSH 128 -#define TT_MAC_LANGID_BASQUE 129 -#define TT_MAC_LANGID_CATALAN 130 -#define TT_MAC_LANGID_LATIN 131 -#define TT_MAC_LANGID_QUECHUA 132 -#define TT_MAC_LANGID_GUARANI 133 -#define TT_MAC_LANGID_AYMARA 134 -#define TT_MAC_LANGID_TATAR 135 -#define TT_MAC_LANGID_UIGHUR 136 -#define TT_MAC_LANGID_DZONGKHA 137 -#define TT_MAC_LANGID_JAVANESE 138 -#define TT_MAC_LANGID_SUNDANESE 139 - - -#if 0 /* these seem to be errors that have been dropped */ - -#define TT_MAC_LANGID_SCOTTISH_GAELIC 140 -#define TT_MAC_LANGID_IRISH_GAELIC 141 - -#endif - - - /* The following codes are new as of 2000-03-10 */ -#define TT_MAC_LANGID_GALICIAN 140 -#define TT_MAC_LANGID_AFRIKAANS 141 -#define TT_MAC_LANGID_BRETON 142 -#define TT_MAC_LANGID_INUKTITUT 143 -#define TT_MAC_LANGID_SCOTTISH_GAELIC 144 -#define TT_MAC_LANGID_MANX_GAELIC 145 -#define TT_MAC_LANGID_IRISH_GAELIC 146 -#define TT_MAC_LANGID_TONGAN 147 -#define TT_MAC_LANGID_GREEK_POLYTONIC 148 -#define TT_MAC_LANGID_GREELANDIC 149 -#define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT 150 - - - /*************************************************************************/ - /* */ - /* Possible values of the language identifier field in the name records */ - /* of the TTF `name' table if the `platform' identifier code is */ - /* TT_PLATFORM_MICROSOFT. */ - /* */ - /* The canonical source for the MS assigned LCID's (seems to) be at */ - /* */ - /* http://www.microsoft.com/globaldev/reference/lcid-all.mspx */ - /* */ - /* It used to be at various places, among them */ - /* */ - /* http://www.microsoft.com/typography/OTSPEC/lcid-cp.txt */ - /* http://www.microsoft.com/globaldev/reference/loclanghome.asp */ - /* http://support.microsoft.com/support/kb/articles/Q224/8/04.ASP */ - /* http://msdn.microsoft.com/library/en-us/passport25/ */ - /* NET_Passport_VBScript_Documentation/Single_Sign_In/ */ - /* Advanced_Single_Sign_In/Localization_and_LCIDs.asp */ - /* */ - /* Hopefully, it seems now that the Globaldev site prevails... */ - /* (updated by Antoine, 2004-02-17) */ - -#define TT_MS_LANGID_ARABIC_GENERAL 0x0001 -#define TT_MS_LANGID_ARABIC_SAUDI_ARABIA 0x0401 -#define TT_MS_LANGID_ARABIC_IRAQ 0x0801 -#define TT_MS_LANGID_ARABIC_EGYPT 0x0c01 -#define TT_MS_LANGID_ARABIC_LIBYA 0x1001 -#define TT_MS_LANGID_ARABIC_ALGERIA 0x1401 -#define TT_MS_LANGID_ARABIC_MOROCCO 0x1801 -#define TT_MS_LANGID_ARABIC_TUNISIA 0x1c01 -#define TT_MS_LANGID_ARABIC_OMAN 0x2001 -#define TT_MS_LANGID_ARABIC_YEMEN 0x2401 -#define TT_MS_LANGID_ARABIC_SYRIA 0x2801 -#define TT_MS_LANGID_ARABIC_JORDAN 0x2c01 -#define TT_MS_LANGID_ARABIC_LEBANON 0x3001 -#define TT_MS_LANGID_ARABIC_KUWAIT 0x3401 -#define TT_MS_LANGID_ARABIC_UAE 0x3801 -#define TT_MS_LANGID_ARABIC_BAHRAIN 0x3c01 -#define TT_MS_LANGID_ARABIC_QATAR 0x4001 -#define TT_MS_LANGID_BULGARIAN_BULGARIA 0x0402 -#define TT_MS_LANGID_CATALAN_SPAIN 0x0403 -#define TT_MS_LANGID_CHINESE_GENERAL 0x0004 -#define TT_MS_LANGID_CHINESE_TAIWAN 0x0404 -#define TT_MS_LANGID_CHINESE_PRC 0x0804 -#define TT_MS_LANGID_CHINESE_HONG_KONG 0x0c04 -#define TT_MS_LANGID_CHINESE_SINGAPORE 0x1004 - -#if 1 /* this looks like the correct value */ -#define TT_MS_LANGID_CHINESE_MACAU 0x1404 -#else /* but beware, Microsoft may change its mind... - the most recent Word reference has the following: */ -#define TT_MS_LANGID_CHINESE_MACAU TT_MS_LANGID_CHINESE_HONG_KONG -#endif - -#if 0 /* used only with .NET `cultures'; commented out */ -#define TT_MS_LANGID_CHINESE_TRADITIONAL 0x7C04 -#endif - -#define TT_MS_LANGID_CZECH_CZECH_REPUBLIC 0x0405 -#define TT_MS_LANGID_DANISH_DENMARK 0x0406 -#define TT_MS_LANGID_GERMAN_GERMANY 0x0407 -#define TT_MS_LANGID_GERMAN_SWITZERLAND 0x0807 -#define TT_MS_LANGID_GERMAN_AUSTRIA 0x0c07 -#define TT_MS_LANGID_GERMAN_LUXEMBOURG 0x1007 -#define TT_MS_LANGID_GERMAN_LIECHTENSTEI 0x1407 -#define TT_MS_LANGID_GREEK_GREECE 0x0408 - - /* don't ask what this one means... It is commented out currently. */ -#if 0 -#define TT_MS_LANGID_GREEK_GREECE2 0x2008 -#endif - -#define TT_MS_LANGID_ENGLISH_GENERAL 0x0009 -#define TT_MS_LANGID_ENGLISH_UNITED_STATES 0x0409 -#define TT_MS_LANGID_ENGLISH_UNITED_KINGDOM 0x0809 -#define TT_MS_LANGID_ENGLISH_AUSTRALIA 0x0c09 -#define TT_MS_LANGID_ENGLISH_CANADA 0x1009 -#define TT_MS_LANGID_ENGLISH_NEW_ZEALAND 0x1409 -#define TT_MS_LANGID_ENGLISH_IRELAND 0x1809 -#define TT_MS_LANGID_ENGLISH_SOUTH_AFRICA 0x1c09 -#define TT_MS_LANGID_ENGLISH_JAMAICA 0x2009 -#define TT_MS_LANGID_ENGLISH_CARIBBEAN 0x2409 -#define TT_MS_LANGID_ENGLISH_BELIZE 0x2809 -#define TT_MS_LANGID_ENGLISH_TRINIDAD 0x2c09 -#define TT_MS_LANGID_ENGLISH_ZIMBABWE 0x3009 -#define TT_MS_LANGID_ENGLISH_PHILIPPINES 0x3409 -#define TT_MS_LANGID_ENGLISH_INDONESIA 0x3809 -#define TT_MS_LANGID_ENGLISH_HONG_KONG 0x3c09 -#define TT_MS_LANGID_ENGLISH_INDIA 0x4009 -#define TT_MS_LANGID_ENGLISH_MALAYSIA 0x4409 -#define TT_MS_LANGID_ENGLISH_SINGAPORE 0x4809 -#define TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT 0x040a -#define TT_MS_LANGID_SPANISH_MEXICO 0x080a -#define TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT 0x0c0a -#define TT_MS_LANGID_SPANISH_GUATEMALA 0x100a -#define TT_MS_LANGID_SPANISH_COSTA_RICA 0x140a -#define TT_MS_LANGID_SPANISH_PANAMA 0x180a -#define TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC 0x1c0a -#define TT_MS_LANGID_SPANISH_VENEZUELA 0x200a -#define TT_MS_LANGID_SPANISH_COLOMBIA 0x240a -#define TT_MS_LANGID_SPANISH_PERU 0x280a -#define TT_MS_LANGID_SPANISH_ARGENTINA 0x2c0a -#define TT_MS_LANGID_SPANISH_ECUADOR 0x300a -#define TT_MS_LANGID_SPANISH_CHILE 0x340a -#define TT_MS_LANGID_SPANISH_URUGUAY 0x380a -#define TT_MS_LANGID_SPANISH_PARAGUAY 0x3c0a -#define TT_MS_LANGID_SPANISH_BOLIVIA 0x400a -#define TT_MS_LANGID_SPANISH_EL_SALVADOR 0x440a -#define TT_MS_LANGID_SPANISH_HONDURAS 0x480a -#define TT_MS_LANGID_SPANISH_NICARAGUA 0x4c0a -#define TT_MS_LANGID_SPANISH_PUERTO_RICO 0x500a -#define TT_MS_LANGID_SPANISH_UNITED_STATES 0x540a - /* The following ID blatantly violate MS specs by using a */ - /* sublanguage > 0x1F. */ -#define TT_MS_LANGID_SPANISH_LATIN_AMERICA 0xE40aU -#define TT_MS_LANGID_FINNISH_FINLAND 0x040b -#define TT_MS_LANGID_FRENCH_FRANCE 0x040c -#define TT_MS_LANGID_FRENCH_BELGIUM 0x080c -#define TT_MS_LANGID_FRENCH_CANADA 0x0c0c -#define TT_MS_LANGID_FRENCH_SWITZERLAND 0x100c -#define TT_MS_LANGID_FRENCH_LUXEMBOURG 0x140c -#define TT_MS_LANGID_FRENCH_MONACO 0x180c -#define TT_MS_LANGID_FRENCH_WEST_INDIES 0x1c0c -#define TT_MS_LANGID_FRENCH_REUNION 0x200c -#define TT_MS_LANGID_FRENCH_CONGO 0x240c - /* which was formerly: */ -#define TT_MS_LANGID_FRENCH_ZAIRE TT_MS_LANGID_FRENCH_CONGO -#define TT_MS_LANGID_FRENCH_SENEGAL 0x280c -#define TT_MS_LANGID_FRENCH_CAMEROON 0x2c0c -#define TT_MS_LANGID_FRENCH_COTE_D_IVOIRE 0x300c -#define TT_MS_LANGID_FRENCH_MALI 0x340c -#define TT_MS_LANGID_FRENCH_MOROCCO 0x380c -#define TT_MS_LANGID_FRENCH_HAITI 0x3c0c - /* and another violation of the spec (see 0xE40aU) */ -#define TT_MS_LANGID_FRENCH_NORTH_AFRICA 0xE40cU -#define TT_MS_LANGID_HEBREW_ISRAEL 0x040d -#define TT_MS_LANGID_HUNGARIAN_HUNGARY 0x040e -#define TT_MS_LANGID_ICELANDIC_ICELAND 0x040f -#define TT_MS_LANGID_ITALIAN_ITALY 0x0410 -#define TT_MS_LANGID_ITALIAN_SWITZERLAND 0x0810 -#define TT_MS_LANGID_JAPANESE_JAPAN 0x0411 -#define TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA 0x0412 -#define TT_MS_LANGID_KOREAN_JOHAB_KOREA 0x0812 -#define TT_MS_LANGID_DUTCH_NETHERLANDS 0x0413 -#define TT_MS_LANGID_DUTCH_BELGIUM 0x0813 -#define TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL 0x0414 -#define TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK 0x0814 -#define TT_MS_LANGID_POLISH_POLAND 0x0415 -#define TT_MS_LANGID_PORTUGUESE_BRAZIL 0x0416 -#define TT_MS_LANGID_PORTUGUESE_PORTUGAL 0x0816 -#define TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND 0x0417 -#define TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418 -#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA 0x0818 -#define TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419 -#define TT_MS_LANGID_RUSSIAN_MOLDAVIA 0x0819 -#define TT_MS_LANGID_CROATIAN_CROATIA 0x041a -#define TT_MS_LANGID_SERBIAN_SERBIA_LATIN 0x081a -#define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC 0x0c1a - -#if 0 /* this used to be this value, but it looks like we were wrong */ -#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x101a -#else /* current sources say */ -#define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA 0x101a -#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x141a - /* and XPsp2 Platform SDK added (2004-07-26) */ - /* Names are shortened to be significant within 40 chars. */ -#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN 0x181a -#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x181a -#endif - -#define TT_MS_LANGID_SLOVAK_SLOVAKIA 0x041b -#define TT_MS_LANGID_ALBANIAN_ALBANIA 0x041c -#define TT_MS_LANGID_SWEDISH_SWEDEN 0x041d -#define TT_MS_LANGID_SWEDISH_FINLAND 0x081d -#define TT_MS_LANGID_THAI_THAILAND 0x041e -#define TT_MS_LANGID_TURKISH_TURKEY 0x041f -#define TT_MS_LANGID_URDU_PAKISTAN 0x0420 -#define TT_MS_LANGID_URDU_INDIA 0x0820 -#define TT_MS_LANGID_INDONESIAN_INDONESIA 0x0421 -#define TT_MS_LANGID_UKRAINIAN_UKRAINE 0x0422 -#define TT_MS_LANGID_BELARUSIAN_BELARUS 0x0423 -#define TT_MS_LANGID_SLOVENE_SLOVENIA 0x0424 -#define TT_MS_LANGID_ESTONIAN_ESTONIA 0x0425 -#define TT_MS_LANGID_LATVIAN_LATVIA 0x0426 -#define TT_MS_LANGID_LITHUANIAN_LITHUANIA 0x0427 -#define TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA 0x0827 -#define TT_MS_LANGID_TAJIK_TAJIKISTAN 0x0428 -#define TT_MS_LANGID_FARSI_IRAN 0x0429 -#define TT_MS_LANGID_VIETNAMESE_VIET_NAM 0x042a -#define TT_MS_LANGID_ARMENIAN_ARMENIA 0x042b -#define TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN 0x042c -#define TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC 0x082c -#define TT_MS_LANGID_BASQUE_SPAIN 0x042d -#define TT_MS_LANGID_SORBIAN_GERMANY 0x042e -#define TT_MS_LANGID_MACEDONIAN_MACEDONIA 0x042f -#define TT_MS_LANGID_SUTU_SOUTH_AFRICA 0x0430 -#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA 0x0431 -#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA 0x0432 -#define TT_MS_LANGID_VENDA_SOUTH_AFRICA 0x0433 -#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA 0x0434 -#define TT_MS_LANGID_ZULU_SOUTH_AFRICA 0x0435 -#define TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA 0x0436 -#define TT_MS_LANGID_GEORGIAN_GEORGIA 0x0437 -#define TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS 0x0438 -#define TT_MS_LANGID_HINDI_INDIA 0x0439 -#define TT_MS_LANGID_MALTESE_MALTA 0x043a - /* Added by XPsp2 Platform SDK (2004-07-26) */ -#define TT_MS_LANGID_SAMI_NORTHERN_NORWAY 0x043b -#define TT_MS_LANGID_SAMI_NORTHERN_SWEDEN 0x083b -#define TT_MS_LANGID_SAMI_NORTHERN_FINLAND 0x0C3b -#define TT_MS_LANGID_SAMI_LULE_NORWAY 0x103b -#define TT_MS_LANGID_SAMI_LULE_SWEDEN 0x143b -#define TT_MS_LANGID_SAMI_SOUTHERN_NORWAY 0x183b -#define TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN 0x1C3b -#define TT_MS_LANGID_SAMI_SKOLT_FINLAND 0x203b -#define TT_MS_LANGID_SAMI_INARI_FINLAND 0x243b - /* ... and we also keep our old identifier... */ -#define TT_MS_LANGID_SAAMI_LAPONIA 0x043b - -#if 0 /* this seems to be a previous inversion */ -#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043c -#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083c -#else -#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083c -#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043c -#endif - -#define TT_MS_LANGID_YIDDISH_GERMANY 0x043d -#define TT_MS_LANGID_MALAY_MALAYSIA 0x043e -#define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM 0x083e -#define TT_MS_LANGID_KAZAK_KAZAKSTAN 0x043f -#define TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN /* Cyrillic*/ 0x0440 - /* alias declared in Windows 2000 */ -#define TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC \ - TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN - -#define TT_MS_LANGID_SWAHILI_KENYA 0x0441 -#define TT_MS_LANGID_TURKMEN_TURKMENISTAN 0x0442 -#define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN 0x0443 -#define TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC 0x0843 -#define TT_MS_LANGID_TATAR_TATARSTAN 0x0444 -#define TT_MS_LANGID_BENGALI_INDIA 0x0445 -#define TT_MS_LANGID_BENGALI_BANGLADESH 0x0845 -#define TT_MS_LANGID_PUNJABI_INDIA 0x0446 -#define TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN 0x0846 -#define TT_MS_LANGID_GUJARATI_INDIA 0x0447 -#define TT_MS_LANGID_ORIYA_INDIA 0x0448 -#define TT_MS_LANGID_TAMIL_INDIA 0x0449 -#define TT_MS_LANGID_TELUGU_INDIA 0x044a -#define TT_MS_LANGID_KANNADA_INDIA 0x044b -#define TT_MS_LANGID_MALAYALAM_INDIA 0x044c -#define TT_MS_LANGID_ASSAMESE_INDIA 0x044d -#define TT_MS_LANGID_MARATHI_INDIA 0x044e -#define TT_MS_LANGID_SANSKRIT_INDIA 0x044f -#define TT_MS_LANGID_MONGOLIAN_MONGOLIA /* Cyrillic */ 0x0450 -#define TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN 0x0850 -#define TT_MS_LANGID_TIBETAN_CHINA 0x0451 - /* Don't use the next constant! It has */ - /* (1) the wrong spelling (Dzonghka) */ - /* (2) Microsoft doesn't officially define it -- */ - /* at least it is not in the List of Local */ - /* ID Values. */ - /* (3) Dzongkha is not the same language as */ - /* Tibetan, so merging it is wrong anyway. */ - /* */ - /* TT_MS_LANGID_TIBETAN_BHUTAN is correct, BTW. */ -#define TT_MS_LANGID_DZONGHKA_BHUTAN 0x0851 - -#if 0 - /* the following used to be defined */ -#define TT_MS_LANGID_TIBETAN_BHUTAN 0x0451 - /* ... but it was changed; */ -#else - /* So we will continue to #define it, but with the correct value */ -#define TT_MS_LANGID_TIBETAN_BHUTAN TT_MS_LANGID_DZONGHKA_BHUTAN -#endif - -#define TT_MS_LANGID_WELSH_WALES 0x0452 -#define TT_MS_LANGID_KHMER_CAMBODIA 0x0453 -#define TT_MS_LANGID_LAO_LAOS 0x0454 -#define TT_MS_LANGID_BURMESE_MYANMAR 0x0455 -#define TT_MS_LANGID_GALICIAN_SPAIN 0x0456 -#define TT_MS_LANGID_KONKANI_INDIA 0x0457 -#define TT_MS_LANGID_MANIPURI_INDIA /* Bengali */ 0x0458 -#define TT_MS_LANGID_SINDHI_INDIA /* Arabic */ 0x0459 -#define TT_MS_LANGID_SINDHI_PAKISTAN 0x0859 - /* Missing a LCID for Sindhi in Devanagari script */ -#define TT_MS_LANGID_SYRIAC_SYRIA 0x045a -#define TT_MS_LANGID_SINHALESE_SRI_LANKA 0x045b -#define TT_MS_LANGID_CHEROKEE_UNITED_STATES 0x045c -#define TT_MS_LANGID_INUKTITUT_CANADA 0x045d -#define TT_MS_LANGID_AMHARIC_ETHIOPIA 0x045e -#define TT_MS_LANGID_TAMAZIGHT_MOROCCO /* Arabic */ 0x045f -#define TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN 0x085f - /* Missing a LCID for Tifinagh script */ -#define TT_MS_LANGID_KASHMIRI_PAKISTAN /* Arabic */ 0x0460 - /* Spelled this way by XPsp2 Platform SDK (2004-07-26) */ - /* script is yet unclear... might be Arabic, Nagari or Sharada */ -#define TT_MS_LANGID_KASHMIRI_SASIA 0x0860 - /* ... and aliased (by MS) for compatibility reasons. */ -#define TT_MS_LANGID_KASHMIRI_INDIA TT_MS_LANGID_KASHMIRI_SASIA -#define TT_MS_LANGID_NEPALI_NEPAL 0x0461 -#define TT_MS_LANGID_NEPALI_INDIA 0x0861 -#define TT_MS_LANGID_FRISIAN_NETHERLANDS 0x0462 -#define TT_MS_LANGID_PASHTO_AFGHANISTAN 0x0463 -#define TT_MS_LANGID_FILIPINO_PHILIPPINES 0x0464 -#define TT_MS_LANGID_DHIVEHI_MALDIVES 0x0465 - /* alias declared in Windows 2000 */ -#define TT_MS_LANGID_DIVEHI_MALDIVES TT_MS_LANGID_DHIVEHI_MALDIVES -#define TT_MS_LANGID_EDO_NIGERIA 0x0466 -#define TT_MS_LANGID_FULFULDE_NIGERIA 0x0467 -#define TT_MS_LANGID_HAUSA_NIGERIA 0x0468 -#define TT_MS_LANGID_IBIBIO_NIGERIA 0x0469 -#define TT_MS_LANGID_YORUBA_NIGERIA 0x046a -#define TT_MS_LANGID_QUECHUA_BOLIVIA 0x046b -#define TT_MS_LANGID_QUECHUA_ECUADOR 0x086b -#define TT_MS_LANGID_QUECHUA_PERU 0x0c6b -#define TT_MS_LANGID_SEPEDI_SOUTH_AFRICA 0x046c - /* Also spelled by XPsp2 Platform SDK (2004-07-26) */ -#define TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA \ - TT_MS_LANGID_SEPEDI_SOUTH_AFRICA - /* language codes 0x046d, 0x046e and 0x046f are (still) unknown. */ -#define TT_MS_LANGID_IGBO_NIGERIA 0x0470 -#define TT_MS_LANGID_KANURI_NIGERIA 0x0471 -#define TT_MS_LANGID_OROMO_ETHIOPIA 0x0472 -#define TT_MS_LANGID_TIGRIGNA_ETHIOPIA 0x0473 -#define TT_MS_LANGID_TIGRIGNA_ERYTHREA 0x0873 - /* also spelled in the `Passport SDK' list as: */ -#define TT_MS_LANGID_TIGRIGNA_ERYTREA TT_MS_LANGID_TIGRIGNA_ERYTHREA -#define TT_MS_LANGID_GUARANI_PARAGUAY 0x0474 -#define TT_MS_LANGID_HAWAIIAN_UNITED_STATES 0x0475 -#define TT_MS_LANGID_LATIN 0x0476 -#define TT_MS_LANGID_SOMALI_SOMALIA 0x0477 - /* Note: Yi does not have a (proper) ISO 639-2 code, since it is mostly */ - /* not written (but OTOH the peculiar writing system is worth */ - /* studying). */ -#define TT_MS_LANGID_YI_CHINA 0x0478 -#define TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES 0x0479 - /* language codes from 0x047a to 0x047f are (still) unknown. */ -#define TT_MS_LANGID_UIGHUR_CHINA 0x0480 -#define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481 - -#if 0 /* not deemed useful for fonts */ -#define TT_MS_LANGID_HUMAN_INTERFACE_DEVICE 0x04ff -#endif - - - /*************************************************************************/ - /* */ - /* Possible values of the `name' identifier field in the name records of */ - /* the TTF `name' table. These values are platform independent. */ - /* */ -#define TT_NAME_ID_COPYRIGHT 0 -#define TT_NAME_ID_FONT_FAMILY 1 -#define TT_NAME_ID_FONT_SUBFAMILY 2 -#define TT_NAME_ID_UNIQUE_ID 3 -#define TT_NAME_ID_FULL_NAME 4 -#define TT_NAME_ID_VERSION_STRING 5 -#define TT_NAME_ID_PS_NAME 6 -#define TT_NAME_ID_TRADEMARK 7 - - /* the following values are from the OpenType spec */ -#define TT_NAME_ID_MANUFACTURER 8 -#define TT_NAME_ID_DESIGNER 9 -#define TT_NAME_ID_DESCRIPTION 10 -#define TT_NAME_ID_VENDOR_URL 11 -#define TT_NAME_ID_DESIGNER_URL 12 -#define TT_NAME_ID_LICENSE 13 -#define TT_NAME_ID_LICENSE_URL 14 - /* number 15 is reserved */ -#define TT_NAME_ID_PREFERRED_FAMILY 16 -#define TT_NAME_ID_PREFERRED_SUBFAMILY 17 -#define TT_NAME_ID_MAC_FULL_NAME 18 - - /* The following code is new as of 2000-01-21 */ -#define TT_NAME_ID_SAMPLE_TEXT 19 - - /* This is new in OpenType 1.3 */ -#define TT_NAME_ID_CID_FINDFONT_NAME 20 - - - /*************************************************************************/ - /* */ - /* Bit mask values for the Unicode Ranges from the TTF `OS2 ' table. */ - /* */ - /* Updated 02-Jul-2000. */ - /* */ - - /* General Scripts Area */ - - /* Bit 0 Basic Latin */ -#define TT_UCR_BASIC_LATIN (1L << 0) /* U+0020-U+007E */ - /* Bit 1 C1 Controls and Latin-1 Supplement */ -#define TT_UCR_LATIN1_SUPPLEMENT (1L << 1) /* U+0080-U+00FF */ - /* Bit 2 Latin Extended-A */ -#define TT_UCR_LATIN_EXTENDED_A (1L << 2) /* U+0100-U+017F */ - /* Bit 3 Latin Extended-B */ -#define TT_UCR_LATIN_EXTENDED_B (1L << 3) /* U+0180-U+024F */ - /* Bit 4 IPA Extensions */ -#define TT_UCR_IPA_EXTENSIONS (1L << 4) /* U+0250-U+02AF */ - /* Bit 5 Spacing Modifier Letters */ -#define TT_UCR_SPACING_MODIFIER (1L << 5) /* U+02B0-U+02FF */ - /* Bit 6 Combining Diacritical Marks */ -#define TT_UCR_COMBINING_DIACRITICS (1L << 6) /* U+0300-U+036F */ - /* Bit 7 Greek and Coptic */ -#define TT_UCR_GREEK (1L << 7) /* U+0370-U+03FF */ - /* Bit 8 is reserved (was: Greek Symbols and Coptic) */ - /* Bit 9 Cyrillic + */ - /* Cyrillic Supplementary */ -#define TT_UCR_CYRILLIC (1L << 9) /* U+0400-U+04FF */ - /* U+0500-U+052F */ - /* Bit 10 Armenian */ -#define TT_UCR_ARMENIAN (1L << 10) /* U+0530-U+058F */ - /* Bit 11 Hebrew */ -#define TT_UCR_HEBREW (1L << 11) /* U+0590-U+05FF */ - /* Bit 12 is reserved (was: Hebrew Extended) */ - /* Bit 13 Arabic */ -#define TT_UCR_ARABIC (1L << 13) /* U+0600-U+06FF */ - /* Bit 14 is reserved (was: Arabic Extended) */ - /* Bit 15 Devanagari */ -#define TT_UCR_DEVANAGARI (1L << 15) /* U+0900-U+097F */ - /* Bit 16 Bengali */ -#define TT_UCR_BENGALI (1L << 16) /* U+0980-U+09FF */ - /* Bit 17 Gurmukhi */ -#define TT_UCR_GURMUKHI (1L << 17) /* U+0A00-U+0A7F */ - /* Bit 18 Gujarati */ -#define TT_UCR_GUJARATI (1L << 18) /* U+0A80-U+0AFF */ - /* Bit 19 Oriya */ -#define TT_UCR_ORIYA (1L << 19) /* U+0B00-U+0B7F */ - /* Bit 20 Tamil */ -#define TT_UCR_TAMIL (1L << 20) /* U+0B80-U+0BFF */ - /* Bit 21 Telugu */ -#define TT_UCR_TELUGU (1L << 21) /* U+0C00-U+0C7F */ - /* Bit 22 Kannada */ -#define TT_UCR_KANNADA (1L << 22) /* U+0C80-U+0CFF */ - /* Bit 23 Malayalam */ -#define TT_UCR_MALAYALAM (1L << 23) /* U+0D00-U+0D7F */ - /* Bit 24 Thai */ -#define TT_UCR_THAI (1L << 24) /* U+0E00-U+0E7F */ - /* Bit 25 Lao */ -#define TT_UCR_LAO (1L << 25) /* U+0E80-U+0EFF */ - /* Bit 26 Georgian */ -#define TT_UCR_GEORGIAN (1L << 26) /* U+10A0-U+10FF */ - /* Bit 27 is reserved (was Georgian Extended) */ - /* Bit 28 Hangul Jamo */ -#define TT_UCR_HANGUL_JAMO (1L << 28) /* U+1100-U+11FF */ - /* Bit 29 Latin Extended Additional */ -#define TT_UCR_LATIN_EXTENDED_ADDITIONAL (1L << 29) /* U+1E00-U+1EFF */ - /* Bit 30 Greek Extended */ -#define TT_UCR_GREEK_EXTENDED (1L << 30) /* U+1F00-U+1FFF */ - - /* Symbols Area */ - - /* Bit 31 General Punctuation */ -#define TT_UCR_GENERAL_PUNCTUATION (1L << 31) /* U+2000-U+206F */ - /* Bit 32 Superscripts And Subscripts */ -#define TT_UCR_SUPERSCRIPTS_SUBSCRIPTS (1L << 0) /* U+2070-U+209F */ - /* Bit 33 Currency Symbols */ -#define TT_UCR_CURRENCY_SYMBOLS (1L << 1) /* U+20A0-U+20CF */ - /* Bit 34 Combining Diacritical Marks For Symbols */ -#define TT_UCR_COMBINING_DIACRITICS_SYMB (1L << 2) /* U+20D0-U+20FF */ - /* Bit 35 Letterlike Symbols */ -#define TT_UCR_LETTERLIKE_SYMBOLS (1L << 3) /* U+2100-U+214F */ - /* Bit 36 Number Forms */ -#define TT_UCR_NUMBER_FORMS (1L << 4) /* U+2150-U+218F */ - /* Bit 37 Arrows + */ - /* Supplemental Arrows-A + */ - /* Supplemental Arrows-B */ -#define TT_UCR_ARROWS (1L << 5) /* U+2190-U+21FF */ - /* U+27F0-U+27FF */ - /* U+2900-U+297F */ - /* Bit 38 Mathematical Operators + */ - /* Supplemental Mathematical Operators + */ - /* Miscellaneous Mathematical Symbols-A + */ - /* Miscellaneous Mathematical Symbols-B */ -#define TT_UCR_MATHEMATICAL_OPERATORS (1L << 6) /* U+2200-U+22FF */ - /* U+2A00-U+2AFF */ - /* U+27C0-U+27EF */ - /* U+2980-U+29FF */ - /* Bit 39 Miscellaneous Technical */ -#define TT_UCR_MISCELLANEOUS_TECHNICAL (1L << 7) /* U+2300-U+23FF */ - /* Bit 40 Control Pictures */ -#define TT_UCR_CONTROL_PICTURES (1L << 8) /* U+2400-U+243F */ - /* Bit 41 Optical Character Recognition */ -#define TT_UCR_OCR (1L << 9) /* U+2440-U+245F */ - /* Bit 42 Enclosed Alphanumerics */ -#define TT_UCR_ENCLOSED_ALPHANUMERICS (1L << 10) /* U+2460-U+24FF */ - /* Bit 43 Box Drawing */ -#define TT_UCR_BOX_DRAWING (1L << 11) /* U+2500-U+257F */ - /* Bit 44 Block Elements */ -#define TT_UCR_BLOCK_ELEMENTS (1L << 12) /* U+2580-U+259F */ - /* Bit 45 Geometric Shapes */ -#define TT_UCR_GEOMETRIC_SHAPES (1L << 13) /* U+25A0-U+25FF */ - /* Bit 46 Miscellaneous Symbols */ -#define TT_UCR_MISCELLANEOUS_SYMBOLS (1L << 14) /* U+2600-U+26FF */ - /* Bit 47 Dingbats */ -#define TT_UCR_DINGBATS (1L << 15) /* U+2700-U+27BF */ - - /* CJK Phonetics and Symbols Area */ - - /* Bit 48 CJK Symbols and Punctuation */ -#define TT_UCR_CJK_SYMBOLS (1L << 16) /* U+3000-U+303F */ - /* Bit 49 Hiragana */ -#define TT_UCR_HIRAGANA (1L << 17) /* U+3040-U+309F */ - /* Bit 50 Katakana + */ - /* Katakana Phonetic Extensions */ -#define TT_UCR_KATAKANA (1L << 18) /* U+30A0-U+30FF */ - /* U+31F0-U+31FF */ - /* Bit 51 Bopomofo + */ - /* Bopomofo Extended */ -#define TT_UCR_BOPOMOFO (1L << 19) /* U+3100-U+312F */ - /* U+31A0-U+31BF */ - /* Bit 52 Hangul Compatibility Jamo */ -#define TT_UCR_HANGUL_COMPATIBILITY_JAMO (1L << 20) /* U+3130-U+318F */ - /* Bit 53 Kanbun */ -#define TT_UCR_CJK_MISC (1L << 21) /* U+3190-U+319F */ -#define TT_UCR_KANBUN TT_UCR_CJK_MISC - /* Bit 54 Enclosed CJK Letters and Months */ -#define TT_UCR_ENCLOSED_CJK_LETTERS_MONTHS (1L << 22) /* U+3200-U+32FF */ - /* Bit 55 CJK Compatibility */ -#define TT_UCR_CJK_COMPATIBILITY (1L << 23) /* U+3300-U+33FF */ - - /* Hangul Syllables Area */ - - /* Bit 56 Hangul */ -#define TT_UCR_HANGUL (1L << 24) /* U+AC00-U+D7A3 */ - - /* Surrogates Area */ - - /* Bit 57 High Surrogates + */ - /* High Private Use Surrogates + */ - /* Low Surrogates */ -#define TT_UCR_SURROGATES (1L << 25) /* U+D800-U+DB7F */ - /* U+DB80-U+DBFF */ - /* U+DC00-U+DFFF */ - /* According to OpenType specs v.1.3+, setting bit 57 implies that there */ - /* is at least one codepoint beyond the Basic Multilingual Plane that is */ - /* supported by this font. So it really means: >= U+10000 */ - - /* Bit 58 is reserved for Unicode SubRanges */ - - /* CJK Ideographs Area */ - - /* Bit 59 CJK Unified Ideographs + */ - /* CJK Radicals Supplement + */ - /* Kangxi Radicals + */ - /* Ideographic Description Characters + */ - /* CJK Unified Ideographs Extension A */ - /* CJK Unified Ideographs Extension A + */ - /* CJK Unified Ideographs Extension B + */ - /* Kanbun */ -#define TT_UCR_CJK_UNIFIED_IDEOGRAPHS (1L << 27) /* U+4E00-U+9FFF */ - /* U+2E80-U+2EFF */ - /* U+2F00-U+2FDF */ - /* U+2FF0-U+2FFF */ - /* U+3400-U+4DB5 */ - /*U+20000-U+2A6DF*/ - /* U+3190-U+319F */ - - /* Private Use Area */ - - /* Bit 60 Private Use */ -#define TT_UCR_PRIVATE_USE (1L << 28) /* U+E000-U+F8FF */ - - /* Compatibility Area and Specials */ - - /* Bit 61 CJK Compatibility Ideographs + */ - /* CJK Compatibility Ideographs Supplement */ -#define TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS (1L << 29) /* U+F900-U+FAFF */ - /*U+2F800-U+2FA1F*/ - /* Bit 62 Alphabetic Presentation Forms */ -#define TT_UCR_ALPHABETIC_PRESENTATION_FORMS (1L << 30) /* U+FB00-U+FB4F */ - /* Bit 63 Arabic Presentation Forms-A */ -#define TT_UCR_ARABIC_PRESENTATIONS_A (1L << 31) /* U+FB50-U+FDFF */ - /* Bit 64 Combining Half Marks */ -#define TT_UCR_COMBINING_HALF_MARKS (1L << 0) /* U+FE20-U+FE2F */ - /* Bit 65 CJK Compatibility Forms */ -#define TT_UCR_CJK_COMPATIBILITY_FORMS (1L << 1) /* U+FE30-U+FE4F */ - /* Bit 66 Small Form Variants */ -#define TT_UCR_SMALL_FORM_VARIANTS (1L << 2) /* U+FE50-U+FE6F */ - /* Bit 67 Arabic Presentation Forms-B */ -#define TT_UCR_ARABIC_PRESENTATIONS_B (1L << 3) /* U+FE70-U+FEFE */ - /* Bit 68 Halfwidth and Fullwidth Forms */ -#define TT_UCR_HALFWIDTH_FULLWIDTH_FORMS (1L << 4) /* U+FF00-U+FFEF */ - /* Bit 69 Specials */ -#define TT_UCR_SPECIALS (1L << 5) /* U+FFF0-U+FFFD */ - /* Bit 70 Tibetan */ -#define TT_UCR_TIBETAN (1L << 6) /* U+0F00-U+0FFF */ - /* Bit 71 Syriac */ -#define TT_UCR_SYRIAC (1L << 7) /* U+0700-U+074F */ - /* Bit 72 Thaana */ -#define TT_UCR_THAANA (1L << 8) /* U+0780-U+07BF */ - /* Bit 73 Sinhala */ -#define TT_UCR_SINHALA (1L << 9) /* U+0D80-U+0DFF */ - /* Bit 74 Myanmar */ -#define TT_UCR_MYANMAR (1L << 10) /* U+1000-U+109F */ - /* Bit 75 Ethiopic */ -#define TT_UCR_ETHIOPIC (1L << 11) /* U+1200-U+137F */ - /* Bit 76 Cherokee */ -#define TT_UCR_CHEROKEE (1L << 12) /* U+13A0-U+13FF */ - /* Bit 77 Unified Canadian Aboriginal Syllabics */ -#define TT_UCR_CANADIAN_ABORIGINAL_SYLLABICS (1L << 13) /* U+1400-U+167F */ - /* Bit 78 Ogham */ -#define TT_UCR_OGHAM (1L << 14) /* U+1680-U+169F */ - /* Bit 79 Runic */ -#define TT_UCR_RUNIC (1L << 15) /* U+16A0-U+16FF */ - /* Bit 80 Khmer */ -#define TT_UCR_KHMER (1L << 16) /* U+1780-U+17FF */ - /* Bit 81 Mongolian */ -#define TT_UCR_MONGOLIAN (1L << 17) /* U+1800-U+18AF */ - /* Bit 82 Braille Patterns */ -#define TT_UCR_BRAILLE (1L << 18) /* U+2800-U+28FF */ - /* Bit 83 Yi Syllables + */ - /* Yi Radicals */ -#define TT_UCR_YI (1L << 19) /* U+A000-U+A48F */ - /* U+A490-U+A4CF */ - /* Bit 84 Tagalog + */ - /* Hanunoo + */ - /* Buhid + */ - /* Tagbanwa */ -#define TT_UCR_PHILIPPINE (1L << 20) /* U+1700-U+171F */ - /* U+1720-U+173F */ - /* U+1740-U+175F */ - /* U+1760-U+177F */ - /* Bit 85 Old Italic */ -#define TT_UCR_OLD_ITALIC (1L << 21) /*U+10300-U+1032F*/ - /* Bit 86 Gothic */ -#define TT_UCR_GOTHIC (1L << 22) /*U+10330-U+1034F*/ - /* Bit 87 Deseret */ -#define TT_UCR_DESERET (1L << 23) /*U+10400-U+1044F*/ - /* Bit 88 Byzantine Musical Symbols + */ - /* Musical Symbols */ -#define TT_UCR_MUSICAL_SYMBOLS (1L << 24) /*U+1D000-U+1D0FF*/ - /*U+1D100-U+1D1FF*/ - /* Bit 89 Mathematical Alphanumeric Symbols */ -#define TT_UCR_MATH_ALPHANUMERIC_SYMBOLS (1L << 25) /*U+1D400-U+1D7FF*/ - /* Bit 90 Private Use (plane 15) + */ - /* Private Use (plane 16) */ -#define TT_UCR_PRIVATE_USE_SUPPLEMENTARY (1L << 26) /*U+F0000-U+FFFFD*/ - /*U+100000-U+10FFFD*/ - /* Bit 91 Variation Selectors */ -#define TT_UCR_VARIATION_SELECTORS (1L << 27) /* U+FE00-U+FE0F */ - /* Bit 92 Tags */ -#define TT_UCR_TAGS (1L << 28) /*U+E0000-U+E007F*/ - - - /*************************************************************************/ - /* */ - /* Some compilers have a very limited length of identifiers. */ - /* */ -#if defined( __TURBOC__ ) && __TURBOC__ < 0x0410 || defined( __PACIFIC__ ) -#define HAVE_LIMIT_ON_IDENTS -#endif - - -#ifndef HAVE_LIMIT_ON_IDENTS - - - /*************************************************************************/ - /* */ - /* Here some alias #defines in order to be clearer. */ - /* */ - /* These are not always #defined to stay within the 31 character limit */ - /* which some compilers have. */ - /* */ - /* Credits go to Dave Hoo <dhoo@flash.net> for pointing out that modern */ - /* Borland compilers (read: from BC++ 3.1 on) can increase this limit. */ - /* If you get a warning with such a compiler, use the -i40 switch. */ - /* */ -#define TT_UCR_ARABIC_PRESENTATION_FORMS_A \ - TT_UCR_ARABIC_PRESENTATIONS_A -#define TT_UCR_ARABIC_PRESENTATION_FORMS_B \ - TT_UCR_ARABIC_PRESENTATIONS_B - -#define TT_UCR_COMBINING_DIACRITICAL_MARKS \ - TT_UCR_COMBINING_DIACRITICS -#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \ - TT_UCR_COMBINING_DIACRITICS_SYMB - - -#endif /* !HAVE_LIMIT_ON_IDENTS */ - - -FT_END_HEADER - -#endif /* __TTNAMEID_H__ */ - - -/* END */ diff --git a/src/common/freetype/tttables.h b/src/common/freetype/tttables.h deleted file mode 100644 index 43eca2e25..000000000 --- a/src/common/freetype/tttables.h +++ /dev/null @@ -1,756 +0,0 @@ -/***************************************************************************/ -/* */ -/* tttables.h */ -/* */ -/* Basic SFNT/TrueType tables definitions and interface */ -/* (specification only). */ -/* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2005 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __TTTABLES_H__ -#define __TTTABLES_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - /*************************************************************************/ - /* */ - /* <Section> */ - /* truetype_tables */ - /* */ - /* <Title> */ - /* TrueType Tables */ - /* */ - /* <Abstract> */ - /* TrueType specific table types and functions. */ - /* */ - /* <Description> */ - /* This section contains the definition of TrueType-specific tables */ - /* as well as some routines used to access and process them. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_Header */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType font header table. All */ - /* fields follow the TrueType specification. */ - /* */ - typedef struct TT_Header_ - { - FT_Fixed Table_Version; - FT_Fixed Font_Revision; - - FT_Long CheckSum_Adjust; - FT_Long Magic_Number; - - FT_UShort Flags; - FT_UShort Units_Per_EM; - - FT_Long Created [2]; - FT_Long Modified[2]; - - FT_Short xMin; - FT_Short yMin; - FT_Short xMax; - FT_Short yMax; - - FT_UShort Mac_Style; - FT_UShort Lowest_Rec_PPEM; - - FT_Short Font_Direction; - FT_Short Index_To_Loc_Format; - FT_Short Glyph_Data_Format; - - } TT_Header; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_HoriHeader */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType horizontal header, the `hhea' */ - /* table, as well as the corresponding horizontal metrics table, */ - /* i.e., the `hmtx' table. */ - /* */ - /* <Fields> */ - /* Version :: The table version. */ - /* */ - /* Ascender :: The font's ascender, i.e., the distance */ - /* from the baseline to the top-most of all */ - /* glyph points found in the font. */ - /* */ - /* This value is invalid in many fonts, as */ - /* it is usually set by the font designer, */ - /* and often reflects only a portion of the */ - /* glyphs found in the font (maybe ASCII). */ - /* */ - /* You should use the `sTypoAscender' field */ - /* of the OS/2 table instead if you want */ - /* the correct one. */ - /* */ - /* Descender :: The font's descender, i.e., the distance */ - /* from the baseline to the bottom-most of */ - /* all glyph points found in the font. It */ - /* is negative. */ - /* */ - /* This value is invalid in many fonts, as */ - /* it is usually set by the font designer, */ - /* and often reflects only a portion of the */ - /* glyphs found in the font (maybe ASCII). */ - /* */ - /* You should use the `sTypoDescender' */ - /* field of the OS/2 table instead if you */ - /* want the correct one. */ - /* */ - /* Line_Gap :: The font's line gap, i.e., the distance */ - /* to add to the ascender and descender to */ - /* get the BTB, i.e., the */ - /* baseline-to-baseline distance for the */ - /* font. */ - /* */ - /* advance_Width_Max :: This field is the maximum of all advance */ - /* widths found in the font. It can be */ - /* used to compute the maximum width of an */ - /* arbitrary string of text. */ - /* */ - /* min_Left_Side_Bearing :: The minimum left side bearing of all */ - /* glyphs within the font. */ - /* */ - /* min_Right_Side_Bearing :: The minimum right side bearing of all */ - /* glyphs within the font. */ - /* */ - /* xMax_Extent :: The maximum horizontal extent (i.e., the */ - /* `width' of a glyph's bounding box) for */ - /* all glyphs in the font. */ - /* */ - /* caret_Slope_Rise :: The rise coefficient of the cursor's */ - /* slope of the cursor (slope=rise/run). */ - /* */ - /* caret_Slope_Run :: The run coefficient of the cursor's */ - /* slope. */ - /* */ - /* Reserved :: 10 reserved bytes. */ - /* */ - /* metric_Data_Format :: Always 0. */ - /* */ - /* number_Of_HMetrics :: Number of HMetrics entries in the `hmtx' */ - /* table -- this value can be smaller than */ - /* the total number of glyphs in the font. */ - /* */ - /* long_metrics :: A pointer into the `hmtx' table. */ - /* */ - /* short_metrics :: A pointer into the `hmtx' table. */ - /* */ - /* <Note> */ - /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */ - /* be identical except for the names of their fields which */ - /* are different. */ - /* */ - /* This ensures that a single function in the `ttload' */ - /* module is able to read both the horizontal and vertical */ - /* headers. */ - /* */ - typedef struct TT_HoriHeader_ - { - FT_Fixed Version; - FT_Short Ascender; - FT_Short Descender; - FT_Short Line_Gap; - - FT_UShort advance_Width_Max; /* advance width maximum */ - - FT_Short min_Left_Side_Bearing; /* minimum left-sb */ - FT_Short min_Right_Side_Bearing; /* minimum right-sb */ - FT_Short xMax_Extent; /* xmax extents */ - FT_Short caret_Slope_Rise; - FT_Short caret_Slope_Run; - FT_Short caret_Offset; - - FT_Short Reserved[4]; - - FT_Short metric_Data_Format; - FT_UShort number_Of_HMetrics; - - /* The following fields are not defined by the TrueType specification */ - /* but they are used to connect the metrics header to the relevant */ - /* `HMTX' table. */ - - void* long_metrics; - void* short_metrics; - - } TT_HoriHeader; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_VertHeader */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType vertical header, the `vhea' */ - /* table, as well as the corresponding vertical metrics table, i.e., */ - /* the `vmtx' table. */ - /* */ - /* <Fields> */ - /* Version :: The table version. */ - /* */ - /* Ascender :: The font's ascender, i.e., the distance */ - /* from the baseline to the top-most of */ - /* all glyph points found in the font. */ - /* */ - /* This value is invalid in many fonts, as */ - /* it is usually set by the font designer, */ - /* and often reflects only a portion of */ - /* the glyphs found in the font (maybe */ - /* ASCII). */ - /* */ - /* You should use the `sTypoAscender' */ - /* field of the OS/2 table instead if you */ - /* want the correct one. */ - /* */ - /* Descender :: The font's descender, i.e., the */ - /* distance from the baseline to the */ - /* bottom-most of all glyph points found */ - /* in the font. It is negative. */ - /* */ - /* This value is invalid in many fonts, as */ - /* it is usually set by the font designer, */ - /* and often reflects only a portion of */ - /* the glyphs found in the font (maybe */ - /* ASCII). */ - /* */ - /* You should use the `sTypoDescender' */ - /* field of the OS/2 table instead if you */ - /* want the correct one. */ - /* */ - /* Line_Gap :: The font's line gap, i.e., the distance */ - /* to add to the ascender and descender to */ - /* get the BTB, i.e., the */ - /* baseline-to-baseline distance for the */ - /* font. */ - /* */ - /* advance_Height_Max :: This field is the maximum of all */ - /* advance heights found in the font. It */ - /* can be used to compute the maximum */ - /* height of an arbitrary string of text. */ - /* */ - /* min_Top_Side_Bearing :: The minimum top side bearing of all */ - /* glyphs within the font. */ - /* */ - /* min_Bottom_Side_Bearing :: The minimum bottom side bearing of all */ - /* glyphs within the font. */ - /* */ - /* yMax_Extent :: The maximum vertical extent (i.e., the */ - /* `height' of a glyph's bounding box) for */ - /* all glyphs in the font. */ - /* */ - /* caret_Slope_Rise :: The rise coefficient of the cursor's */ - /* slope of the cursor (slope=rise/run). */ - /* */ - /* caret_Slope_Run :: The run coefficient of the cursor's */ - /* slope. */ - /* */ - /* caret_Offset :: The cursor's offset for slanted fonts. */ - /* This value is `reserved' in vmtx */ - /* version 1.0. */ - /* */ - /* Reserved :: 8 reserved bytes. */ - /* */ - /* metric_Data_Format :: Always 0. */ - /* */ - /* number_Of_HMetrics :: Number of VMetrics entries in the */ - /* `vmtx' table -- this value can be */ - /* smaller than the total number of glyphs */ - /* in the font. */ - /* */ - /* long_metrics :: A pointer into the `vmtx' table. */ - /* */ - /* short_metrics :: A pointer into the `vmtx' table. */ - /* */ - /* <Note> */ - /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */ - /* be identical except for the names of their fields which */ - /* are different. */ - /* */ - /* This ensures that a single function in the `ttload' */ - /* module is able to read both the horizontal and vertical */ - /* headers. */ - /* */ - typedef struct TT_VertHeader_ - { - FT_Fixed Version; - FT_Short Ascender; - FT_Short Descender; - FT_Short Line_Gap; - - FT_UShort advance_Height_Max; /* advance height maximum */ - - FT_Short min_Top_Side_Bearing; /* minimum left-sb or top-sb */ - FT_Short min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb */ - FT_Short yMax_Extent; /* xmax or ymax extents */ - FT_Short caret_Slope_Rise; - FT_Short caret_Slope_Run; - FT_Short caret_Offset; - - FT_Short Reserved[4]; - - FT_Short metric_Data_Format; - FT_UShort number_Of_VMetrics; - - /* The following fields are not defined by the TrueType specification */ - /* but they're used to connect the metrics header to the relevant */ - /* `HMTX' or `VMTX' table. */ - - void* long_metrics; - void* short_metrics; - - } TT_VertHeader; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_OS2 */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType OS/2 table. This is the long */ - /* table version. All fields comply to the TrueType specification. */ - /* */ - /* Note that we now support old Mac fonts which do not include an */ - /* OS/2 table. In this case, the `version' field is always set to */ - /* 0xFFFF. */ - /* */ - typedef struct TT_OS2_ - { - FT_UShort version; /* 0x0001 - more or 0xFFFF */ - FT_Short xAvgCharWidth; - FT_UShort usWeightClass; - FT_UShort usWidthClass; - FT_Short fsType; - FT_Short ySubscriptXSize; - FT_Short ySubscriptYSize; - FT_Short ySubscriptXOffset; - FT_Short ySubscriptYOffset; - FT_Short ySuperscriptXSize; - FT_Short ySuperscriptYSize; - FT_Short ySuperscriptXOffset; - FT_Short ySuperscriptYOffset; - FT_Short yStrikeoutSize; - FT_Short yStrikeoutPosition; - FT_Short sFamilyClass; - - FT_Byte panose[10]; - - FT_ULong ulUnicodeRange1; /* Bits 0-31 */ - FT_ULong ulUnicodeRange2; /* Bits 32-63 */ - FT_ULong ulUnicodeRange3; /* Bits 64-95 */ - FT_ULong ulUnicodeRange4; /* Bits 96-127 */ - - FT_Char achVendID[4]; - - FT_UShort fsSelection; - FT_UShort usFirstCharIndex; - FT_UShort usLastCharIndex; - FT_Short sTypoAscender; - FT_Short sTypoDescender; - FT_Short sTypoLineGap; - FT_UShort usWinAscent; - FT_UShort usWinDescent; - - /* only version 1 tables: */ - - FT_ULong ulCodePageRange1; /* Bits 0-31 */ - FT_ULong ulCodePageRange2; /* Bits 32-63 */ - - /* only version 2 tables: */ - - FT_Short sxHeight; - FT_Short sCapHeight; - FT_UShort usDefaultChar; - FT_UShort usBreakChar; - FT_UShort usMaxContext; - - } TT_OS2; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_Postscript */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType Postscript table. All fields */ - /* comply to the TrueType specification. This structure does not */ - /* reference the Postscript glyph names, which can be nevertheless */ - /* accessed with the `ttpost' module. */ - /* */ - typedef struct TT_Postscript_ - { - FT_Fixed FormatType; - FT_Fixed italicAngle; - FT_Short underlinePosition; - FT_Short underlineThickness; - FT_ULong isFixedPitch; - FT_ULong minMemType42; - FT_ULong maxMemType42; - FT_ULong minMemType1; - FT_ULong maxMemType1; - - /* Glyph names follow in the file, but we don't */ - /* load them by default. See the ttpost.c file. */ - - } TT_Postscript; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_PCLT */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType PCLT table. All fields */ - /* comply to the TrueType specification. */ - /* */ - typedef struct TT_PCLT_ - { - FT_Fixed Version; - FT_ULong FontNumber; - FT_UShort Pitch; - FT_UShort xHeight; - FT_UShort Style; - FT_UShort TypeFamily; - FT_UShort CapHeight; - FT_UShort SymbolSet; - FT_Char TypeFace[16]; - FT_Char CharacterComplement[8]; - FT_Char FileName[6]; - FT_Char StrokeWeight; - FT_Char WidthType; - FT_Byte SerifStyle; - FT_Byte Reserved; - - } TT_PCLT; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_MaxProfile */ - /* */ - /* <Description> */ - /* The maximum profile is a table containing many max values which */ - /* can be used to pre-allocate arrays. This ensures that no memory */ - /* allocation occurs during a glyph load. */ - /* */ - /* <Fields> */ - /* version :: The version number. */ - /* */ - /* numGlyphs :: The number of glyphs in this TrueType */ - /* font. */ - /* */ - /* maxPoints :: The maximum number of points in a */ - /* non-composite TrueType glyph. See also */ - /* the structure element */ - /* `maxCompositePoints'. */ - /* */ - /* maxContours :: The maximum number of contours in a */ - /* non-composite TrueType glyph. See also */ - /* the structure element */ - /* `maxCompositeContours'. */ - /* */ - /* maxCompositePoints :: The maximum number of points in a */ - /* composite TrueType glyph. See also the */ - /* structure element `maxPoints'. */ - /* */ - /* maxCompositeContours :: The maximum number of contours in a */ - /* composite TrueType glyph. See also the */ - /* structure element `maxContours'. */ - /* */ - /* maxZones :: The maximum number of zones used for */ - /* glyph hinting. */ - /* */ - /* maxTwilightPoints :: The maximum number of points in the */ - /* twilight zone used for glyph hinting. */ - /* */ - /* maxStorage :: The maximum number of elements in the */ - /* storage area used for glyph hinting. */ - /* */ - /* maxFunctionDefs :: The maximum number of function */ - /* definitions in the TrueType bytecode for */ - /* this font. */ - /* */ - /* maxInstructionDefs :: The maximum number of instruction */ - /* definitions in the TrueType bytecode for */ - /* this font. */ - /* */ - /* maxStackElements :: The maximum number of stack elements used */ - /* during bytecode interpretation. */ - /* */ - /* maxSizeOfInstructions :: The maximum number of TrueType opcodes */ - /* used for glyph hinting. */ - /* */ - /* maxComponentElements :: The maximum number of simple (i.e., non- */ - /* composite) glyphs in a composite glyph. */ - /* */ - /* maxComponentDepth :: The maximum nesting depth of composite */ - /* glyphs. */ - /* */ - /* <Note> */ - /* This structure is only used during font loading. */ - /* */ - typedef struct TT_MaxProfile_ - { - FT_Fixed version; - FT_UShort numGlyphs; - FT_UShort maxPoints; - FT_UShort maxContours; - FT_UShort maxCompositePoints; - FT_UShort maxCompositeContours; - FT_UShort maxZones; - FT_UShort maxTwilightPoints; - FT_UShort maxStorage; - FT_UShort maxFunctionDefs; - FT_UShort maxInstructionDefs; - FT_UShort maxStackElements; - FT_UShort maxSizeOfInstructions; - FT_UShort maxComponentElements; - FT_UShort maxComponentDepth; - - } TT_MaxProfile; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Sfnt_Tag */ - /* */ - /* <Description> */ - /* An enumeration used to specify the index of an SFNT table. */ - /* Used in the @FT_Get_Sfnt_Table API function. */ - /* */ - typedef enum - { - ft_sfnt_head = 0, - ft_sfnt_maxp = 1, - ft_sfnt_os2 = 2, - ft_sfnt_hhea = 3, - ft_sfnt_vhea = 4, - ft_sfnt_post = 5, - ft_sfnt_pclt = 6, - - sfnt_max /* internal end mark */ - - } FT_Sfnt_Tag; - - /* */ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Sfnt_Table */ - /* */ - /* <Description> */ - /* Returns a pointer to a given SFNT table within a face. */ - /* */ - /* <Input> */ - /* face :: A handle to the source. */ - /* */ - /* tag :: The index of the SFNT table. */ - /* */ - /* <Return> */ - /* A type-less pointer to the table. This will be 0 in case of */ - /* error, or if the corresponding table was not found *OR* loaded */ - /* from the file. */ - /* */ - /* <Note> */ - /* The table is owned by the face object and disappears with it. */ - /* */ - /* This function is only useful to access SFNT tables that are loaded */ - /* by the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for */ - /* a list. */ - /* */ - FT_EXPORT( void* ) - FT_Get_Sfnt_Table( FT_Face face, - FT_Sfnt_Tag tag ); - - - /************************************************************************** - * - * @function: - * FT_Load_Sfnt_Table - * - * @description: - * Loads any font table into client memory. - * - * @input: - * face :: - * A handle to the source face. - * - * tag :: - * The four-byte tag of the table to load. Use the value 0 if you want - * to access the whole font file. Otherwise, you can use one of the - * definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new - * one with @FT_MAKE_TAG. - * - * offset :: - * The starting offset in the table (or file if tag == 0). - * - * @output: - * buffer :: - * The target buffer address. The client must ensure that the memory - * array is big enough to hold the data. - * - * @inout: - * length :: - * If the `length' parameter is NULL, then try to load the whole table. - * Return an error code if it fails. - * - * Else, if `*length' is 0, exit immediately while returning the - * table's (or file) full size in it. - * - * Else the number of bytes to read from the table or file, from the - * starting offset. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * If you need to determine the table's length you should first call this - * function with `*length' set to 0, as in the following example: - * - * { - * FT_ULong length = 0; - * - * - * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length ); - * if ( error ) { ... table does not exist ... } - * - * buffer = malloc( length ); - * if ( buffer == NULL ) { ... not enough memory ... } - * - * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length ); - * if ( error ) { ... could not load table ... } - * } - */ - FT_EXPORT( FT_Error ) - FT_Load_Sfnt_Table( FT_Face face, - FT_ULong tag, - FT_Long offset, - FT_Byte* buffer, - FT_ULong* length ); - - - /************************************************************************** - * - * @function: - * FT_Sfnt_Table_Info - * - * @description: - * Returns information on an SFNT table. - * - * @input: - * face :: - * A handle to the source face. - * - * table_index :: - * The index of an SFNT table. The function returns - * FT_Err_Table_Missing for an invalid value. - * - * @output: - * tag :: - * The name tag of the SFNT table. - * - * length :: - * The length of the SFNT table. - * - * @return: - * FreeType error code. 0 means success. - * - * @note: - * SFNT tables with length zero are treated as missing by Windows. - * - */ - FT_EXPORT( FT_Error ) - FT_Sfnt_Table_Info( FT_Face face, - FT_UInt table_index, - FT_ULong *tag, - FT_ULong *length ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_CMap_Language_ID */ - /* */ - /* <Description> */ - /* Return TrueType/sfnt specific cmap language ID. Definitions of */ - /* language ID values are in `freetype/ttnameid.h'. */ - /* */ - /* <Input> */ - /* charmap :: */ - /* The target charmap. */ - /* */ - /* <Return> */ - /* The language ID of `charmap'. If `charmap' doesn't belong to a */ - /* TrueType/sfnt face, just return 0 as the default value. */ - /* */ - FT_EXPORT( FT_ULong ) - FT_Get_CMap_Language_ID( FT_CharMap charmap ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_CMap_Format */ - /* */ - /* <Description> */ - /* Return TrueType/sfnt specific cmap format. */ - /* */ - /* <Input> */ - /* charmap :: */ - /* The target charmap. */ - /* */ - /* <Return> */ - /* The format of `charmap'. If `charmap' doesn't belong to a */ - /* TrueType/sfnt face, return -1. */ - /* */ - FT_EXPORT( FT_Long ) - FT_Get_CMap_Format( FT_CharMap charmap ); - - /* */ - - -FT_END_HEADER - -#endif /* __TTTABLES_H__ */ - - -/* END */ diff --git a/src/common/freetype/tttags.h b/src/common/freetype/tttags.h deleted file mode 100644 index e10244ca7..000000000 --- a/src/common/freetype/tttags.h +++ /dev/null @@ -1,99 +0,0 @@ -/***************************************************************************/ -/* */ -/* tttags.h */ -/* */ -/* Tags for TrueType and OpenType tables (specification only). */ -/* */ -/* Copyright 1996-2001, 2004, 2005 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __TTAGS_H__ -#define __TTAGS_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - -#define TTAG_avar FT_MAKE_TAG( 'a', 'v', 'a', 'r' ) -#define TTAG_BASE FT_MAKE_TAG( 'B', 'A', 'S', 'E' ) -#define TTAG_bdat FT_MAKE_TAG( 'b', 'd', 'a', 't' ) -#define TTAG_BDF FT_MAKE_TAG( 'B', 'D', 'F', ' ' ) -#define TTAG_bhed FT_MAKE_TAG( 'b', 'h', 'e', 'd' ) -#define TTAG_bloc FT_MAKE_TAG( 'b', 'l', 'o', 'c' ) -#define TTAG_bsln FT_MAKE_TAG( 'b', 's', 'l', 'n' ) -#define TTAG_CFF FT_MAKE_TAG( 'C', 'F', 'F', ' ' ) -#define TTAG_cmap FT_MAKE_TAG( 'c', 'm', 'a', 'p' ) -#define TTAG_cvar FT_MAKE_TAG( 'c', 'v', 'a', 'r' ) -#define TTAG_cvt FT_MAKE_TAG( 'c', 'v', 't', ' ' ) -#define TTAG_DSIG FT_MAKE_TAG( 'D', 'S', 'I', 'G' ) -#define TTAG_EBDT FT_MAKE_TAG( 'E', 'B', 'D', 'T' ) -#define TTAG_EBLC FT_MAKE_TAG( 'E', 'B', 'L', 'C' ) -#define TTAG_EBSC FT_MAKE_TAG( 'E', 'B', 'S', 'C' ) -#define TTAG_feat FT_MAKE_TAG( 'f', 'e', 'a', 't' ) -#define TTAG_fpgm FT_MAKE_TAG( 'f', 'p', 'g', 'm' ) -#define TTAG_fvar FT_MAKE_TAG( 'f', 'v', 'a', 'r' ) -#define TTAG_gasp FT_MAKE_TAG( 'g', 'a', 's', 'p' ) -#define TTAG_GDEF FT_MAKE_TAG( 'G', 'D', 'E', 'F' ) -#define TTAG_glyf FT_MAKE_TAG( 'g', 'l', 'y', 'f' ) -#define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' ) -#define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' ) -#define TTAG_gvar FT_MAKE_TAG( 'g', 'v', 'a', 'r' ) -#define TTAG_hdmx FT_MAKE_TAG( 'h', 'd', 'm', 'x' ) -#define TTAG_head FT_MAKE_TAG( 'h', 'e', 'a', 'd' ) -#define TTAG_hhea FT_MAKE_TAG( 'h', 'h', 'e', 'a' ) -#define TTAG_hmtx FT_MAKE_TAG( 'h', 'm', 't', 'x' ) -#define TTAG_JSTF FT_MAKE_TAG( 'J', 'S', 'T', 'F' ) -#define TTAG_just FT_MAKE_TAG( 'j', 'u', 's', 't' ) -#define TTAG_kern FT_MAKE_TAG( 'k', 'e', 'r', 'n' ) -#define TTAG_lcar FT_MAKE_TAG( 'l', 'c', 'a', 'r' ) -#define TTAG_loca FT_MAKE_TAG( 'l', 'o', 'c', 'a' ) -#define TTAG_LTSH FT_MAKE_TAG( 'L', 'T', 'S', 'H' ) -#define TTAG_maxp FT_MAKE_TAG( 'm', 'a', 'x', 'p' ) -#define TTAG_META FT_MAKE_TAG( 'M', 'E', 'T', 'A' ) -#define TTAG_MMFX FT_MAKE_TAG( 'M', 'M', 'F', 'X' ) -#define TTAG_MMSD FT_MAKE_TAG( 'M', 'M', 'S', 'D' ) -#define TTAG_mort FT_MAKE_TAG( 'm', 'o', 'r', 't' ) -#define TTAG_morx FT_MAKE_TAG( 'm', 'o', 'r', 'x' ) -#define TTAG_name FT_MAKE_TAG( 'n', 'a', 'm', 'e' ) -#define TTAG_opbd FT_MAKE_TAG( 'o', 'p', 'b', 'd' ) -#define TTAG_OS2 FT_MAKE_TAG( 'O', 'S', '/', '2' ) -#define TTAG_OTTO FT_MAKE_TAG( 'O', 'T', 'T', 'O' ) -#define TTAG_PCLT FT_MAKE_TAG( 'P', 'C', 'L', 'T' ) -#define TTAG_post FT_MAKE_TAG( 'p', 'o', 's', 't' ) -#define TTAG_prep FT_MAKE_TAG( 'p', 'r', 'e', 'p' ) -#define TTAG_prop FT_MAKE_TAG( 'p', 'r', 'o', 'p' ) -#define TTAG_SING FT_MAKE_TAG( 'S', 'I', 'N', 'G' ) -#define TTAG_trak FT_MAKE_TAG( 't', 'r', 'a', 'k' ) -#define TTAG_true FT_MAKE_TAG( 't', 'r', 'u', 'e' ) -#define TTAG_ttc FT_MAKE_TAG( 't', 't', 'c', ' ' ) -#define TTAG_ttcf FT_MAKE_TAG( 't', 't', 'c', 'f' ) -#define TTAG_VDMX FT_MAKE_TAG( 'V', 'D', 'M', 'X' ) -#define TTAG_vhea FT_MAKE_TAG( 'v', 'h', 'e', 'a' ) -#define TTAG_vmtx FT_MAKE_TAG( 'v', 'm', 't', 'x' ) - - -FT_END_HEADER - -#endif /* __TTAGS_H__ */ - - -/* END */ diff --git a/src/common/freetype/ttunpat.h b/src/common/freetype/ttunpat.h deleted file mode 100644 index a0162759b..000000000 --- a/src/common/freetype/ttunpat.h +++ /dev/null @@ -1,59 +0,0 @@ -/***************************************************************************/ -/* */ -/* ttunpat.h */ -/* */ -/* Definitions for the unpatented TrueType hinting system */ -/* */ -/* Copyright 2003, 2006 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* Written by Graham Asher <graham.asher@btinternet.com> */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef __TTUNPAT_H__ -#define __TTUNPAT_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************** - * - * @constant: - * FT_PARAM_TAG_UNPATENTED_HINTING - * - * @description: - * A constant used as the tag of an @FT_Parameter structure to indicate - * that unpatented methods only should be used by the TrueType bytecode - * interpreter for a typeface opened by @FT_Open_Face. - * - */ -#define FT_PARAM_TAG_UNPATENTED_HINTING FT_MAKE_TAG( 'u', 'n', 'p', 'a' ) - - /* */ - -FT_END_HEADER - - -#endif /* __TTUNPAT_H__ */ - - -/* END */ diff --git a/src/vgui2/vgui_surfacelib/vgui_surfacelib.vpc b/src/vgui2/vgui_surfacelib/vgui_surfacelib.vpc index bd413e43a..12c968c92 100644 --- a/src/vgui2/vgui_surfacelib/vgui_surfacelib.vpc +++ b/src/vgui2/vgui_surfacelib/vgui_surfacelib.vpc @@ -8,6 +8,13 @@ $macro SRCDIR "..\.." $include "$SRCDIR\vpc_scripts\source_lib_base.vpc" +$Configuration +{ + $Compiler + { + $AdditionalIncludeDirectories "$BASE;/usr/include/freetype2" [$LINUXALL] + } +} $Project "vgui_surfacelib" { diff --git a/src/vguimatsurface/vguimatsurface.vpc b/src/vguimatsurface/vguimatsurface.vpc index 1f41c621b..bc46ce731 100644 --- a/src/vguimatsurface/vguimatsurface.vpc +++ b/src/vguimatsurface/vguimatsurface.vpc @@ -17,6 +17,8 @@ $Configuration $PreprocessorDefinitions "$BASE;fopen=dont_use_fopen" [$WIN32] $EnableC++Exceptions "Yes (/EHsc)" // $TreatWchar_tAsBuiltinType "No" + $AdditionalIncludeDirectories "$BASE;/usr/include/freetype2" [$LINUXALL] + } $Linker From 3ab9b1ebb9b72c39f637fa2787e17cd5878050b4 Mon Sep 17 00:00:00 2001 From: ReplayCoding <replaycoding@gmail.com> Date: Sat, 18 Feb 2023 17:04:52 -0800 Subject: [PATCH 07/24] fix compile error in utlblockmemory.h Without this, gcc will complain with the following error: /src/src/public/tier1/utlblockmemory.h:139:2: error: there are no arguments to 'swap' that depend on a template parameter, so a declaration of 'swap' must be available [-fpermissive] 139 | swap( m_nBlocks, mem.m_nBlocks ); | ^~~~ --- src/public/tier1/utlblockmemory.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/public/tier1/utlblockmemory.h b/src/public/tier1/utlblockmemory.h index b4a254ff7..0600856ab 100644 --- a/src/public/tier1/utlblockmemory.h +++ b/src/public/tier1/utlblockmemory.h @@ -135,10 +135,10 @@ CUtlBlockMemory<T,I>::~CUtlBlockMemory() template< class T, class I > void CUtlBlockMemory<T,I>::Swap( CUtlBlockMemory< T, I > &mem ) { - swap( m_pMemory, mem.m_pMemory ); - swap( m_nBlocks, mem.m_nBlocks ); - swap( m_nIndexMask, mem.m_nIndexMask ); - swap( m_nIndexShift, mem.m_nIndexShift ); + std::swap( m_pMemory, mem.m_pMemory ); + std::swap( m_nBlocks, mem.m_nBlocks ); + std::swap( m_nIndexMask, mem.m_nIndexMask ); + std::swap( m_nIndexShift, mem.m_nIndexShift ); } From 0ec8af833c62cb44a74f0fe23d5a56b5f6c43219 Mon Sep 17 00:00:00 2001 From: ReplayCoding <replaycoding@gmail.com> Date: Sat, 25 Feb 2023 09:10:43 -0800 Subject: [PATCH 08/24] fix error when building static libs --- src/devtools/makefile_base_posix.mak | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/devtools/makefile_base_posix.mak b/src/devtools/makefile_base_posix.mak index ba5fd34ed..2b8c4d463 100644 --- a/src/devtools/makefile_base_posix.mak +++ b/src/devtools/makefile_base_posix.mak @@ -187,7 +187,7 @@ endif # If not specified by environment, use steam runtime compilers + in-tree ccache ifneq ($(filter default undefined,$(origin AR)),) - AR = $(STEAM_RUNTIME_PATH)/bin/ar crs + AR = $(STEAM_RUNTIME_PATH)/bin/ar endif ifneq ($(filter default undefined,$(origin CC)),) CC = $(CCACHE) $(STEAM_RUNTIME_PATH)/bin/gcc$(GCC_VER) @@ -576,7 +576,7 @@ endif $(LIB_File): $(OTHER_DEPENDENCIES) $(OBJS) $(QUIET_PREFIX) -$(P4_EDIT_START) $(LIB_File) $(P4_EDIT_END); - $(QUIET_PREFIX) $(AR) $(LIB_File) $(OBJS) $(LIBFILES); + $(QUIET_PREFIX) $(AR) crs $(LIB_File) $(OBJS) $(LIBFILES); $(SHELL) -c "$(POSTBUILDCOMMAND)" SO_GameOutputFile = $(GAMEOUTPUTFILE) From 00d018ab7d7601c9b0f5b8edd3fab27729d44a92 Mon Sep 17 00:00:00 2001 From: ReplayCoding <replaycoding@gmail.com> Date: Sat, 18 Feb 2023 17:27:02 -0800 Subject: [PATCH 09/24] make gendbg.sh & ccache executable --- src/devtools/bin/linux/ccache | Bin src/devtools/gendbg.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 src/devtools/bin/linux/ccache mode change 100644 => 100755 src/devtools/gendbg.sh diff --git a/src/devtools/bin/linux/ccache b/src/devtools/bin/linux/ccache old mode 100644 new mode 100755 diff --git a/src/devtools/gendbg.sh b/src/devtools/gendbg.sh old mode 100644 new mode 100755 From 251402c008cd3ddb4eacb6accc7fa6418a0b5693 Mon Sep 17 00:00:00 2001 From: ReplayCoding <replaycoding@gmail.com> Date: Sat, 18 Feb 2023 17:35:32 -0800 Subject: [PATCH 10/24] fix STEAM_RUNTIME_PATH on non-chroot builds Use the steam runtime containers instead, they're easier to setup --- src/devtools/makefile_base_posix.mak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/devtools/makefile_base_posix.mak b/src/devtools/makefile_base_posix.mak index 2b8c4d463..357a2a09a 100644 --- a/src/devtools/makefile_base_posix.mak +++ b/src/devtools/makefile_base_posix.mak @@ -142,7 +142,7 @@ else ifeq ($(USE_VALVE_BINDIR),1) CRYPTOPPDIR=linux32 else # Not using chroot, use old steam-runtime. (gcc 4.6.3) - export STEAM_RUNTIME_PATH ?= /valve/steam-runtime + export STEAM_RUNTIME_PATH ?= /usr GCC_VER = P4BIN = p4 CRYPTOPPDIR=ubuntu12_32 From b489e4e90c5c10528ea5b9e4786c80cb6587422c Mon Sep 17 00:00:00 2001 From: ReplayCoding <replaycoding@gmail.com> Date: Sat, 18 Feb 2023 17:59:27 -0800 Subject: [PATCH 11/24] fix protobuf builds removed some files, and added them to the gitignore. these files will get regenerated automatically, and if they're in the repo, it will show up on "git status". --- .gitignore | 108 +- src/game/protobuf_include.vpc | 2 +- src/thirdparty/protobuf-2.6.1/Makefile.in | 1141 - src/thirdparty/protobuf-2.6.1/aclocal.m4 | 1194 - src/thirdparty/protobuf-2.6.1/config.h.in | 152 - src/thirdparty/protobuf-2.6.1/configure | 19726 ---------------- .../protobuf-2.6.1/gtest/Makefile.in | 1760 -- .../protobuf-2.6.1/gtest/aclocal.m4 | 1389 -- .../gtest/build-aux/config.h.in | 69 - .../protobuf-2.6.1/gtest/build-aux/ltmain.sh | 9661 -------- src/thirdparty/protobuf-2.6.1/gtest/configure | 18386 -------------- .../protobuf-2.6.1/gtest/m4/libtool.m4 | 7997 ------- .../protobuf-2.6.1/gtest/m4/ltoptions.m4 | 384 - .../protobuf-2.6.1/gtest/m4/ltversion.m4 | 23 - src/thirdparty/protobuf-2.6.1/ltmain.sh | 9661 -------- src/thirdparty/protobuf-2.6.1/m4/libtool.m4 | 7997 ------- src/thirdparty/protobuf-2.6.1/m4/ltoptions.m4 | 384 - src/thirdparty/protobuf-2.6.1/m4/ltversion.m4 | 23 - src/thirdparty/protobuf-2.6.1/src/Makefile.in | 3641 --- src/vpc_scripts/protobuf_builder.vpc | 3 +- 20 files changed, 82 insertions(+), 83619 deletions(-) delete mode 100644 src/thirdparty/protobuf-2.6.1/Makefile.in delete mode 100644 src/thirdparty/protobuf-2.6.1/aclocal.m4 delete mode 100644 src/thirdparty/protobuf-2.6.1/config.h.in delete mode 100644 src/thirdparty/protobuf-2.6.1/configure delete mode 100644 src/thirdparty/protobuf-2.6.1/gtest/Makefile.in delete mode 100644 src/thirdparty/protobuf-2.6.1/gtest/aclocal.m4 delete mode 100644 src/thirdparty/protobuf-2.6.1/gtest/build-aux/config.h.in delete mode 100644 src/thirdparty/protobuf-2.6.1/gtest/build-aux/ltmain.sh delete mode 100644 src/thirdparty/protobuf-2.6.1/gtest/configure delete mode 100644 src/thirdparty/protobuf-2.6.1/gtest/m4/libtool.m4 delete mode 100644 src/thirdparty/protobuf-2.6.1/gtest/m4/ltoptions.m4 delete mode 100644 src/thirdparty/protobuf-2.6.1/gtest/m4/ltversion.m4 delete mode 100644 src/thirdparty/protobuf-2.6.1/ltmain.sh delete mode 100644 src/thirdparty/protobuf-2.6.1/m4/libtool.m4 delete mode 100644 src/thirdparty/protobuf-2.6.1/m4/ltoptions.m4 delete mode 100644 src/thirdparty/protobuf-2.6.1/m4/ltversion.m4 delete mode 100644 src/thirdparty/protobuf-2.6.1/src/Makefile.in diff --git a/.gitignore b/.gitignore index 4af63aadc..df85cc94f 100644 --- a/.gitignore +++ b/.gitignore @@ -99,40 +99,90 @@ Debug_*/ UpgradeLog*.htm # third party build products -src/thirdparty/protobuf-2.6.1/src/Makefile.in -src/thirdparty/protobuf-2.6.1/protobuf.pc -src/thirdparty/protobuf-2.6.1/autom4te.cache -src/thirdparty/protobuf-2.6.1/compile -src/thirdparty/protobuf-2.6.1/stamp-h1 src/thirdparty/protobuf-2.6.1/Makefile -src/thirdparty/protobuf-2.6.1/Makefile.in -src/thirdparty/protobuf-2.6.1/libtool -src/thirdparty/protobuf-2.6.1/config.log -src/thirdparty/protobuf-2.6.1/protobuf-lite.pc -src/thirdparty/protobuf-2.6.1/aclocal.m4 -src/thirdparty/protobuf-2.6.1/gtest/configure -src/thirdparty/protobuf-2.6.1/configure -src/thirdparty/protobuf-2.6.1/src/protoc -src/thirdparty/protobuf-2.6.1/src/unittest_proto_middleman -src/thirdparty/protobuf-2.6.1/**/Makefile -src/thirdparty/protobuf-2.6.1/**/Makefile.in -src/thirdparty/protobuf-2.6.1/**/libtool -src/thirdparty/protobuf-2.6.1/**/.dirstamp -src/thirdparty/protobuf-2.6.1/gtest/config.status -src/thirdparty/protobuf-2.6.1/gtest/scripts/gtest-config -src/thirdparty/protobuf-2.6.1/gtest/build-aux/config.h -src/thirdparty/protobuf-2.6.1/**/stamp-h1 +src/thirdparty/protobuf-2.6.1/autom4te.cache/ src/thirdparty/protobuf-2.6.1/config.h +src/thirdparty/protobuf-2.6.1/config.h.in~ src/thirdparty/protobuf-2.6.1/config.status -src/thirdparty/protobuf-2.6.1/test-driver -src/thirdparty/protobuf-2.6.1/missing -src/thirdparty/protobuf-2.6.1/**/.deps -src/thirdparty/protobuf-2.6.1/**/.libs -src/thirdparty/protobuf-2.6.1/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.* -src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest*.pb.* +src/thirdparty/protobuf-2.6.1/gtest/Makefile +src/thirdparty/protobuf-2.6.1/gtest/autom4te.cache/ +src/thirdparty/protobuf-2.6.1/gtest/build-aux/config.h +src/thirdparty/protobuf-2.6.1/gtest/build-aux/config.h.in~ +src/thirdparty/protobuf-2.6.1/gtest/build-aux/stamp-h1 +src/thirdparty/protobuf-2.6.1/gtest/config.status +src/thirdparty/protobuf-2.6.1/gtest/fused-src/gtest/.deps/ +src/thirdparty/protobuf-2.6.1/gtest/libtool +src/thirdparty/protobuf-2.6.1/gtest/samples/.deps/ +src/thirdparty/protobuf-2.6.1/gtest/scripts/gtest-config +src/thirdparty/protobuf-2.6.1/gtest/test/.deps/ +src/thirdparty/protobuf-2.6.1/libtool +src/thirdparty/protobuf-2.6.1/protobuf-lite.pc +src/thirdparty/protobuf-2.6.1/protobuf.pc +src/thirdparty/protobuf-2.6.1/src/.libs/ +src/thirdparty/protobuf-2.6.1/src/Makefile src/thirdparty/protobuf-2.6.1/src/google/protobuf/.deps/ src/thirdparty/protobuf-2.6.1/src/google/protobuf/.dirstamp -src/thirdparty/protobuf-2.6.1/src/google/protobuf/.libs/ +src/thirdparty/protobuf-2.6.1/src/google/protobuf/compiler/.deps/ +src/thirdparty/protobuf-2.6.1/src/google/protobuf/compiler/.dirstamp +src/thirdparty/protobuf-2.6.1/src/google/protobuf/compiler/cpp/.deps/ +src/thirdparty/protobuf-2.6.1/src/google/protobuf/compiler/cpp/.dirstamp +src/thirdparty/protobuf-2.6.1/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/compiler/java/.deps/ +src/thirdparty/protobuf-2.6.1/src/google/protobuf/compiler/java/.dirstamp +src/thirdparty/protobuf-2.6.1/src/google/protobuf/compiler/python/.deps/ +src/thirdparty/protobuf-2.6.1/src/google/protobuf/compiler/python/.dirstamp +src/thirdparty/protobuf-2.6.1/src/google/protobuf/io/.deps/ +src/thirdparty/protobuf-2.6.1/src/google/protobuf/io/.dirstamp +src/thirdparty/protobuf-2.6.1/src/google/protobuf/stubs/.deps/ +src/thirdparty/protobuf-2.6.1/src/google/protobuf/stubs/.dirstamp +src/thirdparty/protobuf-2.6.1/src/google/protobuf/testing/.deps/ +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_custom_options.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_custom_options.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_embed_optimize_for.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_embed_optimize_for.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_empty.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_empty.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_import.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_import.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_import_lite.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_import_lite.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_import_public.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_import_public.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_import_public_lite.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_import_public_lite.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_lite.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_lite.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_lite_imports_nonlite.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_lite_imports_nonlite.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_mset.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_mset.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_no_generic_services.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_no_generic_services.pb.h +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_optimize_for.pb.cc +src/thirdparty/protobuf-2.6.1/src/google/protobuf/unittest_optimize_for.pb.h +src/thirdparty/protobuf-2.6.1/src/protoc +src/thirdparty/protobuf-2.6.1/src/unittest_proto_middleman +src/thirdparty/protobuf-2.6.1/stamp-h1 +src/thirdparty/protobuf-2.6.1/Makefile.in +src/thirdparty/protobuf-2.6.1/aclocal.m4 +src/thirdparty/protobuf-2.6.1/config.h.in +src/thirdparty/protobuf-2.6.1/configure +src/thirdparty/protobuf-2.6.1/gtest/Makefile.in +src/thirdparty/protobuf-2.6.1/gtest/aclocal.m4 +src/thirdparty/protobuf-2.6.1/gtest/build-aux/config.h.in +src/thirdparty/protobuf-2.6.1/gtest/build-aux/ltmain.sh +src/thirdparty/protobuf-2.6.1/gtest/configure +src/thirdparty/protobuf-2.6.1/gtest/m4/libtool.m4 +src/thirdparty/protobuf-2.6.1/gtest/m4/ltoptions.m4 +src/thirdparty/protobuf-2.6.1/gtest/m4/ltversion.m4 +src/thirdparty/protobuf-2.6.1/ltmain.sh +src/thirdparty/protobuf-2.6.1/m4/libtool.m4 +src/thirdparty/protobuf-2.6.1/m4/ltoptions.m4 +src/thirdparty/protobuf-2.6.1/m4/ltversion.m4 +src/thirdparty/protobuf-2.6.1/src/Makefile.in src/thirdparty/libpng-1.5.2/pngtest diff --git a/src/game/protobuf_include.vpc b/src/game/protobuf_include.vpc index b90ca74f9..6285430ea 100644 --- a/src/game/protobuf_include.vpc +++ b/src/game/protobuf_include.vpc @@ -12,7 +12,7 @@ $Project { $Libexternal $SRCDIR\thirdparty\protobuf-2.6.1\bin\osx32\libc++\libprotobuf [$OSX32] $Libexternal $SRCDIR\thirdparty\protobuf-2.6.1\bin\win32\2013\staticcrt\release\libprotobuf [$WIN32] - $Libexternal $SRCDIR\thirdparty\protobuf-2.6.1\bin\linux32\libprotobuf [$LINUX32] + $Libexternal $SRCDIR\thirdparty\protobuf-2.6.1\src\.libs\libprotobuf [$LINUX32] } $Folder "Link Libraries" [$WIN64&&!$VS2015] diff --git a/src/thirdparty/protobuf-2.6.1/Makefile.in b/src/thirdparty/protobuf-2.6.1/Makefile.in deleted file mode 100644 index 93d7a44fe..000000000 --- a/src/thirdparty/protobuf-2.6.1/Makefile.in +++ /dev/null @@ -1,1141 +0,0 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2013 Free Software Foundation, Inc. - -# This Makefile.in 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. - -@SET_MAKE@ - -VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = . -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/configure $(am__configure_deps) \ - $(srcdir)/config.h.in $(srcdir)/protobuf.pc.in \ - $(srcdir)/protobuf-lite.pc.in compile config.guess config.sub \ - depcomp install-sh missing ltmain.sh -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_system_extensions.m4 \ - $(top_srcdir)/m4/acx_check_suncc.m4 \ - $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/stl_hash.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = protobuf.pc protobuf-lite.pc -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ - ctags-recursive dvi-recursive html-recursive info-recursive \ - install-data-recursive install-dvi-recursive \ - install-exec-recursive install-html-recursive \ - install-info-recursive install-pdf-recursive \ - install-ps-recursive install-recursive installcheck-recursive \ - installdirs-recursive pdf-recursive ps-recursive \ - tags-recursive uninstall-recursive -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(pkgconfigdir)" -DATA = $(pkgconfig_DATA) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -am__recursive_targets = \ - $(RECURSIVE_TARGETS) \ - $(RECURSIVE_CLEAN_TARGETS) \ - $(am__extra_recursive_targets) -AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - cscope distdir dist dist-all distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)config.h.in -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ - || { sleep 5 && rm -rf "$(distdir)"; }; \ - else :; fi -am__post_remove_distdir = $(am__remove_distdir) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -DIST_TARGETS = dist-gzip -distuninstallcheck_listfiles = find . -type f -print -am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ - | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -ISAINFO = @ISAINFO@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POW_LIB = @POW_LIB@ -PROTOBUF_OPT_FLAG = @PROTOBUF_OPT_FLAG@ -PROTOC = @PROTOC@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -subdirs = @subdirs@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -ACLOCAL_AMFLAGS = -I m4 -AUTOMAKE_OPTIONS = foreign - -# Build . before src so that our all-local and clean-local hooks kicks in at -# the right time. -SUBDIRS = . src - -# Always include gtest in distributions. -DIST_SUBDIRS = $(subdirs) src -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = protobuf.pc protobuf-lite.pc -EXTRA_DIST = \ - autogen.sh \ - generate_descriptor_proto.sh \ - README.md \ - INSTALL.txt \ - LICENSE \ - CONTRIBUTORS.txt \ - CHANGES.txt \ - editors/README.txt \ - editors/proto.vim \ - editors/protobuf-mode.el \ - vsprojects/config.h \ - vsprojects/extract_includes.bat \ - vsprojects/libprotobuf.vcproj \ - vsprojects/libprotobuf-lite.vcproj \ - vsprojects/libprotoc.vcproj \ - vsprojects/protobuf.sln \ - vsprojects/protoc.vcproj \ - vsprojects/readme.txt \ - vsprojects/test_plugin.vcproj \ - vsprojects/tests.vcproj \ - vsprojects/lite-test.vcproj \ - vsprojects/convert2008to2005.sh \ - examples/README.txt \ - examples/Makefile \ - examples/addressbook.proto \ - examples/add_person.cc \ - examples/list_people.cc \ - examples/AddPerson.java \ - examples/ListPeople.java \ - examples/add_person.py \ - examples/list_people.py \ - java/src/main/java/com/google/protobuf/AbstractMessage.java \ - java/src/main/java/com/google/protobuf/AbstractMessageLite.java \ - java/src/main/java/com/google/protobuf/AbstractParser.java \ - java/src/main/java/com/google/protobuf/BlockingRpcChannel.java \ - java/src/main/java/com/google/protobuf/BlockingService.java \ - java/src/main/java/com/google/protobuf/BoundedByteString.java \ - java/src/main/java/com/google/protobuf/ByteString.java \ - java/src/main/java/com/google/protobuf/CodedInputStream.java \ - java/src/main/java/com/google/protobuf/CodedOutputStream.java \ - java/src/main/java/com/google/protobuf/Descriptors.java \ - java/src/main/java/com/google/protobuf/DynamicMessage.java \ - java/src/main/java/com/google/protobuf/Extension.java \ - java/src/main/java/com/google/protobuf/ExtensionRegistry.java \ - java/src/main/java/com/google/protobuf/ExtensionRegistryLite.java \ - java/src/main/java/com/google/protobuf/FieldSet.java \ - java/src/main/java/com/google/protobuf/GeneratedMessage.java \ - java/src/main/java/com/google/protobuf/GeneratedMessageLite.java \ - java/src/main/java/com/google/protobuf/Internal.java \ - java/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java \ - java/src/main/java/com/google/protobuf/LazyField.java \ - java/src/main/java/com/google/protobuf/LazyFieldLite.java \ - java/src/main/java/com/google/protobuf/LazyStringArrayList.java \ - java/src/main/java/com/google/protobuf/LazyStringList.java \ - java/src/main/java/com/google/protobuf/LiteralByteString.java \ - java/src/main/java/com/google/protobuf/Message.java \ - java/src/main/java/com/google/protobuf/MessageLite.java \ - java/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java \ - java/src/main/java/com/google/protobuf/MessageOrBuilder.java \ - java/src/main/java/com/google/protobuf/MessageReflection.java \ - java/src/main/java/com/google/protobuf/Parser.java \ - java/src/main/java/com/google/protobuf/ProtocolMessageEnum.java \ - java/src/main/java/com/google/protobuf/ProtocolStringList.java \ - java/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java \ - java/src/main/java/com/google/protobuf/RopeByteString.java \ - java/src/main/java/com/google/protobuf/RpcCallback.java \ - java/src/main/java/com/google/protobuf/RpcChannel.java \ - java/src/main/java/com/google/protobuf/RpcController.java \ - java/src/main/java/com/google/protobuf/RpcUtil.java \ - java/src/main/java/com/google/protobuf/ServiceException.java \ - java/src/main/java/com/google/protobuf/Service.java \ - java/src/main/java/com/google/protobuf/SingleFieldBuilder.java \ - java/src/main/java/com/google/protobuf/SmallSortedMap.java \ - java/src/main/java/com/google/protobuf/TextFormat.java \ - java/src/main/java/com/google/protobuf/UninitializedMessageException.java \ - java/src/main/java/com/google/protobuf/UnknownFieldSet.java \ - java/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java \ - java/src/main/java/com/google/protobuf/Utf8.java \ - java/src/main/java/com/google/protobuf/WireFormat.java \ - java/src/test/java/com/google/protobuf/AbstractMessageTest.java \ - java/src/test/java/com/google/protobuf/BoundedByteStringTest.java \ - java/src/test/java/com/google/protobuf/ByteStringTest.java \ - java/src/test/java/com/google/protobuf/CheckUtf8Test.java \ - java/src/test/java/com/google/protobuf/CodedInputStreamTest.java \ - java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java \ - java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java \ - java/src/test/java/com/google/protobuf/DescriptorsTest.java \ - java/src/test/java/com/google/protobuf/DynamicMessageTest.java \ - java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java \ - java/src/test/java/com/google/protobuf/GeneratedMessageTest.java \ - java/src/test/java/com/google/protobuf/IsValidUtf8Test.java \ - java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java \ - java/src/test/java/com/google/protobuf/LazyFieldTest.java \ - java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java \ - java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java \ - java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java \ - java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java \ - java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java \ - java/src/test/java/com/google/protobuf/LiteralByteStringTest.java \ - java/src/test/java/com/google/protobuf/LiteTest.java \ - java/src/test/java/com/google/protobuf/MessageTest.java \ - java/src/test/java/com/google/protobuf/NestedBuildersTest.java \ - java/src/test/java/com/google/protobuf/ParserTest.java \ - java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java \ - java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java \ - java/src/test/java/com/google/protobuf/RopeByteStringTest.java \ - java/src/test/java/com/google/protobuf/ServiceTest.java \ - java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java \ - java/src/test/java/com/google/protobuf/SmallSortedMapTest.java \ - java/src/test/java/com/google/protobuf/TestBadIdentifiers.java \ - java/src/test/java/com/google/protobuf/TestUtil.java \ - java/src/test/java/com/google/protobuf/TextFormatTest.java \ - java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java \ - java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java \ - java/src/test/java/com/google/protobuf/WireFormatTest.java \ - java/src/test/java/com/google/protobuf/lazy_fields_lite.proto \ - java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto \ - java/src/test/java/com/google/protobuf/multiple_files_test.proto \ - java/src/test/java/com/google/protobuf/nested_builders_test.proto \ - java/src/test/java/com/google/protobuf/nested_extension_lite.proto \ - java/src/test/java/com/google/protobuf/nested_extension.proto \ - java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto \ - java/src/test/java/com/google/protobuf/non_nested_extension.proto \ - java/src/test/java/com/google/protobuf/outer_class_name_test.proto \ - java/src/test/java/com/google/protobuf/outer_class_name_test2.proto \ - java/src/test/java/com/google/protobuf/outer_class_name_test3.proto \ - java/src/test/java/com/google/protobuf/test_bad_identifiers.proto \ - java/src/test/java/com/google/protobuf/test_check_utf8.proto \ - java/src/test/java/com/google/protobuf/test_check_utf8_size.proto \ - java/src/test/java/com/google/protobuf/test_custom_options.proto \ - java/pom.xml \ - java/README.txt \ - python/google/protobuf/internal/api_implementation.cc \ - python/google/protobuf/internal/api_implementation.py \ - python/google/protobuf/internal/api_implementation_default_test.py \ - python/google/protobuf/internal/containers.py \ - python/google/protobuf/internal/cpp_message.py \ - python/google/protobuf/internal/decoder.py \ - python/google/protobuf/internal/descriptor_database_test.py \ - python/google/protobuf/internal/descriptor_pool_test.py \ - python/google/protobuf/internal/descriptor_pool_test1.proto \ - python/google/protobuf/internal/descriptor_pool_test2.proto \ - python/google/protobuf/internal/descriptor_python_test.py \ - python/google/protobuf/internal/descriptor_test.py \ - python/google/protobuf/internal/encoder.py \ - python/google/protobuf/internal/enum_type_wrapper.py \ - python/google/protobuf/internal/factory_test1.proto \ - python/google/protobuf/internal/factory_test2.proto \ - python/google/protobuf/internal/generator_test.py \ - python/google/protobuf/internal/message_factory_python_test.py \ - python/google/protobuf/internal/message_factory_test.py \ - python/google/protobuf/internal/message_listener.py \ - python/google/protobuf/internal/message_python_test.py \ - python/google/protobuf/internal/message_test.py \ - python/google/protobuf/internal/missing_enum_values.proto \ - python/google/protobuf/internal/more_extensions.proto \ - python/google/protobuf/internal/more_extensions_dynamic.proto \ - python/google/protobuf/internal/more_messages.proto \ - python/google/protobuf/internal/python_message.py \ - python/google/protobuf/internal/reflection_test.py \ - python/google/protobuf/internal/service_reflection_test.py \ - python/google/protobuf/internal/symbol_database_test.py \ - python/google/protobuf/internal/test_bad_identifiers.proto \ - python/google/protobuf/internal/test_util.py \ - python/google/protobuf/internal/text_encoding_test.py \ - python/google/protobuf/internal/text_format_test.py \ - python/google/protobuf/internal/type_checkers.py \ - python/google/protobuf/internal/unknown_fields_test.py \ - python/google/protobuf/internal/wire_format.py \ - python/google/protobuf/internal/wire_format_test.py \ - python/google/protobuf/internal/__init__.py \ - python/google/protobuf/pyext/README \ - python/google/protobuf/pyext/cpp_message.py \ - python/google/protobuf/pyext/descriptor.h \ - python/google/protobuf/pyext/descriptor.cc \ - python/google/protobuf/pyext/descriptor_cpp2_test.py \ - python/google/protobuf/pyext/extension_dict.h \ - python/google/protobuf/pyext/extension_dict.cc \ - python/google/protobuf/pyext/message.h \ - python/google/protobuf/pyext/message.cc \ - python/google/protobuf/pyext/message_factory_cpp2_test.py \ - python/google/protobuf/pyext/proto2_api_test.proto \ - python/google/protobuf/pyext/python.proto \ - python/google/protobuf/pyext/python_protobuf.h \ - python/google/protobuf/pyext/reflection_cpp2_generated_test.py \ - python/google/protobuf/pyext/repeated_composite_container.h \ - python/google/protobuf/pyext/repeated_composite_container.cc \ - python/google/protobuf/pyext/repeated_scalar_container.h \ - python/google/protobuf/pyext/repeated_scalar_container.cc \ - python/google/protobuf/pyext/scoped_pyobject_ptr.h \ - python/google/protobuf/pyext/__init__.py \ - python/google/protobuf/descriptor.py \ - python/google/protobuf/descriptor_database.py \ - python/google/protobuf/descriptor_pool.py \ - python/google/protobuf/message.py \ - python/google/protobuf/message_factory.py \ - python/google/protobuf/reflection.py \ - python/google/protobuf/service.py \ - python/google/protobuf/service_reflection.py \ - python/google/protobuf/symbol_database.py \ - python/google/protobuf/text_encoding.py \ - python/google/protobuf/text_format.py \ - python/google/protobuf/__init__.py \ - python/google/__init__.py \ - python/ez_setup.py \ - python/setup.py \ - python/mox.py \ - python/stubout.py \ - python/README.txt - - -# Deletes all the files generated by autogen.sh. -MAINTAINERCLEANFILES = \ - aclocal.m4 \ - config.guess \ - config.sub \ - configure \ - depcomp \ - install-sh \ - ltmain.sh \ - Makefile.in \ - missing \ - mkinstalldirs \ - config.h.in \ - stamp.h.in \ - m4/ltsugar.m4 \ - m4/libtool.m4 \ - m4/ltversion.m4 \ - m4/lt~obsolete.m4 \ - m4/ltoptions.m4 - -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -am--refresh: Makefile - @: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -config.h: stamp-h1 - @test -f $@ || rm -f stamp-h1 - @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 -protobuf.pc: $(top_builddir)/config.status $(srcdir)/protobuf.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -protobuf-lite.pc: $(top_builddir)/config.status $(srcdir)/protobuf-lite.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) - -# This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. -$(am__recursive_targets): - @fail=; \ - if $(am__make_keepgoing); then \ - failcom='fail=yes'; \ - else \ - failcom='exit 1'; \ - fi; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-recursive -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-recursive - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) -clean-cscope: - -rm -f cscope.files -cscope.files: clean-cscope cscopelist -cscopelist: cscopelist-recursive - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - $(am__make_dryrun) \ - || test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__post_remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) - -dist-lzip: distdir - tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) - -dist-tarZ: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) - -dist-shar: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__post_remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) - -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lz*) \ - lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir) - chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure \ - $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=.. --prefix="$$dc_install_base" \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__post_remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @test -n '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: trying to run $@ with an empty' \ - '$$(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - $(am__cd) '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) check-local -check: check-recursive -all-am: Makefile $(DATA) config.h -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-recursive - -clean-am: clean-generic clean-libtool clean-local mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr \ - distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-pkgconfigDATA - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-pkgconfigDATA - -.MAKE: $(am__recursive_targets) all check-am install-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ - am--refresh check check-am check-local clean clean-cscope \ - clean-generic clean-libtool clean-local cscope cscopelist-am \ - ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ - dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-pkgconfigDATA - - -# Build gtest before we build protobuf tests. We don't add gtest to SUBDIRS -# because then "make check" would also build and run all of gtest's own tests, -# which takes a lot of time and is generally not useful to us. Also, we don't -# want "make install" to recurse into gtest since we don't want to overwrite -# the installed version of gtest if there is one. -check-local: - @echo "Making lib/libgtest.a lib/libgtest_main.a in gtest" - @cd gtest && $(MAKE) $(AM_MAKEFLAGS) lib/libgtest.la lib/libgtest_main.la - -# We would like to clean gtest when "make clean" is invoked. But we have to -# be careful because clean-local is also invoked during "make distclean", but -# "make distclean" already recurses into gtest because it's listed among the -# DIST_SUBDIRS. distclean will delete gtest/Makefile, so if we then try to -# cd to the directory again and "make clean" it will fail. So, check that the -# Makefile exists before recursing. -clean-local: - @if test -e gtest/Makefile; then \ - echo "Making clean in gtest"; \ - cd gtest && $(MAKE) $(AM_MAKEFLAGS) clean; \ - fi - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/src/thirdparty/protobuf-2.6.1/aclocal.m4 b/src/thirdparty/protobuf-2.6.1/aclocal.m4 deleted file mode 100644 index bb4cc7066..000000000 --- a/src/thirdparty/protobuf-2.6.1/aclocal.m4 +++ /dev/null @@ -1,1194 +0,0 @@ -# generated automatically by aclocal 1.14.1 -*- Autoconf -*- - -# Copyright (C) 1996-2013 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($@)])]) -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, -[m4_warning([this file was generated for autoconf 2.69. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically 'autoreconf'.])]) - -# Copyright (C) 2002-2013 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. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.14' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.14.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.14.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001-2013 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. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to -# '$srcdir', '$srcdir/..', or '$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is '.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997-2013 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. - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999-2013 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. - - -# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], - [$1], [CXX], [depcc="$CXX" am_compiler_list=], - [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], - [$1], [UPC], [depcc="$UPC" am_compiler_list=], - [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES. -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE([dependency-tracking], [dnl -AS_HELP_STRING( - [--enable-dependency-tracking], - [do not reject slow dependency extractors]) -AS_HELP_STRING( - [--disable-dependency-tracking], - [speeds up one-time build])]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -AC_SUBST([am__nodep])dnl -_AM_SUBST_NOTMAKE([am__nodep])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999-2013 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. - - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996-2013 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 macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. -m4_define([AC_PROG_CC], -m4_defn([AC_PROG_CC]) -[_AM_PROG_CC_C_O -]) - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.65])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[AC_DIAGNOSE([obsolete], - [$0: two- and three-arguments forms are deprecated.]) -m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), - [ok:ok],, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) - AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) -AM_MISSING_PROG([AUTOCONF], [autoconf]) -AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) -AM_MISSING_PROG([AUTOHEADER], [autoheader]) -AM_MISSING_PROG([MAKEINFO], [makeinfo]) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> -# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> -AC_SUBST([mkdir_p], ['$(MKDIR_P)']) -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES([CC])], - [m4_define([AC_PROG_CC], - m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES([CXX])], - [m4_define([AC_PROG_CXX], - m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES([OBJC])], - [m4_define([AC_PROG_OBJC], - m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], - [_AM_DEPENDENCIES([OBJCXX])], - [m4_define([AC_PROG_OBJCXX], - m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl -]) -AC_REQUIRE([AM_SILENT_RULES])dnl -dnl The testsuite driver may need to know about EXEEXT, so add the -dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This -dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl - -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: <http://www.gnu.org/software/coreutils/>. - -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) - fi -fi]) - -dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001-2013 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. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST([install_sh])]) - -# Copyright (C) 2003-2013 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. - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- -# From Jim Meyering - -# Copyright (C) 1996-2013 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. - -# AM_MAINTAINER_MODE([DEFAULT-MODE]) -# ---------------------------------- -# Control maintainer-specific portions of Makefiles. -# Default is to disable them, unless 'enable' is passed literally. -# For symmetry, 'disable' may be passed as well. Anyway, the user -# can override the default with the --enable/--disable switch. -AC_DEFUN([AM_MAINTAINER_MODE], -[m4_case(m4_default([$1], [disable]), - [enable], [m4_define([am_maintainer_other], [disable])], - [disable], [m4_define([am_maintainer_other], [enable])], - [m4_define([am_maintainer_other], [enable]) - m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) -AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode's default is 'disable' unless 'enable' is passed - AC_ARG_ENABLE([maintainer-mode], - [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], - am_maintainer_other[ make rules and dependencies not useful - (and sometimes confusing) to the casual installer])], - [USE_MAINTAINER_MODE=$enableval], - [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) - AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) - MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST([MAINT])dnl -] -) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001-2013 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. - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997-2013 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. - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it is modern enough. -# If it is, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - AC_MSG_WARN(['missing' script is too old or missing]) -fi -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001-2013 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. - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# -------------------- -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) - -# _AM_SET_OPTIONS(OPTIONS) -# ------------------------ -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Copyright (C) 1999-2013 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. - -# _AM_PROG_CC_C_O -# --------------- -# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC -# to automatically call this. -AC_DEFUN([_AM_PROG_CC_C_O], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([compile])dnl -AC_LANG_PUSH([C])dnl -AC_CACHE_CHECK( - [whether $CC understands -c and -o together], - [am_cv_prog_cc_c_o], - [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i]) -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -AC_LANG_POP([C])]) - -# For backward compatibility. -AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) - -# Copyright (C) 2001-2013 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. - -# AM_RUN_LOG(COMMAND) -# ------------------- -# Run COMMAND, save the exit status in ac_status, and log it. -# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) -AC_DEFUN([AM_RUN_LOG], -[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD - ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - (exit $ac_status); }]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996-2013 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. - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; -esac - -# Do 'set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken - alias in your environment]) - fi - if test "$[2]" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT([yes]) -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi -AC_CONFIG_COMMANDS_PRE( - [AC_MSG_CHECKING([that generated files are newer than configure]) - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - AC_MSG_RESULT([done])]) -rm -f conftest.file -]) - -# Copyright (C) 2009-2013 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. - -# AM_SILENT_RULES([DEFAULT]) -# -------------------------- -# Enable less verbose build rules; with the default set to DEFAULT -# ("yes" being less verbose, "no" or empty being verbose). -AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], [dnl -AS_HELP_STRING( - [--enable-silent-rules], - [less verbose build output (undo: "make V=1")]) -AS_HELP_STRING( - [--disable-silent-rules], - [verbose build output (undo: "make V=0")])dnl -]) -case $enable_silent_rules in @%:@ ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac -dnl -dnl A few 'make' implementations (e.g., NonStop OS and NextStep) -dnl do not support nested variable expansions. -dnl See automake bug#9928 and bug#10237. -am_make=${MAKE-make} -AC_CACHE_CHECK([whether $am_make supports nested variables], - [am_cv_make_support_nested_variables], - [if AS_ECHO([['TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi]) -if test $am_cv_make_support_nested_variables = yes; then - dnl Using '$V' instead of '$(V)' breaks IRIX make. - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AC_SUBST([AM_V])dnl -AM_SUBST_NOTMAKE([AM_V])dnl -AC_SUBST([AM_DEFAULT_V])dnl -AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl -AC_SUBST([AM_DEFAULT_VERBOSITY])dnl -AM_BACKSLASH='\' -AC_SUBST([AM_BACKSLASH])dnl -_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl -]) - -# Copyright (C) 2001-2013 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. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor 'install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in "make install-strip", and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006-2013 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. - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# -------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004-2013 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. - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of 'v7', 'ustar', or 'pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -# -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AC_SUBST([AMTAR], ['$${TAR-tar}']) - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' - -m4_if([$1], [v7], - [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], - - [m4_case([$1], - [ustar], - [# The POSIX 1988 'ustar' format is defined with fixed-size fields. - # There is notably a 21 bits limit for the UID and the GID. In fact, - # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 - # and bug#13588). - am_max_uid=2097151 # 2^21 - 1 - am_max_gid=$am_max_uid - # The $UID and $GID variables are not portable, so we need to resort - # to the POSIX-mandated id(1) utility. Errors in the 'id' calls - # below are definitely unexpected, so allow the users to see them - # (that is, avoid stderr redirection). - am_uid=`id -u || echo unknown` - am_gid=`id -g || echo unknown` - AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) - if test $am_uid -le $am_max_uid; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - _am_tools=none - fi - AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) - if test $am_gid -le $am_max_gid; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - _am_tools=none - fi], - - [pax], - [], - - [m4_fatal([Unknown tar format])]) - - AC_MSG_CHECKING([how to create a $1 tar archive]) - - # Go ahead even if we have the value already cached. We do so because we - # need to set the values for the 'am__tar' and 'am__untar' variables. - _am_tools=${am_cv_prog_tar_$1-$_am_tools} - - for _am_tool in $_am_tools; do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works. - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar <conftest.tar]) - AM_RUN_LOG([cat conftest.dir/file]) - grep GrepMe conftest.dir/file >/dev/null 2>&1 && break - fi - done - rm -rf conftest.dir - - AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) - AC_MSG_RESULT([$am_cv_prog_tar_$1])]) - -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/ac_system_extensions.m4]) -m4_include([m4/acx_check_suncc.m4]) -m4_include([m4/acx_pthread.m4]) -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) -m4_include([m4/stl_hash.m4]) diff --git a/src/thirdparty/protobuf-2.6.1/config.h.in b/src/thirdparty/protobuf-2.6.1/config.h.in deleted file mode 100644 index e70582ec2..000000000 --- a/src/thirdparty/protobuf-2.6.1/config.h.in +++ /dev/null @@ -1,152 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* the name of <hash_map> */ -#undef HASH_MAP_CLASS - -/* the location of <unordered_map> or <hash_map> */ -#undef HASH_MAP_H - -/* the namespace of hash_map/hash_set */ -#undef HASH_NAMESPACE - -/* the name of <hash_set> */ -#undef HASH_SET_CLASS - -/* the location of <unordered_set> or <hash_set> */ -#undef HASH_SET_H - -/* Define to 1 if you have the <dlfcn.h> header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the <fcntl.h> header file. */ -#undef HAVE_FCNTL_H - -/* Define to 1 if you have the `ftruncate' function. */ -#undef HAVE_FTRUNCATE - -/* define if the compiler has hash_map */ -#undef HAVE_HASH_MAP - -/* define if the compiler has hash_set */ -#undef HAVE_HASH_SET - -/* Define to 1 if you have the <inttypes.h> header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the <limits.h> header file. */ -#undef HAVE_LIMITS_H - -/* Define to 1 if you have the <memory.h> header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `memset' function. */ -#undef HAVE_MEMSET - -/* Define to 1 if you have the `mkdir' function. */ -#undef HAVE_MKDIR - -/* Define if you have POSIX threads libraries and header files. */ -#undef HAVE_PTHREAD - -/* Define to 1 if you have the <stdint.h> header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the <stdlib.h> 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 `strerror' function. */ -#undef HAVE_STRERROR - -/* Define to 1 if you have the <strings.h> header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the <string.h> header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the `strtol' function. */ -#undef HAVE_STRTOL - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the <sys/types.h> header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the <unistd.h> header file. */ -#undef HAVE_UNISTD_H - -/* Enable classes using zlib compression. */ -#undef HAVE_ZLIB - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Name of package */ -#undef PACKAGE - -/* 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 necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* 64bit enabled */ -#undef SOLARIS_64BIT_ENABLED - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Enable extensions on AIX 3, Interix. */ -#ifndef _ALL_SOURCE -# undef _ALL_SOURCE -#endif -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# undef _GNU_SOURCE -#endif -/* Enable threading extensions on Solaris. */ -#ifndef _POSIX_PTHREAD_SEMANTICS -# undef _POSIX_PTHREAD_SEMANTICS -#endif -/* Enable extensions on HP NonStop. */ -#ifndef _TANDEM_SOURCE -# undef _TANDEM_SOURCE -#endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# undef __EXTENSIONS__ -#endif - - -/* Version number of package */ -#undef VERSION - -/* Define to 1 if on MINIX. */ -#undef _MINIX - -/* Define to 2 if the system does not provide POSIX.1 features except with - this defined. */ -#undef _POSIX_1_SOURCE - -/* Define to 1 if you need to in order for `stat' and other things to work. */ -#undef _POSIX_SOURCE diff --git a/src/thirdparty/protobuf-2.6.1/configure b/src/thirdparty/protobuf-2.6.1/configure deleted file mode 100644 index 746dca237..000000000 --- a/src/thirdparty/protobuf-2.6.1/configure +++ /dev/null @@ -1,19726 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Protocol Buffers 2.6.1. -# -# Report bugs to <protobuf@googlegroups.com>. -# -# -# Copyright (C) 1992-1996, 1998-2012 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 -if test -n "${ZSH_VERSION+set}" && (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 - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; 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 - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# 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'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_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="if test -n \"\${ZSH_VERSION+set}\" && (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 - 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 - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || 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 - - test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - 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 - test -z "$as_dir" && as_dir=. - 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_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - 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'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: protobuf@googlegroups.com about your system, including -$0: any error possibly output before this message. Then -$0: install a modern shell, or manually run the script -$0: under such a shell if you do 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_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=`$as_echo "$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 || -$as_echo 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_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_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# 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 - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$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 || -$as_echo 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" || - { $as_echo "$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 -} - -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 - -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'" - -SHELL=${CONFIG_SHELL-/bin/sh} - - -test -n "$DJDIR" || exec 7<&0 </dev/null -exec 6>&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='Protocol Buffers' -PACKAGE_TARNAME='protobuf' -PACKAGE_VERSION='2.6.1' -PACKAGE_STRING='Protocol Buffers 2.6.1' -PACKAGE_BUGREPORT='protobuf@googlegroups.com' -PACKAGE_URL='' - -ac_unique_file="src/google/protobuf/message.cc" -# Factoring default headers for most tests. -ac_includes_default="\ -#include <stdio.h> -#ifdef HAVE_SYS_TYPES_H -# include <sys/types.h> -#endif -#ifdef HAVE_SYS_STAT_H -# include <sys/stat.h> -#endif -#ifdef STDC_HEADERS -# include <stdlib.h> -# include <stddef.h> -#else -# ifdef HAVE_STDLIB_H -# include <stdlib.h> -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include <memory.h> -# endif -# include <string.h> -#endif -#ifdef HAVE_STRINGS_H -# include <strings.h> -#endif -#ifdef HAVE_INTTYPES_H -# include <inttypes.h> -#endif -#ifdef HAVE_STDINT_H -# include <stdint.h> -#endif -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif" - -enable_option_checking=no -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -subdirs -PTHREAD_CFLAGS -PTHREAD_LIBS -PTHREAD_CC -acx_pthread_config -USE_EXTERNAL_PROTOC_FALSE -USE_EXTERNAL_PROTOC_TRUE -PROTOC -HAVE_ZLIB_FALSE -HAVE_ZLIB_TRUE -POW_LIB -LIBOBJS -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -MANIFEST_TOOL -RANLIB -ac_ct_AR -AR -DLLTOOL -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -SED -LIBTOOL -ISAINFO -PROTOBUF_OPT_FLAG -GCC_FALSE -GCC_TRUE -EGREP -GREP -CXXCPP -am__fastdepCXX_FALSE -am__fastdepCXX_TRUE -CXXDEPMODE -ac_ct_CXX -CXXFLAGS -CXX -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -am__nodep -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -AM_DEFAULT_V -AM_V -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -MAINT -MAINTAINER_MODE_FALSE -MAINTAINER_MODE_TRUE -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 -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_maintainer_mode -enable_silent_rules -with_zlib -with_protoc -enable_dependency_tracking -enable_64bit_solaris -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -with_sysroot -enable_libtool_lock -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CXX -CXXFLAGS -CCC -CXXCPP' -ac_subdirs_all='gtest' - -# 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' -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 - - # Accept the important Cygnus configure options, so we can diagnose typos. - - 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=`$as_echo "$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=`$as_echo "$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 ;; - - -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=`$as_echo "$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=`$as_echo "$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. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$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" ;; - *) $as_echo "$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 -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 || -$as_echo 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 Protocol Buffers 2.6.1 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] - --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/protobuf] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of Protocol Buffers 2.6.1:";; - 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-maintainer-mode - disable make rules and dependencies not useful (and - sometimes confusing) to the casual installer - --enable-silent-rules less verbose build output (undo: "make V=1") - --disable-silent-rules verbose build output (undo: "make V=0") - --enable-dependency-tracking - do not reject slow dependency extractors - --disable-dependency-tracking - speeds up one-time build - --disable-64bit-solaris Build 64 bit binary on Solaris [default=on] - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-zlib include classes for streaming compressed data in and - out [default=check] - --with-protoc=COMMAND use the given protoc command instead of building a - new one when building tests (useful for - cross-compiling) - --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-sysroot=DIR Search for dependent libraries within DIR - (or the compiler's sysroot if not specified). - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a - nonstandard directory <lib dir> - LIBS libraries to pass to the linker, e.g. -l<library> - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if - you have headers in a nonstandard directory <include dir> - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - -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 <protobuf@googlegroups.com>. -_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=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$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 guested configure. - 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 - $as_echo "$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 -Protocol Buffers configure 2.6.1 -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 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 - 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\"" -$as_echo "$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 - $as_echo "$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_echo "$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_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - 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\"" -$as_echo "$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 - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$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_cxx_try_compile - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 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 - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$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_cxx_try_cpp - -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES -# --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ---------------------------------------- ## -## Report this to protobuf@googlegroups.com ## -## ---------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_header_mongrel - -# ac_fn_cxx_try_run LINENO -# ------------------------ -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_cxx_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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$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_cxx_try_run - -# ac_fn_cxx_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_cxx_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_header_compile - -# ac_fn_cxx_check_decl LINENO SYMBOL VAR INCLUDES -# ----------------------------------------------- -# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_cxx_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - as_decl_name=`echo $2|sed 's/ *(.*//'` - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $as_decl_name -#ifdef __cplusplus - (void) $as_decl_use; -#else - (void) $as_decl_name; -#endif -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_decl - -# 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$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\"" -$as_echo "$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 - $as_echo "$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_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case <limits.h> declares $2. - For example, HP-UX 11i <limits.h> declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - -#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 () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext 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\"" -$as_echo "$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 - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_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_echo "$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_cxx_try_link - -# ac_fn_cxx_check_func LINENO FUNC VAR -# ------------------------------------ -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_cxx_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case <limits.h> declares $2. - For example, HP-UX 11i <limits.h> declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - -#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 () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_func -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 Protocol Buffers $as_me 2.6.1, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_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 - test -z "$as_dir" && as_dir=. - $as_echo "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=`$as_echo "$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=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## 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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$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 - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$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 - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -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,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$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=`$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`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 - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=yes -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - - -ac_config_headers="$ac_config_headers config.h" - - - -# autoconf's default CXXFLAGS are usually "-g -O2". These aren't necessarily -# the best choice for libprotobuf. -if test "x${ac_cv_env_CFLAGS_set}" = "x"; then : - CFLAGS="" -fi -if test "x${ac_cv_env_CXXFLAGS_set}" = "x"; then : - CXXFLAGS="" -fi - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$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. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# 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 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$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 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$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 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -am__api_version='1.14' - -# 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. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -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+set}" = set; 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$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' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; -esac - -# Do 'set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - if test "$2" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi - -rm -f conftest.file - -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_STRIP="${ac_tool_prefix}strip" - $as_echo "$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 -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_STRIP="strip" - $as_echo "$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_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P 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. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_AWK="$ac_prog" - $as_echo "$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 -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in # ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=1;; -esac -am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } -if test $am_cv_make_support_nested_variables = yes; then - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AM_BACKSLASH='\' - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='protobuf' - VERSION='2.6.1' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> -# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> -mkdir_p='$(MKDIR_P)' - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AMTAR='$${TAR-tar}' - - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar pax cpio none' - -am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' - - - - - - -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: <http://www.gnu.org/software/coreutils/>. - -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 - fi -fi - - -# Check whether --with-zlib was given. -if test "${with_zlib+set}" = set; then : - withval=$with_zlib; -else - with_zlib=check -fi - - - -# Check whether --with-protoc was given. -if test "${with_protoc+set}" = set; then : - withval=$with_protoc; -else - with_protoc=no -fi - - -# Checks for programs. -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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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. -$as_echo "$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; 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\"" -$as_echo "$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 - $as_echo "$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 () -{ - - ; - 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. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$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+set}" = set && 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 - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$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_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$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 <stdio.h> -int -main () -{ -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. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$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 - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - 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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$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_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - 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.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdarg.h> -#include <stdio.h> -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*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 don't provoke an error unfortunately, instead are silently treated - as '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's necessary to write '\x00'==0 to get something - that's 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 **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_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 - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -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 - -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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 - ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -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 - -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$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 -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_CXX="$ac_prog" - $as_echo "$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_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$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; 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\"" -$as_echo "$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 - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - 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 - -depcc="$CXX" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CXX_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=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 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_cxx_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 `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - - ac_fn_cxx_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" -if test "x$ac_cv_header_minix_config_h" = xyes; then : - MINIX=yes -else - MINIX= -fi - - - if test "$MINIX" = yes; then - -$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h - - -$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h - - -$as_echo "#define _MINIX 1" >>confdefs.h - - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 -$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } -if ${ac_cv_safe_to_define___extensions__+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -# define __EXTENSIONS__ 1 - $ac_includes_default -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_safe_to_define___extensions__=yes -else - ac_cv_safe_to_define___extensions__=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 -$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } - test $ac_cv_safe_to_define___extensions__ = yes && - $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h - - $as_echo "#define _ALL_SOURCE 1" >>confdefs.h - - $as_echo "#define _GNU_SOURCE 1" >>confdefs.h - - $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h - - $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h - - - - - - - - if test "$GCC" = yes; then - GCC_TRUE= - GCC_FALSE='#' -else - GCC_TRUE='#' - GCC_FALSE= -fi - # let the Makefile know if we're gcc - -# test_util.cc takes forever to compile with GCC and optimization turned on. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking C++ compiler flags..." >&5 -$as_echo_n "checking C++ compiler flags...... " >&6; } -if test "x${ac_cv_env_CXXFLAGS_set}" = "x"; then : - - if test "$GCC" = "yes"; then : - - PROTOBUF_OPT_FLAG="-O2" - CXXFLAGS="${CXXFLAGS} -g" - -fi - - # Protocol Buffers contains several checks that are intended to be used only - # for debugging and which might hurt performance. Most users are probably - # end users who don't want these checks, so add -DNDEBUG by default. - CXXFLAGS="$CXXFLAGS -DNDEBUG" - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: use default: $PROTOBUF_OPT_FLAG $CXXFLAGS" >&5 -$as_echo "use default: $PROTOBUF_OPT_FLAG $CXXFLAGS" >&6; } - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: use user-supplied: $CXXFLAGS" >&5 -$as_echo "use user-supplied: $CXXFLAGS" >&6; } - -fi - - - - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - ac_fn_cxx_check_decl "$LINENO" "__SUNPRO_CC" "ac_cv_have_decl___SUNPRO_CC" "$ac_includes_default" -if test "x$ac_cv_have_decl___SUNPRO_CC" = xyes; then : - SUNCC="yes" -else - SUNCC="no" -fi - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - # Check whether --enable-64bit-solaris was given. -if test "${enable_64bit_solaris+set}" = set; then : - enableval=$enable_64bit_solaris; ac_enable_64bit="$enableval" -else - ac_enable_64bit="yes" -fi - - - if test "$SUNCC" = "yes" -a "x${ac_cv_env_CXXFLAGS_set}" = "x"; then : - - CXXFLAGS="-g0 -xO3 -xlibmil -xdepend -xbuiltin -mt -compat=5 -library=stlport4 -library=Crun -template=no%extdef ${CXXFLAGS}" - -fi - - case $host_os in - *solaris*) - for ac_prog in isainfo -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ISAINFO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ISAINFO"; then - ac_cv_prog_ISAINFO="$ISAINFO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_ISAINFO="$ac_prog" - $as_echo "$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 -ISAINFO=$ac_cv_prog_ISAINFO -if test -n "$ISAINFO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ISAINFO" >&5 -$as_echo "$ISAINFO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ISAINFO" && break -done -test -n "$ISAINFO" || ISAINFO="no" - - if test "x$ISAINFO" != "xno"; then : - isainfo_b=`${ISAINFO} -b` -else - isainfo_b="x" -fi - - if test "$isainfo_b" != "x"; then : - - - isainfo_k=`${ISAINFO} -k` - - if test "x$ac_enable_64bit" = "xyes"; then : - - - -$as_echo "#define SOLARIS_64BIT_ENABLED 1" >>confdefs.h - - if test "x$libdir" = "x\${exec_prefix}/lib"; then : - - libdir="${libdir}/${isainfo_k}" - -fi - - if test "x${ac_cv_env_CXXFLAGS_set}" = "x"; then : - - CXXFLAGS="${CXXFLAGS} -m64" - ac_cv_env_CXXFLAGS_set=set - ac_cv_env_CXXFLAGS_value='-m64' - -fi - - if test "x${ac_cv_env_CFLAGS_set}" = "x"; then : - - CFLAGS="${CFLAGS} -m64" - ac_cv_env_CFLAGS_set=set - ac_cv_env_CFLAGS_value='-m64' - -fi - - if test "$target_cpu" = "sparc" -a "x$SUNCC" = "xyes" ; then : - - CXXFLAGS="-xmemalign=8s ${CXXFLAGS}" - -fi - -fi - -fi - ;; - esac - - - -# Have to do libtool after SUNCC, other wise it "helpfully" adds Crun Cstd -# to the link -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.4.2' -macro_revision='1.3337' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "" -} - -case "$ECHO" in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_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 -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "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_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_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_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_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 - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "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_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_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_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break - ;; - *) - test "$with_gnu_ld" != yes && break - ;; - esac - fi - done - IFS="$lt_save_ifs" -else - lt_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$lt_cv_path_LD" -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - lt_cv_prog_gnu_ld=yes - ;; -*) - lt_cv_prog_gnu_ld=no - ;; -esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$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 -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_DUMPBIN="$ac_prog" - $as_echo "$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac - -fi - -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac - -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then - reload_cmds=false - fi - ;; - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$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 -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_OBJDUMP="objdump" - $as_echo "$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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$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 -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_DLLTOOL="dlltool" - $as_echo "$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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_AR="$ac_tool_prefix$ac_prog" - $as_echo "$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 -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_AR="$ac_prog" - $as_echo "$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_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -fi - -: ${AR=ar} -: ${AR_FLAGS=cru} - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_STRIP="${ac_tool_prefix}strip" - $as_echo "$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 -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_STRIP="strip" - $as_echo "$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_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$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 -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_RANLIB="ranlib" - $as_echo "$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_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } - -# Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : - withval=$with_sysroot; -else - with_sysroot=no -fi - - -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 -$as_echo "${with_sysroot}" >&6; } - as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 - ;; -esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } - - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - case `/usr/bin/file conftest.o` in - *x86-64*) - LD="${LD-ld} -m elf32_x86_64" - ;; - *) - LD="${LD-ld} -m elf_i386" - ;; - esac - ;; - powerpc64le-*) - LD="${LD-ld} -m elf32lppclinux" - ;; - powerpc64-*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - powerpcle-*) - LD="${LD-ld} -m elf64lppc" - ;; - powerpc-*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - 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 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. -set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MANIFEST_TOOL"; then - ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$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 -MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL -if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_MANIFEST_TOOL"; then - ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MANIFEST_TOOL"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_MANIFEST_TOOL="mt" - $as_echo "$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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL -if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_MANIFEST_TOOL" = x; then - MANIFEST_TOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL - fi -else - MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" -fi - -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&5 - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi - - - - - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$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 -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_DSYMUTIL="dsymutil" - $as_echo "$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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$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 -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_NMEDIT="nmedit" - $as_echo "$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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_LIPO="${ac_tool_prefix}lipo" - $as_echo "$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 -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_LIPO="lipo" - $as_echo "$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_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_OTOOL="${ac_tool_prefix}otool" - $as_echo "$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 -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_OTOOL="otool" - $as_echo "$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_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$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 -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_OTOOL64="otool64" - $as_echo "$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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&5 - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&5 - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - -func_stripname_cnf () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname_cnf - - - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for lt_pkg in $withval; do - IFS="$lt_save_ifs" - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -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 - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; - *) - lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - lt_prog_compiler_wl='-Xlinker ' - if test -n "$lt_prog_compiler_pic"; then - lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - *Sun\ F* | *Sun*Fortran*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Intel*\ [CF]*Compiler*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - *Portland\ Group*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } -lt_prog_compiler_pic=$lt_cv_prog_compiler_pic - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu | gnu*) - link_all_deplibs=no - ;; - esac - - ld_shlibs=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; - *\ \(GNU\ Binutils\)\ [3-9]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='${wl}--export-all-symbols' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs=yes - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - link_all_deplibs=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - fi - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - always_export_symbols=yes - file_list_spec='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, )='true' - enable_shared_with_static_runtimes=yes - exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - old_postinstall_cmds='chmod 644 $oldlib' - postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - enable_shared_with_static_runtimes=yes - ;; - esac - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec='' - fi - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -b" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler__b=yes - fi - else - lt_cv_prog_compiler__b=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } - -if test x"$lt_cv_prog_compiler__b" = xyes; then - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -fi - - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo (void) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_irix_exported_symbol=yes -else - lt_cv_irix_exported_symbol=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test "$lt_cv_irix_exported_symbol" = yes; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([A-Za-z]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib<name>.so - # instead of lib<name>.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $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. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $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. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $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. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $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. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $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. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include <dlfcn.h> -#endif - -#include <stdio.h> - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include <dlfcn.h> -#endif - -#include <stdio.h> - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -CC="$lt_save_CC" - - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -else - _lt_caught_CXX_error=yes -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -compiler_needs_object_CXX=no -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_direct_absolute_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -inherit_rpath_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -reload_flag_CXX=$reload_flag -reload_cmds_CXX=$reload_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - - # save warnings/boilerplate of simple test code - ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - - ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - compiler_CXX=$CC - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' - else - lt_prog_compiler_no_builtin_flag_CXX= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break - ;; - *) - test "$with_gnu_ld" != yes && break - ;; - esac - fi - done - IFS="$lt_save_ifs" -else - lt_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$lt_cv_path_LD" -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - lt_cv_prog_gnu_ld=yes - ;; -*) - lt_cv_prog_gnu_ld=no - ;; -esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - ld_shlibs_CXX=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - file_list_spec_CXX='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec_CXX='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath__CXX -fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath__CXX -fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - fi - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_CXX=' ' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=yes - file_list_spec_CXX='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' - enable_shared_with_static_runtimes_CXX=yes - # Don't use ranlib - old_postinstall_cmds_CXX='chmod 644 $oldlib' - postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - - - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec_CXX='' - fi - link_all_deplibs_CXX=yes - allow_undefined_flag_CXX="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - if test "$lt_cv_apple_cc_single_mod" != "yes"; then - archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi - - else - ld_shlibs_CXX=no - fi - - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - ld_shlibs_CXX=no - ;; - - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - - haiku*) - archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs_CXX=yes - ;; - - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - inherit_rpath_CXX=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [1-5].* | *pgcpp\ [1-5].*) - prelink_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - old_archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object_CXX=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - ld_shlibs_CXX=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - hardcode_direct_absolute_CXX=yes - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - ld_shlibs_CXX=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - case $host in - osf3*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - ;; - *) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - ;; - esac - - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ - '"$old_archive_cmds_CXX" - reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ - '"$reload_cmds_CXX" - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } - test "$ld_shlibs_CXX" = no && can_build_shared=no - - GCC_CXX="$GXX" - LD_CXX="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - # Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF - - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - compiler_lib_search_dirs_CXX= -if test -n "${compiler_lib_search_path_CXX}"; then - compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic_CXX='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix[4-9]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-qpic' - lt_prog_compiler_static_CXX='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } -lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_CXX=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_CXX=yes - fi - else - lt_cv_prog_compiler_static_works_CXX=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then - : -else - lt_prog_compiler_static_CXX= -fi - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - case $host_os in - aix[4-9]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - ;; - esac - ;; - linux* | k*bsd*-gnu | gnu*) - link_all_deplibs_CXX=no - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -with_gnu_ld_CXX=$with_gnu_ld - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc_CXX=no - else - lt_cv_archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } - archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib<name>.so - # instead of lib<name>.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } - -if test "$hardcode_action_CXX" = relink || - test "$inherit_rpath_CXX" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - -# Checks for header files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=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 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -for ac_header in fcntl.h inttypes.h limits.h stdlib.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -# Checks for library functions. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5 -$as_echo_n "checking for working memcmp... " >&6; } -if ${ac_cv_func_memcmp_working+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_memcmp_working=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Some versions of memcmp are not 8-bit clean. */ - char c0 = '\100', c1 = '\200', c2 = '\201'; - if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) - return 1; - - /* The Next x86 OpenStep bug shows up only when comparing 16 bytes - or more and with at least one buffer not starting on a 4-byte boundary. - William Lewis provided this test program. */ - { - char foo[21]; - char bar[21]; - int i; - for (i = 0; i < 4; i++) - { - char *a = foo + i; - char *b = bar + i; - strcpy (a, "--------01111111"); - strcpy (b, "--------10000000"); - if (memcmp (a, b, 16) >= 0) - return 1; - } - return 0; - } - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - ac_cv_func_memcmp_working=yes -else - ac_cv_func_memcmp_working=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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5 -$as_echo "$ac_cv_func_memcmp_working" >&6; } -test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in - *" memcmp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" - ;; -esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5 -$as_echo_n "checking for working strtod... " >&6; } -if ${ac_cv_func_strtod+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_strtod=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -$ac_includes_default -#ifndef strtod -double strtod (); -#endif -int -main() -{ - { - /* 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_cxx_try_run "$LINENO"; then : - ac_cv_func_strtod=yes -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5 -$as_echo "$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_cxx_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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 -$as_echo_n "checking for pow in -lm... " >&6; } -if ${ac_cv_lib_m_pow+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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. */ -#ifdef __cplusplus -extern "C" -#endif -char pow (); -int -main () -{ -return pow (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_m_pow=yes -else - ac_cv_lib_m_pow=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 -$as_echo "$ac_cv_lib_m_pow" >&6; } -if test "x$ac_cv_lib_m_pow" = xyes; then : - POW_LIB=-lm -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5 -$as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;} -fi - -fi - -fi - -for ac_func in ftruncate memset mkdir strchr strerror strtol -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -# Check for zlib. -HAVE_ZLIB=0 -if test "$with_zlib" != no; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking zlib version" >&5 -$as_echo_n "checking zlib version... " >&6; } - - # First check the zlib header version. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include <zlib.h> - #if !defined(ZLIB_VERNUM) || (ZLIB_VERNUM < 0x1204) - # error zlib version too old - #endif - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (1.2.0.4 or later)" >&5 -$as_echo "ok (1.2.0.4 or later)" >&6; } - - # Also need to add -lz to the linker flags and make sure this succeeds. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing zlibVersion" >&5 -$as_echo_n "checking for library containing zlibVersion... " >&6; } -if ${ac_cv_search_zlibVersion+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$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. */ -#ifdef __cplusplus -extern "C" -#endif -char zlibVersion (); -int -main () -{ -return zlibVersion (); - ; - return 0; -} -_ACEOF -for ac_lib in '' z; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_search_zlibVersion=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_zlibVersion+:} false; then : - break -fi -done -if ${ac_cv_search_zlibVersion+:} false; then : - -else - ac_cv_search_zlibVersion=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_zlibVersion" >&5 -$as_echo "$ac_cv_search_zlibVersion" >&6; } -ac_res=$ac_cv_search_zlibVersion -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - - -$as_echo "#define HAVE_ZLIB 1" >>confdefs.h - - HAVE_ZLIB=1 - -else - - if test "$with_zlib" != check; then : - - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "--with-zlib was given, but no working zlib library was found -See \`config.log' for more details" "$LINENO" 5; } - -fi - -fi - - -else - - if test "$with_zlib" = check; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: headers missing or too old (requires 1.2.0.4)" >&5 -$as_echo "headers missing or too old (requires 1.2.0.4)" >&6; } - -else - - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "--with-zlib was given, but zlib headers were not present or were too old (requires 1.2.0.4) -See \`config.log' for more details" "$LINENO" 5; } - -fi - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi - if test $HAVE_ZLIB = 1; then - HAVE_ZLIB_TRUE= - HAVE_ZLIB_FALSE='#' -else - HAVE_ZLIB_TRUE='#' - HAVE_ZLIB_FALSE= -fi - - -if test "$with_protoc" != "no"; then : - - PROTOC=$with_protoc - if test "$with_protoc" = "yes"; then : - - # No argument given. Use system protoc. - PROTOC=protoc - -fi - if echo "$PROTOC" | grep -q '^[^/].*/'; then : - - # Does not start with a slash, but contains a slash. So, it's a relative - # path (as opposed to an absolute path or an executable in $PATH). - # Since it will actually be executed from the src directory, prefix with - # the current directory. We also insert $ac_top_build_prefix in case this - # is a nested package and --with-protoc was actually given on the outer - # package's configure script. - PROTOC=`pwd`/${ac_top_build_prefix}$PROTOC - -fi - - -fi - if test "$with_protoc" != "no"; then - USE_EXTERNAL_PROTOC_TRUE= - USE_EXTERNAL_PROTOC_FALSE='#' -else - USE_EXTERNAL_PROTOC_TRUE='#' - USE_EXTERNAL_PROTOC_FALSE= -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 - -acx_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 -$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } - 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. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_join (); -int -main () -{ -return pthread_join (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - acx_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 -$as_echo "$acx_pthread_ok" >&6; } - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# ... -mt is also the pthreads flag for HP/aCC -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthreads/-mt/ - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - - case $flag in - none) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -$as_echo_n "checking whether pthreads work without any flags... " >&6; } - ;; - - -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 -$as_echo_n "checking whether pthreads work with $flag... " >&6; } - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - # Extract the first word of "pthread-config", so it can be a program name with args. -set dummy pthread-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_acx_pthread_config+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$acx_pthread_config"; then - ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_acx_pthread_config="yes" - $as_echo "$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_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" -fi -fi -acx_pthread_config=$ac_cv_prog_acx_pthread_config -if test -n "$acx_pthread_config"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 -$as_echo "$acx_pthread_config" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test x"$acx_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 -$as_echo_n "checking for the pthreads library -l$flag... " >&6; } - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - acx_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 -$as_echo "$acx_pthread_ok" >&6; } - if test "x$acx_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -$as_echo_n "checking for joinable pthread attribute... " >&6; } - attr_name=unknown - for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -int attr=$attr; return attr; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - attr_name=$attr; break -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 -$as_echo "$attr_name" >&6; } - if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - -cat >>confdefs.h <<_ACEOF -#define PTHREAD_CREATE_JOINABLE $attr_name -_ACEOF - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 -$as_echo_n "checking if more special flags are required for pthreads... " >&6; } - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 -$as_echo "${flag}" >&6; } - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - # More AIX lossage: must compile with xlc_r or cc_r - if test x"$GCC" != xyes; then - for ac_prog in xlc_r cc_r -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PTHREAD_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PTHREAD_CC"; then - ac_cv_prog_PTHREAD_CC="$PTHREAD_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 - test -z "$as_dir" && as_dir=. - 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_PTHREAD_CC="$ac_prog" - $as_echo "$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 -PTHREAD_CC=$ac_cv_prog_PTHREAD_CC -if test -n "$PTHREAD_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -$as_echo "$PTHREAD_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PTHREAD_CC" && break -done -test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" - - else - PTHREAD_CC=$CC - fi - - # The next part tries to detect GCC inconsistency with -shared on some - # architectures and systems. The problem is that in certain - # configurations, when -shared is specified, GCC "forgets" to - # internally use various flags which are still necessary. - - # - # Prepare the flags - # - save_CFLAGS="$CFLAGS" - save_LIBS="$LIBS" - save_CC="$CC" - - # Try with the flags determined by the earlier checks. - # - # -Wl,-z,defs forces link-time symbol resolution, so that the - # linking checks with -shared actually have any value - # - # FIXME: -fPIC is required for -shared on many architectures, - # so we specify it here, but the right way would probably be to - # properly detect whether it is actually required. - CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CC="$PTHREAD_CC" - - # In order not to create several levels of indentation, we test - # the value of "$done" until we find the cure or run out of ideas. - done="no" - - # First, make sure the CFLAGS we added are actually accepted by our - # compiler. If not (and OS X's ld, for instance, does not accept -z), - # then we can't do this test. - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to check for GCC pthread/shared inconsistencies" >&5 -$as_echo_n "checking whether to check for GCC pthread/shared inconsistencies... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -else - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - fi - - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -pthread is sufficient with -shared" >&5 -$as_echo_n "checking whether -pthread is sufficient with -shared... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - fi - - # - # Linux gcc on some architectures such as mips/mipsel forgets - # about -lpthread - # - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lpthread fixes that" >&5 -$as_echo_n "checking whether -lpthread fixes that... " >&6; } - LIBS="-lpthread $PTHREAD_LIBS $save_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PTHREAD_LIBS="-lpthread $PTHREAD_LIBS" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - fi - # - # FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc - # - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc_r fixes that" >&5 -$as_echo_n "checking whether -lc_r fixes that... " >&6; } - LIBS="-lc_r $PTHREAD_LIBS $save_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PTHREAD_LIBS="-lc_r $PTHREAD_LIBS" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - fi - if test x"$done" = xno; then - # OK, we have run out of ideas - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Impossible to determine how to use pthreads with shared libraries" >&5 -$as_echo "$as_me: WARNING: Impossible to determine how to use pthreads with shared libraries" >&2;} - - # so it's not safe to assume that we may use pthreads - acx_pthread_ok=no - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether what we have so far is sufficient with -nostdlib" >&5 -$as_echo_n "checking whether what we have so far is sufficient with -nostdlib... " >&6; } - CFLAGS="-nostdlib $CFLAGS" - # we need c with nostdlib - LIBS="$LIBS -lc" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -else - done=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lpthread saves the day" >&5 -$as_echo_n "checking whether -lpthread saves the day... " >&6; } - LIBS="-lpthread $LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -else - done=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PTHREAD_LIBS="$PTHREAD_LIBS -lpthread" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Impossible to determine how to use pthreads with shared libraries and -nostdlib" >&5 -$as_echo "$as_me: WARNING: Impossible to determine how to use pthreads with shared libraries and -nostdlib" >&2;} - fi - fi - - CFLAGS="$save_CFLAGS" - LIBS="$save_LIBS" - CC="$save_CC" -else - PTHREAD_CC="$CC" -fi - - - - - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - -$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h - - : -else - acx_pthread_ok=no - -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking the location of hash_map" >&5 -$as_echo_n "checking the location of hash_map... " >&6; } - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - ac_cv_cxx_hash_map="" - # First try unordered_map, but not on gcc's before 4.2 -- I've - # seen unexplainable unordered_map bugs with -O2 on older gcc's. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)) - # error GCC too old for unordered_map - #endif - -int -main () -{ -/* no program body necessary */ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - stl_hash_old_gcc=no -else - stl_hash_old_gcc=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - for location in unordered_map tr1/unordered_map; do - for namespace in std std::tr1; do - if test -z "$ac_cv_cxx_hash_map" -a "$stl_hash_old_gcc" != yes; then - # Some older gcc's have a buggy tr1, so test a bit of code. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$location> -int -main () -{ -const ${namespace}::unordered_map<int, int> t; - return t.find(5) == t.end(); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_cxx_hash_map="<$location>"; - ac_cv_cxx_hash_namespace="$namespace"; - ac_cv_cxx_hash_map_class="unordered_map"; -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - done - done - # Now try hash_map - for location in ext/hash_map hash_map; do - for namespace in __gnu_cxx "" std stdext; do - if test -z "$ac_cv_cxx_hash_map"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$location> -int -main () -{ -${namespace}::hash_map<int, int> t - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_cxx_hash_map="<$location>"; - ac_cv_cxx_hash_namespace="$namespace"; - ac_cv_cxx_hash_map_class="hash_map"; -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - done - done - ac_cv_cxx_hash_set=`echo "$ac_cv_cxx_hash_map" | sed s/map/set/`; - ac_cv_cxx_hash_set_class=`echo "$ac_cv_cxx_hash_map_class" | sed s/map/set/`; - if test -n "$ac_cv_cxx_hash_map"; then - -$as_echo "#define HAVE_HASH_MAP 1" >>confdefs.h - - -$as_echo "#define HAVE_HASH_SET 1" >>confdefs.h - - -cat >>confdefs.h <<_ACEOF -#define HASH_MAP_H $ac_cv_cxx_hash_map -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define HASH_SET_H $ac_cv_cxx_hash_set -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define HASH_NAMESPACE $ac_cv_cxx_hash_namespace -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define HASH_MAP_CLASS $ac_cv_cxx_hash_map_class -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define HASH_SET_CLASS $ac_cv_cxx_hash_set_class -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_hash_map" >&5 -$as_echo "$ac_cv_cxx_hash_map" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find an STL hash_map" >&5 -$as_echo "$as_me: WARNING: could not find an STL hash_map" >&2;} - fi - - -case "$target_os" in - mingw* | cygwin* | win*) - ;; - *) - # Need to link against rt on Solaris - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sched_yield" >&5 -$as_echo_n "checking for library containing sched_yield... " >&6; } -if ${ac_cv_search_sched_yield+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$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. */ -#ifdef __cplusplus -extern "C" -#endif -char sched_yield (); -int -main () -{ -return sched_yield (); - ; - return 0; -} -_ACEOF -for ac_lib in '' rt; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_search_sched_yield=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_sched_yield+:} false; then : - break -fi -done -if ${ac_cv_search_sched_yield+:} false; then : - -else - ac_cv_search_sched_yield=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sched_yield" >&5 -$as_echo "$ac_cv_search_sched_yield" >&6; } -ac_res=$ac_cv_search_sched_yield -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "sched_yield was not found on your system -See \`config.log' for more details" "$LINENO" 5; } -fi - - ;; -esac - -# HACK: Make gtest's configure script pick up our copy of CFLAGS and CXXFLAGS, -# since the flags added by ACX_CHECK_SUNCC must be used when compiling gtest -# too. -export CFLAGS -export CXXFLAGS - - -subdirs="$subdirs gtest" - - -ac_config_files="$ac_config_files Makefile src/Makefile protobuf.pc protobuf-lite.pc" - -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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$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+set}" = set || &/ - 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$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=`$as_echo "$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 - - -if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GCC_TRUE}" && test -z "${GCC_FALSE}"; then - as_fn_error $? "conditional \"GCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_ZLIB_TRUE}" && test -z "${HAVE_ZLIB_FALSE}"; then - as_fn_error $? "conditional \"HAVE_ZLIB\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${USE_EXTERNAL_PROTOC_TRUE}" && test -z "${USE_EXTERNAL_PROTOC_FALSE}"; then - as_fn_error $? "conditional \"USE_EXTERNAL_PROTOC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$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 -if test -n "${ZSH_VERSION+set}" && (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 - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; 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 - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# 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 - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$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_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_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 || -$as_echo 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 - -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 - -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=`$as_echo "$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 || -$as_echo 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 Protocol Buffers $as_me 2.6.1, which was -generated by GNU Autoconf 2.69. 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" -config_commands="$ac_config_commands" - -_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 - -Configuration commands: -$config_commands - -Report bugs to <protobuf@googlegroups.com>." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -Protocol Buffers config.status 2.6.1 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 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' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -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 ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$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=`$as_echo "$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 ) - $as_echo "$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 - \$as_echo "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 - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' -macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' -enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' -enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' -pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' -SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' -ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' -PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' -host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' -host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' -host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' -build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' -build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' -build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' -SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' -Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' -GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' -EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' -FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' -LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' -NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' -LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' -ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' -exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' -lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' -lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' -lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' -reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' -file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' -want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' -sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' -AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' -archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' -STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' -RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' -lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' -CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' -compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' -GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' -nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' -lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' -objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' -need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' -MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' -LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' -OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' -libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' -module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' -postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' -need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' -version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' -runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' -libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' -soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' -install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' -finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' -old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' -striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' -predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' -postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' -predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' -postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' -LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' -reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' -reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' -compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' -GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' -archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' -module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' -with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' -no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' -inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' -link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' -always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' -exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' -include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' -prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' -postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' -file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' -predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' -postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' -predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' -postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in SHELL \ -ECHO \ -PATH_SEPARATOR \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -file_magic_glob \ -want_nocaseglob \ -DLLTOOL \ -sharedlib_from_linklib_cmd \ -AR \ -AR_FLAGS \ -archiver_list_spec \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -nm_file_list_spec \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_pic \ -lt_prog_compiler_wl \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -MANIFEST_TOOL \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_separator \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -install_override_mode \ -finish_eval \ -old_striplib \ -striplib \ -compiler_lib_search_dirs \ -predep_objects \ -postdep_objects \ -predeps \ -postdeps \ -compiler_lib_search_path \ -LD_CXX \ -reload_flag_CXX \ -compiler_CXX \ -lt_prog_compiler_no_builtin_flag_CXX \ -lt_prog_compiler_pic_CXX \ -lt_prog_compiler_wl_CXX \ -lt_prog_compiler_static_CXX \ -lt_cv_prog_compiler_c_o_CXX \ -export_dynamic_flag_spec_CXX \ -whole_archive_flag_spec_CXX \ -compiler_needs_object_CXX \ -with_gnu_ld_CXX \ -allow_undefined_flag_CXX \ -no_undefined_flag_CXX \ -hardcode_libdir_flag_spec_CXX \ -hardcode_libdir_separator_CXX \ -exclude_expsyms_CXX \ -include_expsyms_CXX \ -file_list_spec_CXX \ -compiler_lib_search_dirs_CXX \ -predep_objects_CXX \ -postdep_objects_CXX \ -predeps_CXX \ -postdeps_CXX \ -compiler_lib_search_path_CXX; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postlink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec \ -reload_cmds_CXX \ -old_archive_cmds_CXX \ -old_archive_from_new_cmds_CXX \ -old_archive_from_expsyms_cmds_CXX \ -archive_cmds_CXX \ -archive_expsym_cmds_CXX \ -module_cmds_CXX \ -module_expsym_cmds_CXX \ -export_symbols_cmds_CXX \ -prelink_cmds_CXX \ -postlink_cmds_CXX; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - - - -_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" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "protobuf.pc") CONFIG_FILES="$CONFIG_FILES protobuf.pc" ;; - "protobuf-lite.pc") CONFIG_FILES="$CONFIG_FILES protobuf-lite.pc" ;; - - *) 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+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -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 2>/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 -' <conf$$subs.awk | sed ' -/^[^""]/{ - N - s/\n// -} -' >>$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 -' <confdefs.h | sed ' -s/'"$ac_delim"'/"\\\ -"/g' >>$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 :C $CONFIG_COMMANDS" -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=`$as_echo "$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 '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$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 || -$as_echo 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=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$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 - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - 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@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$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 -s&@MKDIR_P@&$ac_MKDIR_P&;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"; } && - { $as_echo "$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 -$as_echo "$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 - { - $as_echo "/* $configure_input */" \ - && 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$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 - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool 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 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="CXX " - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# The PATH separator for the build system. -PATH_SEPARATOR=$lt_PATH_SEPARATOR - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# convert \$build file names to \$host format. -to_host_file_cmd=$lt_cv_to_host_file_cmd - -# convert \$build files to toolchain format. -to_tool_file_cmd=$lt_cv_to_tool_file_cmd - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob=$lt_file_magic_glob - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob=$lt_want_nocaseglob - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd - -# The archiver. -AR=$lt_AR - -# Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS - -# How to feed a file listing to the archiver. -archiver_list_spec=$lt_archiver_list_spec - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# Specify filename containing input files for \$NM. -nm_file_list_spec=$lt_nm_file_list_spec - -# The root where to search for dependent libraries,and in which our libraries should be installed. -lt_sysroot=$lt_sysroot - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Manifest tool. -MANIFEST_TOOL=$lt_MANIFEST_TOOL - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects -postdep_objects=$lt_postdep_objects -predeps=$lt_predeps -postdeps=$lt_postdeps - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - if test x"$xsi_shell" = xyes; then - sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ -func_dirname ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_basename ()$/,/^} # func_basename /c\ -func_basename ()\ -{\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ -func_dirname_and_basename ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ -func_stripname ()\ -{\ -\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ -\ # positional parameters, so assign one to ordinary parameter first.\ -\ func_stripname_result=${3}\ -\ func_stripname_result=${func_stripname_result#"${1}"}\ -\ func_stripname_result=${func_stripname_result%"${2}"}\ -} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ -func_split_long_opt ()\ -{\ -\ func_split_long_opt_name=${1%%=*}\ -\ func_split_long_opt_arg=${1#*=}\ -} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ -func_split_short_opt ()\ -{\ -\ func_split_short_opt_arg=${1#??}\ -\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ -} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ -func_lo2o ()\ -{\ -\ case ${1} in\ -\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ -\ *) func_lo2o_result=${1} ;;\ -\ esac\ -} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_xform ()$/,/^} # func_xform /c\ -func_xform ()\ -{\ - func_xform_result=${1%.*}.lo\ -} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_arith ()$/,/^} # func_arith /c\ -func_arith ()\ -{\ - func_arith_result=$(( $* ))\ -} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_len ()$/,/^} # func_len /c\ -func_len ()\ -{\ - func_len_result=${#1}\ -} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - -fi - -if test x"$lt_shell_append" = xyes; then - sed -e '/^func_append ()$/,/^} # func_append /c\ -func_append ()\ -{\ - eval "${1}+=\\${2}"\ -} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ -func_append_quoted ()\ -{\ -\ func_quote_for_eval "${2}"\ -\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ -} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 -$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} -fi - - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - - cat <<_LT_EOF >> "$ofile" - -# ### BEGIN LIBTOOL TAG CONFIG: CXX - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# How to create reloadable object files. -reload_flag=$lt_reload_flag_CXX -reload_cmds=$lt_reload_cmds_CXX - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds_CXX - -# A language specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU compiler? -with_gcc=$GCC_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object_CXX - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld_CXX - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute_CXX - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath_CXX - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds_CXX - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds_CXX - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec_CXX - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects_CXX -postdep_objects=$lt_postdep_objects_CXX -predeps=$lt_predeps_CXX -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# ### END LIBTOOL TAG CONFIG: CXX -_LT_EOF - - ;; - - 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 - -# -# CONFIG_SUBDIRS section. -# -if test "$no_recursion" != yes; then - - # Remove --cache-file, --srcdir, and --disable-option-checking arguments - # so they do not pile up. - ac_sub_configure_args= - ac_prev= - eval "set x $ac_configure_args" - shift - for ac_arg - do - if test -n "$ac_prev"; then - ac_prev= - continue - fi - case $ac_arg in - -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=*) - ;; - --config-cache | -C) - ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - ;; - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - ;; - --disable-option-checking) - ;; - *) - case $ac_arg in - *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_sub_configure_args " '$ac_arg'" ;; - esac - done - - # Always prepend --prefix to ensure using the same prefix - # in subdir configurations. - ac_arg="--prefix=$prefix" - case $ac_arg in - *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" - - # Pass --silent - if test "$silent" = yes; then - ac_sub_configure_args="--silent $ac_sub_configure_args" - fi - - # Always prepend --disable-option-checking to silence warnings, since - # different subdirs can have different --enable and --with options. - ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" - - ac_popdir=`pwd` - for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue - - # Do not complain, so a configure script can configure whichever - # parts of a large source tree are present. - test -d "$srcdir/$ac_dir" || continue - - ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" - $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 - $as_echo "$ac_msg" >&6 - 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=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$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" - - # Check for guested configure; otherwise get Cygnus style configure. - if test -f "$ac_srcdir/configure.gnu"; then - ac_sub_configure=$ac_srcdir/configure.gnu - elif test -f "$ac_srcdir/configure"; then - ac_sub_configure=$ac_srcdir/configure - elif test -f "$ac_srcdir/configure.in"; then - # This should be Cygnus configure. - ac_sub_configure=$ac_aux_dir/configure - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 -$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} - ac_sub_configure= - fi - - # The recursion is here. - if test -n "$ac_sub_configure"; then - # Make the cache file name correct relative to the subdirectory. - case $cache_file in - [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; - *) # Relative name. - ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 -$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} - # The eval makes quoting arguments work. - eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ - --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || - as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 - fi - - cd "$ac_popdir" - done -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/src/thirdparty/protobuf-2.6.1/gtest/Makefile.in b/src/thirdparty/protobuf-2.6.1/gtest/Makefile.in deleted file mode 100644 index 992f28da8..000000000 --- a/src/thirdparty/protobuf-2.6.1/gtest/Makefile.in +++ /dev/null @@ -1,1760 +0,0 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2013 Free Software Foundation, Inc. - -# This Makefile.in 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. - -@SET_MAKE@ - -# Automake file - - - -VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -TESTS = samples/sample1_unittest$(EXEEXT) \ - samples/sample10_unittest$(EXEEXT) \ - test/gtest_all_test$(EXEEXT) $(am__EXEEXT_1) -check_PROGRAMS = samples/sample1_unittest$(EXEEXT) \ - samples/sample10_unittest$(EXEEXT) \ - test/gtest_all_test$(EXEEXT) $(am__EXEEXT_1) -@HAVE_PYTHON_TRUE@am__append_1 = test/fused_gtest_test -@HAVE_PYTHON_TRUE@am__append_2 = test/fused_gtest_test -subdir = . -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/configure $(am__configure_deps) \ - $(top_srcdir)/build-aux/config.h.in \ - $(top_srcdir)/scripts/gtest-config.in \ - $(top_srcdir)/build-aux/depcomp $(pkginclude_HEADERS) \ - $(pkginclude_internal_HEADERS) \ - $(top_srcdir)/build-aux/test-driver README build-aux/compile \ - build-aux/config.guess build-aux/config.sub build-aux/depcomp \ - build-aux/install-sh build-aux/missing build-aux/ltmain.sh \ - $(top_srcdir)/build-aux/compile \ - $(top_srcdir)/build-aux/config.guess \ - $(top_srcdir)/build-aux/config.sub \ - $(top_srcdir)/build-aux/install-sh \ - $(top_srcdir)/build-aux/ltmain.sh \ - $(top_srcdir)/build-aux/missing -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/build-aux/config.h -CONFIG_CLEAN_FILES = scripts/gtest-config -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(m4datadir)" \ - "$(DESTDIR)$(pkgincludedir)" \ - "$(DESTDIR)$(pkginclude_internaldir)" -LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) -lib_libgtest_la_LIBADD = -am__dirstamp = $(am__leading_dot)dirstamp -am_lib_libgtest_la_OBJECTS = src/gtest-all.lo -lib_libgtest_la_OBJECTS = $(am_lib_libgtest_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -lib_libgtest_main_la_DEPENDENCIES = lib/libgtest.la -am_lib_libgtest_main_la_OBJECTS = src/gtest_main.lo -lib_libgtest_main_la_OBJECTS = $(am_lib_libgtest_main_la_OBJECTS) -samples_libsamples_la_LIBADD = -am_samples_libsamples_la_OBJECTS = samples/sample1.lo \ - samples/sample2.lo samples/sample4.lo -samples_libsamples_la_OBJECTS = $(am_samples_libsamples_la_OBJECTS) -@HAVE_PYTHON_TRUE@am__EXEEXT_1 = test/fused_gtest_test$(EXEEXT) -am_samples_sample10_unittest_OBJECTS = \ - samples/sample10_unittest.$(OBJEXT) -samples_sample10_unittest_OBJECTS = \ - $(am_samples_sample10_unittest_OBJECTS) -samples_sample10_unittest_DEPENDENCIES = lib/libgtest.la -am_samples_sample1_unittest_OBJECTS = \ - samples/sample1_unittest.$(OBJEXT) -samples_sample1_unittest_OBJECTS = \ - $(am_samples_sample1_unittest_OBJECTS) -samples_sample1_unittest_DEPENDENCIES = lib/libgtest_main.la \ - lib/libgtest.la samples/libsamples.la -am__test_fused_gtest_test_SOURCES_DIST = fused-src/gtest/gtest-all.cc \ - fused-src/gtest/gtest.h fused-src/gtest/gtest_main.cc \ - samples/sample1.cc samples/sample1_unittest.cc -am__objects_1 = \ - fused-src/gtest/test_fused_gtest_test-gtest-all.$(OBJEXT) \ - fused-src/gtest/test_fused_gtest_test-gtest_main.$(OBJEXT) -@HAVE_PYTHON_TRUE@am_test_fused_gtest_test_OBJECTS = $(am__objects_1) \ -@HAVE_PYTHON_TRUE@ samples/test_fused_gtest_test-sample1.$(OBJEXT) \ -@HAVE_PYTHON_TRUE@ samples/test_fused_gtest_test-sample1_unittest.$(OBJEXT) -test_fused_gtest_test_OBJECTS = $(am_test_fused_gtest_test_OBJECTS) -test_fused_gtest_test_LDADD = $(LDADD) -am_test_gtest_all_test_OBJECTS = test/gtest_all_test.$(OBJEXT) -test_gtest_all_test_OBJECTS = $(am_test_gtest_all_test_OBJECTS) -test_gtest_all_test_DEPENDENCIES = lib/libgtest_main.la \ - lib/libgtest.la -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/build-aux -depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -AM_V_CXX = $(am__v_CXX_@AM_V@) -am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) -am__v_CXX_0 = @echo " CXX " $@; -am__v_CXX_1 = -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) -am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) -am__v_CXXLD_0 = @echo " CXXLD " $@; -am__v_CXXLD_1 = -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(lib_libgtest_la_SOURCES) $(lib_libgtest_main_la_SOURCES) \ - $(samples_libsamples_la_SOURCES) \ - $(samples_sample10_unittest_SOURCES) \ - $(samples_sample1_unittest_SOURCES) \ - $(test_fused_gtest_test_SOURCES) \ - $(test_gtest_all_test_SOURCES) -DIST_SOURCES = $(lib_libgtest_la_SOURCES) \ - $(lib_libgtest_main_la_SOURCES) \ - $(samples_libsamples_la_SOURCES) \ - $(samples_sample10_unittest_SOURCES) \ - $(samples_sample1_unittest_SOURCES) \ - $(am__test_fused_gtest_test_SOURCES_DIST) \ - $(test_gtest_all_test_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -DATA = $(m4data_DATA) -HEADERS = $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope -AM_RECURSIVE_TARGETS = cscope check recheck -am__tty_colors_dummy = \ - mgn= red= grn= lgn= blu= brg= std=; \ - am__color_tests=no -am__tty_colors = { \ - $(am__tty_colors_dummy); \ - if test "X$(AM_COLOR_TESTS)" = Xno; then \ - am__color_tests=no; \ - elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ - am__color_tests=yes; \ - elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ - am__color_tests=yes; \ - fi; \ - if test $$am__color_tests = yes; then \ - red=''; \ - grn=''; \ - lgn=''; \ - blu=''; \ - mgn=''; \ - brg=''; \ - std=''; \ - fi; \ -} -am__recheck_rx = ^[ ]*:recheck:[ ]* -am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* -am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* -# A command that, given a newline-separated list of test names on the -# standard input, print the name of the tests that are to be re-run -# upon "make recheck". -am__list_recheck_tests = $(AWK) '{ \ - recheck = 1; \ - while ((rc = (getline line < ($$0 ".trs"))) != 0) \ - { \ - if (rc < 0) \ - { \ - if ((getline line2 < ($$0 ".log")) < 0) \ - recheck = 0; \ - break; \ - } \ - else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ - { \ - recheck = 0; \ - break; \ - } \ - else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ - { \ - break; \ - } \ - }; \ - if (recheck) \ - print $$0; \ - close ($$0 ".trs"); \ - close ($$0 ".log"); \ -}' -# A command that, given a newline-separated list of test names on the -# standard input, create the global log from their .trs and .log files. -am__create_global_log = $(AWK) ' \ -function fatal(msg) \ -{ \ - print "fatal: making $@: " msg | "cat >&2"; \ - exit 1; \ -} \ -function rst_section(header) \ -{ \ - print header; \ - len = length(header); \ - for (i = 1; i <= len; i = i + 1) \ - printf "="; \ - printf "\n\n"; \ -} \ -{ \ - copy_in_global_log = 1; \ - global_test_result = "RUN"; \ - while ((rc = (getline line < ($$0 ".trs"))) != 0) \ - { \ - if (rc < 0) \ - fatal("failed to read from " $$0 ".trs"); \ - if (line ~ /$(am__global_test_result_rx)/) \ - { \ - sub("$(am__global_test_result_rx)", "", line); \ - sub("[ ]*$$", "", line); \ - global_test_result = line; \ - } \ - else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ - copy_in_global_log = 0; \ - }; \ - if (copy_in_global_log) \ - { \ - rst_section(global_test_result ": " $$0); \ - while ((rc = (getline line < ($$0 ".log"))) != 0) \ - { \ - if (rc < 0) \ - fatal("failed to read from " $$0 ".log"); \ - print line; \ - }; \ - printf "\n"; \ - }; \ - close ($$0 ".trs"); \ - close ($$0 ".log"); \ -}' -# Restructured Text title. -am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } -# Solaris 10 'make', and several other traditional 'make' implementations, -# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it -# by disabling -e (using the XSI extension "set +e") if it's set. -am__sh_e_setup = case $$- in *e*) set +e;; esac -# Default flags passed to test drivers. -am__common_driver_flags = \ - --color-tests "$$am__color_tests" \ - --enable-hard-errors "$$am__enable_hard_errors" \ - --expect-failure "$$am__expect_failure" -# To be inserted before the command running the test. Creates the -# directory for the log if needed. Stores in $dir the directory -# containing $f, in $tst the test, in $log the log. Executes the -# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and -# passes TESTS_ENVIRONMENT. Set up options for the wrapper that -# will run the test scripts (or their associated LOG_COMPILER, if -# thy have one). -am__check_pre = \ -$(am__sh_e_setup); \ -$(am__vpath_adj_setup) $(am__vpath_adj) \ -$(am__tty_colors); \ -srcdir=$(srcdir); export srcdir; \ -case "$@" in \ - */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ - *) am__odir=.;; \ -esac; \ -test "x$$am__odir" = x"." || test -d "$$am__odir" \ - || $(MKDIR_P) "$$am__odir" || exit $$?; \ -if test -f "./$$f"; then dir=./; \ -elif test -f "$$f"; then dir=; \ -else dir="$(srcdir)/"; fi; \ -tst=$$dir$$f; log='$@'; \ -if test -n '$(DISABLE_HARD_ERRORS)'; then \ - am__enable_hard_errors=no; \ -else \ - am__enable_hard_errors=yes; \ -fi; \ -case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ - am__expect_failure=yes;; \ - *) \ - am__expect_failure=no;; \ -esac; \ -$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) -# A shell command to get the names of the tests scripts with any registered -# extension removed (i.e., equivalently, the names of the test logs, with -# the '.log' extension removed). The result is saved in the shell variable -# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, -# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", -# since that might cause problem with VPATH rewrites for suffix-less tests. -# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. -am__set_TESTS_bases = \ - bases='$(TEST_LOGS)'; \ - bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ - bases=`echo $$bases` -RECHECK_LOGS = $(TEST_LOGS) -TEST_SUITE_LOG = test-suite.log -TEST_EXTENSIONS = @EXEEXT@ .test -LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver -LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) -am__set_b = \ - case '$@' in \ - */*) \ - case '$*' in \ - */*) b='$*';; \ - *) b=`echo '$@' | sed 's/\.log$$//'`; \ - esac;; \ - *) \ - b='$*';; \ - esac -am__test_logs1 = $(TESTS:=.log) -am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) -TEST_LOGS = $(am__test_logs2:.test.log=.log) -TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver -TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ - $(TEST_LOG_FLAGS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ - || { sleep 5 && rm -rf "$(distdir)"; }; \ - else :; fi -am__post_remove_distdir = $(am__remove_distdir) -DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 $(distdir).zip -GZIP_ENV = --best -DIST_TARGETS = dist-bzip2 dist-gzip dist-zip -distuninstallcheck_listfiles = find . -type f -print -am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ - | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -PYTHON = @PYTHON@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -ACLOCAL_AMFLAGS = -I m4 - -# Nonstandard package files for distribution - -# Sample files that we don't compile. - -# C++ test files that we don't compile directly. - -# Python tests that we don't run. - -# CMake script - -# MSVC project files - -# xcode project files - -# xcode sample files - -# C++Builder project files -EXTRA_DIST = CHANGES CONTRIBUTORS LICENSE \ - include/gtest/gtest-param-test.h.pump \ - include/gtest/internal/gtest-param-util-generated.h.pump \ - include/gtest/internal/gtest-tuple.h.pump \ - include/gtest/internal/gtest-type-util.h.pump make/Makefile \ - scripts/fuse_gtest_files.py scripts/gen_gtest_pred_impl.py \ - scripts/pump.py scripts/test/Makefile $(GTEST_SRC) \ - samples/prime_tables.h samples/sample2_unittest.cc \ - samples/sample3_unittest.cc samples/sample4_unittest.cc \ - samples/sample5_unittest.cc samples/sample6_unittest.cc \ - samples/sample7_unittest.cc samples/sample8_unittest.cc \ - samples/sample9_unittest.cc test/gtest-death-test_ex_test.cc \ - test/gtest-death-test_test.cc test/gtest-filepath_test.cc \ - test/gtest-linked_ptr_test.cc test/gtest-listener_test.cc \ - test/gtest-message_test.cc test/gtest-options_test.cc \ - test/gtest-param-test2_test.cc test/gtest-param-test2_test.cc \ - test/gtest-param-test_test.cc test/gtest-param-test_test.cc \ - test/gtest-param-test_test.h test/gtest-port_test.cc \ - test/gtest-printers_test.cc test/gtest-test-part_test.cc \ - test/gtest-tuple_test.cc test/gtest-typed-test2_test.cc \ - test/gtest-typed-test_test.cc test/gtest-typed-test_test.h \ - test/gtest-unittest-api_test.cc \ - test/gtest_break_on_failure_unittest_.cc \ - test/gtest_catch_exceptions_test_.cc test/gtest_color_test_.cc \ - test/gtest_env_var_test_.cc test/gtest_environment_test.cc \ - test/gtest_filter_unittest_.cc test/gtest_help_test_.cc \ - test/gtest_list_tests_unittest_.cc test/gtest_main_unittest.cc \ - test/gtest_no_test_unittest.cc test/gtest_output_test_.cc \ - test/gtest_pred_impl_unittest.cc test/gtest_prod_test.cc \ - test/gtest_repeat_test.cc test/gtest_shuffle_test_.cc \ - test/gtest_sole_header_test.cc test/gtest_stress_test.cc \ - test/gtest_throw_on_failure_ex_test.cc \ - test/gtest_throw_on_failure_test_.cc \ - test/gtest_uninitialized_test_.cc test/gtest_unittest.cc \ - test/gtest_unittest.cc test/gtest_xml_outfile1_test_.cc \ - test/gtest_xml_outfile2_test_.cc \ - test/gtest_xml_output_unittest_.cc test/production.cc \ - test/production.h test/gtest_break_on_failure_unittest.py \ - test/gtest_catch_exceptions_test.py test/gtest_color_test.py \ - test/gtest_env_var_test.py test/gtest_filter_unittest.py \ - test/gtest_help_test.py test/gtest_list_tests_unittest.py \ - test/gtest_output_test.py \ - test/gtest_output_test_golden_lin.txt \ - test/gtest_shuffle_test.py test/gtest_test_utils.py \ - test/gtest_throw_on_failure_test.py \ - test/gtest_uninitialized_test.py \ - test/gtest_xml_outfiles_test.py \ - test/gtest_xml_output_unittest.py test/gtest_xml_test_utils.py \ - CMakeLists.txt cmake/internal_utils.cmake msvc/gtest-md.sln \ - msvc/gtest-md.vcproj msvc/gtest.sln msvc/gtest.vcproj \ - msvc/gtest_main-md.vcproj msvc/gtest_main.vcproj \ - msvc/gtest_prod_test-md.vcproj msvc/gtest_prod_test.vcproj \ - msvc/gtest_unittest-md.vcproj msvc/gtest_unittest.vcproj \ - xcode/Config/DebugProject.xcconfig \ - xcode/Config/FrameworkTarget.xcconfig \ - xcode/Config/General.xcconfig \ - xcode/Config/ReleaseProject.xcconfig \ - xcode/Config/StaticLibraryTarget.xcconfig \ - xcode/Config/TestTarget.xcconfig xcode/Resources/Info.plist \ - xcode/Scripts/runtests.sh xcode/Scripts/versiongenerate.py \ - xcode/gtest.xcodeproj/project.pbxproj \ - xcode/Samples/FrameworkSample/Info.plist \ - xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj \ - xcode/Samples/FrameworkSample/runtests.sh \ - xcode/Samples/FrameworkSample/widget.cc \ - xcode/Samples/FrameworkSample/widget.h \ - xcode/Samples/FrameworkSample/widget_test.cc \ - codegear/gtest.cbproj codegear/gtest.groupproj \ - codegear/gtest_all.cc codegear/gtest_link.cc \ - codegear/gtest_main.cbproj codegear/gtest_unittest.cbproj \ - $(m4data_DATA) - -# gtest source files that we don't compile directly. They are -# #included by gtest-all.cc. -GTEST_SRC = \ - src/gtest-death-test.cc \ - src/gtest-filepath.cc \ - src/gtest-internal-inl.h \ - src/gtest-port.cc \ - src/gtest-printers.cc \ - src/gtest-test-part.cc \ - src/gtest-typed-test.cc \ - src/gtest.cc - - -# Distribute and install M4 macro -m4datadir = $(datadir)/aclocal -m4data_DATA = m4/gtest.m4 - -# We define the global AM_CPPFLAGS as everything we compile includes from these -# directories. -AM_CPPFLAGS = -I$(srcdir) -I$(srcdir)/include -@HAVE_PTHREADS_FALSE@AM_CXXFLAGS = -DGTEST_HAS_PTHREAD=0 - -# Modifies compiler and linker flags for pthreads compatibility. -@HAVE_PTHREADS_TRUE@AM_CXXFLAGS = @PTHREAD_CFLAGS@ -DGTEST_HAS_PTHREAD=1 -@HAVE_PTHREADS_TRUE@AM_LIBS = @PTHREAD_LIBS@ - -# Build rules for libraries. -lib_LTLIBRARIES = lib/libgtest.la lib/libgtest_main.la -lib_libgtest_la_SOURCES = src/gtest-all.cc -pkginclude_HEADERS = \ - include/gtest/gtest-death-test.h \ - include/gtest/gtest-message.h \ - include/gtest/gtest-param-test.h \ - include/gtest/gtest-printers.h \ - include/gtest/gtest-spi.h \ - include/gtest/gtest-test-part.h \ - include/gtest/gtest-typed-test.h \ - include/gtest/gtest.h \ - include/gtest/gtest_pred_impl.h \ - include/gtest/gtest_prod.h - -pkginclude_internaldir = $(pkgincludedir)/internal -pkginclude_internal_HEADERS = \ - include/gtest/internal/gtest-death-test-internal.h \ - include/gtest/internal/gtest-filepath.h \ - include/gtest/internal/gtest-internal.h \ - include/gtest/internal/gtest-linked_ptr.h \ - include/gtest/internal/gtest-param-util-generated.h \ - include/gtest/internal/gtest-param-util.h \ - include/gtest/internal/gtest-port.h \ - include/gtest/internal/gtest-string.h \ - include/gtest/internal/gtest-tuple.h \ - include/gtest/internal/gtest-type-util.h - -lib_libgtest_main_la_SOURCES = src/gtest_main.cc -lib_libgtest_main_la_LIBADD = lib/libgtest.la - -# Bulid rules for samples and tests. Automake's naming for some of -# these variables isn't terribly obvious, so this is a brief -# reference: -# -# TESTS -- Programs run automatically by "make check" -# check_PROGRAMS -- Programs built by "make check" but not necessarily run -noinst_LTLIBRARIES = samples/libsamples.la -samples_libsamples_la_SOURCES = \ - samples/sample1.cc \ - samples/sample1.h \ - samples/sample2.cc \ - samples/sample2.h \ - samples/sample3-inl.h \ - samples/sample4.cc \ - samples/sample4.h - -TESTS_ENVIRONMENT = GTEST_SOURCE_DIR="$(srcdir)/test" \ - GTEST_BUILD_DIR="$(top_builddir)/test" - -samples_sample1_unittest_SOURCES = samples/sample1_unittest.cc -samples_sample1_unittest_LDADD = lib/libgtest_main.la \ - lib/libgtest.la \ - samples/libsamples.la - -samples_sample10_unittest_SOURCES = samples/sample10_unittest.cc -samples_sample10_unittest_LDADD = lib/libgtest.la -test_gtest_all_test_SOURCES = test/gtest_all_test.cc -test_gtest_all_test_LDADD = lib/libgtest_main.la \ - lib/libgtest.la - - -# Tests that fused gtest files compile and work. -FUSED_GTEST_SRC = \ - fused-src/gtest/gtest-all.cc \ - fused-src/gtest/gtest.h \ - fused-src/gtest/gtest_main.cc - -@HAVE_PYTHON_TRUE@test_fused_gtest_test_SOURCES = $(FUSED_GTEST_SRC) \ -@HAVE_PYTHON_TRUE@ samples/sample1.cc samples/sample1_unittest.cc - -@HAVE_PYTHON_TRUE@test_fused_gtest_test_CPPFLAGS = -I"$(srcdir)/fused-src" - -# Death tests may produce core dumps in the build directory. In case -# this happens, clean them to keep distcleancheck happy. -CLEANFILES = core -all: all-am - -.SUFFIXES: -.SUFFIXES: .cc .lo .log .o .obj .test .test$(EXEEXT) .trs -am--refresh: Makefile - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -build-aux/config.h: build-aux/stamp-h1 - @test -f $@ || rm -f build-aux/stamp-h1 - @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) build-aux/stamp-h1 - -build-aux/stamp-h1: $(top_srcdir)/build-aux/config.h.in $(top_builddir)/config.status - @rm -f build-aux/stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status build-aux/config.h -$(top_srcdir)/build-aux/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f build-aux/stamp-h1 - touch $@ - -distclean-hdr: - -rm -f build-aux/config.h build-aux/stamp-h1 -scripts/gtest-config: $(top_builddir)/config.status $(top_srcdir)/scripts/gtest-config.in - cd $(top_builddir) && $(SHELL) ./config.status $@ - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } -src/$(am__dirstamp): - @$(MKDIR_P) src - @: > src/$(am__dirstamp) -src/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/$(DEPDIR) - @: > src/$(DEPDIR)/$(am__dirstamp) -src/gtest-all.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) -lib/$(am__dirstamp): - @$(MKDIR_P) lib - @: > lib/$(am__dirstamp) - -lib/libgtest.la: $(lib_libgtest_la_OBJECTS) $(lib_libgtest_la_DEPENDENCIES) $(EXTRA_lib_libgtest_la_DEPENDENCIES) lib/$(am__dirstamp) - $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(lib_libgtest_la_OBJECTS) $(lib_libgtest_la_LIBADD) $(LIBS) -src/gtest_main.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) - -lib/libgtest_main.la: $(lib_libgtest_main_la_OBJECTS) $(lib_libgtest_main_la_DEPENDENCIES) $(EXTRA_lib_libgtest_main_la_DEPENDENCIES) lib/$(am__dirstamp) - $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(lib_libgtest_main_la_OBJECTS) $(lib_libgtest_main_la_LIBADD) $(LIBS) -samples/$(am__dirstamp): - @$(MKDIR_P) samples - @: > samples/$(am__dirstamp) -samples/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) samples/$(DEPDIR) - @: > samples/$(DEPDIR)/$(am__dirstamp) -samples/sample1.lo: samples/$(am__dirstamp) \ - samples/$(DEPDIR)/$(am__dirstamp) -samples/sample2.lo: samples/$(am__dirstamp) \ - samples/$(DEPDIR)/$(am__dirstamp) -samples/sample4.lo: samples/$(am__dirstamp) \ - samples/$(DEPDIR)/$(am__dirstamp) - -samples/libsamples.la: $(samples_libsamples_la_OBJECTS) $(samples_libsamples_la_DEPENDENCIES) $(EXTRA_samples_libsamples_la_DEPENDENCIES) samples/$(am__dirstamp) - $(AM_V_CXXLD)$(CXXLINK) $(samples_libsamples_la_OBJECTS) $(samples_libsamples_la_LIBADD) $(LIBS) - -clean-checkPROGRAMS: - @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -samples/sample10_unittest.$(OBJEXT): samples/$(am__dirstamp) \ - samples/$(DEPDIR)/$(am__dirstamp) - -samples/sample10_unittest$(EXEEXT): $(samples_sample10_unittest_OBJECTS) $(samples_sample10_unittest_DEPENDENCIES) $(EXTRA_samples_sample10_unittest_DEPENDENCIES) samples/$(am__dirstamp) - @rm -f samples/sample10_unittest$(EXEEXT) - $(AM_V_CXXLD)$(CXXLINK) $(samples_sample10_unittest_OBJECTS) $(samples_sample10_unittest_LDADD) $(LIBS) -samples/sample1_unittest.$(OBJEXT): samples/$(am__dirstamp) \ - samples/$(DEPDIR)/$(am__dirstamp) - -samples/sample1_unittest$(EXEEXT): $(samples_sample1_unittest_OBJECTS) $(samples_sample1_unittest_DEPENDENCIES) $(EXTRA_samples_sample1_unittest_DEPENDENCIES) samples/$(am__dirstamp) - @rm -f samples/sample1_unittest$(EXEEXT) - $(AM_V_CXXLD)$(CXXLINK) $(samples_sample1_unittest_OBJECTS) $(samples_sample1_unittest_LDADD) $(LIBS) -fused-src/gtest/$(am__dirstamp): - @$(MKDIR_P) fused-src/gtest - @: > fused-src/gtest/$(am__dirstamp) -fused-src/gtest/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) fused-src/gtest/$(DEPDIR) - @: > fused-src/gtest/$(DEPDIR)/$(am__dirstamp) -fused-src/gtest/test_fused_gtest_test-gtest-all.$(OBJEXT): \ - fused-src/gtest/$(am__dirstamp) \ - fused-src/gtest/$(DEPDIR)/$(am__dirstamp) -fused-src/gtest/test_fused_gtest_test-gtest_main.$(OBJEXT): \ - fused-src/gtest/$(am__dirstamp) \ - fused-src/gtest/$(DEPDIR)/$(am__dirstamp) -samples/test_fused_gtest_test-sample1.$(OBJEXT): \ - samples/$(am__dirstamp) samples/$(DEPDIR)/$(am__dirstamp) -samples/test_fused_gtest_test-sample1_unittest.$(OBJEXT): \ - samples/$(am__dirstamp) samples/$(DEPDIR)/$(am__dirstamp) -test/$(am__dirstamp): - @$(MKDIR_P) test - @: > test/$(am__dirstamp) - -test/fused_gtest_test$(EXEEXT): $(test_fused_gtest_test_OBJECTS) $(test_fused_gtest_test_DEPENDENCIES) $(EXTRA_test_fused_gtest_test_DEPENDENCIES) test/$(am__dirstamp) - @rm -f test/fused_gtest_test$(EXEEXT) - $(AM_V_CXXLD)$(CXXLINK) $(test_fused_gtest_test_OBJECTS) $(test_fused_gtest_test_LDADD) $(LIBS) -test/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) test/$(DEPDIR) - @: > test/$(DEPDIR)/$(am__dirstamp) -test/gtest_all_test.$(OBJEXT): test/$(am__dirstamp) \ - test/$(DEPDIR)/$(am__dirstamp) - -test/gtest_all_test$(EXEEXT): $(test_gtest_all_test_OBJECTS) $(test_gtest_all_test_DEPENDENCIES) $(EXTRA_test_gtest_all_test_DEPENDENCIES) test/$(am__dirstamp) - @rm -f test/gtest_all_test$(EXEEXT) - $(AM_V_CXXLD)$(CXXLINK) $(test_gtest_all_test_OBJECTS) $(test_gtest_all_test_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -rm -f fused-src/gtest/*.$(OBJEXT) - -rm -f samples/*.$(OBJEXT) - -rm -f samples/*.lo - -rm -f src/*.$(OBJEXT) - -rm -f src/*.lo - -rm -f test/*.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample1.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample10_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample1_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample2.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample4.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/test_fused_gtest_test-sample1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gtest-all.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gtest_main.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest_all_test.Po@am__quote@ - -.cc.o: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< - -fused-src/gtest/test_fused_gtest_test-gtest-all.o: fused-src/gtest/gtest-all.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/gtest/test_fused_gtest_test-gtest-all.o -MD -MP -MF fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Tpo -c -o fused-src/gtest/test_fused_gtest_test-gtest-all.o `test -f 'fused-src/gtest/gtest-all.cc' || echo '$(srcdir)/'`fused-src/gtest/gtest-all.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Tpo fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fused-src/gtest/gtest-all.cc' object='fused-src/gtest/test_fused_gtest_test-gtest-all.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/gtest/test_fused_gtest_test-gtest-all.o `test -f 'fused-src/gtest/gtest-all.cc' || echo '$(srcdir)/'`fused-src/gtest/gtest-all.cc - -fused-src/gtest/test_fused_gtest_test-gtest-all.obj: fused-src/gtest/gtest-all.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/gtest/test_fused_gtest_test-gtest-all.obj -MD -MP -MF fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Tpo -c -o fused-src/gtest/test_fused_gtest_test-gtest-all.obj `if test -f 'fused-src/gtest/gtest-all.cc'; then $(CYGPATH_W) 'fused-src/gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gtest/gtest-all.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Tpo fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest-all.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fused-src/gtest/gtest-all.cc' object='fused-src/gtest/test_fused_gtest_test-gtest-all.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/gtest/test_fused_gtest_test-gtest-all.obj `if test -f 'fused-src/gtest/gtest-all.cc'; then $(CYGPATH_W) 'fused-src/gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gtest/gtest-all.cc'; fi` - -fused-src/gtest/test_fused_gtest_test-gtest_main.o: fused-src/gtest/gtest_main.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/gtest/test_fused_gtest_test-gtest_main.o -MD -MP -MF fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Tpo -c -o fused-src/gtest/test_fused_gtest_test-gtest_main.o `test -f 'fused-src/gtest/gtest_main.cc' || echo '$(srcdir)/'`fused-src/gtest/gtest_main.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Tpo fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fused-src/gtest/gtest_main.cc' object='fused-src/gtest/test_fused_gtest_test-gtest_main.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/gtest/test_fused_gtest_test-gtest_main.o `test -f 'fused-src/gtest/gtest_main.cc' || echo '$(srcdir)/'`fused-src/gtest/gtest_main.cc - -fused-src/gtest/test_fused_gtest_test-gtest_main.obj: fused-src/gtest/gtest_main.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fused-src/gtest/test_fused_gtest_test-gtest_main.obj -MD -MP -MF fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Tpo -c -o fused-src/gtest/test_fused_gtest_test-gtest_main.obj `if test -f 'fused-src/gtest/gtest_main.cc'; then $(CYGPATH_W) 'fused-src/gtest/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gtest/gtest_main.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Tpo fused-src/gtest/$(DEPDIR)/test_fused_gtest_test-gtest_main.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fused-src/gtest/gtest_main.cc' object='fused-src/gtest/test_fused_gtest_test-gtest_main.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fused-src/gtest/test_fused_gtest_test-gtest_main.obj `if test -f 'fused-src/gtest/gtest_main.cc'; then $(CYGPATH_W) 'fused-src/gtest/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/fused-src/gtest/gtest_main.cc'; fi` - -samples/test_fused_gtest_test-sample1.o: samples/sample1.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT samples/test_fused_gtest_test-sample1.o -MD -MP -MF samples/$(DEPDIR)/test_fused_gtest_test-sample1.Tpo -c -o samples/test_fused_gtest_test-sample1.o `test -f 'samples/sample1.cc' || echo '$(srcdir)/'`samples/sample1.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) samples/$(DEPDIR)/test_fused_gtest_test-sample1.Tpo samples/$(DEPDIR)/test_fused_gtest_test-sample1.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='samples/sample1.cc' object='samples/test_fused_gtest_test-sample1.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o samples/test_fused_gtest_test-sample1.o `test -f 'samples/sample1.cc' || echo '$(srcdir)/'`samples/sample1.cc - -samples/test_fused_gtest_test-sample1.obj: samples/sample1.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT samples/test_fused_gtest_test-sample1.obj -MD -MP -MF samples/$(DEPDIR)/test_fused_gtest_test-sample1.Tpo -c -o samples/test_fused_gtest_test-sample1.obj `if test -f 'samples/sample1.cc'; then $(CYGPATH_W) 'samples/sample1.cc'; else $(CYGPATH_W) '$(srcdir)/samples/sample1.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) samples/$(DEPDIR)/test_fused_gtest_test-sample1.Tpo samples/$(DEPDIR)/test_fused_gtest_test-sample1.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='samples/sample1.cc' object='samples/test_fused_gtest_test-sample1.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o samples/test_fused_gtest_test-sample1.obj `if test -f 'samples/sample1.cc'; then $(CYGPATH_W) 'samples/sample1.cc'; else $(CYGPATH_W) '$(srcdir)/samples/sample1.cc'; fi` - -samples/test_fused_gtest_test-sample1_unittest.o: samples/sample1_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT samples/test_fused_gtest_test-sample1_unittest.o -MD -MP -MF samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Tpo -c -o samples/test_fused_gtest_test-sample1_unittest.o `test -f 'samples/sample1_unittest.cc' || echo '$(srcdir)/'`samples/sample1_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Tpo samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='samples/sample1_unittest.cc' object='samples/test_fused_gtest_test-sample1_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o samples/test_fused_gtest_test-sample1_unittest.o `test -f 'samples/sample1_unittest.cc' || echo '$(srcdir)/'`samples/sample1_unittest.cc - -samples/test_fused_gtest_test-sample1_unittest.obj: samples/sample1_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT samples/test_fused_gtest_test-sample1_unittest.obj -MD -MP -MF samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Tpo -c -o samples/test_fused_gtest_test-sample1_unittest.obj `if test -f 'samples/sample1_unittest.cc'; then $(CYGPATH_W) 'samples/sample1_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/samples/sample1_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Tpo samples/$(DEPDIR)/test_fused_gtest_test-sample1_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='samples/sample1_unittest.cc' object='samples/test_fused_gtest_test-sample1_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_fused_gtest_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o samples/test_fused_gtest_test-sample1_unittest.obj `if test -f 'samples/sample1_unittest.cc'; then $(CYGPATH_W) 'samples/sample1_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/samples/sample1_unittest.cc'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -rm -rf lib/.libs lib/_libs - -rm -rf samples/.libs samples/_libs - -rm -rf src/.libs src/_libs - -rm -rf test/.libs test/_libs - -distclean-libtool: - -rm -f libtool config.lt -install-m4dataDATA: $(m4data_DATA) - @$(NORMAL_INSTALL) - @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(m4datadir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(m4datadir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(m4datadir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(m4datadir)" || exit $$?; \ - done - -uninstall-m4dataDATA: - @$(NORMAL_UNINSTALL) - @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(m4datadir)'; $(am__uninstall_files_from_dir) -install-pkgincludeHEADERS: $(pkginclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ - done - -uninstall-pkgincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) -install-pkginclude_internalHEADERS: $(pkginclude_internal_HEADERS) - @$(NORMAL_INSTALL) - @list='$(pkginclude_internal_HEADERS)'; test -n "$(pkginclude_internaldir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkginclude_internaldir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkginclude_internaldir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkginclude_internaldir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkginclude_internaldir)" || exit $$?; \ - done - -uninstall-pkginclude_internalHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkginclude_internal_HEADERS)'; test -n "$(pkginclude_internaldir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkginclude_internaldir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) -clean-cscope: - -rm -f cscope.files -cscope.files: clean-cscope cscopelist -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - -# Recover from deleted '.trs' file; this should ensure that -# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create -# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells -# to avoid problems with "make -n". -.log.trs: - rm -f $< $@ - $(MAKE) $(AM_MAKEFLAGS) $< - -# Leading 'am--fnord' is there to ensure the list of targets does not -# expand to empty, as could happen e.g. with make check TESTS=''. -am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) -am--force-recheck: - @: - -$(TEST_SUITE_LOG): $(TEST_LOGS) - @$(am__set_TESTS_bases); \ - am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ - redo_bases=`for i in $$bases; do \ - am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ - done`; \ - if test -n "$$redo_bases"; then \ - redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ - redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ - if $(am__make_dryrun); then :; else \ - rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ - fi; \ - fi; \ - if test -n "$$am__remaking_logs"; then \ - echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ - "recursion detected" >&2; \ - else \ - am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ - fi; \ - if $(am__make_dryrun); then :; else \ - st=0; \ - errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ - for i in $$redo_bases; do \ - test -f $$i.trs && test -r $$i.trs \ - || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ - test -f $$i.log && test -r $$i.log \ - || { echo "$$errmsg $$i.log" >&2; st=1; }; \ - done; \ - test $$st -eq 0 || exit 1; \ - fi - @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ - ws='[ ]'; \ - results=`for b in $$bases; do echo $$b.trs; done`; \ - test -n "$$results" || results=/dev/null; \ - all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ - pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ - fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ - skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ - xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ - xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ - error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ - if test `expr $$fail + $$xpass + $$error` -eq 0; then \ - success=true; \ - else \ - success=false; \ - fi; \ - br='==================='; br=$$br$$br$$br$$br; \ - result_count () \ - { \ - if test x"$$1" = x"--maybe-color"; then \ - maybe_colorize=yes; \ - elif test x"$$1" = x"--no-color"; then \ - maybe_colorize=no; \ - else \ - echo "$@: invalid 'result_count' usage" >&2; exit 4; \ - fi; \ - shift; \ - desc=$$1 count=$$2; \ - if test $$maybe_colorize = yes && test $$count -gt 0; then \ - color_start=$$3 color_end=$$std; \ - else \ - color_start= color_end=; \ - fi; \ - echo "$${color_start}# $$desc $$count$${color_end}"; \ - }; \ - create_testsuite_report () \ - { \ - result_count $$1 "TOTAL:" $$all "$$brg"; \ - result_count $$1 "PASS: " $$pass "$$grn"; \ - result_count $$1 "SKIP: " $$skip "$$blu"; \ - result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ - result_count $$1 "FAIL: " $$fail "$$red"; \ - result_count $$1 "XPASS:" $$xpass "$$red"; \ - result_count $$1 "ERROR:" $$error "$$mgn"; \ - }; \ - { \ - echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ - $(am__rst_title); \ - create_testsuite_report --no-color; \ - echo; \ - echo ".. contents:: :depth: 2"; \ - echo; \ - for b in $$bases; do echo $$b; done \ - | $(am__create_global_log); \ - } >$(TEST_SUITE_LOG).tmp || exit 1; \ - mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ - if $$success; then \ - col="$$grn"; \ - else \ - col="$$red"; \ - test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ - fi; \ - echo "$${col}$$br$${std}"; \ - echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ - echo "$${col}$$br$${std}"; \ - create_testsuite_report --maybe-color; \ - echo "$$col$$br$$std"; \ - if $$success; then :; else \ - echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ - if test -n "$(PACKAGE_BUGREPORT)"; then \ - echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ - fi; \ - echo "$$col$$br$$std"; \ - fi; \ - $$success || exit 1 - -check-TESTS: - @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list - @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list - @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) - @set +e; $(am__set_TESTS_bases); \ - log_list=`for i in $$bases; do echo $$i.log; done`; \ - trs_list=`for i in $$bases; do echo $$i.trs; done`; \ - log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ - $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ - exit $$?; -recheck: all $(check_PROGRAMS) - @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) - @set +e; $(am__set_TESTS_bases); \ - bases=`for i in $$bases; do echo $$i; done \ - | $(am__list_recheck_tests)` || exit 1; \ - log_list=`for i in $$bases; do echo $$i.log; done`; \ - log_list=`echo $$log_list`; \ - $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ - am__force_recheck=am--force-recheck \ - TEST_LOGS="$$log_list"; \ - exit $$? -samples/sample1_unittest.log: samples/sample1_unittest$(EXEEXT) - @p='samples/sample1_unittest$(EXEEXT)'; \ - b='samples/sample1_unittest'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -samples/sample10_unittest.log: samples/sample10_unittest$(EXEEXT) - @p='samples/sample10_unittest$(EXEEXT)'; \ - b='samples/sample10_unittest'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -test/gtest_all_test.log: test/gtest_all_test$(EXEEXT) - @p='test/gtest_all_test$(EXEEXT)'; \ - b='test/gtest_all_test'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -test/fused_gtest_test.log: test/fused_gtest_test$(EXEEXT) - @p='test/fused_gtest_test$(EXEEXT)'; \ - b='test/fused_gtest_test'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -.test.log: - @p='$<'; \ - $(am__set_b); \ - $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -@am__EXEEXT_TRUE@.test$(EXEEXT).log: -@am__EXEEXT_TRUE@ @p='$<'; \ -@am__EXEEXT_TRUE@ $(am__set_b); \ -@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ -@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ -@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ -@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__post_remove_distdir) -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) - -dist-lzip: distdir - tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) - -dist-tarZ: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) - -dist-shar: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__post_remove_distdir) -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) - -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lz*) \ - lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir) - chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure \ - $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=.. --prefix="$$dc_install_base" \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__post_remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @test -n '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: trying to run $@ with an empty' \ - '$$(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - $(am__cd) '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-am -all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkginclude_internaldir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) - -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) - -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -rm -f fused-src/gtest/$(DEPDIR)/$(am__dirstamp) - -rm -f fused-src/gtest/$(am__dirstamp) - -rm -f lib/$(am__dirstamp) - -rm -f samples/$(DEPDIR)/$(am__dirstamp) - -rm -f samples/$(am__dirstamp) - -rm -f src/$(DEPDIR)/$(am__dirstamp) - -rm -f src/$(am__dirstamp) - -rm -f test/$(DEPDIR)/$(am__dirstamp) - -rm -f test/$(am__dirstamp) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -@HAVE_PYTHON_FALSE@maintainer-clean-local: -clean: clean-am - -clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ - clean-libtool clean-noinstLTLIBRARIES mostlyclean-am - -distclean: distclean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf fused-src/gtest/$(DEPDIR) samples/$(DEPDIR) src/$(DEPDIR) test/$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-data-local install-m4dataDATA \ - install-pkgincludeHEADERS install-pkginclude_internalHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-exec-local install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf fused-src/gtest/$(DEPDIR) samples/$(DEPDIR) src/$(DEPDIR) test/$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic \ - maintainer-clean-local - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES uninstall-m4dataDATA \ - uninstall-pkgincludeHEADERS \ - uninstall-pkginclude_internalHEADERS - -.MAKE: check-am install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-TESTS \ - check-am clean clean-checkPROGRAMS clean-cscope clean-generic \ - clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ - cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ - dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ - distcheck distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-data install-data-am \ - install-data-local install-dvi install-dvi-am install-exec \ - install-exec-am install-exec-local install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-m4dataDATA install-man \ - install-pdf install-pdf-am install-pkgincludeHEADERS \ - install-pkginclude_internalHEADERS install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic \ - maintainer-clean-local mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - recheck tags tags-am uninstall uninstall-am \ - uninstall-libLTLIBRARIES uninstall-m4dataDATA \ - uninstall-pkgincludeHEADERS \ - uninstall-pkginclude_internalHEADERS - - -# Build rules for putting fused Google Test files into the distribution -# package. The user can also create those files by manually running -# scripts/fuse_gtest_files.py. -@HAVE_PYTHON_TRUE@$(test_fused_gtest_test_SOURCES): fused-gtest - -@HAVE_PYTHON_TRUE@fused-gtest: $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) \ -@HAVE_PYTHON_TRUE@ $(GTEST_SRC) src/gtest-all.cc src/gtest_main.cc \ -@HAVE_PYTHON_TRUE@ scripts/fuse_gtest_files.py -@HAVE_PYTHON_TRUE@ mkdir -p "$(srcdir)/fused-src" -@HAVE_PYTHON_TRUE@ chmod -R u+w "$(srcdir)/fused-src" -@HAVE_PYTHON_TRUE@ rm -f "$(srcdir)/fused-src/gtest/gtest-all.cc" -@HAVE_PYTHON_TRUE@ rm -f "$(srcdir)/fused-src/gtest/gtest.h" -@HAVE_PYTHON_TRUE@ "$(srcdir)/scripts/fuse_gtest_files.py" "$(srcdir)/fused-src" -@HAVE_PYTHON_TRUE@ cp -f "$(srcdir)/src/gtest_main.cc" "$(srcdir)/fused-src/gtest/" - -@HAVE_PYTHON_TRUE@maintainer-clean-local: -@HAVE_PYTHON_TRUE@ rm -rf "$(srcdir)/fused-src" - -# Disables 'make install' as installing a compiled version of Google -# Test can lead to undefined behavior due to violation of the -# One-Definition Rule. - -install-exec-local: - echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system." - false - -install-data-local: - echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system." - false - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/src/thirdparty/protobuf-2.6.1/gtest/aclocal.m4 b/src/thirdparty/protobuf-2.6.1/gtest/aclocal.m4 deleted file mode 100644 index 8f34cf459..000000000 --- a/src/thirdparty/protobuf-2.6.1/gtest/aclocal.m4 +++ /dev/null @@ -1,1389 +0,0 @@ -# generated automatically by aclocal 1.14.1 -*- Autoconf -*- - -# Copyright (C) 1996-2013 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($@)])]) -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, -[m4_warning([this file was generated for autoconf 2.69. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically 'autoreconf'.])]) - -# Copyright (C) 2002-2013 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. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.14' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.14.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.14.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001-2013 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. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to -# '$srcdir', '$srcdir/..', or '$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is '.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997-2013 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. - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999-2013 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. - - -# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], - [$1], [CXX], [depcc="$CXX" am_compiler_list=], - [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], - [$1], [UPC], [depcc="$UPC" am_compiler_list=], - [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES. -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE([dependency-tracking], [dnl -AS_HELP_STRING( - [--enable-dependency-tracking], - [do not reject slow dependency extractors]) -AS_HELP_STRING( - [--disable-dependency-tracking], - [speeds up one-time build])]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -AC_SUBST([am__nodep])dnl -_AM_SUBST_NOTMAKE([am__nodep])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999-2013 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. - - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996-2013 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 macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. -m4_define([AC_PROG_CC], -m4_defn([AC_PROG_CC]) -[_AM_PROG_CC_C_O -]) - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.65])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[AC_DIAGNOSE([obsolete], - [$0: two- and three-arguments forms are deprecated.]) -m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), - [ok:ok],, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) - AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) -AM_MISSING_PROG([AUTOCONF], [autoconf]) -AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) -AM_MISSING_PROG([AUTOHEADER], [autoheader]) -AM_MISSING_PROG([MAKEINFO], [makeinfo]) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> -# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> -AC_SUBST([mkdir_p], ['$(MKDIR_P)']) -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES([CC])], - [m4_define([AC_PROG_CC], - m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES([CXX])], - [m4_define([AC_PROG_CXX], - m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES([OBJC])], - [m4_define([AC_PROG_OBJC], - m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], - [_AM_DEPENDENCIES([OBJCXX])], - [m4_define([AC_PROG_OBJCXX], - m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl -]) -AC_REQUIRE([AM_SILENT_RULES])dnl -dnl The testsuite driver may need to know about EXEEXT, so add the -dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This -dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl - -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: <http://www.gnu.org/software/coreutils/>. - -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) - fi -fi]) - -dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001-2013 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. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST([install_sh])]) - -# Copyright (C) 2003-2013 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. - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001-2013 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. - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997-2013 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. - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it is modern enough. -# If it is, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - AC_MSG_WARN(['missing' script is too old or missing]) -fi -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001-2013 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. - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# -------------------- -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) - -# _AM_SET_OPTIONS(OPTIONS) -# ------------------------ -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Copyright (C) 1999-2013 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. - -# _AM_PROG_CC_C_O -# --------------- -# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC -# to automatically call this. -AC_DEFUN([_AM_PROG_CC_C_O], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([compile])dnl -AC_LANG_PUSH([C])dnl -AC_CACHE_CHECK( - [whether $CC understands -c and -o together], - [am_cv_prog_cc_c_o], - [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i]) -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -AC_LANG_POP([C])]) - -# For backward compatibility. -AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) - -# Copyright (C) 1999-2013 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. - - -# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# --------------------------------------------------------------------------- -# Adds support for distributing Python modules and packages. To -# install modules, copy them to $(pythondir), using the python_PYTHON -# automake variable. To install a package with the same name as the -# automake package, install to $(pkgpythondir), or use the -# pkgpython_PYTHON automake variable. -# -# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as -# locations to install python extension modules (shared libraries). -# Another macro is required to find the appropriate flags to compile -# extension modules. -# -# If your package is configured with a different prefix to python, -# users will have to add the install directory to the PYTHONPATH -# environment variable, or create a .pth file (see the python -# documentation for details). -# -# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will -# cause an error if the version of python installed on the system -# doesn't meet the requirement. MINIMUM-VERSION should consist of -# numbers and dots only. -AC_DEFUN([AM_PATH_PYTHON], - [ - dnl Find a Python interpreter. Python versions prior to 2.0 are not - dnl supported. (2.0 was released on October 16, 2000). - m4_define_default([_AM_PYTHON_INTERPRETER_LIST], -[python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7 dnl - python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0]) - - AC_ARG_VAR([PYTHON], [the Python interpreter]) - - m4_if([$1],[],[ - dnl No version check is needed. - # Find any Python interpreter. - if test -z "$PYTHON"; then - AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) - fi - am_display_PYTHON=python - ], [ - dnl A version check is needed. - if test -n "$PYTHON"; then - # If the user set $PYTHON, use it and don't search something else. - AC_MSG_CHECKING([whether $PYTHON version is >= $1]) - AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - AC_MSG_ERROR([Python interpreter is too old])]) - am_display_PYTHON=$PYTHON - else - # Otherwise, try each interpreter until we find one that satisfies - # VERSION. - AC_CACHE_CHECK([for a Python interpreter with version >= $1], - [am_cv_pathless_PYTHON],[ - for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do - test "$am_cv_pathless_PYTHON" = none && break - AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) - done]) - # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. - if test "$am_cv_pathless_PYTHON" = none; then - PYTHON=: - else - AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) - fi - am_display_PYTHON=$am_cv_pathless_PYTHON - fi - ]) - - if test "$PYTHON" = :; then - dnl Run any user-specified action, or abort. - m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) - else - - dnl Query Python for its version number. Getting [:3] seems to be - dnl the best way to do this; it's what "site.py" does in the standard - dnl library. - - AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], - [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) - AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) - - dnl Use the values of $prefix and $exec_prefix for the corresponding - dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made - dnl distinct variables so they can be overridden if need be. However, - dnl general consensus is that you shouldn't need this ability. - - AC_SUBST([PYTHON_PREFIX], ['${prefix}']) - AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) - - dnl At times (like when building shared libraries) you may want - dnl to know which OS platform Python thinks this is. - - AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], - [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) - AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) - - # Just factor out some code duplication. - am_python_setup_sysconfig="\ -import sys -# Prefer sysconfig over distutils.sysconfig, for better compatibility -# with python 3.x. See automake bug#10227. -try: - import sysconfig -except ImportError: - can_use_sysconfig = 0 -else: - can_use_sysconfig = 1 -# Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: -# <https://github.com/pypa/virtualenv/issues/118> -try: - from platform import python_implementation - if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7': - can_use_sysconfig = 0 -except ImportError: - pass" - - dnl Set up 4 directories: - - dnl pythondir -- where to install python scripts. This is the - dnl site-packages directory, not the python standard library - dnl directory like in previous automake betas. This behavior - dnl is more consistent with lispdir.m4 for example. - dnl Query distutils for this directory. - AC_CACHE_CHECK([for $am_display_PYTHON script directory], - [am_cv_python_pythondir], - [if test "x$prefix" = xNONE - then - am_py_prefix=$ac_default_prefix - else - am_py_prefix=$prefix - fi - am_cv_python_pythondir=`$PYTHON -c " -$am_python_setup_sysconfig -if can_use_sysconfig: - sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) -else: - from distutils import sysconfig - sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') -sys.stdout.write(sitedir)"` - case $am_cv_python_pythondir in - $am_py_prefix*) - am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` - am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` - ;; - *) - case $am_py_prefix in - /usr|/System*) ;; - *) - am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages - ;; - esac - ;; - esac - ]) - AC_SUBST([pythondir], [$am_cv_python_pythondir]) - - dnl pkgpythondir -- $PACKAGE directory under pythondir. Was - dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is - dnl more consistent with the rest of automake. - - AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) - - dnl pyexecdir -- directory for installing python extension modules - dnl (shared libraries) - dnl Query distutils for this directory. - AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], - [am_cv_python_pyexecdir], - [if test "x$exec_prefix" = xNONE - then - am_py_exec_prefix=$am_py_prefix - else - am_py_exec_prefix=$exec_prefix - fi - am_cv_python_pyexecdir=`$PYTHON -c " -$am_python_setup_sysconfig -if can_use_sysconfig: - sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) -else: - from distutils import sysconfig - sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') -sys.stdout.write(sitedir)"` - case $am_cv_python_pyexecdir in - $am_py_exec_prefix*) - am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` - am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` - ;; - *) - case $am_py_exec_prefix in - /usr|/System*) ;; - *) - am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages - ;; - esac - ;; - esac - ]) - AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) - - dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) - - AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) - - dnl Run any user-specified action. - $2 - fi - -]) - - -# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) -# --------------------------------------------------------------------------- -# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. -# Run ACTION-IF-FALSE otherwise. -# This test uses sys.hexversion instead of the string equivalent (first -# word of sys.version), in order to cope with versions such as 2.2c1. -# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). -AC_DEFUN([AM_PYTHON_CHECK_VERSION], - [prog="import sys -# split strings by '.' and convert to numeric. Append some zeros -# because we need at least 4 digits for the hex conversion. -# map returns an iterator in Python 3.0 and a list in 2.x -minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] -minverhex = 0 -# xrange is not present in Python 3.0 and range returns an iterator -for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] -sys.exit(sys.hexversion < minverhex)" - AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) - -# Copyright (C) 2001-2013 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. - -# AM_RUN_LOG(COMMAND) -# ------------------- -# Run COMMAND, save the exit status in ac_status, and log it. -# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) -AC_DEFUN([AM_RUN_LOG], -[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD - ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - (exit $ac_status); }]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996-2013 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. - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; -esac - -# Do 'set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken - alias in your environment]) - fi - if test "$[2]" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT([yes]) -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi -AC_CONFIG_COMMANDS_PRE( - [AC_MSG_CHECKING([that generated files are newer than configure]) - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - AC_MSG_RESULT([done])]) -rm -f conftest.file -]) - -# Copyright (C) 2009-2013 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. - -# AM_SILENT_RULES([DEFAULT]) -# -------------------------- -# Enable less verbose build rules; with the default set to DEFAULT -# ("yes" being less verbose, "no" or empty being verbose). -AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], [dnl -AS_HELP_STRING( - [--enable-silent-rules], - [less verbose build output (undo: "make V=1")]) -AS_HELP_STRING( - [--disable-silent-rules], - [verbose build output (undo: "make V=0")])dnl -]) -case $enable_silent_rules in @%:@ ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac -dnl -dnl A few 'make' implementations (e.g., NonStop OS and NextStep) -dnl do not support nested variable expansions. -dnl See automake bug#9928 and bug#10237. -am_make=${MAKE-make} -AC_CACHE_CHECK([whether $am_make supports nested variables], - [am_cv_make_support_nested_variables], - [if AS_ECHO([['TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi]) -if test $am_cv_make_support_nested_variables = yes; then - dnl Using '$V' instead of '$(V)' breaks IRIX make. - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AC_SUBST([AM_V])dnl -AM_SUBST_NOTMAKE([AM_V])dnl -AC_SUBST([AM_DEFAULT_V])dnl -AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl -AC_SUBST([AM_DEFAULT_VERBOSITY])dnl -AM_BACKSLASH='\' -AC_SUBST([AM_BACKSLASH])dnl -_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl -]) - -# Copyright (C) 2001-2013 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. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor 'install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in "make install-strip", and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006-2013 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. - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# -------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004-2013 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. - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of 'v7', 'ustar', or 'pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -# -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AC_SUBST([AMTAR], ['$${TAR-tar}']) - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' - -m4_if([$1], [v7], - [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], - - [m4_case([$1], - [ustar], - [# The POSIX 1988 'ustar' format is defined with fixed-size fields. - # There is notably a 21 bits limit for the UID and the GID. In fact, - # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 - # and bug#13588). - am_max_uid=2097151 # 2^21 - 1 - am_max_gid=$am_max_uid - # The $UID and $GID variables are not portable, so we need to resort - # to the POSIX-mandated id(1) utility. Errors in the 'id' calls - # below are definitely unexpected, so allow the users to see them - # (that is, avoid stderr redirection). - am_uid=`id -u || echo unknown` - am_gid=`id -g || echo unknown` - AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) - if test $am_uid -le $am_max_uid; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - _am_tools=none - fi - AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) - if test $am_gid -le $am_max_gid; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - _am_tools=none - fi], - - [pax], - [], - - [m4_fatal([Unknown tar format])]) - - AC_MSG_CHECKING([how to create a $1 tar archive]) - - # Go ahead even if we have the value already cached. We do so because we - # need to set the values for the 'am__tar' and 'am__untar' variables. - _am_tools=${am_cv_prog_tar_$1-$_am_tools} - - for _am_tool in $_am_tools; do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works. - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar <conftest.tar]) - AM_RUN_LOG([cat conftest.dir/file]) - grep GrepMe conftest.dir/file >/dev/null 2>&1 && break - fi - done - rm -rf conftest.dir - - AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) - AC_MSG_RESULT([$am_cv_prog_tar_$1])]) - -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) diff --git a/src/thirdparty/protobuf-2.6.1/gtest/build-aux/config.h.in b/src/thirdparty/protobuf-2.6.1/gtest/build-aux/config.h.in deleted file mode 100644 index 843b5b10c..000000000 --- a/src/thirdparty/protobuf-2.6.1/gtest/build-aux/config.h.in +++ /dev/null @@ -1,69 +0,0 @@ -/* build-aux/config.h.in. Generated from configure.ac by autoheader. */ - -/* Define to 1 if you have the <dlfcn.h> header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the <inttypes.h> header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the <memory.h> header file. */ -#undef HAVE_MEMORY_H - -/* Define if you have POSIX threads libraries and header files. */ -#undef HAVE_PTHREAD - -/* Define to 1 if you have the <stdint.h> header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the <stdlib.h> header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the <strings.h> header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the <string.h> header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the <sys/types.h> header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the <unistd.h> header file. */ -#undef HAVE_UNISTD_H - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Name of package */ -#undef PACKAGE - -/* 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 necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Version number of package */ -#undef VERSION diff --git a/src/thirdparty/protobuf-2.6.1/gtest/build-aux/ltmain.sh b/src/thirdparty/protobuf-2.6.1/gtest/build-aux/ltmain.sh deleted file mode 100644 index a356acafa..000000000 --- a/src/thirdparty/protobuf-2.6.1/gtest/build-aux/ltmain.sh +++ /dev/null @@ -1,9661 +0,0 @@ - -# libtool (GNU libtool) 2.4.2 -# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010, 2011 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. - -# GNU Libtool 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 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --no-quiet, --no-silent -# print informational messages (default) -# --no-warn don't display warning messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print more informational messages than default -# --no-verbose don't print the extra informational messages -# --version print version information -# -h, --help, --help-all print short, long, or detailed help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. When passed as first option, -# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to <bug-libtool@gnu.org>. -# GNU libtool home page: <http://www.gnu.org/software/libtool/>. -# General help using GNU software: <http://www.gnu.org/gethelp/>. - -PROGRAM=libtool -PACKAGE=libtool -VERSION="2.4.2 Debian-2.4.2-1.7ubuntu1" -TIMESTAMP="" -package_revision=1.3337 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# NLS nuisances: We save the old values to restore during execute mode. -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done -LC_ALL=C -LANGUAGE=C -export LANGUAGE LC_ALL - -$lt_unset CDPATH - - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - - - -: ${CP="cp -f"} -test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} # func_dirname may be replaced by extended shell implementation - - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} # func_basename may be replaced by extended shell implementation - - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} # func_dirname_and_basename may be replaced by extended shell implementation - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname may be replaced by extended shell implementation - - -# These SED scripts presuppose an absolute path with a trailing slash. -pathcar='s,^/\([^/]*\).*$,\1,' -pathcdr='s,^/[^/]*,,' -removedotparts=':dotsl - s@/\./@/@g - t dotsl - s,/\.$,/,' -collapseslashes='s@/\{1,\}@/@g' -finalslash='s,/*$,/,' - -# func_normal_abspath PATH -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -# value returned in "$func_normal_abspath_result" -func_normal_abspath () -{ - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` - while :; do - # Processed it all yet? - if test "$func_normal_abspath_tpath" = / ; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result" ; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - -# func_relative_path SRCDIR DSTDIR -# generates a relative path from SRCDIR to DSTDIR, with a trailing -# slash if non-empty, suitable for immediately appending a filename -# without needing to append a separator. -# value returned in "$func_relative_path_result" -func_relative_path () -{ - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=${func_dirname_result} - if test "x$func_relative_path_tlibdir" = x ; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done - - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test "x$func_stripname_result" != x ; then - func_relative_path_result=${func_relative_path_result}/${func_stripname_result} - fi - - # Normalisation. If bindir is libdir, return empty string, - # else relative path ending with a slash; either way, target - # file name can be directly appended. - if test ! -z "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result/" - func_relative_path_result=$func_stripname_result - fi -} - -# The name of this program: -func_dirname_and_basename "$progpath" -progname=$func_basename_result - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=${PATH_SEPARATOR-:} - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' - -# Sed substitution that converts a w32 file name or path -# which contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }$*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` - done - my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "$my_tmpdir" -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "$1" | $SED \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - -# func_tr_sh -# Turn $1 into a string suitable for a shell variable name. -# Result is stored in $func_tr_sh_result. All characters -# not in the set a-zA-Z0-9_ are replaced with '_'. Further, -# if $1 begins with a digit, a '_' is prepended as well. -func_tr_sh () -{ - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac -} - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $opt_debug - - $SED -n '/(C)/!b go - :more - /\./!{ - N - s/\n# / / - b more - } - :go - /^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $opt_debug - - $SED -n '/^# Usage:/,/^# *.*--help/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - echo - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help [NOEXIT] -# Echo long help message to standard output and exit, -# unless 'noexit' is passed as argument. -func_help () -{ - $opt_debug - - $SED -n '/^# Usage:/,/# Report bugs to/ { - :print - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ - p - d - } - /^# .* home page:/b print - /^# General help using/b print - ' < "$progpath" - ret=$? - if test -z "$1"; then - exit $ret - fi -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - $opt_debug - - func_error "missing argument for $1." - exit_cmd=exit -} - - -# func_split_short_opt shortopt -# Set func_split_short_opt_name and func_split_short_opt_arg shell -# variables after splitting SHORTOPT after the 2nd character. -func_split_short_opt () -{ - my_sed_short_opt='1s/^\(..\).*$/\1/;q' - my_sed_short_rest='1s/^..\(.*\)$/\1/;q' - - func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` - func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` -} # func_split_short_opt may be replaced by extended shell implementation - - -# func_split_long_opt longopt -# Set func_split_long_opt_name and func_split_long_opt_arg shell -# variables after splitting LONGOPT at the `=' sign. -func_split_long_opt () -{ - my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' - my_sed_long_arg='1s/^--[^=]*=//' - - func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` - func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` -} # func_split_long_opt may be replaced by extended shell implementation - -exit_cmd=: - - - - - -magic="%%%MAGIC variable%%%" -magic_exe="%%%MAGIC EXE variable%%%" - -# Global variables. -nonopt= -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "${1}=\$${1}\${2}" -} # func_append may be replaced by extended shell implementation - -# func_append_quoted var value -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -func_append_quoted () -{ - func_quote_for_eval "${2}" - eval "${1}=\$${1}\\ \$func_quote_for_eval_result" -} # func_append_quoted may be replaced by extended shell implementation - - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "${@}"` -} # func_arith may be replaced by extended shell implementation - - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` -} # func_len may be replaced by extended shell implementation - - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} # func_lo2o may be replaced by extended shell implementation - - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} # func_xform may be replaced by extended shell implementation - - -# func_fatal_configuration arg... -# Echo program name prefixed message to standard error, followed by -# a configuration failure hint, and exit. -func_fatal_configuration () -{ - func_error ${1+"$@"} - func_error "See the $PACKAGE documentation for more information." - func_fatal_error "Fatal configuration error." -} - - -# func_config -# Display the configuration for all the tags in this script. -func_config () -{ - re_begincf='^# ### BEGIN LIBTOOL' - re_endcf='^# ### END LIBTOOL' - - # Default configuration. - $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - - # Now print the configurations for the tags. - for tagname in $taglist; do - $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" - done - - exit $? -} - -# func_features -# Display the features supported by this script. -func_features () -{ - echo "host: $host" - if test "$build_libtool_libs" = yes; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - - exit $? -} - -# func_enable_tag tagname -# Verify that TAGNAME is valid, and either flag an error and exit, or -# enable the TAGNAME tag. We also add TAGNAME to the global $taglist -# variable here. -func_enable_tag () -{ - # Global variable: - tagname="$1" - - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf="/$re_begincf/,/$re_endcf/p" - - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac - - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; - *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -# Shorthand for --mode=foo, only valid as the first argument -case $1 in -clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; -compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; -execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; -finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; -install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; -link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; -uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; -esac - - - -# Option defaults: -opt_debug=: -opt_dry_run=false -opt_config=false -opt_preserve_dup_deps=false -opt_features=false -opt_finish=false -opt_help=false -opt_help_all=false -opt_silent=: -opt_warning=: -opt_verbose=: -opt_silent=false -opt_verbose=false - - -# Parse options once, thoroughly. This comes as soon as possible in the -# script to make things like `--version' happen as quickly as we can. -{ - # this just eases exit handling - while test $# -gt 0; do - opt="$1" - shift - case $opt in - --debug|-x) opt_debug='set -x' - func_echo "enabling shell trace mode" - $opt_debug - ;; - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - --config) - opt_config=: -func_config - ;; - --dlopen|-dlopen) - optarg="$1" - opt_dlopen="${opt_dlopen+$opt_dlopen -}$optarg" - shift - ;; - --preserve-dup-deps) - opt_preserve_dup_deps=: - ;; - --features) - opt_features=: -func_features - ;; - --finish) - opt_finish=: -set dummy --mode finish ${1+"$@"}; shift - ;; - --help) - opt_help=: - ;; - --help-all) - opt_help_all=: -opt_help=': help-all' - ;; - --mode) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_mode="$optarg" -case $optarg in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; -esac - shift - ;; - --no-silent|--no-quiet) - opt_silent=false -func_append preserve_args " $opt" - ;; - --no-warning|--no-warn) - opt_warning=false -func_append preserve_args " $opt" - ;; - --no-verbose) - opt_verbose=false -func_append preserve_args " $opt" - ;; - --silent|--quiet) - opt_silent=: -func_append preserve_args " $opt" - opt_verbose=false - ;; - --verbose|-v) - opt_verbose=: -func_append preserve_args " $opt" -opt_silent=false - ;; - --tag) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_tag="$optarg" -func_append preserve_args " $opt $optarg" -func_enable_tag "$optarg" - shift - ;; - - -\?|-h) func_usage ;; - --help) func_help ;; - --version) func_version ;; - - # Separate optargs to long options: - --*=*) - func_split_long_opt "$opt" - set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-n*|-v*) - func_split_short_opt "$opt" - set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognized option \`$opt'" ;; - *) set dummy "$opt" ${1+"$@"}; shift; break ;; - esac - done - - # Validate options: - - # save first non-option argument - if test "$#" -gt 0; then - nonopt="$opt" - shift - fi - - # preserve --debug - test "$opt_debug" = : || func_append preserve_args " --debug" - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - - $opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test "$opt_mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$opt_mode' for more information." - } - - - # Bail if the options were screwed - $exit_cmd $EXIT_FAILURE -} - - - - -## ----------- ## -## Main. ## -## ----------- ## - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_resolve_sysroot PATH -# Replace a leading = in PATH with a sysroot. Store the result into -# func_resolve_sysroot_result -func_resolve_sysroot () -{ - func_resolve_sysroot_result=$1 - case $func_resolve_sysroot_result in - =*) - func_stripname '=' '' "$func_resolve_sysroot_result" - func_resolve_sysroot_result=$lt_sysroot$func_stripname_result - ;; - esac -} - -# func_replace_sysroot PATH -# If PATH begins with the sysroot, replace it with = and -# store the result into func_replace_sysroot_result. -func_replace_sysroot () -{ - case "$lt_sysroot:$1" in - ?*:"$lt_sysroot"*) - func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result="=$func_stripname_result" - ;; - *) - # Including no sysroot. - func_replace_sysroot_result=$1 - ;; - esac -} - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case "$@ " in - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T <<EOF -# $write_libobj - a libtool object file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# Name of the PIC object. -pic_object=$write_lobj - -# Name of the non-PIC object -non_pic_object=$write_oldobj - -EOF - $MV "${write_libobj}T" "${write_libobj}" - } -} - - -################################################## -# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # -################################################## - -# func_convert_core_file_wine_to_w32 ARG -# Helper function used by file name conversion functions when $build is *nix, -# and $host is mingw, cygwin, or some other w32 environment. Relies on a -# correctly configured wine environment available, with the winepath program -# in $build's $PATH. -# -# ARG is the $build file name to be converted to w32 format. -# Result is available in $func_convert_core_file_wine_to_w32_result, and will -# be empty on error (or when ARG is empty) -func_convert_core_file_wine_to_w32 () -{ - $opt_debug - func_convert_core_file_wine_to_w32_result="$1" - if test -n "$1"; then - # Unfortunately, winepath does not exit with a non-zero error code, so we - # are forced to check the contents of stdout. On the other hand, if the - # command is not found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both error code of - # zero AND non-empty stdout, which explains the odd construction: - func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then - func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$lt_sed_naive_backslashify"` - else - func_convert_core_file_wine_to_w32_result= - fi - fi -} -# end: func_convert_core_file_wine_to_w32 - - -# func_convert_core_path_wine_to_w32 ARG -# Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. -# -# ARG is path to be converted from $build format to win32. -# Result is available in $func_convert_core_path_wine_to_w32_result. -# Unconvertible file (directory) names in ARG are skipped; if no directory names -# are convertible, then the result may be empty. -func_convert_core_path_wine_to_w32 () -{ - $opt_debug - # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result="" - if test -n "$1"; then - oldIFS=$IFS - IFS=: - for func_convert_core_path_wine_to_w32_f in $1; do - IFS=$oldIFS - func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result" ; then - if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" - else - func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" - fi - fi - done - IFS=$oldIFS - fi -} -# end: func_convert_core_path_wine_to_w32 - - -# func_cygpath ARGS... -# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when -# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) -# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or -# (2), returns the Cygwin file name or path in func_cygpath_result (input -# file name or path is assumed to be in w32 format, as previously converted -# from $build's *nix or MSYS format). In case (3), returns the w32 file name -# or path in func_cygpath_result (input file name or path is assumed to be in -# Cygwin format). Returns an empty string on error. -# -# ARGS are passed to cygpath, with the last one being the file name or path to -# be converted. -# -# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH -# environment variable; do not put it in $PATH. -func_cygpath () -{ - $opt_debug - if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then - func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` - if test "$?" -ne 0; then - # on failure, ensure result is empty - func_cygpath_result= - fi - else - func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" - fi -} -#end: func_cygpath - - -# func_convert_core_msys_to_w32 ARG -# Convert file name or path ARG from MSYS format to w32 format. Return -# result in func_convert_core_msys_to_w32_result. -func_convert_core_msys_to_w32 () -{ - $opt_debug - # awkward: cmd appends spaces to result - func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` -} -#end: func_convert_core_msys_to_w32 - - -# func_convert_file_check ARG1 ARG2 -# Verify that ARG1 (a file name in $build format) was converted to $host -# format in ARG2. Otherwise, emit an error message, but continue (resetting -# func_to_host_file_result to ARG1). -func_convert_file_check () -{ - $opt_debug - if test -z "$2" && test -n "$1" ; then - func_error "Could not determine host file name corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_file_result="$1" - fi -} -# end func_convert_file_check - - -# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH -# Verify that FROM_PATH (a path in $build format) was converted to $host -# format in TO_PATH. Otherwise, emit an error message, but continue, resetting -# func_to_host_file_result to a simplistic fallback value (see below). -func_convert_path_check () -{ - $opt_debug - if test -z "$4" && test -n "$3"; then - func_error "Could not determine the host path corresponding to" - func_error " \`$3'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This is a deliberately simplistic "conversion" and - # should not be "improved". See libtool.info. - if test "x$1" != "x$2"; then - lt_replace_pathsep_chars="s|$1|$2|g" - func_to_host_path_result=`echo "$3" | - $SED -e "$lt_replace_pathsep_chars"` - else - func_to_host_path_result="$3" - fi - fi -} -# end func_convert_path_check - - -# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG -# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT -# and appending REPL if ORIG matches BACKPAT. -func_convert_path_front_back_pathsep () -{ - $opt_debug - case $4 in - $1 ) func_to_host_path_result="$3$func_to_host_path_result" - ;; - esac - case $4 in - $2 ) func_append func_to_host_path_result "$3" - ;; - esac -} -# end func_convert_path_front_back_pathsep - - -################################################## -# $build to $host FILE NAME CONVERSION FUNCTIONS # -################################################## -# invoked via `$to_host_file_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# Result will be available in $func_to_host_file_result. - - -# func_to_host_file ARG -# Converts the file name ARG from $build format to $host format. Return result -# in func_to_host_file_result. -func_to_host_file () -{ - $opt_debug - $to_host_file_cmd "$1" -} -# end func_to_host_file - - -# func_to_tool_file ARG LAZY -# converts the file name ARG from $build format to toolchain format. Return -# result in func_to_tool_file_result. If the conversion in use is listed -# in (the comma separated) LAZY, no conversion takes place. -func_to_tool_file () -{ - $opt_debug - case ,$2, in - *,"$to_tool_file_cmd",*) - func_to_tool_file_result=$1 - ;; - *) - $to_tool_file_cmd "$1" - func_to_tool_file_result=$func_to_host_file_result - ;; - esac -} -# end func_to_tool_file - - -# func_convert_file_noop ARG -# Copy ARG to func_to_host_file_result. -func_convert_file_noop () -{ - func_to_host_file_result="$1" -} -# end func_convert_file_noop - - -# func_convert_file_msys_to_w32 ARG -# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_file_result. -func_convert_file_msys_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_to_host_file_result="$func_convert_core_msys_to_w32_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_w32 - - -# func_convert_file_cygwin_to_w32 ARG -# Convert file name ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_file_cygwin_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - # because $build is cygwin, we call "the" cygpath in $PATH; no need to use - # LT_CYGPATH in this case. - func_to_host_file_result=`cygpath -m "$1"` - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_cygwin_to_w32 - - -# func_convert_file_nix_to_w32 ARG -# Convert file name ARG from *nix to w32 format. Requires a wine environment -# and a working winepath. Returns result in func_to_host_file_result. -func_convert_file_nix_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_w32 - - -# func_convert_file_msys_to_cygwin ARG -# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_file_msys_to_cygwin () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result="$func_cygpath_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_cygwin - - -# func_convert_file_nix_to_cygwin ARG -# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed -# in a wine environment, working winepath, and LT_CYGPATH set. Returns result -# in func_to_host_file_result. -func_convert_file_nix_to_cygwin () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. - func_convert_core_file_wine_to_w32 "$1" - func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result="$func_cygpath_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_cygwin - - -############################################# -# $build to $host PATH CONVERSION FUNCTIONS # -############################################# -# invoked via `$to_host_path_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# The result will be available in $func_to_host_path_result. -# -# Path separators are also converted from $build format to $host format. If -# ARG begins or ends with a path separator character, it is preserved (but -# converted to $host format) on output. -# -# All path conversion functions are named using the following convention: -# file name conversion function : func_convert_file_X_to_Y () -# path conversion function : func_convert_path_X_to_Y () -# where, for any given $build/$host combination the 'X_to_Y' value is the -# same. If conversion functions are added for new $build/$host combinations, -# the two new functions must follow this pattern, or func_init_to_host_path_cmd -# will break. - - -# func_init_to_host_path_cmd -# Ensures that function "pointer" variable $to_host_path_cmd is set to the -# appropriate value, based on the value of $to_host_file_cmd. -to_host_path_cmd= -func_init_to_host_path_cmd () -{ - $opt_debug - if test -z "$to_host_path_cmd"; then - func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd="func_convert_path_${func_stripname_result}" - fi -} - - -# func_to_host_path ARG -# Converts the path ARG from $build format to $host format. Return result -# in func_to_host_path_result. -func_to_host_path () -{ - $opt_debug - func_init_to_host_path_cmd - $to_host_path_cmd "$1" -} -# end func_to_host_path - - -# func_convert_path_noop ARG -# Copy ARG to func_to_host_path_result. -func_convert_path_noop () -{ - func_to_host_path_result="$1" -} -# end func_convert_path_noop - - -# func_convert_path_msys_to_w32 ARG -# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_path_result. -func_convert_path_msys_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # Remove leading and trailing path separator characters from ARG. MSYS - # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; - # and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_msys_to_w32_result" - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_msys_to_w32 - - -# func_convert_path_cygwin_to_w32 ARG -# Convert path ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_path_cygwin_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_cygwin_to_w32 - - -# func_convert_path_nix_to_w32 ARG -# Convert path ARG from *nix to w32 format. Requires a wine environment and -# a working winepath. Returns result in func_to_host_file_result. -func_convert_path_nix_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_nix_to_w32 - - -# func_convert_path_msys_to_cygwin ARG -# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_path_msys_to_cygwin () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result="$func_cygpath_result" - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_msys_to_cygwin - - -# func_convert_path_nix_to_cygwin ARG -# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a -# a wine environment, working winepath, and LT_CYGPATH set. Returns result in -# func_to_host_file_result. -func_convert_path_nix_to_cygwin () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result="$func_cygpath_result" - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_nix_to_cygwin - - -# func_mode_compile arg... -func_mode_compile () -{ - $opt_debug - # Get the compilation command and the source file. - base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - pie_flag= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg="$arg" - arg_mode=normal - ;; - - target ) - libobj="$arg" - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - test -n "$libobj" && \ - func_fatal_error "you cannot specify \`-o' more than once" - arg_mode=target - continue - ;; - - -pie | -fpie | -fPIE) - func_append pie_flag " $arg" - continue - ;; - - -shared | -static | -prefer-pic | -prefer-non-pic) - func_append later " $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - lastarg= - save_ifs="$IFS"; IFS=',' - for arg in $args; do - IFS="$save_ifs" - func_append_quoted lastarg "$arg" - done - IFS="$save_ifs" - func_stripname ' ' '' "$lastarg" - lastarg=$func_stripname_result - - # Add the arguments to base_compile. - func_append base_compile " $lastarg" - continue - ;; - - *) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg="$srcfile" - srcfile="$arg" - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - func_append_quoted base_compile "$lastarg" - done # for arg - - case $arg_mode in - arg) - func_fatal_error "you must specify an argument for -Xcompile" - ;; - target) - func_fatal_error "you must specify a target with \`-o'" - ;; - *) - # Get the name of the library object. - test -z "$libobj" && { - func_basename "$srcfile" - libobj="$func_basename_result" - } - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - case $libobj in - *.[cCFSifmso] | \ - *.ada | *.adb | *.ads | *.asm | \ - *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ - *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) - func_xform "$libobj" - libobj=$func_xform_result - ;; - esac - - case $libobj in - *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; - *) - func_fatal_error "cannot determine name of library object from \`$libobj'" - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - continue - ;; - - -static) - build_libtool_libs=no - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ - && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - func_append removelist " $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - func_append removelist " $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 - srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - func_append command " -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - func_append command " -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - func_append command "$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { - test "$opt_mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $opt_mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to build PIC objects only - -prefer-non-pic try to build non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -bindir BINDIR specify path to binaries directory (for systems where - libraries must be found in the PATH setting at runtime) - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -Wc,FLAG - -Xcompiler FLAG pass linker-specific FLAG directly to the compiler - -Wl,FLAG - -Xlinker FLAG pass linker-specific FLAG directly to the linker - -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$opt_mode'" - ;; - esac - - echo - $ECHO "Try \`$progname --help' for more information about other modes." -} - -# Now that we've collected a possible --mode arg, show help if necessary -if $opt_help; then - if test "$opt_help" = :; then - func_mode_help - else - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - func_mode_help - done - } | sed -n '1p; 2,$s/^Usage:/ or: /p' - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - echo - func_mode_help - done - } | - sed '1d - /^When reporting/,/^Report/{ - H - d - } - $x - /information about other modes/d - /more detailed .*MODE/d - s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' - fi - exit $? -fi - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $opt_dlopen; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - func_append dir "/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -* | *.la | *.lo ) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_append_quoted args "$file" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$opt_mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libs= - libdirs= - admincmds= - - for opt in "$nonopt" ${1+"$@"} - do - if test -d "$opt"; then - func_append libdirs " $opt" - - elif test -f "$opt"; then - if func_lalib_unsafe_p "$opt"; then - func_append libs " $opt" - else - func_warning "\`$opt' is not a valid libtool archive" - fi - - else - func_fatal_error "invalid argument \`$opt'" - fi - done - - if test -n "$libs"; then - if test -n "$lt_sysroot"; then - sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` - sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" - else - sysroot_cmd= - fi - - # Remove sysroot references - if $opt_dry_run; then - for lib in $libs; do - echo "removing references to $lt_sysroot and \`=' prefixes from $lib" - done - else - tmpdir=`func_mktempdir` - for lib in $libs; do - sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ - > $tmpdir/tmp-la - mv -f $tmpdir/tmp-la $lib - done - ${RM}r "$tmpdir" - fi - fi - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || func_append admincmds " - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - echo - - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" - fi - exit $EXIT_SUCCESS -} - -test "$opt_mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" - install_shared_prog=$install_prog - case " $install_prog " in - *[\\\ /]cp\ *) install_cp=: ;; - *) install_cp=false ;; - esac - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - no_mode=: - for arg - do - arg2= - if test -n "$dest"; then - func_append files " $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - if $install_cp; then :; else - prev=$arg - fi - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - if test "x$prev" = x-m && test -n "$install_override_mode"; then - arg2=$install_override_mode - no_mode=false - fi - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - func_append install_shared_prog " $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -n "$install_override_mode" && $no_mode; then - if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" - fi - fi - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - func_append staticlibs " $file" - ;; - - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) func_append current_libdirs " $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) func_append future_libdirs " $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - func_append dir "$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && func_append staticlibs " $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $tool_oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$opt_mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) -#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" -#endif - -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" - $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - case $host in - *cygwin* | *mingw* | *cegcc* ) - # if an import library, we need to obtain dlname - if func_win32_import_lib_p "$dlprefile"; then - func_tr_sh "$dlprefile" - eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename="" - if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then - # Use subshell, to avoid clobbering current variable values - dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname" ; then - func_basename "$dlprefile_dlname" - dlprefile_dlbasename="$func_basename_result" - else - # no lafile. user explicitly requested -dlpreopen <import library>. - $sharedlib_from_linklib_cmd "$dlprefile" - dlprefile_dlbasename=$sharedlib_from_linklib_result - fi - fi - $opt_dry_run || { - if test -n "$dlprefile_dlbasename" ; then - eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' - else - func_warning "Could not compute DLL name from $name" - eval '$ECHO ": $name " >> "$nlist"' - fi - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" - } - else # not an import lib - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - fi - ;; - *) - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - ;; - esac - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 </dev/null >/dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - echo >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - echo >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) func_append symtab_cflags " $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -# Despite the name, also deal with 64 bit binaries. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - -# func_cygming_dll_for_implib ARG -# -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib () -{ - $opt_debug - sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` -} - -# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs -# -# The is the core of a fallback implementation of a -# platform-specific function to extract the name of the -# DLL associated with the specified import library LIBNAME. -# -# SECTION_NAME is either .idata$6 or .idata$7, depending -# on the platform and compiler that created the implib. -# -# Echos the name of the DLL associated with the -# specified import library. -func_cygming_dll_for_implib_fallback_core () -{ - $opt_debug - match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` - $OBJDUMP -s --section "$1" "$2" 2>/dev/null | - $SED '/^Contents of section '"$match_literal"':/{ - # Place marker at beginning of archive member dllname section - s/.*/====MARK====/ - p - d - } - # These lines can sometimes be longer than 43 characters, but - # are always uninteresting - /:[ ]*file format pe[i]\{,1\}-/d - /^In archive [^:]*:/d - # Ensure marker is printed - /^====MARK====/p - # Remove all lines with less than 43 characters - /^.\{43\}/!d - # From remaining lines, remove first 43 characters - s/^.\{43\}//' | - $SED -n ' - # Join marker and all lines until next marker into a single line - /^====MARK====/ b para - H - $ b para - b - :para - x - s/\n//g - # Remove the marker - s/^====MARK====// - # Remove trailing dots and whitespace - s/[\. \t]*$// - # Print - /./p' | - # we now have a list, one entry per line, of the stringified - # contents of the appropriate section of all members of the - # archive which possess that section. Heuristic: eliminate - # all those which have a first or second character that is - # a '.' (that is, objdump's representation of an unprintable - # character.) This should work for all archives with less than - # 0x302f exports -- but will fail for DLLs whose name actually - # begins with a literal '.' or a single character followed by - # a '.'. - # - # Of those that remain, print the first one. - $SED -e '/^\./d;/^.\./d;q' -} - -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - -# func_cygming_dll_for_implib_fallback ARG -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# -# This fallback implementation is for use when $DLLTOOL -# does not support the --identify-strict option. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib_fallback () -{ - $opt_debug - if func_cygming_gnu_implib_p "$1" ; then - # binutils import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1" ; then - # ms-generated import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` - else - # unknown - sharedlib_from_linklib_result="" - fi -} - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - if test "$lock_old_archive_extraction" = yes; then - lockfile=$f_ex_an_ar_oldlib.lock - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - fi - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ - 'stat=$?; rm -f "$lockfile"; exit $stat' - if test "$lock_old_archive_extraction" = yes; then - $opt_dry_run || rm -f "$lockfile" - fi - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=${1-no} - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - file=\"\$0\"" - - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` - $ECHO "\ - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - ECHO=\"$qECHO\" - fi - -# Very basic option parsing. These options are (a) specific to -# the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ which is used only on -# windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options which match -# this pattern). -# -# There are only two supported options: --lt-debug and -# --lt-dump-script. There is, deliberately, no --lt-help. -# -# The first argument to this parsing function should be the -# script's $0 value, followed by "$@". -lt_option_debug= -func_parse_lt_options () -{ - lt_script_arg0=\$0 - shift - for lt_opt - do - case \"\$lt_opt\" in - --lt-debug) lt_option_debug=1 ;; - --lt-dump-script) - lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` - test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. - lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` - cat \"\$lt_dump_D/\$lt_dump_F\" - exit 0 - ;; - --lt-*) - \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 - exit 1 - ;; - esac - done - - # Print the debug banner immediately: - if test -n \"\$lt_option_debug\"; then - echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 - fi -} - -# Used when --lt-debug. Prints its arguments to stdout -# (redirection is the responsibility of the caller) -func_lt_dump_args () -{ - lt_dump_args_N=1; - for lt_arg - do - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" - lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` - done -} - -# Core function for launching the target application -func_exec_program_core () -{ -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 -} - -# A function to encapsulate launching the target application -# Strips options in the --lt-* namespace from \$@ and -# launches target application with the remaining arguments. -func_exec_program () -{ - case \" \$* \" in - *\\ --lt-*) - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done ;; - esac - func_exec_program_core \${1+\"\$@\"} -} - - # Parse options - func_parse_lt_options \"\$0\" \${1+\"\$@\"} - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` - done - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # fixup the dll searchpath if we need to. - # - # Fix the DLL searchpath if we need to. Do this before prepending - # to shlibpath, because on Windows, both are PATH and uninstalled - # libraries must come first. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` - - export $shlibpath_var -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - func_exec_program \${1+\"\$@\"} - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} - - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat <<EOF - -/* $cwrappersource - temporary wrapper executable for $objdir/$outputname - Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION - - The $output program cannot be directly executed until all the libtool - libraries that it depends on are installed. - - This wrapper executable should never be moved out of the build directory. - If it is, it will not operate correctly. -*/ -EOF - cat <<"EOF" -#ifdef _MSC_VER -# define _CRT_SECURE_NO_DEPRECATE 1 -#endif -#include <stdio.h> -#include <stdlib.h> -#ifdef _MSC_VER -# include <direct.h> -# include <process.h> -# include <io.h> -#else -# include <unistd.h> -# include <stdint.h> -# ifdef __CYGWIN__ -# include <io.h> -# endif -#endif -#include <malloc.h> -#include <stdarg.h> -#include <assert.h> -#include <string.h> -#include <ctype.h> -#include <errno.h> -#include <fcntl.h> -#include <sys/stat.h> - -/* declarations of non-ANSI functions */ -#if defined(__MINGW32__) -# ifdef __STRICT_ANSI__ -int _putenv (const char *); -# endif -#elif defined(__CYGWIN__) -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -/* #elif defined (other platforms) ... */ -#endif - -/* portability defines, excluding path handling macros */ -#if defined(_MSC_VER) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -# define S_IXUSR _S_IEXEC -# ifndef _INTPTR_T_DEFINED -# define _INTPTR_T_DEFINED -# define intptr_t int -# endif -#elif defined(__MINGW32__) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -#elif defined(__CYGWIN__) -# define HAVE_SETENV -# define FOPEN_WB "wb" -/* #elif defined (other platforms) ... */ -#endif - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -/* path handling portability macros */ -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#if defined(LT_DEBUGWRAPPER) -static int lt_debug = 1; -#else -static int lt_debug = 0; -#endif - -const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_debugprintf (const char *file, int line, const char *fmt, ...); -void lt_fatal (const char *file, int line, const char *message, ...); -static const char *nonnull (const char *s); -static const char *nonempty (const char *s); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); -char **prepare_spawn (char **argv); -void lt_dump_script (FILE *f); -EOF - - cat <<EOF -volatile const char * MAGIC_EXE = "$magic_exe"; -const char * LIB_PATH_VARNAME = "$shlibpath_var"; -EOF - - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - func_to_host_path "$temp_rpath" - cat <<EOF -const char * LIB_PATH_VALUE = "$func_to_host_path_result"; -EOF - else - cat <<"EOF" -const char * LIB_PATH_VALUE = ""; -EOF - fi - - if test -n "$dllsearchpath"; then - func_to_host_path "$dllsearchpath:" - cat <<EOF -const char * EXE_PATH_VARNAME = "PATH"; -const char * EXE_PATH_VALUE = "$func_to_host_path_result"; -EOF - else - cat <<"EOF" -const char * EXE_PATH_VARNAME = ""; -const char * EXE_PATH_VALUE = ""; -EOF - fi - - if test "$fast_install" = yes; then - cat <<EOF -const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ -EOF - else - cat <<EOF -const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ -EOF - fi - - - cat <<"EOF" - -#define LTWRAPPER_OPTION_PREFIX "--lt-" - -static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; -static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; -static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; - -int -main (int argc, char *argv[]) -{ - char **newargz; - int newargc; - char *tmp_pathspec; - char *actual_cwrapper_path; - char *actual_cwrapper_name; - char *target_name; - char *lt_argv_zero; - intptr_t rval = 127; - - int i; - - program_name = (char *) xstrdup (base_name (argv[0])); - newargz = XMALLOC (char *, argc + 1); - - /* very simple arg parsing; don't want to rely on getopt - * also, copy all non cwrapper options to newargz, except - * argz[0], which is handled differently - */ - newargc=0; - for (i = 1; i < argc; i++) - { - if (strcmp (argv[i], dumpscript_opt) == 0) - { -EOF - case "$host" in - *mingw* | *cygwin* ) - # make stdout use "unix" line endings - echo " setmode(1,_O_BINARY);" - ;; - esac - - cat <<"EOF" - lt_dump_script (stdout); - return 0; - } - if (strcmp (argv[i], debug_opt) == 0) - { - lt_debug = 1; - continue; - } - if (strcmp (argv[i], ltwrapper_option_prefix) == 0) - { - /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX - namespace, but it is not one of the ones we know about and - have already dealt with, above (inluding dump-script), then - report an error. Otherwise, targets might begin to believe - they are allowed to use options in the LTWRAPPER_OPTION_PREFIX - namespace. The first time any user complains about this, we'll - need to make LTWRAPPER_OPTION_PREFIX a configure-time option - or a configure.ac-settable value. - */ - lt_fatal (__FILE__, __LINE__, - "unrecognized %s option: '%s'", - ltwrapper_option_prefix, argv[i]); - } - /* otherwise ... */ - newargz[++newargc] = xstrdup (argv[i]); - } - newargz[++newargc] = NULL; - -EOF - cat <<EOF - /* The GNU banner must be the first non-error debug message */ - lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); -EOF - cat <<"EOF" - lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); - lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); - - tmp_pathspec = find_executable (argv[0]); - if (tmp_pathspec == NULL) - lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); - lt_debugprintf (__FILE__, __LINE__, - "(main) found exe (before symlink chase) at: %s\n", - tmp_pathspec); - - actual_cwrapper_path = chase_symlinks (tmp_pathspec); - lt_debugprintf (__FILE__, __LINE__, - "(main) found exe (after symlink chase) at: %s\n", - actual_cwrapper_path); - XFREE (tmp_pathspec); - - actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); - strendzap (actual_cwrapper_path, actual_cwrapper_name); - - /* wrapper name transforms */ - strendzap (actual_cwrapper_name, ".exe"); - tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); - XFREE (actual_cwrapper_name); - actual_cwrapper_name = tmp_pathspec; - tmp_pathspec = 0; - - /* target_name transforms -- use actual target program name; might have lt- prefix */ - target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); - strendzap (target_name, ".exe"); - tmp_pathspec = lt_extend_str (target_name, ".exe", 1); - XFREE (target_name); - target_name = tmp_pathspec; - tmp_pathspec = 0; - - lt_debugprintf (__FILE__, __LINE__, - "(main) libtool target name: %s\n", - target_name); -EOF - - cat <<EOF - newargz[0] = - XMALLOC (char, (strlen (actual_cwrapper_path) + - strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); - strcpy (newargz[0], actual_cwrapper_path); - strcat (newargz[0], "$objdir"); - strcat (newargz[0], "/"); -EOF - - cat <<"EOF" - /* stop here, and copy so we don't have to do this twice */ - tmp_pathspec = xstrdup (newargz[0]); - - /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ - strcat (newargz[0], actual_cwrapper_name); - - /* DO want the lt- prefix here if it exists, so use target_name */ - lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); - XFREE (tmp_pathspec); - tmp_pathspec = NULL; -EOF - - case $host_os in - mingw*) - cat <<"EOF" - { - char* p; - while ((p = strchr (newargz[0], '\\')) != NULL) - { - *p = '/'; - } - while ((p = strchr (lt_argv_zero, '\\')) != NULL) - { - *p = '/'; - } - } -EOF - ;; - esac - - cat <<"EOF" - XFREE (target_name); - XFREE (actual_cwrapper_path); - XFREE (actual_cwrapper_name); - - lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ - lt_setenv ("DUALCASE", "1"); /* for MSK sh */ - /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must - be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) - because on Windows, both *_VARNAMEs are PATH but uninstalled - libraries must come first. */ - lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); - lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); - - lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", - nonnull (lt_argv_zero)); - for (i = 0; i < newargc; i++) - { - lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", - i, nonnull (newargz[i])); - } - -EOF - - case $host_os in - mingw*) - cat <<"EOF" - /* execv doesn't actually work on mingw as expected on unix */ - newargz = prepare_spawn (newargz); - rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); - if (rval == -1) - { - /* failed to start process */ - lt_debugprintf (__FILE__, __LINE__, - "(main) failed to launch target \"%s\": %s\n", - lt_argv_zero, nonnull (strerror (errno))); - return 127; - } - return rval; -EOF - ;; - *) - cat <<"EOF" - execv (lt_argv_zero, newargz); - return rval; /* =127, but avoids unused variable warning */ -EOF - ;; - esac - - cat <<"EOF" -} - -void * -xmalloc (size_t num) -{ - void *p = (void *) malloc (num); - if (!p) - lt_fatal (__FILE__, __LINE__, "memory exhausted"); - - return p; -} - -char * -xstrdup (const char *string) -{ - return string ? strcpy ((char *) xmalloc (strlen (string) + 1), - string) : NULL; -} - -const char * -base_name (const char *name) -{ - const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha ((unsigned char) name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - return base; -} - -int -check_executable (const char *path) -{ - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if ((stat (path, &st) >= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", - nonempty (wrapper)); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - lt_debugprintf (__FILE__, __LINE__, - "checking path component for symlinks: %s\n", - tmp_pathspec); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - lt_fatal (__FILE__, __LINE__, - "error accessing file \"%s\": %s", - tmp_pathspec, nonnull (strerror (errno))); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal (__FILE__, __LINE__, - "could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -void -lt_debugprintf (const char *file, int line, const char *fmt, ...) -{ - va_list args; - if (lt_debug) - { - (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); - } -} - -static void -lt_error_core (int exit_status, const char *file, - int line, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *file, int line, const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); - va_end (ap); -} - -static const char * -nonnull (const char *s) -{ - return s ? s : "(null)"; -} - -static const char * -nonempty (const char *s) -{ - return (s && !*s) ? "(empty)" : nonnull (s); -} - -void -lt_setenv (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_setenv) setting '%s' to '%s'\n", - nonnull (name), nonnull (value)); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -EOF - case $host_os in - mingw*) - cat <<"EOF" - -/* Prepares an argument vector before calling spawn(). - Note that spawn() does not by itself call the command interpreter - (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : - ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&v); - v.dwPlatformId == VER_PLATFORM_WIN32_NT; - }) ? "cmd.exe" : "command.com"). - Instead it simply concatenates the arguments, separated by ' ', and calls - CreateProcess(). We must quote the arguments since Win32 CreateProcess() - interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a - special way: - - Space and tab are interpreted as delimiters. They are not treated as - delimiters if they are surrounded by double quotes: "...". - - Unescaped double quotes are removed from the input. Their only effect is - that within double quotes, space and tab are treated like normal - characters. - - Backslashes not followed by double quotes are not special. - - But 2*n+1 backslashes followed by a double quote become - n backslashes followed by a double quote (n >= 0): - \" -> " - \\\" -> \" - \\\\\" -> \\" - */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -char ** -prepare_spawn (char **argv) -{ - size_t argc; - char **new_argv; - size_t i; - - /* Count number of arguments. */ - for (argc = 0; argv[argc] != NULL; argc++) - ; - - /* Allocate new argument vector. */ - new_argv = XMALLOC (char *, argc + 1); - - /* Put quoted arguments into the new argument vector. */ - for (i = 0; i < argc; i++) - { - const char *string = argv[i]; - - if (string[0] == '\0') - new_argv[i] = xstrdup ("\"\""); - else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) - { - int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); - size_t length; - unsigned int backslashes; - const char *s; - char *quoted_string; - char *p; - - length = 0; - backslashes = 0; - if (quote_around) - length++; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - length += backslashes + 1; - length++; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - length += backslashes + 1; - - quoted_string = XMALLOC (char, length + 1); - - p = quoted_string; - backslashes = 0; - if (quote_around) - *p++ = '"'; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - { - unsigned int j; - for (j = backslashes + 1; j > 0; j--) - *p++ = '\\'; - } - *p++ = c; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - { - unsigned int j; - for (j = backslashes; j > 0; j--) - *p++ = '\\'; - *p++ = '"'; - } - *p = '\0'; - - new_argv[i] = quoted_string; - } - else - new_argv[i] = (char *) string; - } - new_argv[argc] = NULL; - - return new_argv; -} -EOF - ;; - esac - - cat <<"EOF" -void lt_dump_script (FILE* f) -{ -EOF - func_emit_wrapper yes | - $SED -n -e ' -s/^\(.\{79\}\)\(..*\)/\1\ -\2/ -h -s/\([\\"]\)/\\\1/g -s/$/\\n/ -s/\([^\n]*\).*/ fputs ("\1", f);/p -g -D' - cat <<"EOF" -} -EOF -} -# end: func_emit_cwrapperexe_src - -# func_win32_import_lib_p ARG -# True if ARG is an import lib, as indicated by $file_magic_cmd -func_win32_import_lib_p () -{ - $opt_debug - case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in - *import*) : ;; - *) false ;; - esac -} - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - bindir= - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - bindir) - bindir="$arg" - prev= - continue - ;; - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - func_append dlfiles " $arg" - else - func_append dlprefiles " $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) func_append deplibs " $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# func_append moreargs " $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) func_append rpath " $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) func_append xrpath " $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - func_append weak_libs " $arg" - prev= - continue - ;; - xcclinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -bindir) - prev=bindir - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname "-L" '' "$arg" - if test -z "$func_stripname_result"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "* | *" $arg "*) - # Will only happen for absolute or sysroot arguments - ;; - *) - # Preserve sysroot, but never include relative directories - case $dir in - [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; - *) func_append deplibs " -L$dir" ;; - esac - func_append lib_search_path " $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) func_append dllsearchpath ":$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - func_append deplibs " System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - func_append deplibs " $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot|--sysroot) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) func_append new_inherited_linker_flags " $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - =*) - func_stripname '=' '' "$dir" - dir=$lt_sysroot$func_stripname_result - ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - func_append arg " $func_quote_for_eval_result" - func_append compiler_flags " $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append linker_flags " $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # Flags to be passed through unchanged, with rationale: - # -64, -mips[0-9] enable 64-bit mode for the SGI compiler - # -r[0-9][0-9]* specify processor for the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler - # +DA*, +DD* enable 64-bit mode for the HP compiler - # -q* compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* architecture-specific flags for GCC - # -F/path path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* profiling flags for GCC - # @file GCC response files - # -tp=* Portland pgcc target processor selection - # --sysroot=* for sysroot support - # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-flto*|-fwhopr*|-fuse-linker-plugin) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - func_append compiler_flags " $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - func_append objs " $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - func_append deplibs " $arg" - func_append old_deplibs " $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - func_resolve_sysroot "$arg" - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - func_append dlfiles " $func_resolve_sysroot_result" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - func_append dlprefiles " $func_resolve_sysroot_result" - prev= - else - func_append deplibs " $func_resolve_sysroot_result" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - func_to_tool_file "$output_objdir/" - tool_output_objdir=$func_to_tool_file_result - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_preserve_dup_deps ; then - case "$libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append libs " $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; - esac - func_append pre_post_deps " $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - func_resolve_sysroot "$lib" - case $lib in - *.la) func_source "$func_resolve_sysroot_result" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - func_basename "$deplib" - deplib_base=$func_basename_result - case " $weak_libs " in - *" $deplib_base "*) ;; - *) func_append deplibs " $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append compiler_flags " $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) - func_resolve_sysroot "$deplib" - lib=$func_resolve_sysroot_result - ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." - else - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - func_append newdlprefiles " $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append newdlfiles " $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && func_append dlfiles " $dlopen" - test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - func_append convenience " $ladir/$objdir/$old_library" - func_append old_convenience " $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - if test -n "$old_library" && - { test "$prefer_static_libs" = yes || - test "$prefer_static_libs,$installed" = "built,no"; }; then - linklib=$old_library - else - for l in $old_library $library_names; do - linklib="$l" - done - fi - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - func_append dlprefiles " $lib $dependency_libs" - else - func_append newdlfiles " $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$lt_sysroot$libdir" - absdir="$lt_sysroot$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - func_append notinst_path " $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - func_append notinst_path " $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - case "$host" in - # special handling for platforms with PE-DLLs. - *cygwin* | *mingw* | *cegcc* ) - # Linker will automatically link against shared library if both - # static and shared are present. Therefore, ensure we extract - # symbols from the import library if a shared library is present - # (otherwise, the dlopen module name will be incorrect). We do - # this by putting the import library name into $newdlprefiles. - # We recover the dlopen module name by 'saving' the la file - # name in a special purpose variable, and (later) extracting the - # dlname from the la file. - if test -n "$dlname"; then - func_tr_sh "$dir/$linklib" - eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" - func_append newdlprefiles " $dir/$linklib" - else - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - fi - ;; - * ) - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - func_append newdlprefiles " $dir/$dlname" - else - func_append newdlprefiles " $dir/$linklib" - fi - ;; - esac - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - func_append newlib_search_path " $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) func_append temp_rpath "$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - func_append notinst_deplibs " $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - func_append notinst_deplibs " $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - echo - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$opt_mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$absdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) func_append compile_shlibpath "$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$opt_mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system can not link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) func_append xrpath " $temp_xrpath";; - esac;; - *) func_append temp_deplibs " $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - func_append newlib_search_path " $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result";; - *) func_resolve_sysroot "$deplib" ;; - esac - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $func_resolve_sysroot_result "*) - func_append specialdeplibs " $func_resolve_sysroot_result" ;; - esac - fi - func_append tmp_libs " $func_resolve_sysroot_result" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_resolve_sysroot "$deplib" - deplib=$func_resolve_sysroot_result - func_dirname "$deplib" "" "." - dir=$func_dirname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) func_append lib_search_path " $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) func_append tmp_libs " $deplib" ;; - esac - ;; - *) func_append tmp_libs " $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - func_append tmp_libs " $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - func_append objs "$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - func_append libobjs " $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - # correct linux to gnu/linux during the next big refactor - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|qnx|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - *) - func_fatal_configuration "$modename: unknown library version type \`$version_type'" - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) # correct to gnu/linux during the next big refactor - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - func_append verstring ":${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - func_append libobjs " $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$opt_mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - func_append removelist " $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - func_append oldlibs " $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` - # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` - # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - func_replace_sysroot "$libdir" - func_append temp_xrpath " -R$func_replace_sysroot_result" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) func_append dlfiles " $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) func_append dlprefiles " $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - func_append deplibs " System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - func_append deplibs " -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c <<EOF - int main() { return 0; } -EOF - $opt_dry_run || $RM conftest - if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then - ldd_output=`ldd conftest` - for i in $deplibs; do - case $i in - -l*) - func_stripname -l '' "$i" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $i "*) - func_append newdeplibs " $i" - i="" - ;; - esac - fi - if test -n "$i" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` - set dummy $deplib_matches; shift - deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then - func_append newdeplibs " $i" - else - droppeddeps=yes - echo - $ECHO "*** Warning: dynamic linker does not accept needed library $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which I believe you do not have" - echo "*** because a test_compile did reveal that the linker did not use it for" - echo "*** its dynamic dependency list that programs get resolved with at runtime." - fi - fi - ;; - *) - func_append newdeplibs " $i" - ;; - esac - done - else - # Error occurred in the first compile. Let's try to salvage - # the situation: Compile a separate program for each library. - for i in $deplibs; do - case $i in - -l*) - func_stripname -l '' "$i" - name=$func_stripname_result - $opt_dry_run || $RM conftest - if $LTCC $LTCFLAGS -o conftest conftest.c $i; then - ldd_output=`ldd conftest` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $i "*) - func_append newdeplibs " $i" - i="" - ;; - esac - fi - if test -n "$i" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` - set dummy $deplib_matches; shift - deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then - func_append newdeplibs " $i" - else - droppeddeps=yes - echo - $ECHO "*** Warning: dynamic linker does not accept needed library $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because a test_compile did reveal that the linker did not use this one" - echo "*** as a dynamic dependency that programs can get resolved with at runtime." - fi - fi - else - droppeddeps=yes - echo - $ECHO "*** Warning! Library $i is needed by this library but I was not able to" - echo "*** make it link in! You will probably need to install it or some" - echo "*** library that it depends on before this library will be fully" - echo "*** functional. Installing it before continuing would be even better." - fi - ;; - *) - func_append newdeplibs " $i" - ;; - esac - done - fi - ;; - file_magic*) - set dummy $deplibs_check_method; shift - file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - if test -n "$file_magic_glob"; then - libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` - else - libnameglob=$libname - fi - test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - if test "$want_nocaseglob" = yes; then - shopt -s nocaseglob - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - $nocaseglob - else - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - fi - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` - done - fi - case $tmp_deplibs in - *[!\ \ ]*) - echo - if test "X$deplibs_check_method" = "Xnone"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - ;; - esac - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - # Remove ${wl} instances when linking with ld. - # FIXME: should test the right _cmds variable. - case $archive_cmds in - *\$LD\ *) wl= ;; - esac - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$opt_mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - func_replace_sysroot "$libdir" - libdir=$func_replace_sysroot_result - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append dep_rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - func_append linknames " $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - func_append delfiles " $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd1 in $cmds; do - IFS="$save_ifs" - # Take the normal branch if the nm_file_list_spec branch - # doesn't work or if tool conversion is not needed. - case $nm_file_list_spec~$to_tool_file_cmd in - *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) - try_normal_branch=yes - eval cmd=\"$cmd1\" - func_len " $cmd" - len=$func_len_result - ;; - *) - try_normal_branch=no - ;; - esac - if test "$try_normal_branch" = yes \ - && { test "$len" -lt "$max_cmd_len" \ - || test "$max_cmd_len" -le -1; } - then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - elif test -n "$nm_file_list_spec"; then - func_basename "$output" - output_la=$func_basename_result - save_libobjs=$libobjs - save_output=$output - output=${output_objdir}/${output_la}.nm - func_to_tool_file "$output" - libobjs=$nm_file_list_spec$func_to_tool_file_result - func_append delfiles " $output" - func_verbose "creating $NM input file list: $output" - for obj in $save_libobjs; do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > "$output" - eval cmd=\"$cmd1\" - func_show_eval "$cmd" 'exit $?' - output=$save_output - libobjs=$save_libobjs - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - func_append tmp_deplibs " $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - func_append linker_flags " $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$opt_mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - func_basename "$output" - output_la=$func_basename_result - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - echo ')' >> $output - func_append delfiles " $output" - func_to_tool_file "$output" - output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - func_append delfiles " $output" - func_to_tool_file "$output" - output=$firstobj\"$file_list_spec$func_to_tool_file_result\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - reload_objs=$objlist - eval concat_cmds=\"$reload_cmds\" - else - # All subsequent reloadable object files will link in - # the last one created. - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=" $obj" - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\${concat_cmds}$reload_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - func_append delfiles " $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # If we're not building shared, we need to use non_pic_objs - test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - func_append compile_command " ${wl}-bind_at_load" - func_append finalize_command " ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - func_append compile_command " $compile_deplibs" - func_append finalize_command " $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) func_append dllsearchpath ":$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) func_append finalize_perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cegcc* | *mingw32ce*) - # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=no - ;; - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - func_append rpath "$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output_objdir/$outputname" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - func_append oldobjs " $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $addlibs - func_append oldobjs " $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append oldobjs " $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - echo "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - func_append oldobjs " $gentop/$newobj" - ;; - *) func_append oldobjs " $obj" ;; - esac - done - fi - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - elif test -n "$archiver_list_spec"; then - func_verbose "using command file archive linking..." - for obj in $oldobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > $output_objdir/$libname.libcmd - func_to_tool_file "$output_objdir/$libname.libcmd" - oldobjs=" $archiver_list_spec$func_to_tool_file_result" - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - func_resolve_sysroot "$deplib" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" - ;; - -L*) - func_stripname -L '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -L$func_replace_sysroot_result" - ;; - -R*) - func_stripname -R '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -R$func_replace_sysroot_result" - ;; - *) func_append newdependency_libs " $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" - ;; - *) func_append newdlfiles " $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlfiles " $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlprefiles " $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - # In fact, it would be nice if we could use this code for all target - # systems that can't hard-code library paths into their executables - # and that have no shared library path variable independent of PATH, - # but it turns out we can't easily determine that from inspecting - # libtool variables, so we have to hard-code the OSs to which it - # applies here; at the moment, that means platforms that use the PE - # object format with DLL files. See the long comment at the top of - # tests/bindir.at for full details. - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) - # If a -bindir argument was supplied, place the dll there. - if test "x$bindir" != x ; - then - func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result$dlname - else - # Otherwise fall back on heuristic. - tdlname=../bin/$dlname - fi - ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$opt_mode" = link || test "$opt_mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) func_append RM " $arg"; rmforce=yes ;; - -*) func_append RM " $arg" ;; - *) func_append files " $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - odir="$objdir" - else - odir="$dir/$objdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$opt_mode" = uninstall && odir="$dir" - - # Remember odir for removal later, being careful to avoid duplicates - if test "$opt_mode" = clean; then - case " $rmdirs " in - *" $odir "*) ;; - *) func_append rmdirs " $odir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - func_append rmfiles " $odir/$n" - done - test -n "$old_library" && func_append rmfiles " $odir/$old_library" - - case "$opt_mode" in - clean) - case " $library_names " in - *" $dlname "*) ;; - *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; - esac - test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - func_append rmfiles " $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - func_append rmfiles " $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$opt_mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - func_append rmfiles " $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - func_append rmfiles " $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - func_append rmfiles " $odir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - func_append rmfiles " $odir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$opt_mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$opt_mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/src/thirdparty/protobuf-2.6.1/gtest/configure b/src/thirdparty/protobuf-2.6.1/gtest/configure deleted file mode 100644 index 9a36d861f..000000000 --- a/src/thirdparty/protobuf-2.6.1/gtest/configure +++ /dev/null @@ -1,18386 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Google C++ Testing Framework 1.6.0. -# -# Report bugs to <googletestframework@googlegroups.com>. -# -# -# Copyright (C) 1992-1996, 1998-2012 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 -if test -n "${ZSH_VERSION+set}" && (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 - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; 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 - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# 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'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_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="if test -n \"\${ZSH_VERSION+set}\" && (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 - 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 - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || 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 -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - 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 - test -z "$as_dir" && as_dir=. - 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_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - 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'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: googletestframework@googlegroups.com about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do 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_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=`$as_echo "$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 || -$as_echo 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_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_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# 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 - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$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 || -$as_echo 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" || - { $as_echo "$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 -} - -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 - -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'" - -SHELL=${CONFIG_SHELL-/bin/sh} - - -test -n "$DJDIR" || exec 7<&0 </dev/null -exec 6>&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='Google C++ Testing Framework' -PACKAGE_TARNAME='gtest' -PACKAGE_VERSION='1.6.0' -PACKAGE_STRING='Google C++ Testing Framework 1.6.0' -PACKAGE_BUGREPORT='googletestframework@googlegroups.com' -PACKAGE_URL='' - -ac_unique_file="./LICENSE" -# Factoring default headers for most tests. -ac_includes_default="\ -#include <stdio.h> -#ifdef HAVE_SYS_TYPES_H -# include <sys/types.h> -#endif -#ifdef HAVE_SYS_STAT_H -# include <sys/stat.h> -#endif -#ifdef STDC_HEADERS -# include <stdlib.h> -# include <stddef.h> -#else -# ifdef HAVE_STDLIB_H -# include <stdlib.h> -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include <memory.h> -# endif -# include <string.h> -#endif -#ifdef HAVE_STRINGS_H -# include <strings.h> -#endif -#ifdef HAVE_INTTYPES_H -# include <inttypes.h> -#endif -#ifdef HAVE_STDINT_H -# include <stdint.h> -#endif -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -HAVE_PTHREADS_FALSE -HAVE_PTHREADS_TRUE -PTHREAD_CFLAGS -PTHREAD_LIBS -PTHREAD_CC -acx_pthread_config -HAVE_PYTHON_FALSE -HAVE_PYTHON_TRUE -PYTHON -CXXCPP -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -MANIFEST_TOOL -RANLIB -ac_ct_AR -AR -DLLTOOL -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -LIBTOOL -am__fastdepCXX_FALSE -am__fastdepCXX_TRUE -CXXDEPMODE -ac_ct_CXX -CXXFLAGS -CXX -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -am__nodep -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -AM_DEFAULT_V -AM_V -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -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 -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_silent_rules -enable_dependency_tracking -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -with_sysroot -enable_libtool_lock -with_pthreads -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CXX -CXXFLAGS -CCC -CPP -CXXCPP' - - -# 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' -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 - - # Accept the important Cygnus configure options, so we can diagnose typos. - - 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=`$as_echo "$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=`$as_echo "$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 ;; - - -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=`$as_echo "$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=`$as_echo "$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. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$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" ;; - *) $as_echo "$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 -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 || -$as_echo 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 Google C++ Testing Framework 1.6.0 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] - --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/gtest] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -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 Google C++ Testing Framework 1.6.0:";; - 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] - --enable-silent-rules less verbose build output (undo: "make V=1") - --disable-silent-rules verbose build output (undo: "make V=0") - --enable-dependency-tracking - do not reject slow dependency extractors - --disable-dependency-tracking - speeds up one-time build - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-sysroot=DIR Search for dependent libraries within DIR - (or the compiler's sysroot if not specified). - --with-pthreads use pthreads (default is yes) - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a - nonstandard directory <lib dir> - LIBS libraries to pass to the linker, e.g. -l<library> - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if - you have headers in a nonstandard directory <include dir> - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CPP C preprocessor - CXXCPP C++ preprocessor - -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 <googletestframework@googlegroups.com>. -_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=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$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 guested configure. - 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 - $as_echo "$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 -Google C++ Testing Framework configure 1.6.0 -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 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 - 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\"" -$as_echo "$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 - $as_echo "$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_echo "$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_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - 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\"" -$as_echo "$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 - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$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_cxx_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$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\"" -$as_echo "$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 - $as_echo "$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_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 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 - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$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_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link 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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$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_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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case <limits.h> declares $2. - For example, HP-UX 11i <limits.h> declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - -#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 () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 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 - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$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_cxx_try_cpp - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext 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\"" -$as_echo "$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 - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_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_echo "$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_cxx_try_link -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 Google C++ Testing Framework $as_me 1.6.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_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 - test -z "$as_dir" && as_dir=. - $as_echo "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=`$as_echo "$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=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## 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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$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 - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$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 - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -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,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$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=`$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`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 - - - -# Provide various options to initialize the Autoconf and configure processes. - - - -ac_aux_dir= -for ac_dir in build-aux "$srcdir"/build-aux; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$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. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -ac_config_headers="$ac_config_headers build-aux/config.h" - -ac_config_files="$ac_config_files Makefile" - -ac_config_files="$ac_config_files scripts/gtest-config" - - -# Initialize Automake with various options. We require at least v1.9, prevent -# pedantic complaints about package files, and enable various distribution -# targets. -am__api_version='1.14' - -# 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. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -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+set}" = set; 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$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' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; -esac - -# Do 'set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - if test "$2" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi - -rm -f conftest.file - -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_STRIP="${ac_tool_prefix}strip" - $as_echo "$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 -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_STRIP="strip" - $as_echo "$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_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P 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. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_AWK="$ac_prog" - $as_echo "$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 -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in # ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=1;; -esac -am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } -if test $am_cv_make_support_nested_variables = yes; then - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AM_BACKSLASH='\' - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='gtest' - VERSION='1.6.0' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> -# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> -mkdir_p='$(MKDIR_P)' - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AMTAR='$${TAR-tar}' - - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar pax cpio none' - -am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' - - - - - - -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: <http://www.gnu.org/software/coreutils/>. - -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 - fi -fi - -# Check for programs used in building Google Test. -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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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. -$as_echo "$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; 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\"" -$as_echo "$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 - $as_echo "$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 () -{ - - ; - 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. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$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+set}" = set && 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 - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$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_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$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 <stdio.h> -int -main () -{ -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. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$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 - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - 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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$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_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - 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.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdarg.h> -#include <stdio.h> -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*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 don't provoke an error unfortunately, instead are silently treated - as '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's necessary to write '\x00'==0 to get something - that's 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 **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_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 - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -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 - -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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 - ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -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 - -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$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 -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_CXX="$ac_prog" - $as_echo "$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_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$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; 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\"" -$as_echo "$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 - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - 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 - -depcc="$CXX" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CXX_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.4.2' -macro_revision='1.3337' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -# 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 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$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 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$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 - - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "" -} - -case "$ECHO" in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_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 -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "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_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_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_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_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 - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "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_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_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_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break - ;; - *) - test "$with_gnu_ld" != yes && break - ;; - esac - fi - done - IFS="$lt_save_ifs" -else - lt_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$lt_cv_path_LD" -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - lt_cv_prog_gnu_ld=yes - ;; -*) - lt_cv_prog_gnu_ld=no - ;; -esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$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 -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_DUMPBIN="$ac_prog" - $as_echo "$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac - -fi - -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac - -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then - reload_cmds=false - fi - ;; - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$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 -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_OBJDUMP="objdump" - $as_echo "$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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$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 -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_DLLTOOL="dlltool" - $as_echo "$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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_AR="$ac_tool_prefix$ac_prog" - $as_echo "$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 -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_AR="$ac_prog" - $as_echo "$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_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -fi - -: ${AR=ar} -: ${AR_FLAGS=cru} - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_STRIP="${ac_tool_prefix}strip" - $as_echo "$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 -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_STRIP="strip" - $as_echo "$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_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$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 -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_RANLIB="ranlib" - $as_echo "$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_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } - -# Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : - withval=$with_sysroot; -else - with_sysroot=no -fi - - -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 -$as_echo "${with_sysroot}" >&6; } - as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 - ;; -esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } - - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - case `/usr/bin/file conftest.o` in - *x86-64*) - LD="${LD-ld} -m elf32_x86_64" - ;; - *) - LD="${LD-ld} -m elf_i386" - ;; - esac - ;; - powerpc64le-*) - LD="${LD-ld} -m elf32lppclinux" - ;; - powerpc64-*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - powerpcle-*) - LD="${LD-ld} -m elf64lppc" - ;; - powerpc-*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - 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 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. -set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MANIFEST_TOOL"; then - ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$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 -MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL -if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_MANIFEST_TOOL"; then - ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MANIFEST_TOOL"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_MANIFEST_TOOL="mt" - $as_echo "$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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL -if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_MANIFEST_TOOL" = x; then - MANIFEST_TOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL - fi -else - MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" -fi - -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&5 - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi - - - - - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$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 -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_DSYMUTIL="dsymutil" - $as_echo "$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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$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 -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_NMEDIT="nmedit" - $as_echo "$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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_LIPO="${ac_tool_prefix}lipo" - $as_echo "$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 -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_LIPO="lipo" - $as_echo "$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_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_OTOOL="${ac_tool_prefix}otool" - $as_echo "$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 -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_OTOOL="otool" - $as_echo "$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_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$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 -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_OTOOL64="otool64" - $as_echo "$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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&5 - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&5 - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -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 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=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 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "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 `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - -func_stripname_cnf () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname_cnf - - - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for lt_pkg in $withval; do - IFS="$lt_save_ifs" - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -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 - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; - *) - lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - lt_prog_compiler_wl='-Xlinker ' - if test -n "$lt_prog_compiler_pic"; then - lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - *Sun\ F* | *Sun*Fortran*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Intel*\ [CF]*Compiler*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - *Portland\ Group*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } -lt_prog_compiler_pic=$lt_cv_prog_compiler_pic - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu | gnu*) - link_all_deplibs=no - ;; - esac - - ld_shlibs=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; - *\ \(GNU\ Binutils\)\ [3-9]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='${wl}--export-all-symbols' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs=yes - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - link_all_deplibs=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - fi - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - always_export_symbols=yes - file_list_spec='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, )='true' - enable_shared_with_static_runtimes=yes - exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - old_postinstall_cmds='chmod 644 $oldlib' - postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - enable_shared_with_static_runtimes=yes - ;; - esac - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec='' - fi - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -b" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler__b=yes - fi - else - lt_cv_prog_compiler__b=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } - -if test x"$lt_cv_prog_compiler__b" = xyes; then - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -fi - - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo (void) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_irix_exported_symbol=yes -else - lt_cv_irix_exported_symbol=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test "$lt_cv_irix_exported_symbol" = yes; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([A-Za-z]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib<name>.so - # instead of lib<name>.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $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. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $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. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $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. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $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. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $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. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include <dlfcn.h> -#endif - -#include <stdio.h> - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include <dlfcn.h> -#endif - -#include <stdio.h> - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -CC="$lt_save_CC" - - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -else - _lt_caught_CXX_error=yes -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -compiler_needs_object_CXX=no -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_direct_absolute_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -inherit_rpath_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -reload_flag_CXX=$reload_flag -reload_cmds_CXX=$reload_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - - # save warnings/boilerplate of simple test code - ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - - ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - compiler_CXX=$CC - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' - else - lt_prog_compiler_no_builtin_flag_CXX= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break - ;; - *) - test "$with_gnu_ld" != yes && break - ;; - esac - fi - done - IFS="$lt_save_ifs" -else - lt_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$lt_cv_path_LD" -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - lt_cv_prog_gnu_ld=yes - ;; -*) - lt_cv_prog_gnu_ld=no - ;; -esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - ld_shlibs_CXX=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - file_list_spec_CXX='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec_CXX='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath__CXX -fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath__CXX -fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - fi - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_CXX=' ' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=yes - file_list_spec_CXX='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' - enable_shared_with_static_runtimes_CXX=yes - # Don't use ranlib - old_postinstall_cmds_CXX='chmod 644 $oldlib' - postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - - - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec_CXX='' - fi - link_all_deplibs_CXX=yes - allow_undefined_flag_CXX="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - if test "$lt_cv_apple_cc_single_mod" != "yes"; then - archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi - - else - ld_shlibs_CXX=no - fi - - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - ld_shlibs_CXX=no - ;; - - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - - haiku*) - archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs_CXX=yes - ;; - - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - inherit_rpath_CXX=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [1-5].* | *pgcpp\ [1-5].*) - prelink_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - old_archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object_CXX=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - ld_shlibs_CXX=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - hardcode_direct_absolute_CXX=yes - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - ld_shlibs_CXX=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - case $host in - osf3*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - ;; - *) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - ;; - esac - - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ - '"$old_archive_cmds_CXX" - reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ - '"$reload_cmds_CXX" - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } - test "$ld_shlibs_CXX" = no && can_build_shared=no - - GCC_CXX="$GXX" - LD_CXX="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - # Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF - - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - compiler_lib_search_dirs_CXX= -if test -n "${compiler_lib_search_path_CXX}"; then - compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic_CXX='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix[4-9]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-qpic' - lt_prog_compiler_static_CXX='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } -lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_CXX=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_CXX=yes - fi - else - lt_cv_prog_compiler_static_works_CXX=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then - : -else - lt_prog_compiler_static_CXX= -fi - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - case $host_os in - aix[4-9]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - ;; - esac - ;; - linux* | k*bsd*-gnu | gnu*) - link_all_deplibs_CXX=no - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -with_gnu_ld_CXX=$with_gnu_ld - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc_CXX=no - else - lt_cv_archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } - archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib<name>.so - # instead of lib<name>.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } - -if test "$hardcode_action_CXX" = relink || - test "$inherit_rpath_CXX" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - -# TODO(chandlerc@google.com): Currently we aren't running the Python tests -# against the interpreter detected by AM_PATH_PYTHON, and so we condition -# HAVE_PYTHON by requiring "python" to be in the PATH, and that interpreter's -# version to be >= 2.3. This will allow the scripts to use a "/usr/bin/env" -# hashbang. -PYTHON= # We *do not* allow the user to specify a python interpreter -# Extract the first word of "python", so it can be a program name with args. -set dummy python; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PYTHON in - [\\/]* | ?:[\\/]*) - ac_cv_path_PYTHON="$PYTHON" # 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 - test -z "$as_dir" && as_dir=. - 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_PYTHON="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$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_PYTHON" && ac_cv_path_PYTHON=":" - ;; -esac -fi -PYTHON=$ac_cv_path_PYTHON -if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "$PYTHON" != ":"; then : - prog="import sys -# split strings by '.' and convert to numeric. Append some zeros -# because we need at least 4 digits for the hex conversion. -# map returns an iterator in Python 3.0 and a list in 2.x -minver = list(map(int, '2.3'.split('.'))) + [0, 0, 0] -minverhex = 0 -# xrange is not present in Python 3.0 and range returns an iterator -for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] -sys.exit(sys.hexversion < minverhex)" - if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 - ($PYTHON -c "$prog") >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then : - : -else - PYTHON=":" -fi -fi - if test "$PYTHON" != ":"; then - HAVE_PYTHON_TRUE= - HAVE_PYTHON_FALSE='#' -else - HAVE_PYTHON_TRUE='#' - HAVE_PYTHON_FALSE= -fi - - -# Configure pthreads. - -# Check whether --with-pthreads was given. -if test "${with_pthreads+set}" = set; then : - withval=$with_pthreads; with_pthreads=$withval -else - with_pthreads=check -fi - - -have_pthreads=no -if test "x$with_pthreads" != "xno"; then : - - - -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 - -acx_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 -$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } - 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. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_join (); -int -main () -{ -return pthread_join (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - acx_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 -$as_echo "$acx_pthread_ok" >&6; } - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# ... -mt is also the pthreads flag for HP/aCC -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthreads/-mt/ - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - - case $flag in - none) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -$as_echo_n "checking whether pthreads work without any flags... " >&6; } - ;; - - -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 -$as_echo_n "checking whether pthreads work with $flag... " >&6; } - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - # Extract the first word of "pthread-config", so it can be a program name with args. -set dummy pthread-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_acx_pthread_config+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$acx_pthread_config"; then - ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_acx_pthread_config="yes" - $as_echo "$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_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" -fi -fi -acx_pthread_config=$ac_cv_prog_acx_pthread_config -if test -n "$acx_pthread_config"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 -$as_echo "$acx_pthread_config" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test x"$acx_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 -$as_echo_n "checking for the pthreads library -l$flag... " >&6; } - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - acx_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 -$as_echo "$acx_pthread_ok" >&6; } - if test "x$acx_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -$as_echo_n "checking for joinable pthread attribute... " >&6; } - attr_name=unknown - for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -int attr=$attr; return attr; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - attr_name=$attr; break -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 -$as_echo "$attr_name" >&6; } - if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - -cat >>confdefs.h <<_ACEOF -#define PTHREAD_CREATE_JOINABLE $attr_name -_ACEOF - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 -$as_echo_n "checking if more special flags are required for pthreads... " >&6; } - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 -$as_echo "${flag}" >&6; } - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - # More AIX lossage: must compile with xlc_r or cc_r - if test x"$GCC" != xyes; then - for ac_prog in xlc_r cc_r -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PTHREAD_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PTHREAD_CC"; then - ac_cv_prog_PTHREAD_CC="$PTHREAD_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 - test -z "$as_dir" && as_dir=. - 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_PTHREAD_CC="$ac_prog" - $as_echo "$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 -PTHREAD_CC=$ac_cv_prog_PTHREAD_CC -if test -n "$PTHREAD_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -$as_echo "$PTHREAD_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PTHREAD_CC" && break -done -test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" - - else - PTHREAD_CC=$CC - fi - - # The next part tries to detect GCC inconsistency with -shared on some - # architectures and systems. The problem is that in certain - # configurations, when -shared is specified, GCC "forgets" to - # internally use various flags which are still necessary. - - # - # Prepare the flags - # - save_CFLAGS="$CFLAGS" - save_LIBS="$LIBS" - save_CC="$CC" - - # Try with the flags determined by the earlier checks. - # - # -Wl,-z,defs forces link-time symbol resolution, so that the - # linking checks with -shared actually have any value - # - # FIXME: -fPIC is required for -shared on many architectures, - # so we specify it here, but the right way would probably be to - # properly detect whether it is actually required. - CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CC="$PTHREAD_CC" - - # In order not to create several levels of indentation, we test - # the value of "$done" until we find the cure or run out of ideas. - done="no" - - # First, make sure the CFLAGS we added are actually accepted by our - # compiler. If not (and OS X's ld, for instance, does not accept -z), - # then we can't do this test. - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to check for GCC pthread/shared inconsistencies" >&5 -$as_echo_n "checking whether to check for GCC pthread/shared inconsistencies... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -else - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - fi - - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -pthread is sufficient with -shared" >&5 -$as_echo_n "checking whether -pthread is sufficient with -shared... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - fi - - # - # Linux gcc on some architectures such as mips/mipsel forgets - # about -lpthread - # - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lpthread fixes that" >&5 -$as_echo_n "checking whether -lpthread fixes that... " >&6; } - LIBS="-lpthread $PTHREAD_LIBS $save_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PTHREAD_LIBS="-lpthread $PTHREAD_LIBS" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - fi - # - # FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc - # - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc_r fixes that" >&5 -$as_echo_n "checking whether -lc_r fixes that... " >&6; } - LIBS="-lc_r $PTHREAD_LIBS $save_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PTHREAD_LIBS="-lc_r $PTHREAD_LIBS" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - fi - if test x"$done" = xno; then - # OK, we have run out of ideas - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Impossible to determine how to use pthreads with shared libraries" >&5 -$as_echo "$as_me: WARNING: Impossible to determine how to use pthreads with shared libraries" >&2;} - - # so it's not safe to assume that we may use pthreads - acx_pthread_ok=no - fi - - CFLAGS="$save_CFLAGS" - LIBS="$save_LIBS" - CC="$save_CC" -else - PTHREAD_CC="$CC" -fi - - - - - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - -$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h - - : -else - acx_pthread_ok=no - if test "x$with_pthreads" != "xcheck"; then : - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "--with-pthreads was specified, but unable to be used -See \`config.log' for more details" "$LINENO" 5; } -fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - have_pthreads="$acx_pthread_ok" -fi - if test "x$have_pthreads" == "xyes"; then - HAVE_PTHREADS_TRUE= - HAVE_PTHREADS_FALSE='#' -else - HAVE_PTHREADS_TRUE='#' - HAVE_PTHREADS_FALSE= -fi - - - - -# TODO(chandlerc@google.com) Check for the necessary system headers. - -# TODO(chandlerc@google.com) Check the types, structures, and other compiler -# and architecture characteristics. - -# Output the generated files. No further autoconf macros may be used. -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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$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+set}" = set || &/ - 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$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=`$as_echo "$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 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_PYTHON_TRUE}" && test -z "${HAVE_PYTHON_FALSE}"; then - as_fn_error $? "conditional \"HAVE_PYTHON\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_PTHREADS_TRUE}" && test -z "${HAVE_PTHREADS_FALSE}"; then - as_fn_error $? "conditional \"HAVE_PTHREADS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$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 -if test -n "${ZSH_VERSION+set}" && (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 - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; 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 - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# 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 - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$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_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_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 || -$as_echo 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 - -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 - -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=`$as_echo "$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 || -$as_echo 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 Google C++ Testing Framework $as_me 1.6.0, which was -generated by GNU Autoconf 2.69. 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" -config_commands="$ac_config_commands" - -_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 - -Configuration commands: -$config_commands - -Report bugs to <googletestframework@googlegroups.com>." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -Google C++ Testing Framework config.status 1.6.0 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 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' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -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 ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$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=`$as_echo "$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 ) - $as_echo "$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 - \$as_echo "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 - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' -macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' -enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' -enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' -pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' -SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' -ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' -PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' -host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' -host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' -host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' -build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' -build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' -build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' -SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' -Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' -GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' -EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' -FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' -LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' -NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' -LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' -ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' -exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' -lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' -lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' -lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' -reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' -file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' -want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' -sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' -AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' -archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' -STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' -RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' -lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' -CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' -compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' -GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' -nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' -lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' -objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' -need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' -MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' -LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' -OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' -libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' -module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' -postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' -need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' -version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' -runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' -libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' -soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' -install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' -finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' -old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' -striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' -predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' -postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' -predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' -postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' -LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' -reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' -reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' -compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' -GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' -archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' -module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' -with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' -no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' -inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' -link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' -always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' -exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' -include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' -prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' -postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' -file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' -predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' -postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' -predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' -postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in SHELL \ -ECHO \ -PATH_SEPARATOR \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -file_magic_glob \ -want_nocaseglob \ -DLLTOOL \ -sharedlib_from_linklib_cmd \ -AR \ -AR_FLAGS \ -archiver_list_spec \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -nm_file_list_spec \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_pic \ -lt_prog_compiler_wl \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -MANIFEST_TOOL \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_separator \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -install_override_mode \ -finish_eval \ -old_striplib \ -striplib \ -compiler_lib_search_dirs \ -predep_objects \ -postdep_objects \ -predeps \ -postdeps \ -compiler_lib_search_path \ -LD_CXX \ -reload_flag_CXX \ -compiler_CXX \ -lt_prog_compiler_no_builtin_flag_CXX \ -lt_prog_compiler_pic_CXX \ -lt_prog_compiler_wl_CXX \ -lt_prog_compiler_static_CXX \ -lt_cv_prog_compiler_c_o_CXX \ -export_dynamic_flag_spec_CXX \ -whole_archive_flag_spec_CXX \ -compiler_needs_object_CXX \ -with_gnu_ld_CXX \ -allow_undefined_flag_CXX \ -no_undefined_flag_CXX \ -hardcode_libdir_flag_spec_CXX \ -hardcode_libdir_separator_CXX \ -exclude_expsyms_CXX \ -include_expsyms_CXX \ -file_list_spec_CXX \ -compiler_lib_search_dirs_CXX \ -predep_objects_CXX \ -postdep_objects_CXX \ -predeps_CXX \ -postdeps_CXX \ -compiler_lib_search_path_CXX; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postlink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec \ -reload_cmds_CXX \ -old_archive_cmds_CXX \ -old_archive_from_new_cmds_CXX \ -old_archive_from_expsyms_cmds_CXX \ -archive_cmds_CXX \ -archive_expsym_cmds_CXX \ -module_cmds_CXX \ -module_expsym_cmds_CXX \ -export_symbols_cmds_CXX \ -prelink_cmds_CXX \ -postlink_cmds_CXX; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - - - -_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 - "build-aux/config.h") CONFIG_HEADERS="$CONFIG_HEADERS build-aux/config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "scripts/gtest-config") CONFIG_FILES="$CONFIG_FILES scripts/gtest-config" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - - *) 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+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -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 2>/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 -' <conf$$subs.awk | sed ' -/^[^""]/{ - N - s/\n// -} -' >>$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 -' <confdefs.h | sed ' -s/'"$ac_delim"'/"\\\ -"/g' >>$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 :C $CONFIG_COMMANDS" -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=`$as_echo "$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 '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$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 || -$as_echo 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=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$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 - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - 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@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$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 -s&@MKDIR_P@&$ac_MKDIR_P&;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"; } && - { $as_echo "$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 -$as_echo "$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 - { - $as_echo "/* $configure_input */" \ - && 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$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 - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "scripts/gtest-config":F) chmod +x scripts/gtest-config ;; - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool 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 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="CXX " - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# The PATH separator for the build system. -PATH_SEPARATOR=$lt_PATH_SEPARATOR - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# convert \$build file names to \$host format. -to_host_file_cmd=$lt_cv_to_host_file_cmd - -# convert \$build files to toolchain format. -to_tool_file_cmd=$lt_cv_to_tool_file_cmd - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob=$lt_file_magic_glob - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob=$lt_want_nocaseglob - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd - -# The archiver. -AR=$lt_AR - -# Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS - -# How to feed a file listing to the archiver. -archiver_list_spec=$lt_archiver_list_spec - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# Specify filename containing input files for \$NM. -nm_file_list_spec=$lt_nm_file_list_spec - -# The root where to search for dependent libraries,and in which our libraries should be installed. -lt_sysroot=$lt_sysroot - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Manifest tool. -MANIFEST_TOOL=$lt_MANIFEST_TOOL - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects -postdep_objects=$lt_postdep_objects -predeps=$lt_predeps -postdeps=$lt_postdeps - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - if test x"$xsi_shell" = xyes; then - sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ -func_dirname ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_basename ()$/,/^} # func_basename /c\ -func_basename ()\ -{\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ -func_dirname_and_basename ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ -func_stripname ()\ -{\ -\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ -\ # positional parameters, so assign one to ordinary parameter first.\ -\ func_stripname_result=${3}\ -\ func_stripname_result=${func_stripname_result#"${1}"}\ -\ func_stripname_result=${func_stripname_result%"${2}"}\ -} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ -func_split_long_opt ()\ -{\ -\ func_split_long_opt_name=${1%%=*}\ -\ func_split_long_opt_arg=${1#*=}\ -} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ -func_split_short_opt ()\ -{\ -\ func_split_short_opt_arg=${1#??}\ -\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ -} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ -func_lo2o ()\ -{\ -\ case ${1} in\ -\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ -\ *) func_lo2o_result=${1} ;;\ -\ esac\ -} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_xform ()$/,/^} # func_xform /c\ -func_xform ()\ -{\ - func_xform_result=${1%.*}.lo\ -} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_arith ()$/,/^} # func_arith /c\ -func_arith ()\ -{\ - func_arith_result=$(( $* ))\ -} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_len ()$/,/^} # func_len /c\ -func_len ()\ -{\ - func_len_result=${#1}\ -} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - -fi - -if test x"$lt_shell_append" = xyes; then - sed -e '/^func_append ()$/,/^} # func_append /c\ -func_append ()\ -{\ - eval "${1}+=\\${2}"\ -} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ -func_append_quoted ()\ -{\ -\ func_quote_for_eval "${2}"\ -\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ -} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 -$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} -fi - - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - - cat <<_LT_EOF >> "$ofile" - -# ### BEGIN LIBTOOL TAG CONFIG: CXX - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# How to create reloadable object files. -reload_flag=$lt_reload_flag_CXX -reload_cmds=$lt_reload_cmds_CXX - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds_CXX - -# A language specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU compiler? -with_gcc=$GCC_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object_CXX - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld_CXX - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute_CXX - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath_CXX - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds_CXX - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds_CXX - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec_CXX - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects_CXX -postdep_objects=$lt_postdep_objects_CXX -predeps=$lt_predeps_CXX -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# ### END LIBTOOL TAG CONFIG: CXX -_LT_EOF - - ;; - - 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/src/thirdparty/protobuf-2.6.1/gtest/m4/libtool.m4 b/src/thirdparty/protobuf-2.6.1/gtest/m4/libtool.m4 deleted file mode 100644 index d7c043f4f..000000000 --- a/src/thirdparty/protobuf-2.6.1/gtest/m4/libtool.m4 +++ /dev/null @@ -1,7997 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# 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. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool 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 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 57 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl - -_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl -dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_WITH_SYSROOT])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PREPARE_SED_QUOTE_VARS -# -------------------------- -# Define a few sed substitution that help us do robust quoting. -m4_defun([_LT_PREPARE_SED_QUOTE_VARS], -[# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' -]) - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$[]1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -_LT_OUTPUT_LIBTOOL_INIT -]) - -# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) -# ------------------------------------ -# Generate a child script FILE with all initialization necessary to -# reuse the environment learned by the parent script, and make the -# file executable. If COMMENT is supplied, it is inserted after the -# `#!' sequence but before initialization text begins. After this -# macro, additional text can be appended to FILE to form the body of -# the child script. The macro ends with non-zero status if the -# file could not be fully written (such as if the disk is full). -m4_ifdef([AS_INIT_GENERATED], -[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], -[m4_defun([_LT_GENERATED_FILE_INIT], -[m4_require([AS_PREPARE])]dnl -[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl -[lt_write_fail=0 -cat >$1 <<_ASEOF || lt_write_fail=1 -#! $SHELL -# Generated by $as_me. -$2 -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$1 <<\_ASEOF || lt_write_fail=1 -AS_SHELL_SANITIZE -_AS_PREPARE -exec AS_MESSAGE_FD>&1 -_ASEOF -test $lt_write_fail = 0 && chmod +x $1[]dnl -m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], -[# Run this file to recreate a libtool stub with the current configuration.]) - -cat >>"$CONFIG_LT" <<\_LTEOF -lt_cl_silent=false -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to <bug-libtool@gnu.org>." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2011 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -lt_cl_success=: -test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" -exec AS_MESSAGE_LOG_FD>/dev/null -$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false -exec AS_MESSAGE_LOG_FD>>config.log -$lt_cl_success || AS_EXIT(1) -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_REPLACE_SHELLFNS - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Go], [_LT_LANG(GO)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -m4_ifndef([AC_PROG_GO], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_GO. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ -m4_defun([AC_PROG_GO], -[AC_LANG_PUSH(Go)dnl -AC_ARG_VAR([GOC], [Go compiler command])dnl -AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl -_AC_ARG_VAR_LDFLAGS()dnl -AC_CHECK_TOOL(GOC, gccgo) -if test -z "$GOC"; then - if test -n "$ac_tool_prefix"; then - AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) - fi -fi -if test -z "$GOC"; then - AC_CHECK_PROG(GOC, gccgo, gccgo, false) -fi -])#m4_defun -])#m4_ifndef - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([AC_PROG_GO], - [LT_LANG(GO)], - [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) -dnl AC_DEFUN([AC_LIBTOOL_RC], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - - AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], - [lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD - echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD - $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD - echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD - $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES([TAG]) -# --------------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], - [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) -# ---------------------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -# Store the results from the different compilers for each TAGNAME. -# Allow to override them for all tags through lt_cv_aix_libpath. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], - [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ - lt_aix_libpath_sed='[ - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }]' - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi],[]) - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" - fi - ]) - aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) -fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[m4_divert_text([M4SH-INIT], [$1 -])])# _LT_SHELL_INIT - - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Find how we can fake an echo command that does not interpret backslash. -# In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script which will find a shell with a builtin -# printf (which we can use as an echo command). -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -AC_MSG_CHECKING([how to print strings]) -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$[]1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -case "$ECHO" in - printf*) AC_MSG_RESULT([printf]) ;; - print*) AC_MSG_RESULT([print -r]) ;; - *) AC_MSG_RESULT([cat]) ;; -esac - -m4_ifdef([_AS_DETECT_SUGGESTED], -[_AS_DETECT_SUGGESTED([ - test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test "X`printf %s $ECHO`" = "X$ECHO" \ - || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) - -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_WITH_SYSROOT -# ---------------- -AC_DEFUN([_LT_WITH_SYSROOT], -[AC_MSG_CHECKING([for sysroot]) -AC_ARG_WITH([sysroot], -[ --with-sysroot[=DIR] Search for dependent libraries within DIR - (or the compiler's sysroot if not specified).], -[], [with_sysroot=no]) - -dnl lt_sysroot will always be passed unquoted. We quote it here -dnl in case the user passed a directory name. -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - AC_MSG_RESULT([${with_sysroot}]) - AC_MSG_ERROR([The sysroot must be an absolute path.]) - ;; -esac - - AC_MSG_RESULT([${lt_sysroot:-no}]) -_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl -[dependent libraries, and in which our libraries should be installed.])]) - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - case `/usr/bin/file conftest.o` in - *x86-64*) - LD="${LD-ld} -m elf32_x86_64" - ;; - *) - LD="${LD-ld} -m elf_i386" - ;; - esac - ;; - powerpc64le-*) - LD="${LD-ld} -m elf32lppclinux" - ;; - powerpc64-*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - powerpcle-*) - LD="${LD-ld} -m elf64lppc" - ;; - powerpc-*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_PROG_AR -# ----------- -m4_defun([_LT_PROG_AR], -[AC_CHECK_TOOLS(AR, [ar], false) -: ${AR=ar} -: ${AR_FLAGS=cru} -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) - -AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], - [lt_cv_ar_at_file=no - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - ]) - ]) - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi -_LT_DECL([], [archiver_list_spec], [1], - [How to feed a file listing to the archiver]) -])# _LT_PROG_AR - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[_LT_PROG_AR - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -_LT_DECL([], [lock_old_archive_extraction], [0], - [Whether to use a lock for old archive extraction]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include <dlfcn.h> -#endif - -#include <stdio.h> - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib<name>.so - # instead of lib<name>.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[23]].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[[3-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], - [lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [lt_cv_shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - ]) - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [install_override_mode], [1], - [Permission mode override for installation of shared libraries]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PROG_ECHO_BACKSLASH])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break - ;; - *) - test "$with_gnu_ld" != yes && break - ;; - esac - fi - done - IFS="$lt_save_ifs" -else - lt_cv_path_LD="$LD" # Let the user override the test with a path. -fi]) -LD="$lt_cv_path_LD" -if test -n "$LD"; then - AC_MSG_RESULT($LD) -else - AC_MSG_RESULT(no) -fi -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) -_LT_PATH_LD_GNU -AC_SUBST([LD]) - -_LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) -])# LT_PATH_LD - -# Old names: -AU_ALIAS([AM_PROG_LD], [LT_PATH_LD]) -AU_ALIAS([AC_PROG_LD], [LT_PATH_LD]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_LD], []) -dnl AC_DEFUN([AC_PROG_LD], []) - - -# _LT_PATH_LD_GNU -#- -------------- -m4_defun([_LT_PATH_LD_GNU], -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - lt_cv_prog_gnu_ld=yes - ;; -*) - lt_cv_prog_gnu_ld=no - ;; -esac]) -with_gnu_ld=$lt_cv_prog_gnu_ld -])# _LT_PATH_LD_GNU - - -# _LT_CMD_RELOAD -# -------------- -# find reload flag for linker -# -- PORTME Some linkers may need a different reload flag. -m4_defun([_LT_CMD_RELOAD], -[AC_CACHE_CHECK([for $LD option to reload object files], - lt_cv_ld_reload_flag, - [lt_cv_ld_reload_flag='-r']) -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then - reload_cmds=false - fi - ;; - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac -_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl -_LT_TAGDECL([], [reload_cmds], [2])dnl -])# _LT_CMD_RELOAD - - -# _LT_CHECK_MAGIC_METHOD -# ---------------------- -# how to check for library dependencies -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_MAGIC_METHOD], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -AC_CACHE_CHECK([how to recognize dependent libraries], -lt_cv_deplibs_check_method, -[lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[[4-9]]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[[45]]*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method = "file_magic"]) -_LT_DECL([], [file_magic_glob], [1], - [How to find potential files when deplibs_check_method = "file_magic"]) -_LT_DECL([], [want_nocaseglob], [1], - [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - -# _LT_CHECK_SHAREDLIB_FROM_LINKLIB -# -------------------------------- -# how to determine the name of the shared library -# associated with a specific link library. -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -m4_require([_LT_DECL_DLLTOOL]) -AC_CACHE_CHECK([how to associate runtime and link libraries], -lt_cv_sharedlib_from_linklib_cmd, -[lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac -]) -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - -_LT_DECL([], [sharedlib_from_linklib_cmd], [1], - [Command to associate shared and link libraries]) -])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB - - -# _LT_PATH_MANIFEST_TOOL -# ---------------------- -# locate the manifest tool -m4_defun([_LT_PATH_MANIFEST_TOOL], -[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], - [lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&AS_MESSAGE_LOG_FD - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest*]) -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi -_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl -])# _LT_PATH_MANIFEST_TOOL - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; - *) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; - esac - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT@&t@_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT@&t@_DLSYM_CONST -#else -# define LT@&t@_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT@&t@_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -_LT_DECL([], [nm_file_list_spec], [1], - [Specify filename containing input files for $NM]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' - if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - nagfor*) - # NAG Fortran compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - *Sun\ F* | *Sun*Fortran*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Intel*\ [[CF]]*Compiler*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - *Portland\ Group*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -AC_CACHE_CHECK([for $compiler option to produce PIC], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - ;; - esac - ;; - linux* | k*bsd*-gnu | gnu*) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu | gnu*) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; - *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - _LT_TAGVAR(link_all_deplibs, $1)=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - esac - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - m4_if($1, [], [ - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - _LT_LINKER_OPTION([if $CC understands -b], - _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], - [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], - [lt_cv_irix_exported_symbol], - [save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE( - [AC_LANG_SOURCE( - [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], - [C++], [[int foo (void) { return 0; }]], - [Fortran 77], [[ - subroutine foo - end]], - [Fortran], [[ - subroutine foo - end]])])], - [lt_cv_irix_exported_symbol=yes], - [lt_cv_irix_exported_symbol=no]) - LDFLAGS="$save_LDFLAGS"]) - if test "$lt_cv_irix_exported_symbol" = yes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_CACHE_CHECK([whether -lc should be explicitly linked in], - [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), - [$RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - ]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [postlink_cmds], [2], - [Commands necessary for finishing linking programs]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ - '"$_LT_TAGVAR(old_archive_cmds, $1)" - _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_FUNC_STRIPNAME_CNF -# ---------------------- -# func_stripname_cnf prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# -# This function is identical to the (non-XSI) version of func_stripname, -# except this one can be used by m4 code that may be executed by configure, -# rather than the libtool script. -m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl -AC_REQUIRE([_LT_DECL_SED]) -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) -func_stripname_cnf () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname_cnf -])# _LT_FUNC_STRIPNAME_CNF - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF -package foo -func foo() { -} -_LT_EOF -]) - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${F77-"f77"} - CFLAGS=$FFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" - CFLAGS="$lt_save_CFLAGS" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_LANG_PUSH(Fortran) - -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${FC-"f95"} - CFLAGS=$FCFLAGS - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -CFLAGS=$GCJFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_GO_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Go compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GO_CONFIG], -[AC_REQUIRE([LT_PROG_GO])dnl -AC_LANG_SAVE - -# Source file extension for Go test sources. -ac_ext=go - -# Object file extension for compiled Go test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="package main; func main() { }" - -# Code to be used in simple link tests -lt_simple_link_test_code='package main; func main() { }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GOC-"gccgo"} -CFLAGS=$GOFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# Go did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GO_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -CFLAGS= -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_GO -# ---------- -AC_DEFUN([LT_PROG_GO], -[AC_CHECK_TOOL(GOC, gccgo,) -]) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - -# _LT_DECL_DLLTOOL -# ---------------- -# Ensure DLLTOOL variable is set. -m4_defun([_LT_DECL_DLLTOOL], -[AC_CHECK_TOOL(DLLTOOL, dlltool, false) -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) -AC_SUBST([DLLTOOL]) -]) - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) -# ------------------------------------------------------ -# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and -# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. -m4_defun([_LT_PROG_FUNCTION_REPLACE], -[dnl { -sed -e '/^$1 ()$/,/^} # $1 /c\ -$1 ()\ -{\ -m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) -} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: -]) - - -# _LT_PROG_REPLACE_SHELLFNS -# ------------------------- -# Replace existing portable implementations of several shell functions with -# equivalent extended shell implementations where those features are available.. -m4_defun([_LT_PROG_REPLACE_SHELLFNS], -[if test x"$xsi_shell" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl - func_split_long_opt_name=${1%%=*} - func_split_long_opt_arg=${1#*=}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) - - _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) - - _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) - - _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) -fi - -if test x"$lt_shell_append" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) - - _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl - func_quote_for_eval "${2}" -dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ - eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) -fi -]) - -# _LT_PATH_CONVERSION_FUNCTIONS -# ----------------------------- -# Determine which file name conversion functions should be used by -# func_to_host_file (and, implicitly, by func_to_host_path). These are needed -# for certain cross-compile configurations and native mingw. -m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_MSG_CHECKING([how to convert $build file names to $host format]) -AC_CACHE_VAL(lt_cv_to_host_file_cmd, -[case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac -]) -to_host_file_cmd=$lt_cv_to_host_file_cmd -AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) -_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], - [0], [convert $build file names to $host format])dnl - -AC_MSG_CHECKING([how to convert $build file names to toolchain format]) -AC_CACHE_VAL(lt_cv_to_tool_file_cmd, -[#assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac -]) -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) -_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], - [0], [convert $build files to toolchain format])dnl -])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/src/thirdparty/protobuf-2.6.1/gtest/m4/ltoptions.m4 b/src/thirdparty/protobuf-2.6.1/gtest/m4/ltoptions.m4 deleted file mode 100644 index 5d9acd8e2..000000000 --- a/src/thirdparty/protobuf-2.6.1/gtest/m4/ltoptions.m4 +++ /dev/null @@ -1,384 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# Written by Gary V. Vaughan, 2004 -# -# 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. - -# serial 7 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [1], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for lt_pkg in $withval; do - IFS="$lt_save_ifs" - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/src/thirdparty/protobuf-2.6.1/gtest/m4/ltversion.m4 b/src/thirdparty/protobuf-2.6.1/gtest/m4/ltversion.m4 deleted file mode 100644 index 07a8602d4..000000000 --- a/src/thirdparty/protobuf-2.6.1/gtest/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# 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. - -# @configure_input@ - -# serial 3337 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.4.2]) -m4_define([LT_PACKAGE_REVISION], [1.3337]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.2' -macro_revision='1.3337' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/src/thirdparty/protobuf-2.6.1/ltmain.sh b/src/thirdparty/protobuf-2.6.1/ltmain.sh deleted file mode 100644 index a356acafa..000000000 --- a/src/thirdparty/protobuf-2.6.1/ltmain.sh +++ /dev/null @@ -1,9661 +0,0 @@ - -# libtool (GNU libtool) 2.4.2 -# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010, 2011 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. - -# GNU Libtool 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 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --no-quiet, --no-silent -# print informational messages (default) -# --no-warn don't display warning messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print more informational messages than default -# --no-verbose don't print the extra informational messages -# --version print version information -# -h, --help, --help-all print short, long, or detailed help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. When passed as first option, -# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to <bug-libtool@gnu.org>. -# GNU libtool home page: <http://www.gnu.org/software/libtool/>. -# General help using GNU software: <http://www.gnu.org/gethelp/>. - -PROGRAM=libtool -PACKAGE=libtool -VERSION="2.4.2 Debian-2.4.2-1.7ubuntu1" -TIMESTAMP="" -package_revision=1.3337 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# NLS nuisances: We save the old values to restore during execute mode. -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done -LC_ALL=C -LANGUAGE=C -export LANGUAGE LC_ALL - -$lt_unset CDPATH - - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - - - -: ${CP="cp -f"} -test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} # func_dirname may be replaced by extended shell implementation - - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} # func_basename may be replaced by extended shell implementation - - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} # func_dirname_and_basename may be replaced by extended shell implementation - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname may be replaced by extended shell implementation - - -# These SED scripts presuppose an absolute path with a trailing slash. -pathcar='s,^/\([^/]*\).*$,\1,' -pathcdr='s,^/[^/]*,,' -removedotparts=':dotsl - s@/\./@/@g - t dotsl - s,/\.$,/,' -collapseslashes='s@/\{1,\}@/@g' -finalslash='s,/*$,/,' - -# func_normal_abspath PATH -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -# value returned in "$func_normal_abspath_result" -func_normal_abspath () -{ - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` - while :; do - # Processed it all yet? - if test "$func_normal_abspath_tpath" = / ; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result" ; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - -# func_relative_path SRCDIR DSTDIR -# generates a relative path from SRCDIR to DSTDIR, with a trailing -# slash if non-empty, suitable for immediately appending a filename -# without needing to append a separator. -# value returned in "$func_relative_path_result" -func_relative_path () -{ - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=${func_dirname_result} - if test "x$func_relative_path_tlibdir" = x ; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done - - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test "x$func_stripname_result" != x ; then - func_relative_path_result=${func_relative_path_result}/${func_stripname_result} - fi - - # Normalisation. If bindir is libdir, return empty string, - # else relative path ending with a slash; either way, target - # file name can be directly appended. - if test ! -z "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result/" - func_relative_path_result=$func_stripname_result - fi -} - -# The name of this program: -func_dirname_and_basename "$progpath" -progname=$func_basename_result - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=${PATH_SEPARATOR-:} - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' - -# Sed substitution that converts a w32 file name or path -# which contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }$*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` - done - my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "$my_tmpdir" -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "$1" | $SED \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - -# func_tr_sh -# Turn $1 into a string suitable for a shell variable name. -# Result is stored in $func_tr_sh_result. All characters -# not in the set a-zA-Z0-9_ are replaced with '_'. Further, -# if $1 begins with a digit, a '_' is prepended as well. -func_tr_sh () -{ - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac -} - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $opt_debug - - $SED -n '/(C)/!b go - :more - /\./!{ - N - s/\n# / / - b more - } - :go - /^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $opt_debug - - $SED -n '/^# Usage:/,/^# *.*--help/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - echo - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help [NOEXIT] -# Echo long help message to standard output and exit, -# unless 'noexit' is passed as argument. -func_help () -{ - $opt_debug - - $SED -n '/^# Usage:/,/# Report bugs to/ { - :print - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ - p - d - } - /^# .* home page:/b print - /^# General help using/b print - ' < "$progpath" - ret=$? - if test -z "$1"; then - exit $ret - fi -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - $opt_debug - - func_error "missing argument for $1." - exit_cmd=exit -} - - -# func_split_short_opt shortopt -# Set func_split_short_opt_name and func_split_short_opt_arg shell -# variables after splitting SHORTOPT after the 2nd character. -func_split_short_opt () -{ - my_sed_short_opt='1s/^\(..\).*$/\1/;q' - my_sed_short_rest='1s/^..\(.*\)$/\1/;q' - - func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` - func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` -} # func_split_short_opt may be replaced by extended shell implementation - - -# func_split_long_opt longopt -# Set func_split_long_opt_name and func_split_long_opt_arg shell -# variables after splitting LONGOPT at the `=' sign. -func_split_long_opt () -{ - my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' - my_sed_long_arg='1s/^--[^=]*=//' - - func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` - func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` -} # func_split_long_opt may be replaced by extended shell implementation - -exit_cmd=: - - - - - -magic="%%%MAGIC variable%%%" -magic_exe="%%%MAGIC EXE variable%%%" - -# Global variables. -nonopt= -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "${1}=\$${1}\${2}" -} # func_append may be replaced by extended shell implementation - -# func_append_quoted var value -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -func_append_quoted () -{ - func_quote_for_eval "${2}" - eval "${1}=\$${1}\\ \$func_quote_for_eval_result" -} # func_append_quoted may be replaced by extended shell implementation - - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "${@}"` -} # func_arith may be replaced by extended shell implementation - - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` -} # func_len may be replaced by extended shell implementation - - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} # func_lo2o may be replaced by extended shell implementation - - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} # func_xform may be replaced by extended shell implementation - - -# func_fatal_configuration arg... -# Echo program name prefixed message to standard error, followed by -# a configuration failure hint, and exit. -func_fatal_configuration () -{ - func_error ${1+"$@"} - func_error "See the $PACKAGE documentation for more information." - func_fatal_error "Fatal configuration error." -} - - -# func_config -# Display the configuration for all the tags in this script. -func_config () -{ - re_begincf='^# ### BEGIN LIBTOOL' - re_endcf='^# ### END LIBTOOL' - - # Default configuration. - $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - - # Now print the configurations for the tags. - for tagname in $taglist; do - $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" - done - - exit $? -} - -# func_features -# Display the features supported by this script. -func_features () -{ - echo "host: $host" - if test "$build_libtool_libs" = yes; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - - exit $? -} - -# func_enable_tag tagname -# Verify that TAGNAME is valid, and either flag an error and exit, or -# enable the TAGNAME tag. We also add TAGNAME to the global $taglist -# variable here. -func_enable_tag () -{ - # Global variable: - tagname="$1" - - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf="/$re_begincf/,/$re_endcf/p" - - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac - - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; - *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -# Shorthand for --mode=foo, only valid as the first argument -case $1 in -clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; -compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; -execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; -finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; -install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; -link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; -uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; -esac - - - -# Option defaults: -opt_debug=: -opt_dry_run=false -opt_config=false -opt_preserve_dup_deps=false -opt_features=false -opt_finish=false -opt_help=false -opt_help_all=false -opt_silent=: -opt_warning=: -opt_verbose=: -opt_silent=false -opt_verbose=false - - -# Parse options once, thoroughly. This comes as soon as possible in the -# script to make things like `--version' happen as quickly as we can. -{ - # this just eases exit handling - while test $# -gt 0; do - opt="$1" - shift - case $opt in - --debug|-x) opt_debug='set -x' - func_echo "enabling shell trace mode" - $opt_debug - ;; - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - --config) - opt_config=: -func_config - ;; - --dlopen|-dlopen) - optarg="$1" - opt_dlopen="${opt_dlopen+$opt_dlopen -}$optarg" - shift - ;; - --preserve-dup-deps) - opt_preserve_dup_deps=: - ;; - --features) - opt_features=: -func_features - ;; - --finish) - opt_finish=: -set dummy --mode finish ${1+"$@"}; shift - ;; - --help) - opt_help=: - ;; - --help-all) - opt_help_all=: -opt_help=': help-all' - ;; - --mode) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_mode="$optarg" -case $optarg in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; -esac - shift - ;; - --no-silent|--no-quiet) - opt_silent=false -func_append preserve_args " $opt" - ;; - --no-warning|--no-warn) - opt_warning=false -func_append preserve_args " $opt" - ;; - --no-verbose) - opt_verbose=false -func_append preserve_args " $opt" - ;; - --silent|--quiet) - opt_silent=: -func_append preserve_args " $opt" - opt_verbose=false - ;; - --verbose|-v) - opt_verbose=: -func_append preserve_args " $opt" -opt_silent=false - ;; - --tag) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_tag="$optarg" -func_append preserve_args " $opt $optarg" -func_enable_tag "$optarg" - shift - ;; - - -\?|-h) func_usage ;; - --help) func_help ;; - --version) func_version ;; - - # Separate optargs to long options: - --*=*) - func_split_long_opt "$opt" - set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-n*|-v*) - func_split_short_opt "$opt" - set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognized option \`$opt'" ;; - *) set dummy "$opt" ${1+"$@"}; shift; break ;; - esac - done - - # Validate options: - - # save first non-option argument - if test "$#" -gt 0; then - nonopt="$opt" - shift - fi - - # preserve --debug - test "$opt_debug" = : || func_append preserve_args " --debug" - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - - $opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test "$opt_mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$opt_mode' for more information." - } - - - # Bail if the options were screwed - $exit_cmd $EXIT_FAILURE -} - - - - -## ----------- ## -## Main. ## -## ----------- ## - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_resolve_sysroot PATH -# Replace a leading = in PATH with a sysroot. Store the result into -# func_resolve_sysroot_result -func_resolve_sysroot () -{ - func_resolve_sysroot_result=$1 - case $func_resolve_sysroot_result in - =*) - func_stripname '=' '' "$func_resolve_sysroot_result" - func_resolve_sysroot_result=$lt_sysroot$func_stripname_result - ;; - esac -} - -# func_replace_sysroot PATH -# If PATH begins with the sysroot, replace it with = and -# store the result into func_replace_sysroot_result. -func_replace_sysroot () -{ - case "$lt_sysroot:$1" in - ?*:"$lt_sysroot"*) - func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result="=$func_stripname_result" - ;; - *) - # Including no sysroot. - func_replace_sysroot_result=$1 - ;; - esac -} - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case "$@ " in - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T <<EOF -# $write_libobj - a libtool object file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# Name of the PIC object. -pic_object=$write_lobj - -# Name of the non-PIC object -non_pic_object=$write_oldobj - -EOF - $MV "${write_libobj}T" "${write_libobj}" - } -} - - -################################################## -# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # -################################################## - -# func_convert_core_file_wine_to_w32 ARG -# Helper function used by file name conversion functions when $build is *nix, -# and $host is mingw, cygwin, or some other w32 environment. Relies on a -# correctly configured wine environment available, with the winepath program -# in $build's $PATH. -# -# ARG is the $build file name to be converted to w32 format. -# Result is available in $func_convert_core_file_wine_to_w32_result, and will -# be empty on error (or when ARG is empty) -func_convert_core_file_wine_to_w32 () -{ - $opt_debug - func_convert_core_file_wine_to_w32_result="$1" - if test -n "$1"; then - # Unfortunately, winepath does not exit with a non-zero error code, so we - # are forced to check the contents of stdout. On the other hand, if the - # command is not found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both error code of - # zero AND non-empty stdout, which explains the odd construction: - func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then - func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$lt_sed_naive_backslashify"` - else - func_convert_core_file_wine_to_w32_result= - fi - fi -} -# end: func_convert_core_file_wine_to_w32 - - -# func_convert_core_path_wine_to_w32 ARG -# Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. -# -# ARG is path to be converted from $build format to win32. -# Result is available in $func_convert_core_path_wine_to_w32_result. -# Unconvertible file (directory) names in ARG are skipped; if no directory names -# are convertible, then the result may be empty. -func_convert_core_path_wine_to_w32 () -{ - $opt_debug - # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result="" - if test -n "$1"; then - oldIFS=$IFS - IFS=: - for func_convert_core_path_wine_to_w32_f in $1; do - IFS=$oldIFS - func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result" ; then - if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" - else - func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" - fi - fi - done - IFS=$oldIFS - fi -} -# end: func_convert_core_path_wine_to_w32 - - -# func_cygpath ARGS... -# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when -# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) -# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or -# (2), returns the Cygwin file name or path in func_cygpath_result (input -# file name or path is assumed to be in w32 format, as previously converted -# from $build's *nix or MSYS format). In case (3), returns the w32 file name -# or path in func_cygpath_result (input file name or path is assumed to be in -# Cygwin format). Returns an empty string on error. -# -# ARGS are passed to cygpath, with the last one being the file name or path to -# be converted. -# -# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH -# environment variable; do not put it in $PATH. -func_cygpath () -{ - $opt_debug - if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then - func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` - if test "$?" -ne 0; then - # on failure, ensure result is empty - func_cygpath_result= - fi - else - func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" - fi -} -#end: func_cygpath - - -# func_convert_core_msys_to_w32 ARG -# Convert file name or path ARG from MSYS format to w32 format. Return -# result in func_convert_core_msys_to_w32_result. -func_convert_core_msys_to_w32 () -{ - $opt_debug - # awkward: cmd appends spaces to result - func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` -} -#end: func_convert_core_msys_to_w32 - - -# func_convert_file_check ARG1 ARG2 -# Verify that ARG1 (a file name in $build format) was converted to $host -# format in ARG2. Otherwise, emit an error message, but continue (resetting -# func_to_host_file_result to ARG1). -func_convert_file_check () -{ - $opt_debug - if test -z "$2" && test -n "$1" ; then - func_error "Could not determine host file name corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_file_result="$1" - fi -} -# end func_convert_file_check - - -# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH -# Verify that FROM_PATH (a path in $build format) was converted to $host -# format in TO_PATH. Otherwise, emit an error message, but continue, resetting -# func_to_host_file_result to a simplistic fallback value (see below). -func_convert_path_check () -{ - $opt_debug - if test -z "$4" && test -n "$3"; then - func_error "Could not determine the host path corresponding to" - func_error " \`$3'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This is a deliberately simplistic "conversion" and - # should not be "improved". See libtool.info. - if test "x$1" != "x$2"; then - lt_replace_pathsep_chars="s|$1|$2|g" - func_to_host_path_result=`echo "$3" | - $SED -e "$lt_replace_pathsep_chars"` - else - func_to_host_path_result="$3" - fi - fi -} -# end func_convert_path_check - - -# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG -# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT -# and appending REPL if ORIG matches BACKPAT. -func_convert_path_front_back_pathsep () -{ - $opt_debug - case $4 in - $1 ) func_to_host_path_result="$3$func_to_host_path_result" - ;; - esac - case $4 in - $2 ) func_append func_to_host_path_result "$3" - ;; - esac -} -# end func_convert_path_front_back_pathsep - - -################################################## -# $build to $host FILE NAME CONVERSION FUNCTIONS # -################################################## -# invoked via `$to_host_file_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# Result will be available in $func_to_host_file_result. - - -# func_to_host_file ARG -# Converts the file name ARG from $build format to $host format. Return result -# in func_to_host_file_result. -func_to_host_file () -{ - $opt_debug - $to_host_file_cmd "$1" -} -# end func_to_host_file - - -# func_to_tool_file ARG LAZY -# converts the file name ARG from $build format to toolchain format. Return -# result in func_to_tool_file_result. If the conversion in use is listed -# in (the comma separated) LAZY, no conversion takes place. -func_to_tool_file () -{ - $opt_debug - case ,$2, in - *,"$to_tool_file_cmd",*) - func_to_tool_file_result=$1 - ;; - *) - $to_tool_file_cmd "$1" - func_to_tool_file_result=$func_to_host_file_result - ;; - esac -} -# end func_to_tool_file - - -# func_convert_file_noop ARG -# Copy ARG to func_to_host_file_result. -func_convert_file_noop () -{ - func_to_host_file_result="$1" -} -# end func_convert_file_noop - - -# func_convert_file_msys_to_w32 ARG -# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_file_result. -func_convert_file_msys_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_to_host_file_result="$func_convert_core_msys_to_w32_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_w32 - - -# func_convert_file_cygwin_to_w32 ARG -# Convert file name ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_file_cygwin_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - # because $build is cygwin, we call "the" cygpath in $PATH; no need to use - # LT_CYGPATH in this case. - func_to_host_file_result=`cygpath -m "$1"` - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_cygwin_to_w32 - - -# func_convert_file_nix_to_w32 ARG -# Convert file name ARG from *nix to w32 format. Requires a wine environment -# and a working winepath. Returns result in func_to_host_file_result. -func_convert_file_nix_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_w32 - - -# func_convert_file_msys_to_cygwin ARG -# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_file_msys_to_cygwin () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result="$func_cygpath_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_cygwin - - -# func_convert_file_nix_to_cygwin ARG -# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed -# in a wine environment, working winepath, and LT_CYGPATH set. Returns result -# in func_to_host_file_result. -func_convert_file_nix_to_cygwin () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. - func_convert_core_file_wine_to_w32 "$1" - func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result="$func_cygpath_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_cygwin - - -############################################# -# $build to $host PATH CONVERSION FUNCTIONS # -############################################# -# invoked via `$to_host_path_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# The result will be available in $func_to_host_path_result. -# -# Path separators are also converted from $build format to $host format. If -# ARG begins or ends with a path separator character, it is preserved (but -# converted to $host format) on output. -# -# All path conversion functions are named using the following convention: -# file name conversion function : func_convert_file_X_to_Y () -# path conversion function : func_convert_path_X_to_Y () -# where, for any given $build/$host combination the 'X_to_Y' value is the -# same. If conversion functions are added for new $build/$host combinations, -# the two new functions must follow this pattern, or func_init_to_host_path_cmd -# will break. - - -# func_init_to_host_path_cmd -# Ensures that function "pointer" variable $to_host_path_cmd is set to the -# appropriate value, based on the value of $to_host_file_cmd. -to_host_path_cmd= -func_init_to_host_path_cmd () -{ - $opt_debug - if test -z "$to_host_path_cmd"; then - func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd="func_convert_path_${func_stripname_result}" - fi -} - - -# func_to_host_path ARG -# Converts the path ARG from $build format to $host format. Return result -# in func_to_host_path_result. -func_to_host_path () -{ - $opt_debug - func_init_to_host_path_cmd - $to_host_path_cmd "$1" -} -# end func_to_host_path - - -# func_convert_path_noop ARG -# Copy ARG to func_to_host_path_result. -func_convert_path_noop () -{ - func_to_host_path_result="$1" -} -# end func_convert_path_noop - - -# func_convert_path_msys_to_w32 ARG -# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_path_result. -func_convert_path_msys_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # Remove leading and trailing path separator characters from ARG. MSYS - # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; - # and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_msys_to_w32_result" - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_msys_to_w32 - - -# func_convert_path_cygwin_to_w32 ARG -# Convert path ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_path_cygwin_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_cygwin_to_w32 - - -# func_convert_path_nix_to_w32 ARG -# Convert path ARG from *nix to w32 format. Requires a wine environment and -# a working winepath. Returns result in func_to_host_file_result. -func_convert_path_nix_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_nix_to_w32 - - -# func_convert_path_msys_to_cygwin ARG -# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_path_msys_to_cygwin () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result="$func_cygpath_result" - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_msys_to_cygwin - - -# func_convert_path_nix_to_cygwin ARG -# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a -# a wine environment, working winepath, and LT_CYGPATH set. Returns result in -# func_to_host_file_result. -func_convert_path_nix_to_cygwin () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result="$func_cygpath_result" - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_nix_to_cygwin - - -# func_mode_compile arg... -func_mode_compile () -{ - $opt_debug - # Get the compilation command and the source file. - base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - pie_flag= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg="$arg" - arg_mode=normal - ;; - - target ) - libobj="$arg" - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - test -n "$libobj" && \ - func_fatal_error "you cannot specify \`-o' more than once" - arg_mode=target - continue - ;; - - -pie | -fpie | -fPIE) - func_append pie_flag " $arg" - continue - ;; - - -shared | -static | -prefer-pic | -prefer-non-pic) - func_append later " $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - lastarg= - save_ifs="$IFS"; IFS=',' - for arg in $args; do - IFS="$save_ifs" - func_append_quoted lastarg "$arg" - done - IFS="$save_ifs" - func_stripname ' ' '' "$lastarg" - lastarg=$func_stripname_result - - # Add the arguments to base_compile. - func_append base_compile " $lastarg" - continue - ;; - - *) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg="$srcfile" - srcfile="$arg" - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - func_append_quoted base_compile "$lastarg" - done # for arg - - case $arg_mode in - arg) - func_fatal_error "you must specify an argument for -Xcompile" - ;; - target) - func_fatal_error "you must specify a target with \`-o'" - ;; - *) - # Get the name of the library object. - test -z "$libobj" && { - func_basename "$srcfile" - libobj="$func_basename_result" - } - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - case $libobj in - *.[cCFSifmso] | \ - *.ada | *.adb | *.ads | *.asm | \ - *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ - *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) - func_xform "$libobj" - libobj=$func_xform_result - ;; - esac - - case $libobj in - *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; - *) - func_fatal_error "cannot determine name of library object from \`$libobj'" - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - continue - ;; - - -static) - build_libtool_libs=no - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ - && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - func_append removelist " $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - func_append removelist " $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 - srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - func_append command " -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - func_append command " -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - func_append command "$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { - test "$opt_mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $opt_mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to build PIC objects only - -prefer-non-pic try to build non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -bindir BINDIR specify path to binaries directory (for systems where - libraries must be found in the PATH setting at runtime) - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -Wc,FLAG - -Xcompiler FLAG pass linker-specific FLAG directly to the compiler - -Wl,FLAG - -Xlinker FLAG pass linker-specific FLAG directly to the linker - -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$opt_mode'" - ;; - esac - - echo - $ECHO "Try \`$progname --help' for more information about other modes." -} - -# Now that we've collected a possible --mode arg, show help if necessary -if $opt_help; then - if test "$opt_help" = :; then - func_mode_help - else - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - func_mode_help - done - } | sed -n '1p; 2,$s/^Usage:/ or: /p' - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - echo - func_mode_help - done - } | - sed '1d - /^When reporting/,/^Report/{ - H - d - } - $x - /information about other modes/d - /more detailed .*MODE/d - s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' - fi - exit $? -fi - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $opt_dlopen; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - func_append dir "/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -* | *.la | *.lo ) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_append_quoted args "$file" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$opt_mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libs= - libdirs= - admincmds= - - for opt in "$nonopt" ${1+"$@"} - do - if test -d "$opt"; then - func_append libdirs " $opt" - - elif test -f "$opt"; then - if func_lalib_unsafe_p "$opt"; then - func_append libs " $opt" - else - func_warning "\`$opt' is not a valid libtool archive" - fi - - else - func_fatal_error "invalid argument \`$opt'" - fi - done - - if test -n "$libs"; then - if test -n "$lt_sysroot"; then - sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` - sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" - else - sysroot_cmd= - fi - - # Remove sysroot references - if $opt_dry_run; then - for lib in $libs; do - echo "removing references to $lt_sysroot and \`=' prefixes from $lib" - done - else - tmpdir=`func_mktempdir` - for lib in $libs; do - sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ - > $tmpdir/tmp-la - mv -f $tmpdir/tmp-la $lib - done - ${RM}r "$tmpdir" - fi - fi - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || func_append admincmds " - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - echo - - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" - fi - exit $EXIT_SUCCESS -} - -test "$opt_mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" - install_shared_prog=$install_prog - case " $install_prog " in - *[\\\ /]cp\ *) install_cp=: ;; - *) install_cp=false ;; - esac - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - no_mode=: - for arg - do - arg2= - if test -n "$dest"; then - func_append files " $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - if $install_cp; then :; else - prev=$arg - fi - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - if test "x$prev" = x-m && test -n "$install_override_mode"; then - arg2=$install_override_mode - no_mode=false - fi - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - func_append install_shared_prog " $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -n "$install_override_mode" && $no_mode; then - if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" - fi - fi - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - func_append staticlibs " $file" - ;; - - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) func_append current_libdirs " $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) func_append future_libdirs " $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - func_append dir "$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && func_append staticlibs " $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $tool_oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$opt_mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) -#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" -#endif - -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" - $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - case $host in - *cygwin* | *mingw* | *cegcc* ) - # if an import library, we need to obtain dlname - if func_win32_import_lib_p "$dlprefile"; then - func_tr_sh "$dlprefile" - eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename="" - if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then - # Use subshell, to avoid clobbering current variable values - dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname" ; then - func_basename "$dlprefile_dlname" - dlprefile_dlbasename="$func_basename_result" - else - # no lafile. user explicitly requested -dlpreopen <import library>. - $sharedlib_from_linklib_cmd "$dlprefile" - dlprefile_dlbasename=$sharedlib_from_linklib_result - fi - fi - $opt_dry_run || { - if test -n "$dlprefile_dlbasename" ; then - eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' - else - func_warning "Could not compute DLL name from $name" - eval '$ECHO ": $name " >> "$nlist"' - fi - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" - } - else # not an import lib - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - fi - ;; - *) - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - ;; - esac - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 </dev/null >/dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - echo >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - echo >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) func_append symtab_cflags " $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -# Despite the name, also deal with 64 bit binaries. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - -# func_cygming_dll_for_implib ARG -# -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib () -{ - $opt_debug - sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` -} - -# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs -# -# The is the core of a fallback implementation of a -# platform-specific function to extract the name of the -# DLL associated with the specified import library LIBNAME. -# -# SECTION_NAME is either .idata$6 or .idata$7, depending -# on the platform and compiler that created the implib. -# -# Echos the name of the DLL associated with the -# specified import library. -func_cygming_dll_for_implib_fallback_core () -{ - $opt_debug - match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` - $OBJDUMP -s --section "$1" "$2" 2>/dev/null | - $SED '/^Contents of section '"$match_literal"':/{ - # Place marker at beginning of archive member dllname section - s/.*/====MARK====/ - p - d - } - # These lines can sometimes be longer than 43 characters, but - # are always uninteresting - /:[ ]*file format pe[i]\{,1\}-/d - /^In archive [^:]*:/d - # Ensure marker is printed - /^====MARK====/p - # Remove all lines with less than 43 characters - /^.\{43\}/!d - # From remaining lines, remove first 43 characters - s/^.\{43\}//' | - $SED -n ' - # Join marker and all lines until next marker into a single line - /^====MARK====/ b para - H - $ b para - b - :para - x - s/\n//g - # Remove the marker - s/^====MARK====// - # Remove trailing dots and whitespace - s/[\. \t]*$// - # Print - /./p' | - # we now have a list, one entry per line, of the stringified - # contents of the appropriate section of all members of the - # archive which possess that section. Heuristic: eliminate - # all those which have a first or second character that is - # a '.' (that is, objdump's representation of an unprintable - # character.) This should work for all archives with less than - # 0x302f exports -- but will fail for DLLs whose name actually - # begins with a literal '.' or a single character followed by - # a '.'. - # - # Of those that remain, print the first one. - $SED -e '/^\./d;/^.\./d;q' -} - -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - -# func_cygming_dll_for_implib_fallback ARG -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# -# This fallback implementation is for use when $DLLTOOL -# does not support the --identify-strict option. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib_fallback () -{ - $opt_debug - if func_cygming_gnu_implib_p "$1" ; then - # binutils import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1" ; then - # ms-generated import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` - else - # unknown - sharedlib_from_linklib_result="" - fi -} - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - if test "$lock_old_archive_extraction" = yes; then - lockfile=$f_ex_an_ar_oldlib.lock - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - fi - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ - 'stat=$?; rm -f "$lockfile"; exit $stat' - if test "$lock_old_archive_extraction" = yes; then - $opt_dry_run || rm -f "$lockfile" - fi - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=${1-no} - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - file=\"\$0\"" - - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` - $ECHO "\ - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - ECHO=\"$qECHO\" - fi - -# Very basic option parsing. These options are (a) specific to -# the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ which is used only on -# windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options which match -# this pattern). -# -# There are only two supported options: --lt-debug and -# --lt-dump-script. There is, deliberately, no --lt-help. -# -# The first argument to this parsing function should be the -# script's $0 value, followed by "$@". -lt_option_debug= -func_parse_lt_options () -{ - lt_script_arg0=\$0 - shift - for lt_opt - do - case \"\$lt_opt\" in - --lt-debug) lt_option_debug=1 ;; - --lt-dump-script) - lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` - test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. - lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` - cat \"\$lt_dump_D/\$lt_dump_F\" - exit 0 - ;; - --lt-*) - \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 - exit 1 - ;; - esac - done - - # Print the debug banner immediately: - if test -n \"\$lt_option_debug\"; then - echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 - fi -} - -# Used when --lt-debug. Prints its arguments to stdout -# (redirection is the responsibility of the caller) -func_lt_dump_args () -{ - lt_dump_args_N=1; - for lt_arg - do - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" - lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` - done -} - -# Core function for launching the target application -func_exec_program_core () -{ -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 -} - -# A function to encapsulate launching the target application -# Strips options in the --lt-* namespace from \$@ and -# launches target application with the remaining arguments. -func_exec_program () -{ - case \" \$* \" in - *\\ --lt-*) - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done ;; - esac - func_exec_program_core \${1+\"\$@\"} -} - - # Parse options - func_parse_lt_options \"\$0\" \${1+\"\$@\"} - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` - done - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # fixup the dll searchpath if we need to. - # - # Fix the DLL searchpath if we need to. Do this before prepending - # to shlibpath, because on Windows, both are PATH and uninstalled - # libraries must come first. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` - - export $shlibpath_var -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - func_exec_program \${1+\"\$@\"} - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} - - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat <<EOF - -/* $cwrappersource - temporary wrapper executable for $objdir/$outputname - Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION - - The $output program cannot be directly executed until all the libtool - libraries that it depends on are installed. - - This wrapper executable should never be moved out of the build directory. - If it is, it will not operate correctly. -*/ -EOF - cat <<"EOF" -#ifdef _MSC_VER -# define _CRT_SECURE_NO_DEPRECATE 1 -#endif -#include <stdio.h> -#include <stdlib.h> -#ifdef _MSC_VER -# include <direct.h> -# include <process.h> -# include <io.h> -#else -# include <unistd.h> -# include <stdint.h> -# ifdef __CYGWIN__ -# include <io.h> -# endif -#endif -#include <malloc.h> -#include <stdarg.h> -#include <assert.h> -#include <string.h> -#include <ctype.h> -#include <errno.h> -#include <fcntl.h> -#include <sys/stat.h> - -/* declarations of non-ANSI functions */ -#if defined(__MINGW32__) -# ifdef __STRICT_ANSI__ -int _putenv (const char *); -# endif -#elif defined(__CYGWIN__) -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -/* #elif defined (other platforms) ... */ -#endif - -/* portability defines, excluding path handling macros */ -#if defined(_MSC_VER) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -# define S_IXUSR _S_IEXEC -# ifndef _INTPTR_T_DEFINED -# define _INTPTR_T_DEFINED -# define intptr_t int -# endif -#elif defined(__MINGW32__) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -#elif defined(__CYGWIN__) -# define HAVE_SETENV -# define FOPEN_WB "wb" -/* #elif defined (other platforms) ... */ -#endif - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -/* path handling portability macros */ -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#if defined(LT_DEBUGWRAPPER) -static int lt_debug = 1; -#else -static int lt_debug = 0; -#endif - -const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_debugprintf (const char *file, int line, const char *fmt, ...); -void lt_fatal (const char *file, int line, const char *message, ...); -static const char *nonnull (const char *s); -static const char *nonempty (const char *s); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); -char **prepare_spawn (char **argv); -void lt_dump_script (FILE *f); -EOF - - cat <<EOF -volatile const char * MAGIC_EXE = "$magic_exe"; -const char * LIB_PATH_VARNAME = "$shlibpath_var"; -EOF - - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - func_to_host_path "$temp_rpath" - cat <<EOF -const char * LIB_PATH_VALUE = "$func_to_host_path_result"; -EOF - else - cat <<"EOF" -const char * LIB_PATH_VALUE = ""; -EOF - fi - - if test -n "$dllsearchpath"; then - func_to_host_path "$dllsearchpath:" - cat <<EOF -const char * EXE_PATH_VARNAME = "PATH"; -const char * EXE_PATH_VALUE = "$func_to_host_path_result"; -EOF - else - cat <<"EOF" -const char * EXE_PATH_VARNAME = ""; -const char * EXE_PATH_VALUE = ""; -EOF - fi - - if test "$fast_install" = yes; then - cat <<EOF -const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ -EOF - else - cat <<EOF -const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ -EOF - fi - - - cat <<"EOF" - -#define LTWRAPPER_OPTION_PREFIX "--lt-" - -static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; -static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; -static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; - -int -main (int argc, char *argv[]) -{ - char **newargz; - int newargc; - char *tmp_pathspec; - char *actual_cwrapper_path; - char *actual_cwrapper_name; - char *target_name; - char *lt_argv_zero; - intptr_t rval = 127; - - int i; - - program_name = (char *) xstrdup (base_name (argv[0])); - newargz = XMALLOC (char *, argc + 1); - - /* very simple arg parsing; don't want to rely on getopt - * also, copy all non cwrapper options to newargz, except - * argz[0], which is handled differently - */ - newargc=0; - for (i = 1; i < argc; i++) - { - if (strcmp (argv[i], dumpscript_opt) == 0) - { -EOF - case "$host" in - *mingw* | *cygwin* ) - # make stdout use "unix" line endings - echo " setmode(1,_O_BINARY);" - ;; - esac - - cat <<"EOF" - lt_dump_script (stdout); - return 0; - } - if (strcmp (argv[i], debug_opt) == 0) - { - lt_debug = 1; - continue; - } - if (strcmp (argv[i], ltwrapper_option_prefix) == 0) - { - /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX - namespace, but it is not one of the ones we know about and - have already dealt with, above (inluding dump-script), then - report an error. Otherwise, targets might begin to believe - they are allowed to use options in the LTWRAPPER_OPTION_PREFIX - namespace. The first time any user complains about this, we'll - need to make LTWRAPPER_OPTION_PREFIX a configure-time option - or a configure.ac-settable value. - */ - lt_fatal (__FILE__, __LINE__, - "unrecognized %s option: '%s'", - ltwrapper_option_prefix, argv[i]); - } - /* otherwise ... */ - newargz[++newargc] = xstrdup (argv[i]); - } - newargz[++newargc] = NULL; - -EOF - cat <<EOF - /* The GNU banner must be the first non-error debug message */ - lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); -EOF - cat <<"EOF" - lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); - lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); - - tmp_pathspec = find_executable (argv[0]); - if (tmp_pathspec == NULL) - lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); - lt_debugprintf (__FILE__, __LINE__, - "(main) found exe (before symlink chase) at: %s\n", - tmp_pathspec); - - actual_cwrapper_path = chase_symlinks (tmp_pathspec); - lt_debugprintf (__FILE__, __LINE__, - "(main) found exe (after symlink chase) at: %s\n", - actual_cwrapper_path); - XFREE (tmp_pathspec); - - actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); - strendzap (actual_cwrapper_path, actual_cwrapper_name); - - /* wrapper name transforms */ - strendzap (actual_cwrapper_name, ".exe"); - tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); - XFREE (actual_cwrapper_name); - actual_cwrapper_name = tmp_pathspec; - tmp_pathspec = 0; - - /* target_name transforms -- use actual target program name; might have lt- prefix */ - target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); - strendzap (target_name, ".exe"); - tmp_pathspec = lt_extend_str (target_name, ".exe", 1); - XFREE (target_name); - target_name = tmp_pathspec; - tmp_pathspec = 0; - - lt_debugprintf (__FILE__, __LINE__, - "(main) libtool target name: %s\n", - target_name); -EOF - - cat <<EOF - newargz[0] = - XMALLOC (char, (strlen (actual_cwrapper_path) + - strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); - strcpy (newargz[0], actual_cwrapper_path); - strcat (newargz[0], "$objdir"); - strcat (newargz[0], "/"); -EOF - - cat <<"EOF" - /* stop here, and copy so we don't have to do this twice */ - tmp_pathspec = xstrdup (newargz[0]); - - /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ - strcat (newargz[0], actual_cwrapper_name); - - /* DO want the lt- prefix here if it exists, so use target_name */ - lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); - XFREE (tmp_pathspec); - tmp_pathspec = NULL; -EOF - - case $host_os in - mingw*) - cat <<"EOF" - { - char* p; - while ((p = strchr (newargz[0], '\\')) != NULL) - { - *p = '/'; - } - while ((p = strchr (lt_argv_zero, '\\')) != NULL) - { - *p = '/'; - } - } -EOF - ;; - esac - - cat <<"EOF" - XFREE (target_name); - XFREE (actual_cwrapper_path); - XFREE (actual_cwrapper_name); - - lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ - lt_setenv ("DUALCASE", "1"); /* for MSK sh */ - /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must - be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) - because on Windows, both *_VARNAMEs are PATH but uninstalled - libraries must come first. */ - lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); - lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); - - lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", - nonnull (lt_argv_zero)); - for (i = 0; i < newargc; i++) - { - lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", - i, nonnull (newargz[i])); - } - -EOF - - case $host_os in - mingw*) - cat <<"EOF" - /* execv doesn't actually work on mingw as expected on unix */ - newargz = prepare_spawn (newargz); - rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); - if (rval == -1) - { - /* failed to start process */ - lt_debugprintf (__FILE__, __LINE__, - "(main) failed to launch target \"%s\": %s\n", - lt_argv_zero, nonnull (strerror (errno))); - return 127; - } - return rval; -EOF - ;; - *) - cat <<"EOF" - execv (lt_argv_zero, newargz); - return rval; /* =127, but avoids unused variable warning */ -EOF - ;; - esac - - cat <<"EOF" -} - -void * -xmalloc (size_t num) -{ - void *p = (void *) malloc (num); - if (!p) - lt_fatal (__FILE__, __LINE__, "memory exhausted"); - - return p; -} - -char * -xstrdup (const char *string) -{ - return string ? strcpy ((char *) xmalloc (strlen (string) + 1), - string) : NULL; -} - -const char * -base_name (const char *name) -{ - const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha ((unsigned char) name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - return base; -} - -int -check_executable (const char *path) -{ - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if ((stat (path, &st) >= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", - nonempty (wrapper)); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - lt_debugprintf (__FILE__, __LINE__, - "checking path component for symlinks: %s\n", - tmp_pathspec); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - lt_fatal (__FILE__, __LINE__, - "error accessing file \"%s\": %s", - tmp_pathspec, nonnull (strerror (errno))); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal (__FILE__, __LINE__, - "could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -void -lt_debugprintf (const char *file, int line, const char *fmt, ...) -{ - va_list args; - if (lt_debug) - { - (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); - } -} - -static void -lt_error_core (int exit_status, const char *file, - int line, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *file, int line, const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); - va_end (ap); -} - -static const char * -nonnull (const char *s) -{ - return s ? s : "(null)"; -} - -static const char * -nonempty (const char *s) -{ - return (s && !*s) ? "(empty)" : nonnull (s); -} - -void -lt_setenv (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_setenv) setting '%s' to '%s'\n", - nonnull (name), nonnull (value)); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -EOF - case $host_os in - mingw*) - cat <<"EOF" - -/* Prepares an argument vector before calling spawn(). - Note that spawn() does not by itself call the command interpreter - (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : - ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&v); - v.dwPlatformId == VER_PLATFORM_WIN32_NT; - }) ? "cmd.exe" : "command.com"). - Instead it simply concatenates the arguments, separated by ' ', and calls - CreateProcess(). We must quote the arguments since Win32 CreateProcess() - interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a - special way: - - Space and tab are interpreted as delimiters. They are not treated as - delimiters if they are surrounded by double quotes: "...". - - Unescaped double quotes are removed from the input. Their only effect is - that within double quotes, space and tab are treated like normal - characters. - - Backslashes not followed by double quotes are not special. - - But 2*n+1 backslashes followed by a double quote become - n backslashes followed by a double quote (n >= 0): - \" -> " - \\\" -> \" - \\\\\" -> \\" - */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -char ** -prepare_spawn (char **argv) -{ - size_t argc; - char **new_argv; - size_t i; - - /* Count number of arguments. */ - for (argc = 0; argv[argc] != NULL; argc++) - ; - - /* Allocate new argument vector. */ - new_argv = XMALLOC (char *, argc + 1); - - /* Put quoted arguments into the new argument vector. */ - for (i = 0; i < argc; i++) - { - const char *string = argv[i]; - - if (string[0] == '\0') - new_argv[i] = xstrdup ("\"\""); - else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) - { - int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); - size_t length; - unsigned int backslashes; - const char *s; - char *quoted_string; - char *p; - - length = 0; - backslashes = 0; - if (quote_around) - length++; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - length += backslashes + 1; - length++; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - length += backslashes + 1; - - quoted_string = XMALLOC (char, length + 1); - - p = quoted_string; - backslashes = 0; - if (quote_around) - *p++ = '"'; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - { - unsigned int j; - for (j = backslashes + 1; j > 0; j--) - *p++ = '\\'; - } - *p++ = c; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - { - unsigned int j; - for (j = backslashes; j > 0; j--) - *p++ = '\\'; - *p++ = '"'; - } - *p = '\0'; - - new_argv[i] = quoted_string; - } - else - new_argv[i] = (char *) string; - } - new_argv[argc] = NULL; - - return new_argv; -} -EOF - ;; - esac - - cat <<"EOF" -void lt_dump_script (FILE* f) -{ -EOF - func_emit_wrapper yes | - $SED -n -e ' -s/^\(.\{79\}\)\(..*\)/\1\ -\2/ -h -s/\([\\"]\)/\\\1/g -s/$/\\n/ -s/\([^\n]*\).*/ fputs ("\1", f);/p -g -D' - cat <<"EOF" -} -EOF -} -# end: func_emit_cwrapperexe_src - -# func_win32_import_lib_p ARG -# True if ARG is an import lib, as indicated by $file_magic_cmd -func_win32_import_lib_p () -{ - $opt_debug - case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in - *import*) : ;; - *) false ;; - esac -} - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - bindir= - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - bindir) - bindir="$arg" - prev= - continue - ;; - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - func_append dlfiles " $arg" - else - func_append dlprefiles " $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) func_append deplibs " $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# func_append moreargs " $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) func_append rpath " $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) func_append xrpath " $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - func_append weak_libs " $arg" - prev= - continue - ;; - xcclinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -bindir) - prev=bindir - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname "-L" '' "$arg" - if test -z "$func_stripname_result"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "* | *" $arg "*) - # Will only happen for absolute or sysroot arguments - ;; - *) - # Preserve sysroot, but never include relative directories - case $dir in - [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; - *) func_append deplibs " -L$dir" ;; - esac - func_append lib_search_path " $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) func_append dllsearchpath ":$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - func_append deplibs " System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - func_append deplibs " $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot|--sysroot) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) func_append new_inherited_linker_flags " $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - =*) - func_stripname '=' '' "$dir" - dir=$lt_sysroot$func_stripname_result - ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - func_append arg " $func_quote_for_eval_result" - func_append compiler_flags " $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append linker_flags " $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # Flags to be passed through unchanged, with rationale: - # -64, -mips[0-9] enable 64-bit mode for the SGI compiler - # -r[0-9][0-9]* specify processor for the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler - # +DA*, +DD* enable 64-bit mode for the HP compiler - # -q* compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* architecture-specific flags for GCC - # -F/path path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* profiling flags for GCC - # @file GCC response files - # -tp=* Portland pgcc target processor selection - # --sysroot=* for sysroot support - # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-flto*|-fwhopr*|-fuse-linker-plugin) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - func_append compiler_flags " $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - func_append objs " $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - func_append deplibs " $arg" - func_append old_deplibs " $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - func_resolve_sysroot "$arg" - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - func_append dlfiles " $func_resolve_sysroot_result" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - func_append dlprefiles " $func_resolve_sysroot_result" - prev= - else - func_append deplibs " $func_resolve_sysroot_result" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - func_to_tool_file "$output_objdir/" - tool_output_objdir=$func_to_tool_file_result - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_preserve_dup_deps ; then - case "$libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append libs " $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; - esac - func_append pre_post_deps " $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - func_resolve_sysroot "$lib" - case $lib in - *.la) func_source "$func_resolve_sysroot_result" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - func_basename "$deplib" - deplib_base=$func_basename_result - case " $weak_libs " in - *" $deplib_base "*) ;; - *) func_append deplibs " $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append compiler_flags " $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) - func_resolve_sysroot "$deplib" - lib=$func_resolve_sysroot_result - ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." - else - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - func_append newdlprefiles " $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append newdlfiles " $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && func_append dlfiles " $dlopen" - test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - func_append convenience " $ladir/$objdir/$old_library" - func_append old_convenience " $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - if test -n "$old_library" && - { test "$prefer_static_libs" = yes || - test "$prefer_static_libs,$installed" = "built,no"; }; then - linklib=$old_library - else - for l in $old_library $library_names; do - linklib="$l" - done - fi - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - func_append dlprefiles " $lib $dependency_libs" - else - func_append newdlfiles " $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$lt_sysroot$libdir" - absdir="$lt_sysroot$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - func_append notinst_path " $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - func_append notinst_path " $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - case "$host" in - # special handling for platforms with PE-DLLs. - *cygwin* | *mingw* | *cegcc* ) - # Linker will automatically link against shared library if both - # static and shared are present. Therefore, ensure we extract - # symbols from the import library if a shared library is present - # (otherwise, the dlopen module name will be incorrect). We do - # this by putting the import library name into $newdlprefiles. - # We recover the dlopen module name by 'saving' the la file - # name in a special purpose variable, and (later) extracting the - # dlname from the la file. - if test -n "$dlname"; then - func_tr_sh "$dir/$linklib" - eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" - func_append newdlprefiles " $dir/$linklib" - else - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - fi - ;; - * ) - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - func_append newdlprefiles " $dir/$dlname" - else - func_append newdlprefiles " $dir/$linklib" - fi - ;; - esac - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - func_append newlib_search_path " $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) func_append temp_rpath "$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - func_append notinst_deplibs " $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - func_append notinst_deplibs " $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - echo - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$opt_mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$absdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) func_append compile_shlibpath "$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$opt_mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system can not link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) func_append xrpath " $temp_xrpath";; - esac;; - *) func_append temp_deplibs " $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - func_append newlib_search_path " $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result";; - *) func_resolve_sysroot "$deplib" ;; - esac - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $func_resolve_sysroot_result "*) - func_append specialdeplibs " $func_resolve_sysroot_result" ;; - esac - fi - func_append tmp_libs " $func_resolve_sysroot_result" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_resolve_sysroot "$deplib" - deplib=$func_resolve_sysroot_result - func_dirname "$deplib" "" "." - dir=$func_dirname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) func_append lib_search_path " $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) func_append tmp_libs " $deplib" ;; - esac - ;; - *) func_append tmp_libs " $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - func_append tmp_libs " $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - func_append objs "$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - func_append libobjs " $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - # correct linux to gnu/linux during the next big refactor - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|qnx|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - *) - func_fatal_configuration "$modename: unknown library version type \`$version_type'" - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) # correct to gnu/linux during the next big refactor - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - func_append verstring ":${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - func_append libobjs " $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$opt_mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - func_append removelist " $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - func_append oldlibs " $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` - # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` - # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - func_replace_sysroot "$libdir" - func_append temp_xrpath " -R$func_replace_sysroot_result" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) func_append dlfiles " $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) func_append dlprefiles " $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - func_append deplibs " System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - func_append deplibs " -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c <<EOF - int main() { return 0; } -EOF - $opt_dry_run || $RM conftest - if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then - ldd_output=`ldd conftest` - for i in $deplibs; do - case $i in - -l*) - func_stripname -l '' "$i" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $i "*) - func_append newdeplibs " $i" - i="" - ;; - esac - fi - if test -n "$i" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` - set dummy $deplib_matches; shift - deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then - func_append newdeplibs " $i" - else - droppeddeps=yes - echo - $ECHO "*** Warning: dynamic linker does not accept needed library $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which I believe you do not have" - echo "*** because a test_compile did reveal that the linker did not use it for" - echo "*** its dynamic dependency list that programs get resolved with at runtime." - fi - fi - ;; - *) - func_append newdeplibs " $i" - ;; - esac - done - else - # Error occurred in the first compile. Let's try to salvage - # the situation: Compile a separate program for each library. - for i in $deplibs; do - case $i in - -l*) - func_stripname -l '' "$i" - name=$func_stripname_result - $opt_dry_run || $RM conftest - if $LTCC $LTCFLAGS -o conftest conftest.c $i; then - ldd_output=`ldd conftest` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $i "*) - func_append newdeplibs " $i" - i="" - ;; - esac - fi - if test -n "$i" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` - set dummy $deplib_matches; shift - deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then - func_append newdeplibs " $i" - else - droppeddeps=yes - echo - $ECHO "*** Warning: dynamic linker does not accept needed library $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because a test_compile did reveal that the linker did not use this one" - echo "*** as a dynamic dependency that programs can get resolved with at runtime." - fi - fi - else - droppeddeps=yes - echo - $ECHO "*** Warning! Library $i is needed by this library but I was not able to" - echo "*** make it link in! You will probably need to install it or some" - echo "*** library that it depends on before this library will be fully" - echo "*** functional. Installing it before continuing would be even better." - fi - ;; - *) - func_append newdeplibs " $i" - ;; - esac - done - fi - ;; - file_magic*) - set dummy $deplibs_check_method; shift - file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - if test -n "$file_magic_glob"; then - libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` - else - libnameglob=$libname - fi - test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - if test "$want_nocaseglob" = yes; then - shopt -s nocaseglob - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - $nocaseglob - else - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - fi - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` - done - fi - case $tmp_deplibs in - *[!\ \ ]*) - echo - if test "X$deplibs_check_method" = "Xnone"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - ;; - esac - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - # Remove ${wl} instances when linking with ld. - # FIXME: should test the right _cmds variable. - case $archive_cmds in - *\$LD\ *) wl= ;; - esac - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$opt_mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - func_replace_sysroot "$libdir" - libdir=$func_replace_sysroot_result - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append dep_rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - func_append linknames " $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - func_append delfiles " $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd1 in $cmds; do - IFS="$save_ifs" - # Take the normal branch if the nm_file_list_spec branch - # doesn't work or if tool conversion is not needed. - case $nm_file_list_spec~$to_tool_file_cmd in - *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) - try_normal_branch=yes - eval cmd=\"$cmd1\" - func_len " $cmd" - len=$func_len_result - ;; - *) - try_normal_branch=no - ;; - esac - if test "$try_normal_branch" = yes \ - && { test "$len" -lt "$max_cmd_len" \ - || test "$max_cmd_len" -le -1; } - then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - elif test -n "$nm_file_list_spec"; then - func_basename "$output" - output_la=$func_basename_result - save_libobjs=$libobjs - save_output=$output - output=${output_objdir}/${output_la}.nm - func_to_tool_file "$output" - libobjs=$nm_file_list_spec$func_to_tool_file_result - func_append delfiles " $output" - func_verbose "creating $NM input file list: $output" - for obj in $save_libobjs; do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > "$output" - eval cmd=\"$cmd1\" - func_show_eval "$cmd" 'exit $?' - output=$save_output - libobjs=$save_libobjs - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - func_append tmp_deplibs " $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - func_append linker_flags " $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$opt_mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - func_basename "$output" - output_la=$func_basename_result - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - echo ')' >> $output - func_append delfiles " $output" - func_to_tool_file "$output" - output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - func_append delfiles " $output" - func_to_tool_file "$output" - output=$firstobj\"$file_list_spec$func_to_tool_file_result\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - reload_objs=$objlist - eval concat_cmds=\"$reload_cmds\" - else - # All subsequent reloadable object files will link in - # the last one created. - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=" $obj" - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\${concat_cmds}$reload_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - func_append delfiles " $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # If we're not building shared, we need to use non_pic_objs - test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - func_append compile_command " ${wl}-bind_at_load" - func_append finalize_command " ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - func_append compile_command " $compile_deplibs" - func_append finalize_command " $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) func_append dllsearchpath ":$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) func_append finalize_perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cegcc* | *mingw32ce*) - # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=no - ;; - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - func_append rpath "$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output_objdir/$outputname" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - func_append oldobjs " $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $addlibs - func_append oldobjs " $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append oldobjs " $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - echo "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - func_append oldobjs " $gentop/$newobj" - ;; - *) func_append oldobjs " $obj" ;; - esac - done - fi - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - elif test -n "$archiver_list_spec"; then - func_verbose "using command file archive linking..." - for obj in $oldobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > $output_objdir/$libname.libcmd - func_to_tool_file "$output_objdir/$libname.libcmd" - oldobjs=" $archiver_list_spec$func_to_tool_file_result" - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - func_resolve_sysroot "$deplib" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" - ;; - -L*) - func_stripname -L '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -L$func_replace_sysroot_result" - ;; - -R*) - func_stripname -R '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -R$func_replace_sysroot_result" - ;; - *) func_append newdependency_libs " $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" - ;; - *) func_append newdlfiles " $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlfiles " $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlprefiles " $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - # In fact, it would be nice if we could use this code for all target - # systems that can't hard-code library paths into their executables - # and that have no shared library path variable independent of PATH, - # but it turns out we can't easily determine that from inspecting - # libtool variables, so we have to hard-code the OSs to which it - # applies here; at the moment, that means platforms that use the PE - # object format with DLL files. See the long comment at the top of - # tests/bindir.at for full details. - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) - # If a -bindir argument was supplied, place the dll there. - if test "x$bindir" != x ; - then - func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result$dlname - else - # Otherwise fall back on heuristic. - tdlname=../bin/$dlname - fi - ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$opt_mode" = link || test "$opt_mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) func_append RM " $arg"; rmforce=yes ;; - -*) func_append RM " $arg" ;; - *) func_append files " $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - odir="$objdir" - else - odir="$dir/$objdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$opt_mode" = uninstall && odir="$dir" - - # Remember odir for removal later, being careful to avoid duplicates - if test "$opt_mode" = clean; then - case " $rmdirs " in - *" $odir "*) ;; - *) func_append rmdirs " $odir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - func_append rmfiles " $odir/$n" - done - test -n "$old_library" && func_append rmfiles " $odir/$old_library" - - case "$opt_mode" in - clean) - case " $library_names " in - *" $dlname "*) ;; - *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; - esac - test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - func_append rmfiles " $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - func_append rmfiles " $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$opt_mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - func_append rmfiles " $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - func_append rmfiles " $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - func_append rmfiles " $odir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - func_append rmfiles " $odir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$opt_mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$opt_mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/src/thirdparty/protobuf-2.6.1/m4/libtool.m4 b/src/thirdparty/protobuf-2.6.1/m4/libtool.m4 deleted file mode 100644 index d7c043f4f..000000000 --- a/src/thirdparty/protobuf-2.6.1/m4/libtool.m4 +++ /dev/null @@ -1,7997 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# 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. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool 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 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 57 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl - -_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl -dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_WITH_SYSROOT])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PREPARE_SED_QUOTE_VARS -# -------------------------- -# Define a few sed substitution that help us do robust quoting. -m4_defun([_LT_PREPARE_SED_QUOTE_VARS], -[# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' -]) - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$[]1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -_LT_OUTPUT_LIBTOOL_INIT -]) - -# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) -# ------------------------------------ -# Generate a child script FILE with all initialization necessary to -# reuse the environment learned by the parent script, and make the -# file executable. If COMMENT is supplied, it is inserted after the -# `#!' sequence but before initialization text begins. After this -# macro, additional text can be appended to FILE to form the body of -# the child script. The macro ends with non-zero status if the -# file could not be fully written (such as if the disk is full). -m4_ifdef([AS_INIT_GENERATED], -[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], -[m4_defun([_LT_GENERATED_FILE_INIT], -[m4_require([AS_PREPARE])]dnl -[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl -[lt_write_fail=0 -cat >$1 <<_ASEOF || lt_write_fail=1 -#! $SHELL -# Generated by $as_me. -$2 -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$1 <<\_ASEOF || lt_write_fail=1 -AS_SHELL_SANITIZE -_AS_PREPARE -exec AS_MESSAGE_FD>&1 -_ASEOF -test $lt_write_fail = 0 && chmod +x $1[]dnl -m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], -[# Run this file to recreate a libtool stub with the current configuration.]) - -cat >>"$CONFIG_LT" <<\_LTEOF -lt_cl_silent=false -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to <bug-libtool@gnu.org>." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2011 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -lt_cl_success=: -test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" -exec AS_MESSAGE_LOG_FD>/dev/null -$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false -exec AS_MESSAGE_LOG_FD>>config.log -$lt_cl_success || AS_EXIT(1) -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_REPLACE_SHELLFNS - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Go], [_LT_LANG(GO)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -m4_ifndef([AC_PROG_GO], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_GO. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ -m4_defun([AC_PROG_GO], -[AC_LANG_PUSH(Go)dnl -AC_ARG_VAR([GOC], [Go compiler command])dnl -AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl -_AC_ARG_VAR_LDFLAGS()dnl -AC_CHECK_TOOL(GOC, gccgo) -if test -z "$GOC"; then - if test -n "$ac_tool_prefix"; then - AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) - fi -fi -if test -z "$GOC"; then - AC_CHECK_PROG(GOC, gccgo, gccgo, false) -fi -])#m4_defun -])#m4_ifndef - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([AC_PROG_GO], - [LT_LANG(GO)], - [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) -dnl AC_DEFUN([AC_LIBTOOL_RC], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - - AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], - [lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD - echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD - $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD - echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD - $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES([TAG]) -# --------------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], - [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) -# ---------------------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -# Store the results from the different compilers for each TAGNAME. -# Allow to override them for all tags through lt_cv_aix_libpath. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], - [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ - lt_aix_libpath_sed='[ - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }]' - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi],[]) - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" - fi - ]) - aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) -fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[m4_divert_text([M4SH-INIT], [$1 -])])# _LT_SHELL_INIT - - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Find how we can fake an echo command that does not interpret backslash. -# In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script which will find a shell with a builtin -# printf (which we can use as an echo command). -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -AC_MSG_CHECKING([how to print strings]) -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$[]1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -case "$ECHO" in - printf*) AC_MSG_RESULT([printf]) ;; - print*) AC_MSG_RESULT([print -r]) ;; - *) AC_MSG_RESULT([cat]) ;; -esac - -m4_ifdef([_AS_DETECT_SUGGESTED], -[_AS_DETECT_SUGGESTED([ - test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test "X`printf %s $ECHO`" = "X$ECHO" \ - || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) - -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_WITH_SYSROOT -# ---------------- -AC_DEFUN([_LT_WITH_SYSROOT], -[AC_MSG_CHECKING([for sysroot]) -AC_ARG_WITH([sysroot], -[ --with-sysroot[=DIR] Search for dependent libraries within DIR - (or the compiler's sysroot if not specified).], -[], [with_sysroot=no]) - -dnl lt_sysroot will always be passed unquoted. We quote it here -dnl in case the user passed a directory name. -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - AC_MSG_RESULT([${with_sysroot}]) - AC_MSG_ERROR([The sysroot must be an absolute path.]) - ;; -esac - - AC_MSG_RESULT([${lt_sysroot:-no}]) -_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl -[dependent libraries, and in which our libraries should be installed.])]) - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - case `/usr/bin/file conftest.o` in - *x86-64*) - LD="${LD-ld} -m elf32_x86_64" - ;; - *) - LD="${LD-ld} -m elf_i386" - ;; - esac - ;; - powerpc64le-*) - LD="${LD-ld} -m elf32lppclinux" - ;; - powerpc64-*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - powerpcle-*) - LD="${LD-ld} -m elf64lppc" - ;; - powerpc-*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_PROG_AR -# ----------- -m4_defun([_LT_PROG_AR], -[AC_CHECK_TOOLS(AR, [ar], false) -: ${AR=ar} -: ${AR_FLAGS=cru} -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) - -AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], - [lt_cv_ar_at_file=no - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - ]) - ]) - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi -_LT_DECL([], [archiver_list_spec], [1], - [How to feed a file listing to the archiver]) -])# _LT_PROG_AR - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[_LT_PROG_AR - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -_LT_DECL([], [lock_old_archive_extraction], [0], - [Whether to use a lock for old archive extraction]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include <dlfcn.h> -#endif - -#include <stdio.h> - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib<name>.so - # instead of lib<name>.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[23]].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[[3-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], - [lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [lt_cv_shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - ]) - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [install_override_mode], [1], - [Permission mode override for installation of shared libraries]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PROG_ECHO_BACKSLASH])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break - ;; - *) - test "$with_gnu_ld" != yes && break - ;; - esac - fi - done - IFS="$lt_save_ifs" -else - lt_cv_path_LD="$LD" # Let the user override the test with a path. -fi]) -LD="$lt_cv_path_LD" -if test -n "$LD"; then - AC_MSG_RESULT($LD) -else - AC_MSG_RESULT(no) -fi -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) -_LT_PATH_LD_GNU -AC_SUBST([LD]) - -_LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) -])# LT_PATH_LD - -# Old names: -AU_ALIAS([AM_PROG_LD], [LT_PATH_LD]) -AU_ALIAS([AC_PROG_LD], [LT_PATH_LD]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_LD], []) -dnl AC_DEFUN([AC_PROG_LD], []) - - -# _LT_PATH_LD_GNU -#- -------------- -m4_defun([_LT_PATH_LD_GNU], -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - lt_cv_prog_gnu_ld=yes - ;; -*) - lt_cv_prog_gnu_ld=no - ;; -esac]) -with_gnu_ld=$lt_cv_prog_gnu_ld -])# _LT_PATH_LD_GNU - - -# _LT_CMD_RELOAD -# -------------- -# find reload flag for linker -# -- PORTME Some linkers may need a different reload flag. -m4_defun([_LT_CMD_RELOAD], -[AC_CACHE_CHECK([for $LD option to reload object files], - lt_cv_ld_reload_flag, - [lt_cv_ld_reload_flag='-r']) -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then - reload_cmds=false - fi - ;; - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac -_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl -_LT_TAGDECL([], [reload_cmds], [2])dnl -])# _LT_CMD_RELOAD - - -# _LT_CHECK_MAGIC_METHOD -# ---------------------- -# how to check for library dependencies -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_MAGIC_METHOD], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -AC_CACHE_CHECK([how to recognize dependent libraries], -lt_cv_deplibs_check_method, -[lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[[4-9]]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[[45]]*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method = "file_magic"]) -_LT_DECL([], [file_magic_glob], [1], - [How to find potential files when deplibs_check_method = "file_magic"]) -_LT_DECL([], [want_nocaseglob], [1], - [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - -# _LT_CHECK_SHAREDLIB_FROM_LINKLIB -# -------------------------------- -# how to determine the name of the shared library -# associated with a specific link library. -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -m4_require([_LT_DECL_DLLTOOL]) -AC_CACHE_CHECK([how to associate runtime and link libraries], -lt_cv_sharedlib_from_linklib_cmd, -[lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac -]) -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - -_LT_DECL([], [sharedlib_from_linklib_cmd], [1], - [Command to associate shared and link libraries]) -])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB - - -# _LT_PATH_MANIFEST_TOOL -# ---------------------- -# locate the manifest tool -m4_defun([_LT_PATH_MANIFEST_TOOL], -[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], - [lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&AS_MESSAGE_LOG_FD - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest*]) -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi -_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl -])# _LT_PATH_MANIFEST_TOOL - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; - *) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; - esac - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT@&t@_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT@&t@_DLSYM_CONST -#else -# define LT@&t@_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT@&t@_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -_LT_DECL([], [nm_file_list_spec], [1], - [Specify filename containing input files for $NM]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' - if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - nagfor*) - # NAG Fortran compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - *Sun\ F* | *Sun*Fortran*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Intel*\ [[CF]]*Compiler*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - *Portland\ Group*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -AC_CACHE_CHECK([for $compiler option to produce PIC], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - ;; - esac - ;; - linux* | k*bsd*-gnu | gnu*) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu | gnu*) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; - *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - _LT_TAGVAR(link_all_deplibs, $1)=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - esac - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - m4_if($1, [], [ - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - _LT_LINKER_OPTION([if $CC understands -b], - _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], - [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], - [lt_cv_irix_exported_symbol], - [save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE( - [AC_LANG_SOURCE( - [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], - [C++], [[int foo (void) { return 0; }]], - [Fortran 77], [[ - subroutine foo - end]], - [Fortran], [[ - subroutine foo - end]])])], - [lt_cv_irix_exported_symbol=yes], - [lt_cv_irix_exported_symbol=no]) - LDFLAGS="$save_LDFLAGS"]) - if test "$lt_cv_irix_exported_symbol" = yes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_CACHE_CHECK([whether -lc should be explicitly linked in], - [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), - [$RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - ]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [postlink_cmds], [2], - [Commands necessary for finishing linking programs]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ - '"$_LT_TAGVAR(old_archive_cmds, $1)" - _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_FUNC_STRIPNAME_CNF -# ---------------------- -# func_stripname_cnf prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# -# This function is identical to the (non-XSI) version of func_stripname, -# except this one can be used by m4 code that may be executed by configure, -# rather than the libtool script. -m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl -AC_REQUIRE([_LT_DECL_SED]) -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) -func_stripname_cnf () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname_cnf -])# _LT_FUNC_STRIPNAME_CNF - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF -package foo -func foo() { -} -_LT_EOF -]) - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${F77-"f77"} - CFLAGS=$FFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" - CFLAGS="$lt_save_CFLAGS" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_LANG_PUSH(Fortran) - -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${FC-"f95"} - CFLAGS=$FCFLAGS - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -CFLAGS=$GCJFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_GO_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Go compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GO_CONFIG], -[AC_REQUIRE([LT_PROG_GO])dnl -AC_LANG_SAVE - -# Source file extension for Go test sources. -ac_ext=go - -# Object file extension for compiled Go test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="package main; func main() { }" - -# Code to be used in simple link tests -lt_simple_link_test_code='package main; func main() { }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GOC-"gccgo"} -CFLAGS=$GOFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# Go did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GO_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -CFLAGS= -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_GO -# ---------- -AC_DEFUN([LT_PROG_GO], -[AC_CHECK_TOOL(GOC, gccgo,) -]) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - -# _LT_DECL_DLLTOOL -# ---------------- -# Ensure DLLTOOL variable is set. -m4_defun([_LT_DECL_DLLTOOL], -[AC_CHECK_TOOL(DLLTOOL, dlltool, false) -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) -AC_SUBST([DLLTOOL]) -]) - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) -# ------------------------------------------------------ -# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and -# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. -m4_defun([_LT_PROG_FUNCTION_REPLACE], -[dnl { -sed -e '/^$1 ()$/,/^} # $1 /c\ -$1 ()\ -{\ -m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) -} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: -]) - - -# _LT_PROG_REPLACE_SHELLFNS -# ------------------------- -# Replace existing portable implementations of several shell functions with -# equivalent extended shell implementations where those features are available.. -m4_defun([_LT_PROG_REPLACE_SHELLFNS], -[if test x"$xsi_shell" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl - func_split_long_opt_name=${1%%=*} - func_split_long_opt_arg=${1#*=}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) - - _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) - - _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) - - _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) -fi - -if test x"$lt_shell_append" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) - - _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl - func_quote_for_eval "${2}" -dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ - eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) -fi -]) - -# _LT_PATH_CONVERSION_FUNCTIONS -# ----------------------------- -# Determine which file name conversion functions should be used by -# func_to_host_file (and, implicitly, by func_to_host_path). These are needed -# for certain cross-compile configurations and native mingw. -m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_MSG_CHECKING([how to convert $build file names to $host format]) -AC_CACHE_VAL(lt_cv_to_host_file_cmd, -[case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac -]) -to_host_file_cmd=$lt_cv_to_host_file_cmd -AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) -_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], - [0], [convert $build file names to $host format])dnl - -AC_MSG_CHECKING([how to convert $build file names to toolchain format]) -AC_CACHE_VAL(lt_cv_to_tool_file_cmd, -[#assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac -]) -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) -_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], - [0], [convert $build files to toolchain format])dnl -])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/src/thirdparty/protobuf-2.6.1/m4/ltoptions.m4 b/src/thirdparty/protobuf-2.6.1/m4/ltoptions.m4 deleted file mode 100644 index 5d9acd8e2..000000000 --- a/src/thirdparty/protobuf-2.6.1/m4/ltoptions.m4 +++ /dev/null @@ -1,384 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# Written by Gary V. Vaughan, 2004 -# -# 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. - -# serial 7 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [1], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for lt_pkg in $withval; do - IFS="$lt_save_ifs" - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/src/thirdparty/protobuf-2.6.1/m4/ltversion.m4 b/src/thirdparty/protobuf-2.6.1/m4/ltversion.m4 deleted file mode 100644 index 07a8602d4..000000000 --- a/src/thirdparty/protobuf-2.6.1/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# 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. - -# @configure_input@ - -# serial 3337 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.4.2]) -m4_define([LT_PACKAGE_REVISION], [1.3337]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.2' -macro_revision='1.3337' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/src/thirdparty/protobuf-2.6.1/src/Makefile.in b/src/thirdparty/protobuf-2.6.1/src/Makefile.in deleted file mode 100644 index e5ee7295d..000000000 --- a/src/thirdparty/protobuf-2.6.1/src/Makefile.in +++ /dev/null @@ -1,3641 +0,0 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2013 Free Software Foundation, Inc. - -# This Makefile.in 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. - -@SET_MAKE@ - - - - -VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -bin_PROGRAMS = protoc$(EXEEXT) -check_PROGRAMS = protoc$(EXEEXT) protobuf-test$(EXEEXT) \ - protobuf-lazy-descriptor-test$(EXEEXT) \ - protobuf-lite-test$(EXEEXT) test_plugin$(EXEEXT) \ - $(am__EXEEXT_1) -TESTS = protobuf-test$(EXEEXT) protobuf-lazy-descriptor-test$(EXEEXT) \ - protobuf-lite-test$(EXEEXT) \ - google/protobuf/compiler/zip_output_unittest.sh \ - $(am__EXEEXT_2) -subdir = src -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(nobase_dist_proto_DATA) \ - $(am__nobase_include_HEADERS_DIST) $(top_srcdir)/test-driver -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_system_extensions.m4 \ - $(top_srcdir)/m4/acx_check_suncc.m4 \ - $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/stl_hash.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ - "$(DESTDIR)$(protodir)" "$(DESTDIR)$(includedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -am__DEPENDENCIES_1 = -libprotobuf_lite_la_DEPENDENCIES = $(am__DEPENDENCIES_1) -am__dirstamp = $(am__leading_dot)dirstamp -am_libprotobuf_lite_la_OBJECTS = \ - google/protobuf/stubs/atomicops_internals_x86_gcc.lo \ - google/protobuf/stubs/atomicops_internals_x86_msvc.lo \ - google/protobuf/stubs/common.lo google/protobuf/stubs/once.lo \ - google/protobuf/stubs/stringprintf.lo \ - google/protobuf/extension_set.lo \ - google/protobuf/generated_message_util.lo \ - google/protobuf/message_lite.lo \ - google/protobuf/repeated_field.lo \ - google/protobuf/wire_format_lite.lo \ - google/protobuf/io/coded_stream.lo \ - google/protobuf/io/zero_copy_stream.lo \ - google/protobuf/io/zero_copy_stream_impl_lite.lo -libprotobuf_lite_la_OBJECTS = $(am_libprotobuf_lite_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -libprotobuf_lite_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ - $(AM_CXXFLAGS) $(CXXFLAGS) $(libprotobuf_lite_la_LDFLAGS) \ - $(LDFLAGS) -o $@ -libprotobuf_la_DEPENDENCIES = $(am__DEPENDENCIES_1) -am__objects_1 = google/protobuf/stubs/atomicops_internals_x86_gcc.lo \ - google/protobuf/stubs/atomicops_internals_x86_msvc.lo \ - google/protobuf/stubs/common.lo google/protobuf/stubs/once.lo \ - google/protobuf/stubs/stringprintf.lo \ - google/protobuf/extension_set.lo \ - google/protobuf/generated_message_util.lo \ - google/protobuf/message_lite.lo \ - google/protobuf/repeated_field.lo \ - google/protobuf/wire_format_lite.lo \ - google/protobuf/io/coded_stream.lo \ - google/protobuf/io/zero_copy_stream.lo \ - google/protobuf/io/zero_copy_stream_impl_lite.lo -am_libprotobuf_la_OBJECTS = $(am__objects_1) \ - google/protobuf/stubs/strutil.lo \ - google/protobuf/stubs/substitute.lo \ - google/protobuf/stubs/structurally_valid.lo \ - google/protobuf/descriptor.lo google/protobuf/descriptor.pb.lo \ - google/protobuf/descriptor_database.lo \ - google/protobuf/dynamic_message.lo \ - google/protobuf/extension_set_heavy.lo \ - google/protobuf/generated_message_reflection.lo \ - google/protobuf/message.lo google/protobuf/reflection_ops.lo \ - google/protobuf/service.lo google/protobuf/text_format.lo \ - google/protobuf/unknown_field_set.lo \ - google/protobuf/wire_format.lo \ - google/protobuf/io/gzip_stream.lo \ - google/protobuf/io/printer.lo google/protobuf/io/strtod.lo \ - google/protobuf/io/tokenizer.lo \ - google/protobuf/io/zero_copy_stream_impl.lo \ - google/protobuf/compiler/importer.lo \ - google/protobuf/compiler/parser.lo -libprotobuf_la_OBJECTS = $(am_libprotobuf_la_OBJECTS) -libprotobuf_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ - $(AM_CXXFLAGS) $(CXXFLAGS) $(libprotobuf_la_LDFLAGS) \ - $(LDFLAGS) -o $@ -libprotoc_la_DEPENDENCIES = $(am__DEPENDENCIES_1) libprotobuf.la -am_libprotoc_la_OBJECTS = google/protobuf/compiler/code_generator.lo \ - google/protobuf/compiler/command_line_interface.lo \ - google/protobuf/compiler/plugin.lo \ - google/protobuf/compiler/plugin.pb.lo \ - google/protobuf/compiler/subprocess.lo \ - google/protobuf/compiler/zip_writer.lo \ - google/protobuf/compiler/cpp/cpp_enum.lo \ - google/protobuf/compiler/cpp/cpp_enum_field.lo \ - google/protobuf/compiler/cpp/cpp_extension.lo \ - google/protobuf/compiler/cpp/cpp_field.lo \ - google/protobuf/compiler/cpp/cpp_file.lo \ - google/protobuf/compiler/cpp/cpp_generator.lo \ - google/protobuf/compiler/cpp/cpp_helpers.lo \ - google/protobuf/compiler/cpp/cpp_message.lo \ - google/protobuf/compiler/cpp/cpp_message_field.lo \ - google/protobuf/compiler/cpp/cpp_primitive_field.lo \ - google/protobuf/compiler/cpp/cpp_service.lo \ - google/protobuf/compiler/cpp/cpp_string_field.lo \ - google/protobuf/compiler/java/java_context.lo \ - google/protobuf/compiler/java/java_enum.lo \ - google/protobuf/compiler/java/java_enum_field.lo \ - google/protobuf/compiler/java/java_extension.lo \ - google/protobuf/compiler/java/java_field.lo \ - google/protobuf/compiler/java/java_file.lo \ - google/protobuf/compiler/java/java_generator.lo \ - google/protobuf/compiler/java/java_generator_factory.lo \ - google/protobuf/compiler/java/java_helpers.lo \ - google/protobuf/compiler/java/java_lazy_message_field.lo \ - google/protobuf/compiler/java/java_message.lo \ - google/protobuf/compiler/java/java_message_field.lo \ - google/protobuf/compiler/java/java_name_resolver.lo \ - google/protobuf/compiler/java/java_primitive_field.lo \ - google/protobuf/compiler/java/java_shared_code_generator.lo \ - google/protobuf/compiler/java/java_service.lo \ - google/protobuf/compiler/java/java_string_field.lo \ - google/protobuf/compiler/java/java_doc_comment.lo \ - google/protobuf/compiler/python/python_generator.lo -libprotoc_la_OBJECTS = $(am_libprotoc_la_OBJECTS) -libprotoc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(libprotoc_la_LDFLAGS) $(LDFLAGS) -o $@ -@HAVE_ZLIB_TRUE@am__EXEEXT_1 = zcgzip$(EXEEXT) zcgunzip$(EXEEXT) -PROGRAMS = $(bin_PROGRAMS) -am__objects_2 = google/protobuf/protobuf_lazy_descriptor_test-test_util.$(OBJEXT) \ - google/protobuf/testing/protobuf_lazy_descriptor_test-googletest.$(OBJEXT) \ - google/protobuf/testing/protobuf_lazy_descriptor_test-file.$(OBJEXT) -am_protobuf_lazy_descriptor_test_OBJECTS = google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_unittest.$(OBJEXT) \ - $(am__objects_2) -am__objects_3 = google/protobuf/protobuf_lazy_descriptor_test-unittest_lite.pb.$(OBJEXT) \ - google/protobuf/protobuf_lazy_descriptor_test-unittest_import_lite.pb.$(OBJEXT) \ - google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.$(OBJEXT) -am__objects_4 = $(am__objects_3) \ - google/protobuf/protobuf_lazy_descriptor_test-unittest.pb.$(OBJEXT) \ - google/protobuf/protobuf_lazy_descriptor_test-unittest_empty.pb.$(OBJEXT) \ - google/protobuf/protobuf_lazy_descriptor_test-unittest_import.pb.$(OBJEXT) \ - google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public.pb.$(OBJEXT) \ - google/protobuf/protobuf_lazy_descriptor_test-unittest_mset.pb.$(OBJEXT) \ - google/protobuf/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.$(OBJEXT) \ - google/protobuf/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.$(OBJEXT) \ - google/protobuf/protobuf_lazy_descriptor_test-unittest_custom_options.pb.$(OBJEXT) \ - google/protobuf/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.$(OBJEXT) \ - google/protobuf/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.$(OBJEXT) \ - google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.$(OBJEXT) -nodist_protobuf_lazy_descriptor_test_OBJECTS = $(am__objects_4) -protobuf_lazy_descriptor_test_OBJECTS = \ - $(am_protobuf_lazy_descriptor_test_OBJECTS) \ - $(nodist_protobuf_lazy_descriptor_test_OBJECTS) -protobuf_lazy_descriptor_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - libprotobuf.la libprotoc.la \ - $(top_builddir)/gtest/lib/libgtest.la \ - $(top_builddir)/gtest/lib/libgtest_main.la -protobuf_lazy_descriptor_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ - $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -am_protobuf_lite_test_OBJECTS = \ - google/protobuf/protobuf_lite_test-lite_unittest.$(OBJEXT) \ - google/protobuf/protobuf_lite_test-test_util_lite.$(OBJEXT) -am__objects_5 = \ - google/protobuf/protobuf_lite_test-unittest_lite.pb.$(OBJEXT) \ - google/protobuf/protobuf_lite_test-unittest_import_lite.pb.$(OBJEXT) \ - google/protobuf/protobuf_lite_test-unittest_import_public_lite.pb.$(OBJEXT) -nodist_protobuf_lite_test_OBJECTS = $(am__objects_5) -protobuf_lite_test_OBJECTS = $(am_protobuf_lite_test_OBJECTS) \ - $(nodist_protobuf_lite_test_OBJECTS) -protobuf_lite_test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - libprotobuf-lite.la -protobuf_lite_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ - $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -am__objects_6 = google/protobuf/protobuf_test-test_util.$(OBJEXT) \ - google/protobuf/testing/protobuf_test-googletest.$(OBJEXT) \ - google/protobuf/testing/protobuf_test-file.$(OBJEXT) -am_protobuf_test_OBJECTS = \ - google/protobuf/stubs/protobuf_test-common_unittest.$(OBJEXT) \ - google/protobuf/stubs/protobuf_test-once_unittest.$(OBJEXT) \ - google/protobuf/stubs/protobuf_test-strutil_unittest.$(OBJEXT) \ - google/protobuf/stubs/protobuf_test-structurally_valid_unittest.$(OBJEXT) \ - google/protobuf/stubs/protobuf_test-stringprintf_unittest.$(OBJEXT) \ - google/protobuf/stubs/protobuf_test-template_util_unittest.$(OBJEXT) \ - google/protobuf/stubs/protobuf_test-type_traits_unittest.$(OBJEXT) \ - google/protobuf/protobuf_test-descriptor_database_unittest.$(OBJEXT) \ - google/protobuf/protobuf_test-descriptor_unittest.$(OBJEXT) \ - google/protobuf/protobuf_test-dynamic_message_unittest.$(OBJEXT) \ - google/protobuf/protobuf_test-extension_set_unittest.$(OBJEXT) \ - google/protobuf/protobuf_test-generated_message_reflection_unittest.$(OBJEXT) \ - google/protobuf/protobuf_test-message_unittest.$(OBJEXT) \ - google/protobuf/protobuf_test-reflection_ops_unittest.$(OBJEXT) \ - google/protobuf/protobuf_test-repeated_field_unittest.$(OBJEXT) \ - google/protobuf/protobuf_test-repeated_field_reflection_unittest.$(OBJEXT) \ - google/protobuf/protobuf_test-text_format_unittest.$(OBJEXT) \ - google/protobuf/protobuf_test-unknown_field_set_unittest.$(OBJEXT) \ - google/protobuf/protobuf_test-wire_format_unittest.$(OBJEXT) \ - google/protobuf/io/protobuf_test-coded_stream_unittest.$(OBJEXT) \ - google/protobuf/io/protobuf_test-printer_unittest.$(OBJEXT) \ - google/protobuf/io/protobuf_test-tokenizer_unittest.$(OBJEXT) \ - google/protobuf/io/protobuf_test-zero_copy_stream_unittest.$(OBJEXT) \ - google/protobuf/compiler/protobuf_test-command_line_interface_unittest.$(OBJEXT) \ - google/protobuf/compiler/protobuf_test-importer_unittest.$(OBJEXT) \ - google/protobuf/compiler/protobuf_test-mock_code_generator.$(OBJEXT) \ - google/protobuf/compiler/protobuf_test-parser_unittest.$(OBJEXT) \ - google/protobuf/compiler/cpp/protobuf_test-cpp_bootstrap_unittest.$(OBJEXT) \ - google/protobuf/compiler/cpp/protobuf_test-cpp_unittest.$(OBJEXT) \ - google/protobuf/compiler/cpp/protobuf_test-cpp_plugin_unittest.$(OBJEXT) \ - google/protobuf/compiler/java/protobuf_test-java_plugin_unittest.$(OBJEXT) \ - google/protobuf/compiler/java/protobuf_test-java_doc_comment_unittest.$(OBJEXT) \ - google/protobuf/compiler/python/protobuf_test-python_plugin_unittest.$(OBJEXT) \ - $(am__objects_6) -am__objects_7 = \ - google/protobuf/protobuf_test-unittest_lite.pb.$(OBJEXT) \ - google/protobuf/protobuf_test-unittest_import_lite.pb.$(OBJEXT) \ - google/protobuf/protobuf_test-unittest_import_public_lite.pb.$(OBJEXT) -am__objects_8 = $(am__objects_7) \ - google/protobuf/protobuf_test-unittest.pb.$(OBJEXT) \ - google/protobuf/protobuf_test-unittest_empty.pb.$(OBJEXT) \ - google/protobuf/protobuf_test-unittest_import.pb.$(OBJEXT) \ - google/protobuf/protobuf_test-unittest_import_public.pb.$(OBJEXT) \ - google/protobuf/protobuf_test-unittest_mset.pb.$(OBJEXT) \ - google/protobuf/protobuf_test-unittest_optimize_for.pb.$(OBJEXT) \ - google/protobuf/protobuf_test-unittest_embed_optimize_for.pb.$(OBJEXT) \ - google/protobuf/protobuf_test-unittest_custom_options.pb.$(OBJEXT) \ - google/protobuf/protobuf_test-unittest_lite_imports_nonlite.pb.$(OBJEXT) \ - google/protobuf/protobuf_test-unittest_no_generic_services.pb.$(OBJEXT) \ - google/protobuf/compiler/cpp/protobuf_test-cpp_test_bad_identifiers.pb.$(OBJEXT) -nodist_protobuf_test_OBJECTS = $(am__objects_8) -protobuf_test_OBJECTS = $(am_protobuf_test_OBJECTS) \ - $(nodist_protobuf_test_OBJECTS) -protobuf_test_DEPENDENCIES = $(am__DEPENDENCIES_1) libprotobuf.la \ - libprotoc.la $(top_builddir)/gtest/lib/libgtest.la \ - $(top_builddir)/gtest/lib/libgtest_main.la -protobuf_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ - $(protobuf_test_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ - -o $@ -am_protoc_OBJECTS = google/protobuf/compiler/main.$(OBJEXT) -protoc_OBJECTS = $(am_protoc_OBJECTS) -protoc_DEPENDENCIES = $(am__DEPENDENCIES_1) libprotobuf.la \ - libprotoc.la -am_test_plugin_OBJECTS = google/protobuf/compiler/test_plugin-mock_code_generator.$(OBJEXT) \ - google/protobuf/testing/test_plugin-file.$(OBJEXT) \ - google/protobuf/compiler/test_plugin-test_plugin.$(OBJEXT) -test_plugin_OBJECTS = $(am_test_plugin_OBJECTS) -test_plugin_DEPENDENCIES = $(am__DEPENDENCIES_1) libprotobuf.la \ - libprotoc.la $(top_builddir)/gtest/lib/libgtest.la -am__zcgunzip_SOURCES_DIST = google/protobuf/testing/zcgunzip.cc -@HAVE_ZLIB_TRUE@am_zcgunzip_OBJECTS = \ -@HAVE_ZLIB_TRUE@ google/protobuf/testing/zcgunzip.$(OBJEXT) -zcgunzip_OBJECTS = $(am_zcgunzip_OBJECTS) -@HAVE_ZLIB_TRUE@zcgunzip_DEPENDENCIES = $(am__DEPENDENCIES_1) \ -@HAVE_ZLIB_TRUE@ libprotobuf.la -am__zcgzip_SOURCES_DIST = google/protobuf/testing/zcgzip.cc -@HAVE_ZLIB_TRUE@am_zcgzip_OBJECTS = \ -@HAVE_ZLIB_TRUE@ google/protobuf/testing/zcgzip.$(OBJEXT) -zcgzip_OBJECTS = $(am_zcgzip_OBJECTS) -@HAVE_ZLIB_TRUE@zcgzip_DEPENDENCIES = $(am__DEPENDENCIES_1) \ -@HAVE_ZLIB_TRUE@ libprotobuf.la -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -AM_V_CXX = $(am__v_CXX_@AM_V@) -am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) -am__v_CXX_0 = @echo " CXX " $@; -am__v_CXX_1 = -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) -am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) -am__v_CXXLD_0 = @echo " CXXLD " $@; -am__v_CXXLD_1 = -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libprotobuf_lite_la_SOURCES) $(libprotobuf_la_SOURCES) \ - $(libprotoc_la_SOURCES) \ - $(protobuf_lazy_descriptor_test_SOURCES) \ - $(nodist_protobuf_lazy_descriptor_test_SOURCES) \ - $(protobuf_lite_test_SOURCES) \ - $(nodist_protobuf_lite_test_SOURCES) $(protobuf_test_SOURCES) \ - $(nodist_protobuf_test_SOURCES) $(protoc_SOURCES) \ - $(test_plugin_SOURCES) $(zcgunzip_SOURCES) $(zcgzip_SOURCES) -DIST_SOURCES = $(libprotobuf_lite_la_SOURCES) \ - $(libprotobuf_la_SOURCES) $(libprotoc_la_SOURCES) \ - $(protobuf_lazy_descriptor_test_SOURCES) \ - $(protobuf_lite_test_SOURCES) $(protobuf_test_SOURCES) \ - $(protoc_SOURCES) $(test_plugin_SOURCES) \ - $(am__zcgunzip_SOURCES_DIST) $(am__zcgzip_SOURCES_DIST) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -DATA = $(nobase_dist_proto_DATA) -am__nobase_include_HEADERS_DIST = google/protobuf/stubs/atomicops.h \ - google/protobuf/stubs/atomicops_internals_arm64_gcc.h \ - google/protobuf/stubs/atomicops_internals_arm_gcc.h \ - google/protobuf/stubs/atomicops_internals_arm_qnx.h \ - google/protobuf/stubs/atomicops_internals_atomicword_compat.h \ - google/protobuf/stubs/atomicops_internals_generic_gcc.h \ - google/protobuf/stubs/atomicops_internals_macosx.h \ - google/protobuf/stubs/atomicops_internals_mips_gcc.h \ - google/protobuf/stubs/atomicops_internals_pnacl.h \ - google/protobuf/stubs/atomicops_internals_solaris.h \ - google/protobuf/stubs/atomicops_internals_tsan.h \ - google/protobuf/stubs/atomicops_internals_x86_gcc.h \ - google/protobuf/stubs/atomicops_internals_x86_msvc.h \ - google/protobuf/stubs/common.h \ - google/protobuf/stubs/platform_macros.h \ - google/protobuf/stubs/once.h google/protobuf/stubs/stl_util.h \ - google/protobuf/stubs/template_util.h \ - google/protobuf/stubs/type_traits.h \ - google/protobuf/descriptor.h google/protobuf/descriptor.pb.h \ - google/protobuf/descriptor_database.h \ - google/protobuf/dynamic_message.h \ - google/protobuf/extension_set.h \ - google/protobuf/generated_enum_reflection.h \ - google/protobuf/generated_message_util.h \ - google/protobuf/generated_message_reflection.h \ - google/protobuf/message.h google/protobuf/message_lite.h \ - google/protobuf/reflection_ops.h \ - google/protobuf/repeated_field.h google/protobuf/service.h \ - google/protobuf/text_format.h \ - google/protobuf/unknown_field_set.h \ - google/protobuf/wire_format.h \ - google/protobuf/wire_format_lite.h \ - google/protobuf/wire_format_lite_inl.h \ - google/protobuf/io/coded_stream.h \ - google/protobuf/io/gzip_stream.h google/protobuf/io/printer.h \ - google/protobuf/io/strtod.h google/protobuf/io/tokenizer.h \ - google/protobuf/io/zero_copy_stream.h \ - google/protobuf/io/zero_copy_stream_impl.h \ - google/protobuf/io/zero_copy_stream_impl_lite.h \ - google/protobuf/compiler/code_generator.h \ - google/protobuf/compiler/command_line_interface.h \ - google/protobuf/compiler/importer.h \ - google/protobuf/compiler/parser.h \ - google/protobuf/compiler/plugin.h \ - google/protobuf/compiler/plugin.pb.h \ - google/protobuf/compiler/cpp/cpp_generator.h \ - google/protobuf/compiler/java/java_generator.h \ - google/protobuf/compiler/python/python_generator.h -HEADERS = $(nobase_include_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__tty_colors_dummy = \ - mgn= red= grn= lgn= blu= brg= std=; \ - am__color_tests=no -am__tty_colors = { \ - $(am__tty_colors_dummy); \ - if test "X$(AM_COLOR_TESTS)" = Xno; then \ - am__color_tests=no; \ - elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ - am__color_tests=yes; \ - elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ - am__color_tests=yes; \ - fi; \ - if test $$am__color_tests = yes; then \ - red=''; \ - grn=''; \ - lgn=''; \ - blu=''; \ - mgn=''; \ - brg=''; \ - std=''; \ - fi; \ -} -am__recheck_rx = ^[ ]*:recheck:[ ]* -am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* -am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* -# A command that, given a newline-separated list of test names on the -# standard input, print the name of the tests that are to be re-run -# upon "make recheck". -am__list_recheck_tests = $(AWK) '{ \ - recheck = 1; \ - while ((rc = (getline line < ($$0 ".trs"))) != 0) \ - { \ - if (rc < 0) \ - { \ - if ((getline line2 < ($$0 ".log")) < 0) \ - recheck = 0; \ - break; \ - } \ - else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ - { \ - recheck = 0; \ - break; \ - } \ - else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ - { \ - break; \ - } \ - }; \ - if (recheck) \ - print $$0; \ - close ($$0 ".trs"); \ - close ($$0 ".log"); \ -}' -# A command that, given a newline-separated list of test names on the -# standard input, create the global log from their .trs and .log files. -am__create_global_log = $(AWK) ' \ -function fatal(msg) \ -{ \ - print "fatal: making $@: " msg | "cat >&2"; \ - exit 1; \ -} \ -function rst_section(header) \ -{ \ - print header; \ - len = length(header); \ - for (i = 1; i <= len; i = i + 1) \ - printf "="; \ - printf "\n\n"; \ -} \ -{ \ - copy_in_global_log = 1; \ - global_test_result = "RUN"; \ - while ((rc = (getline line < ($$0 ".trs"))) != 0) \ - { \ - if (rc < 0) \ - fatal("failed to read from " $$0 ".trs"); \ - if (line ~ /$(am__global_test_result_rx)/) \ - { \ - sub("$(am__global_test_result_rx)", "", line); \ - sub("[ ]*$$", "", line); \ - global_test_result = line; \ - } \ - else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ - copy_in_global_log = 0; \ - }; \ - if (copy_in_global_log) \ - { \ - rst_section(global_test_result ": " $$0); \ - while ((rc = (getline line < ($$0 ".log"))) != 0) \ - { \ - if (rc < 0) \ - fatal("failed to read from " $$0 ".log"); \ - print line; \ - }; \ - printf "\n"; \ - }; \ - close ($$0 ".trs"); \ - close ($$0 ".log"); \ -}' -# Restructured Text title. -am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } -# Solaris 10 'make', and several other traditional 'make' implementations, -# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it -# by disabling -e (using the XSI extension "set +e") if it's set. -am__sh_e_setup = case $$- in *e*) set +e;; esac -# Default flags passed to test drivers. -am__common_driver_flags = \ - --color-tests "$$am__color_tests" \ - --enable-hard-errors "$$am__enable_hard_errors" \ - --expect-failure "$$am__expect_failure" -# To be inserted before the command running the test. Creates the -# directory for the log if needed. Stores in $dir the directory -# containing $f, in $tst the test, in $log the log. Executes the -# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and -# passes TESTS_ENVIRONMENT. Set up options for the wrapper that -# will run the test scripts (or their associated LOG_COMPILER, if -# thy have one). -am__check_pre = \ -$(am__sh_e_setup); \ -$(am__vpath_adj_setup) $(am__vpath_adj) \ -$(am__tty_colors); \ -srcdir=$(srcdir); export srcdir; \ -case "$@" in \ - */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ - *) am__odir=.;; \ -esac; \ -test "x$$am__odir" = x"." || test -d "$$am__odir" \ - || $(MKDIR_P) "$$am__odir" || exit $$?; \ -if test -f "./$$f"; then dir=./; \ -elif test -f "$$f"; then dir=; \ -else dir="$(srcdir)/"; fi; \ -tst=$$dir$$f; log='$@'; \ -if test -n '$(DISABLE_HARD_ERRORS)'; then \ - am__enable_hard_errors=no; \ -else \ - am__enable_hard_errors=yes; \ -fi; \ -case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ - am__expect_failure=yes;; \ - *) \ - am__expect_failure=no;; \ -esac; \ -$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) -# A shell command to get the names of the tests scripts with any registered -# extension removed (i.e., equivalently, the names of the test logs, with -# the '.log' extension removed). The result is saved in the shell variable -# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, -# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", -# since that might cause problem with VPATH rewrites for suffix-less tests. -# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. -am__set_TESTS_bases = \ - bases='$(TEST_LOGS)'; \ - bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ - bases=`echo $$bases` -RECHECK_LOGS = $(TEST_LOGS) -AM_RECURSIVE_TARGETS = check recheck -@HAVE_ZLIB_TRUE@am__EXEEXT_2 = \ -@HAVE_ZLIB_TRUE@ google/protobuf/io/gzip_stream_unittest.sh -TEST_SUITE_LOG = test-suite.log -TEST_EXTENSIONS = @EXEEXT@ .test -LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver -LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) -am__set_b = \ - case '$@' in \ - */*) \ - case '$*' in \ - */*) b='$*';; \ - *) b=`echo '$@' | sed 's/\.log$$//'`; \ - esac;; \ - *) \ - b='$*';; \ - esac -am__test_logs1 = $(TESTS:=.log) -am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) -TEST_LOGS = $(am__test_logs2:.test.log=.log) -TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver -TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ - $(TEST_LOG_FLAGS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -ISAINFO = @ISAINFO@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POW_LIB = @POW_LIB@ -PROTOBUF_OPT_FLAG = @PROTOBUF_OPT_FLAG@ -PROTOC = @PROTOC@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -subdirs = @subdirs@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -@HAVE_ZLIB_FALSE@GZCHECKPROGRAMS = -@HAVE_ZLIB_TRUE@GZCHECKPROGRAMS = zcgzip zcgunzip -@HAVE_ZLIB_FALSE@GZHEADERS = -@HAVE_ZLIB_TRUE@GZHEADERS = google/protobuf/io/gzip_stream.h -@HAVE_ZLIB_FALSE@GZTESTS = -@HAVE_ZLIB_TRUE@GZTESTS = google/protobuf/io/gzip_stream_unittest.sh -@GCC_FALSE@NO_OPT_CXXFLAGS = $(PTHREAD_CFLAGS) - -# These are good warnings to turn on by default -@GCC_TRUE@NO_OPT_CXXFLAGS = $(PTHREAD_CFLAGS) -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -AM_CXXFLAGS = $(NO_OPT_CXXFLAGS) $(PROTOBUF_OPT_FLAG) -AM_LDFLAGS = $(PTHREAD_CFLAGS) - -# If I say "dist_include_DATA", automake complains that $(includedir) is not -# a "legitimate" directory for DATA. Screw you, automake. -protodir = $(includedir) -nobase_dist_proto_DATA = google/protobuf/descriptor.proto \ - google/protobuf/compiler/plugin.proto - -CLEANFILES = $(protoc_outputs) unittest_proto_middleman \ - testzip.jar testzip.list testzip.proto testzip.zip - -MAINTAINERCLEANFILES = \ - Makefile.in - -nobase_include_HEADERS = \ - google/protobuf/stubs/atomicops.h \ - google/protobuf/stubs/atomicops_internals_arm64_gcc.h \ - google/protobuf/stubs/atomicops_internals_arm_gcc.h \ - google/protobuf/stubs/atomicops_internals_arm_qnx.h \ - google/protobuf/stubs/atomicops_internals_atomicword_compat.h \ - google/protobuf/stubs/atomicops_internals_generic_gcc.h \ - google/protobuf/stubs/atomicops_internals_macosx.h \ - google/protobuf/stubs/atomicops_internals_mips_gcc.h \ - google/protobuf/stubs/atomicops_internals_pnacl.h \ - google/protobuf/stubs/atomicops_internals_solaris.h \ - google/protobuf/stubs/atomicops_internals_tsan.h \ - google/protobuf/stubs/atomicops_internals_x86_gcc.h \ - google/protobuf/stubs/atomicops_internals_x86_msvc.h \ - google/protobuf/stubs/common.h \ - google/protobuf/stubs/platform_macros.h \ - google/protobuf/stubs/once.h \ - google/protobuf/stubs/stl_util.h \ - google/protobuf/stubs/template_util.h \ - google/protobuf/stubs/type_traits.h \ - google/protobuf/descriptor.h \ - google/protobuf/descriptor.pb.h \ - google/protobuf/descriptor_database.h \ - google/protobuf/dynamic_message.h \ - google/protobuf/extension_set.h \ - google/protobuf/generated_enum_reflection.h \ - google/protobuf/generated_message_util.h \ - google/protobuf/generated_message_reflection.h \ - google/protobuf/message.h \ - google/protobuf/message_lite.h \ - google/protobuf/reflection_ops.h \ - google/protobuf/repeated_field.h \ - google/protobuf/service.h \ - google/protobuf/text_format.h \ - google/protobuf/unknown_field_set.h \ - google/protobuf/wire_format.h \ - google/protobuf/wire_format_lite.h \ - google/protobuf/wire_format_lite_inl.h \ - google/protobuf/io/coded_stream.h \ - $(GZHEADERS) \ - google/protobuf/io/printer.h \ - google/protobuf/io/strtod.h \ - google/protobuf/io/tokenizer.h \ - google/protobuf/io/zero_copy_stream.h \ - google/protobuf/io/zero_copy_stream_impl.h \ - google/protobuf/io/zero_copy_stream_impl_lite.h \ - google/protobuf/compiler/code_generator.h \ - google/protobuf/compiler/command_line_interface.h \ - google/protobuf/compiler/importer.h \ - google/protobuf/compiler/parser.h \ - google/protobuf/compiler/plugin.h \ - google/protobuf/compiler/plugin.pb.h \ - google/protobuf/compiler/cpp/cpp_generator.h \ - google/protobuf/compiler/java/java_generator.h \ - google/protobuf/compiler/python/python_generator.h - -lib_LTLIBRARIES = libprotobuf-lite.la libprotobuf.la libprotoc.la -libprotobuf_lite_la_LIBADD = $(PTHREAD_LIBS) -libprotobuf_lite_la_LDFLAGS = -version-info 9:1:0 -export-dynamic -no-undefined -libprotobuf_lite_la_SOURCES = \ - google/protobuf/stubs/atomicops_internals_x86_gcc.cc \ - google/protobuf/stubs/atomicops_internals_x86_msvc.cc \ - google/protobuf/stubs/common.cc \ - google/protobuf/stubs/once.cc \ - google/protobuf/stubs/hash.h \ - google/protobuf/stubs/map_util.h \ - google/protobuf/stubs/shared_ptr.h \ - google/protobuf/stubs/stringprintf.cc \ - google/protobuf/stubs/stringprintf.h \ - google/protobuf/extension_set.cc \ - google/protobuf/generated_message_util.cc \ - google/protobuf/message_lite.cc \ - google/protobuf/repeated_field.cc \ - google/protobuf/wire_format_lite.cc \ - google/protobuf/io/coded_stream.cc \ - google/protobuf/io/coded_stream_inl.h \ - google/protobuf/io/zero_copy_stream.cc \ - google/protobuf/io/zero_copy_stream_impl_lite.cc - -libprotobuf_la_LIBADD = $(PTHREAD_LIBS) -libprotobuf_la_LDFLAGS = -version-info 9:1:0 -export-dynamic -no-undefined -libprotobuf_la_SOURCES = \ - $(libprotobuf_lite_la_SOURCES) \ - google/protobuf/stubs/strutil.cc \ - google/protobuf/stubs/strutil.h \ - google/protobuf/stubs/substitute.cc \ - google/protobuf/stubs/substitute.h \ - google/protobuf/stubs/structurally_valid.cc \ - google/protobuf/descriptor.cc \ - google/protobuf/descriptor.pb.cc \ - google/protobuf/descriptor_database.cc \ - google/protobuf/dynamic_message.cc \ - google/protobuf/extension_set_heavy.cc \ - google/protobuf/generated_message_reflection.cc \ - google/protobuf/message.cc \ - google/protobuf/reflection_ops.cc \ - google/protobuf/service.cc \ - google/protobuf/text_format.cc \ - google/protobuf/unknown_field_set.cc \ - google/protobuf/wire_format.cc \ - google/protobuf/io/gzip_stream.cc \ - google/protobuf/io/printer.cc \ - google/protobuf/io/strtod.cc \ - google/protobuf/io/tokenizer.cc \ - google/protobuf/io/zero_copy_stream_impl.cc \ - google/protobuf/compiler/importer.cc \ - google/protobuf/compiler/parser.cc - -libprotoc_la_LIBADD = $(PTHREAD_LIBS) libprotobuf.la -libprotoc_la_LDFLAGS = -version-info 9:1:0 -export-dynamic -no-undefined -libprotoc_la_SOURCES = \ - google/protobuf/compiler/code_generator.cc \ - google/protobuf/compiler/command_line_interface.cc \ - google/protobuf/compiler/plugin.cc \ - google/protobuf/compiler/plugin.pb.cc \ - google/protobuf/compiler/subprocess.cc \ - google/protobuf/compiler/subprocess.h \ - google/protobuf/compiler/zip_writer.cc \ - google/protobuf/compiler/zip_writer.h \ - google/protobuf/compiler/cpp/cpp_enum.cc \ - google/protobuf/compiler/cpp/cpp_enum.h \ - google/protobuf/compiler/cpp/cpp_enum_field.cc \ - google/protobuf/compiler/cpp/cpp_enum_field.h \ - google/protobuf/compiler/cpp/cpp_extension.cc \ - google/protobuf/compiler/cpp/cpp_extension.h \ - google/protobuf/compiler/cpp/cpp_field.cc \ - google/protobuf/compiler/cpp/cpp_field.h \ - google/protobuf/compiler/cpp/cpp_file.cc \ - google/protobuf/compiler/cpp/cpp_file.h \ - google/protobuf/compiler/cpp/cpp_generator.cc \ - google/protobuf/compiler/cpp/cpp_helpers.cc \ - google/protobuf/compiler/cpp/cpp_helpers.h \ - google/protobuf/compiler/cpp/cpp_message.cc \ - google/protobuf/compiler/cpp/cpp_message.h \ - google/protobuf/compiler/cpp/cpp_message_field.cc \ - google/protobuf/compiler/cpp/cpp_message_field.h \ - google/protobuf/compiler/cpp/cpp_options.h \ - google/protobuf/compiler/cpp/cpp_primitive_field.cc \ - google/protobuf/compiler/cpp/cpp_primitive_field.h \ - google/protobuf/compiler/cpp/cpp_service.cc \ - google/protobuf/compiler/cpp/cpp_service.h \ - google/protobuf/compiler/cpp/cpp_string_field.cc \ - google/protobuf/compiler/cpp/cpp_string_field.h \ - google/protobuf/compiler/java/java_context.cc \ - google/protobuf/compiler/java/java_context.h \ - google/protobuf/compiler/java/java_enum.cc \ - google/protobuf/compiler/java/java_enum.h \ - google/protobuf/compiler/java/java_enum_field.cc \ - google/protobuf/compiler/java/java_enum_field.h \ - google/protobuf/compiler/java/java_extension.cc \ - google/protobuf/compiler/java/java_extension.h \ - google/protobuf/compiler/java/java_field.cc \ - google/protobuf/compiler/java/java_field.h \ - google/protobuf/compiler/java/java_file.cc \ - google/protobuf/compiler/java/java_file.h \ - google/protobuf/compiler/java/java_generator.cc \ - google/protobuf/compiler/java/java_generator_factory.cc \ - google/protobuf/compiler/java/java_generator_factory.h \ - google/protobuf/compiler/java/java_helpers.cc \ - google/protobuf/compiler/java/java_helpers.h \ - google/protobuf/compiler/java/java_lazy_message_field.cc \ - google/protobuf/compiler/java/java_lazy_message_field.h \ - google/protobuf/compiler/java/java_message.cc \ - google/protobuf/compiler/java/java_message.h \ - google/protobuf/compiler/java/java_message_field.cc \ - google/protobuf/compiler/java/java_message_field.h \ - google/protobuf/compiler/java/java_name_resolver.cc \ - google/protobuf/compiler/java/java_name_resolver.h \ - google/protobuf/compiler/java/java_primitive_field.cc \ - google/protobuf/compiler/java/java_primitive_field.h \ - google/protobuf/compiler/java/java_shared_code_generator.cc \ - google/protobuf/compiler/java/java_shared_code_generator.h \ - google/protobuf/compiler/java/java_service.cc \ - google/protobuf/compiler/java/java_service.h \ - google/protobuf/compiler/java/java_string_field.cc \ - google/protobuf/compiler/java/java_string_field.h \ - google/protobuf/compiler/java/java_doc_comment.cc \ - google/protobuf/compiler/java/java_doc_comment.h \ - google/protobuf/compiler/python/python_generator.cc - -protoc_LDADD = $(PTHREAD_LIBS) libprotobuf.la libprotoc.la -protoc_SOURCES = google/protobuf/compiler/main.cc - -# Tests ============================================================== -protoc_inputs = \ - google/protobuf/unittest.proto \ - google/protobuf/unittest_empty.proto \ - google/protobuf/unittest_import.proto \ - google/protobuf/unittest_import_public.proto \ - google/protobuf/unittest_mset.proto \ - google/protobuf/unittest_optimize_for.proto \ - google/protobuf/unittest_embed_optimize_for.proto \ - google/protobuf/unittest_custom_options.proto \ - google/protobuf/unittest_lite.proto \ - google/protobuf/unittest_import_lite.proto \ - google/protobuf/unittest_import_public_lite.proto \ - google/protobuf/unittest_lite_imports_nonlite.proto \ - google/protobuf/unittest_no_generic_services.proto \ - google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto - -EXTRA_DIST = \ - $(protoc_inputs) \ - solaris/libstdc++.la \ - google/protobuf/io/gzip_stream.h \ - google/protobuf/io/gzip_stream_unittest.sh \ - google/protobuf/testdata/golden_message \ - google/protobuf/testdata/golden_message_oneof_implemented \ - google/protobuf/testdata/golden_packed_fields_message \ - google/protobuf/testdata/bad_utf8_string \ - google/protobuf/testdata/text_format_unittest_data.txt \ - google/protobuf/testdata/text_format_unittest_data_oneof_implemented.txt \ - google/protobuf/testdata/text_format_unittest_data_pointy.txt \ - google/protobuf/testdata/text_format_unittest_data_pointy_oneof.txt \ - google/protobuf/testdata/text_format_unittest_extensions_data.txt \ - google/protobuf/testdata/text_format_unittest_extensions_data_pointy.txt \ - google/protobuf/package_info.h \ - google/protobuf/io/package_info.h \ - google/protobuf/compiler/package_info.h \ - google/protobuf/compiler/zip_output_unittest.sh \ - google/protobuf/unittest_enormous_descriptor.proto - -protoc_lite_outputs = \ - google/protobuf/unittest_lite.pb.cc \ - google/protobuf/unittest_lite.pb.h \ - google/protobuf/unittest_import_lite.pb.cc \ - google/protobuf/unittest_import_lite.pb.h \ - google/protobuf/unittest_import_public_lite.pb.cc \ - google/protobuf/unittest_import_public_lite.pb.h - -protoc_outputs = \ - $(protoc_lite_outputs) \ - google/protobuf/unittest.pb.cc \ - google/protobuf/unittest.pb.h \ - google/protobuf/unittest_empty.pb.cc \ - google/protobuf/unittest_empty.pb.h \ - google/protobuf/unittest_import.pb.cc \ - google/protobuf/unittest_import.pb.h \ - google/protobuf/unittest_import_public.pb.cc \ - google/protobuf/unittest_import_public.pb.h \ - google/protobuf/unittest_mset.pb.cc \ - google/protobuf/unittest_mset.pb.h \ - google/protobuf/unittest_optimize_for.pb.cc \ - google/protobuf/unittest_optimize_for.pb.h \ - google/protobuf/unittest_embed_optimize_for.pb.cc \ - google/protobuf/unittest_embed_optimize_for.pb.h \ - google/protobuf/unittest_custom_options.pb.cc \ - google/protobuf/unittest_custom_options.pb.h \ - google/protobuf/unittest_lite_imports_nonlite.pb.cc \ - google/protobuf/unittest_lite_imports_nonlite.pb.h \ - google/protobuf/unittest_no_generic_services.pb.cc \ - google/protobuf/unittest_no_generic_services.pb.h \ - google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc \ - google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h - -BUILT_SOURCES = $(protoc_outputs) -COMMON_TEST_SOURCES = \ - google/protobuf/test_util.cc \ - google/protobuf/test_util.h \ - google/protobuf/testing/googletest.cc \ - google/protobuf/testing/googletest.h \ - google/protobuf/testing/file.cc \ - google/protobuf/testing/file.h - -protobuf_test_LDADD = $(PTHREAD_LIBS) libprotobuf.la libprotoc.la \ - $(top_builddir)/gtest/lib/libgtest.la \ - $(top_builddir)/gtest/lib/libgtest_main.la - -protobuf_test_CPPFLAGS = -I$(top_srcdir)/gtest/include \ - -I$(top_builddir)/gtest/include - -# Disable optimization for tests unless the user explicitly asked for it, -# since test_util.cc takes forever to compile with optimization (with GCC). -# See configure.ac for more info. -protobuf_test_CXXFLAGS = $(NO_OPT_CXXFLAGS) -protobuf_test_SOURCES = \ - google/protobuf/stubs/common_unittest.cc \ - google/protobuf/stubs/once_unittest.cc \ - google/protobuf/stubs/strutil_unittest.cc \ - google/protobuf/stubs/structurally_valid_unittest.cc \ - google/protobuf/stubs/stringprintf_unittest.cc \ - google/protobuf/stubs/template_util_unittest.cc \ - google/protobuf/stubs/type_traits_unittest.cc \ - google/protobuf/descriptor_database_unittest.cc \ - google/protobuf/descriptor_unittest.cc \ - google/protobuf/dynamic_message_unittest.cc \ - google/protobuf/extension_set_unittest.cc \ - google/protobuf/generated_message_reflection_unittest.cc \ - google/protobuf/message_unittest.cc \ - google/protobuf/reflection_ops_unittest.cc \ - google/protobuf/repeated_field_unittest.cc \ - google/protobuf/repeated_field_reflection_unittest.cc \ - google/protobuf/text_format_unittest.cc \ - google/protobuf/unknown_field_set_unittest.cc \ - google/protobuf/wire_format_unittest.cc \ - google/protobuf/io/coded_stream_unittest.cc \ - google/protobuf/io/printer_unittest.cc \ - google/protobuf/io/tokenizer_unittest.cc \ - google/protobuf/io/zero_copy_stream_unittest.cc \ - google/protobuf/compiler/command_line_interface_unittest.cc \ - google/protobuf/compiler/importer_unittest.cc \ - google/protobuf/compiler/mock_code_generator.cc \ - google/protobuf/compiler/mock_code_generator.h \ - google/protobuf/compiler/parser_unittest.cc \ - google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc \ - google/protobuf/compiler/cpp/cpp_unittest.h \ - google/protobuf/compiler/cpp/cpp_unittest.cc \ - google/protobuf/compiler/cpp/cpp_plugin_unittest.cc \ - google/protobuf/compiler/java/java_plugin_unittest.cc \ - google/protobuf/compiler/java/java_doc_comment_unittest.cc \ - google/protobuf/compiler/python/python_plugin_unittest.cc \ - $(COMMON_TEST_SOURCES) - -nodist_protobuf_test_SOURCES = $(protoc_outputs) - -# Run cpp_unittest again with PROTOBUF_TEST_NO_DESCRIPTORS defined. -protobuf_lazy_descriptor_test_LDADD = $(PTHREAD_LIBS) libprotobuf.la \ - libprotoc.la \ - $(top_builddir)/gtest/lib/libgtest.la \ - $(top_builddir)/gtest/lib/libgtest_main.la - -protobuf_lazy_descriptor_test_CPPFLAGS = -I$(top_srcdir)/gtest/include \ - -I$(top_builddir)/gtest/include \ - -DPROTOBUF_TEST_NO_DESCRIPTORS - -protobuf_lazy_descriptor_test_CXXFLAGS = $(NO_OPT_CXXFLAGS) -protobuf_lazy_descriptor_test_SOURCES = \ - google/protobuf/compiler/cpp/cpp_unittest.cc \ - $(COMMON_TEST_SOURCES) - -nodist_protobuf_lazy_descriptor_test_SOURCES = $(protoc_outputs) - -# Build lite_unittest separately, since it doesn't use gtest. -protobuf_lite_test_LDADD = $(PTHREAD_LIBS) libprotobuf-lite.la -protobuf_lite_test_CXXFLAGS = $(NO_OPT_CXXFLAGS) -protobuf_lite_test_SOURCES = \ - google/protobuf/lite_unittest.cc \ - google/protobuf/test_util_lite.cc \ - google/protobuf/test_util_lite.h - -nodist_protobuf_lite_test_SOURCES = $(protoc_lite_outputs) - -# Test plugin binary. -test_plugin_LDADD = $(PTHREAD_LIBS) libprotobuf.la libprotoc.la \ - $(top_builddir)/gtest/lib/libgtest.la - -test_plugin_CPPFLAGS = -I$(top_srcdir)/gtest/include \ - -I$(top_builddir)/gtest/include - -test_plugin_SOURCES = \ - google/protobuf/compiler/mock_code_generator.cc \ - google/protobuf/testing/file.cc \ - google/protobuf/testing/file.h \ - google/protobuf/compiler/test_plugin.cc - -@HAVE_ZLIB_TRUE@zcgzip_LDADD = $(PTHREAD_LIBS) libprotobuf.la -@HAVE_ZLIB_TRUE@zcgzip_SOURCES = google/protobuf/testing/zcgzip.cc -@HAVE_ZLIB_TRUE@zcgunzip_LDADD = $(PTHREAD_LIBS) libprotobuf.la -@HAVE_ZLIB_TRUE@zcgunzip_SOURCES = google/protobuf/testing/zcgunzip.cc -all: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -.SUFFIXES: .cc .lo .log .o .obj .test .test$(EXEEXT) .trs -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } -google/protobuf/stubs/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/stubs - @: > google/protobuf/stubs/$(am__dirstamp) -google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/stubs/$(DEPDIR) - @: > google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/atomicops_internals_x86_gcc.lo: \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/atomicops_internals_x86_msvc.lo: \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/common.lo: \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/once.lo: google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/stringprintf.lo: \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/$(am__dirstamp): - @$(MKDIR_P) google/protobuf - @: > google/protobuf/$(am__dirstamp) -google/protobuf/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/$(DEPDIR) - @: > google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/extension_set.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/generated_message_util.lo: \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/message_lite.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/repeated_field.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/wire_format_lite.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/io - @: > google/protobuf/io/$(am__dirstamp) -google/protobuf/io/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/io/$(DEPDIR) - @: > google/protobuf/io/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/coded_stream.lo: \ - google/protobuf/io/$(am__dirstamp) \ - google/protobuf/io/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/zero_copy_stream.lo: \ - google/protobuf/io/$(am__dirstamp) \ - google/protobuf/io/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/zero_copy_stream_impl_lite.lo: \ - google/protobuf/io/$(am__dirstamp) \ - google/protobuf/io/$(DEPDIR)/$(am__dirstamp) - -libprotobuf-lite.la: $(libprotobuf_lite_la_OBJECTS) $(libprotobuf_lite_la_DEPENDENCIES) $(EXTRA_libprotobuf_lite_la_DEPENDENCIES) - $(AM_V_CXXLD)$(libprotobuf_lite_la_LINK) -rpath $(libdir) $(libprotobuf_lite_la_OBJECTS) $(libprotobuf_lite_la_LIBADD) $(LIBS) -google/protobuf/stubs/strutil.lo: \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/substitute.lo: \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/structurally_valid.lo: \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/descriptor.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/descriptor.pb.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/descriptor_database.lo: \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/dynamic_message.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/extension_set_heavy.lo: \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/generated_message_reflection.lo: \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/message.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/reflection_ops.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/service.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/text_format.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/unknown_field_set.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/wire_format.lo: google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/gzip_stream.lo: google/protobuf/io/$(am__dirstamp) \ - google/protobuf/io/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/printer.lo: google/protobuf/io/$(am__dirstamp) \ - google/protobuf/io/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/strtod.lo: google/protobuf/io/$(am__dirstamp) \ - google/protobuf/io/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/tokenizer.lo: google/protobuf/io/$(am__dirstamp) \ - google/protobuf/io/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/zero_copy_stream_impl.lo: \ - google/protobuf/io/$(am__dirstamp) \ - google/protobuf/io/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/compiler - @: > google/protobuf/compiler/$(am__dirstamp) -google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/compiler/$(DEPDIR) - @: > google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/importer.lo: \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/parser.lo: \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) - -libprotobuf.la: $(libprotobuf_la_OBJECTS) $(libprotobuf_la_DEPENDENCIES) $(EXTRA_libprotobuf_la_DEPENDENCIES) - $(AM_V_CXXLD)$(libprotobuf_la_LINK) -rpath $(libdir) $(libprotobuf_la_OBJECTS) $(libprotobuf_la_LIBADD) $(LIBS) -google/protobuf/compiler/code_generator.lo: \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/command_line_interface.lo: \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/plugin.lo: \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/plugin.pb.lo: \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/subprocess.lo: \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/zip_writer.lo: \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/compiler/cpp - @: > google/protobuf/compiler/cpp/$(am__dirstamp) -google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/compiler/cpp/$(DEPDIR) - @: > google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/cpp_enum.lo: \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/cpp_enum_field.lo: \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/cpp_extension.lo: \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/cpp_field.lo: \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/cpp_file.lo: \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/cpp_generator.lo: \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/cpp_helpers.lo: \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/cpp_message.lo: \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/cpp_message_field.lo: \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/cpp_primitive_field.lo: \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/cpp_service.lo: \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/cpp_string_field.lo: \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/compiler/java - @: > google/protobuf/compiler/java/$(am__dirstamp) -google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/compiler/java/$(DEPDIR) - @: > google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_context.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_enum.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_enum_field.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_extension.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_field.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_file.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_generator.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_generator_factory.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_helpers.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_lazy_message_field.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_message.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_message_field.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_name_resolver.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_primitive_field.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_shared_code_generator.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_service.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_string_field.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/java_doc_comment.lo: \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/python/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/compiler/python - @: > google/protobuf/compiler/python/$(am__dirstamp) -google/protobuf/compiler/python/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/compiler/python/$(DEPDIR) - @: > google/protobuf/compiler/python/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/python/python_generator.lo: \ - google/protobuf/compiler/python/$(am__dirstamp) \ - google/protobuf/compiler/python/$(DEPDIR)/$(am__dirstamp) - -libprotoc.la: $(libprotoc_la_OBJECTS) $(libprotoc_la_DEPENDENCIES) $(EXTRA_libprotoc_la_DEPENDENCIES) - $(AM_V_CXXLD)$(libprotoc_la_LINK) -rpath $(libdir) $(libprotoc_la_OBJECTS) $(libprotoc_la_LIBADD) $(LIBS) -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ - fi; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p \ - || test -f $$p1 \ - ; then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' \ - -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' \ - `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - -clean-checkPROGRAMS: - @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_unittest.$(OBJEXT): \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-test_util.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/testing/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/testing - @: > google/protobuf/testing/$(am__dirstamp) -google/protobuf/testing/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) google/protobuf/testing/$(DEPDIR) - @: > google/protobuf/testing/$(DEPDIR)/$(am__dirstamp) -google/protobuf/testing/protobuf_lazy_descriptor_test-googletest.$(OBJEXT): \ - google/protobuf/testing/$(am__dirstamp) \ - google/protobuf/testing/$(DEPDIR)/$(am__dirstamp) -google/protobuf/testing/protobuf_lazy_descriptor_test-file.$(OBJEXT): \ - google/protobuf/testing/$(am__dirstamp) \ - google/protobuf/testing/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest_lite.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest_import_lite.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest_empty.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest_import.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest_mset.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest_custom_options.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.$(OBJEXT): \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) - -protobuf-lazy-descriptor-test$(EXEEXT): $(protobuf_lazy_descriptor_test_OBJECTS) $(protobuf_lazy_descriptor_test_DEPENDENCIES) $(EXTRA_protobuf_lazy_descriptor_test_DEPENDENCIES) - @rm -f protobuf-lazy-descriptor-test$(EXEEXT) - $(AM_V_CXXLD)$(protobuf_lazy_descriptor_test_LINK) $(protobuf_lazy_descriptor_test_OBJECTS) $(protobuf_lazy_descriptor_test_LDADD) $(LIBS) -google/protobuf/protobuf_lite_test-lite_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lite_test-test_util_lite.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lite_test-unittest_lite.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lite_test-unittest_import_lite.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_lite_test-unittest_import_public_lite.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) - -protobuf-lite-test$(EXEEXT): $(protobuf_lite_test_OBJECTS) $(protobuf_lite_test_DEPENDENCIES) $(EXTRA_protobuf_lite_test_DEPENDENCIES) - @rm -f protobuf-lite-test$(EXEEXT) - $(AM_V_CXXLD)$(protobuf_lite_test_LINK) $(protobuf_lite_test_OBJECTS) $(protobuf_lite_test_LDADD) $(LIBS) -google/protobuf/stubs/protobuf_test-common_unittest.$(OBJEXT): \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/protobuf_test-once_unittest.$(OBJEXT): \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/protobuf_test-strutil_unittest.$(OBJEXT): \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/protobuf_test-structurally_valid_unittest.$(OBJEXT): \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/protobuf_test-stringprintf_unittest.$(OBJEXT): \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/protobuf_test-template_util_unittest.$(OBJEXT): \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/stubs/protobuf_test-type_traits_unittest.$(OBJEXT): \ - google/protobuf/stubs/$(am__dirstamp) \ - google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-descriptor_database_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-descriptor_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-dynamic_message_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-extension_set_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-generated_message_reflection_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-message_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-reflection_ops_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-repeated_field_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-repeated_field_reflection_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-text_format_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unknown_field_set_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-wire_format_unittest.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/protobuf_test-coded_stream_unittest.$(OBJEXT): \ - google/protobuf/io/$(am__dirstamp) \ - google/protobuf/io/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/protobuf_test-printer_unittest.$(OBJEXT): \ - google/protobuf/io/$(am__dirstamp) \ - google/protobuf/io/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/protobuf_test-tokenizer_unittest.$(OBJEXT): \ - google/protobuf/io/$(am__dirstamp) \ - google/protobuf/io/$(DEPDIR)/$(am__dirstamp) -google/protobuf/io/protobuf_test-zero_copy_stream_unittest.$(OBJEXT): \ - google/protobuf/io/$(am__dirstamp) \ - google/protobuf/io/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/protobuf_test-command_line_interface_unittest.$(OBJEXT): \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/protobuf_test-importer_unittest.$(OBJEXT): \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/protobuf_test-mock_code_generator.$(OBJEXT): \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/protobuf_test-parser_unittest.$(OBJEXT): \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/protobuf_test-cpp_bootstrap_unittest.$(OBJEXT): \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/protobuf_test-cpp_unittest.$(OBJEXT): \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/protobuf_test-cpp_plugin_unittest.$(OBJEXT): \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/protobuf_test-java_plugin_unittest.$(OBJEXT): \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/java/protobuf_test-java_doc_comment_unittest.$(OBJEXT): \ - google/protobuf/compiler/java/$(am__dirstamp) \ - google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/python/protobuf_test-python_plugin_unittest.$(OBJEXT): \ - google/protobuf/compiler/python/$(am__dirstamp) \ - google/protobuf/compiler/python/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-test_util.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/testing/protobuf_test-googletest.$(OBJEXT): \ - google/protobuf/testing/$(am__dirstamp) \ - google/protobuf/testing/$(DEPDIR)/$(am__dirstamp) -google/protobuf/testing/protobuf_test-file.$(OBJEXT): \ - google/protobuf/testing/$(am__dirstamp) \ - google/protobuf/testing/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest_lite.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest_import_lite.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest_import_public_lite.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest_empty.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest_import.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest_import_public.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest_mset.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest_optimize_for.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest_embed_optimize_for.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest_custom_options.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest_lite_imports_nonlite.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/protobuf_test-unittest_no_generic_services.pb.$(OBJEXT): \ - google/protobuf/$(am__dirstamp) \ - google/protobuf/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/cpp/protobuf_test-cpp_test_bad_identifiers.pb.$(OBJEXT): \ - google/protobuf/compiler/cpp/$(am__dirstamp) \ - google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) - -protobuf-test$(EXEEXT): $(protobuf_test_OBJECTS) $(protobuf_test_DEPENDENCIES) $(EXTRA_protobuf_test_DEPENDENCIES) - @rm -f protobuf-test$(EXEEXT) - $(AM_V_CXXLD)$(protobuf_test_LINK) $(protobuf_test_OBJECTS) $(protobuf_test_LDADD) $(LIBS) -google/protobuf/compiler/main.$(OBJEXT): \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) - -protoc$(EXEEXT): $(protoc_OBJECTS) $(protoc_DEPENDENCIES) $(EXTRA_protoc_DEPENDENCIES) - @rm -f protoc$(EXEEXT) - $(AM_V_CXXLD)$(CXXLINK) $(protoc_OBJECTS) $(protoc_LDADD) $(LIBS) -google/protobuf/compiler/test_plugin-mock_code_generator.$(OBJEXT): \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) -google/protobuf/testing/test_plugin-file.$(OBJEXT): \ - google/protobuf/testing/$(am__dirstamp) \ - google/protobuf/testing/$(DEPDIR)/$(am__dirstamp) -google/protobuf/compiler/test_plugin-test_plugin.$(OBJEXT): \ - google/protobuf/compiler/$(am__dirstamp) \ - google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) - -test_plugin$(EXEEXT): $(test_plugin_OBJECTS) $(test_plugin_DEPENDENCIES) $(EXTRA_test_plugin_DEPENDENCIES) - @rm -f test_plugin$(EXEEXT) - $(AM_V_CXXLD)$(CXXLINK) $(test_plugin_OBJECTS) $(test_plugin_LDADD) $(LIBS) -google/protobuf/testing/zcgunzip.$(OBJEXT): \ - google/protobuf/testing/$(am__dirstamp) \ - google/protobuf/testing/$(DEPDIR)/$(am__dirstamp) - -zcgunzip$(EXEEXT): $(zcgunzip_OBJECTS) $(zcgunzip_DEPENDENCIES) $(EXTRA_zcgunzip_DEPENDENCIES) - @rm -f zcgunzip$(EXEEXT) - $(AM_V_CXXLD)$(CXXLINK) $(zcgunzip_OBJECTS) $(zcgunzip_LDADD) $(LIBS) -google/protobuf/testing/zcgzip.$(OBJEXT): \ - google/protobuf/testing/$(am__dirstamp) \ - google/protobuf/testing/$(DEPDIR)/$(am__dirstamp) - -zcgzip$(EXEEXT): $(zcgzip_OBJECTS) $(zcgzip_DEPENDENCIES) $(EXTRA_zcgzip_DEPENDENCIES) - @rm -f zcgzip$(EXEEXT) - $(AM_V_CXXLD)$(CXXLINK) $(zcgzip_OBJECTS) $(zcgzip_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -rm -f google/protobuf/*.$(OBJEXT) - -rm -f google/protobuf/*.lo - -rm -f google/protobuf/compiler/*.$(OBJEXT) - -rm -f google/protobuf/compiler/*.lo - -rm -f google/protobuf/compiler/cpp/*.$(OBJEXT) - -rm -f google/protobuf/compiler/cpp/*.lo - -rm -f google/protobuf/compiler/java/*.$(OBJEXT) - -rm -f google/protobuf/compiler/java/*.lo - -rm -f google/protobuf/compiler/python/*.$(OBJEXT) - -rm -f google/protobuf/compiler/python/*.lo - -rm -f google/protobuf/io/*.$(OBJEXT) - -rm -f google/protobuf/io/*.lo - -rm -f google/protobuf/stubs/*.$(OBJEXT) - -rm -f google/protobuf/stubs/*.lo - -rm -f google/protobuf/testing/*.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/descriptor.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/descriptor.pb.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/descriptor_database.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/dynamic_message.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/extension_set.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/extension_set_heavy.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/generated_message_reflection.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/generated_message_util.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/message.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/message_lite.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-test_util.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_custom_options.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_empty.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_lite.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_mset.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lite_test-lite_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lite_test-test_util_lite.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_lite.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_public_lite.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_lite.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-descriptor_database_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-descriptor_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-dynamic_message_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-extension_set_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-generated_message_reflection_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-message_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-reflection_ops_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_reflection_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-test_util.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-text_format_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest_custom_options.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest_embed_optimize_for.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest_empty.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest_import.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_lite.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public_lite.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite_imports_nonlite.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest_mset.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest_no_generic_services.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unittest_optimize_for.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-unknown_field_set_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/protobuf_test-wire_format_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/reflection_ops.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/repeated_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/service.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/text_format.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/unknown_field_set.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/wire_format.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/$(DEPDIR)/wire_format_lite.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/code_generator.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/command_line_interface.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/importer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/main.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/parser.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/plugin.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/plugin.pb.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/protobuf_test-command_line_interface_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/protobuf_test-importer_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/protobuf_test-mock_code_generator.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/protobuf_test-parser_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/subprocess.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/test_plugin-mock_code_generator.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/test_plugin-test_plugin.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/$(DEPDIR)/zip_writer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/cpp_enum.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/cpp_enum_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/cpp_extension.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/cpp_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/cpp_file.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/cpp_generator.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/cpp_helpers.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/cpp_message.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/cpp_message_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/cpp_primitive_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/cpp_service.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/cpp_string_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_bootstrap_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_plugin_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_test_bad_identifiers.pb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_context.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_doc_comment.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_enum.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_enum_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_extension.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_file.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_generator.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_generator_factory.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_helpers.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_lazy_message_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_message.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_message_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_name_resolver.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_primitive_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_service.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_shared_code_generator.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/java_string_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_doc_comment_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_plugin_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/python/$(DEPDIR)/protobuf_test-python_plugin_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/compiler/python/$(DEPDIR)/python_generator.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/io/$(DEPDIR)/coded_stream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/io/$(DEPDIR)/gzip_stream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/io/$(DEPDIR)/printer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/io/$(DEPDIR)/protobuf_test-coded_stream_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/io/$(DEPDIR)/protobuf_test-printer_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/io/$(DEPDIR)/protobuf_test-tokenizer_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/io/$(DEPDIR)/protobuf_test-zero_copy_stream_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/io/$(DEPDIR)/strtod.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/io/$(DEPDIR)/tokenizer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/io/$(DEPDIR)/zero_copy_stream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/io/$(DEPDIR)/zero_copy_stream_impl.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/io/$(DEPDIR)/zero_copy_stream_impl_lite.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/atomicops_internals_x86_gcc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/atomicops_internals_x86_msvc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/common.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/once.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/protobuf_test-common_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/protobuf_test-once_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/protobuf_test-stringprintf_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/protobuf_test-structurally_valid_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/protobuf_test-strutil_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/protobuf_test-template_util_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/protobuf_test-type_traits_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/stringprintf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/structurally_valid.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/strutil.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/stubs/$(DEPDIR)/substitute.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-file.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-googletest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/testing/$(DEPDIR)/protobuf_test-file.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/testing/$(DEPDIR)/protobuf_test-googletest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/testing/$(DEPDIR)/test_plugin-file.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/testing/$(DEPDIR)/zcgunzip.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@google/protobuf/testing/$(DEPDIR)/zcgzip.Po@am__quote@ - -.cc.o: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< - -google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_unittest.o: google/protobuf/compiler/cpp/cpp_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_unittest.o -MD -MP -MF google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_unittest.Tpo -c -o google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_unittest.o `test -f 'google/protobuf/compiler/cpp/cpp_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/cpp/cpp_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_unittest.Tpo google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/cpp/cpp_unittest.cc' object='google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_unittest.o `test -f 'google/protobuf/compiler/cpp/cpp_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/cpp/cpp_unittest.cc - -google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_unittest.obj: google/protobuf/compiler/cpp/cpp_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_unittest.obj -MD -MP -MF google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_unittest.Tpo -c -o google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_unittest.obj `if test -f 'google/protobuf/compiler/cpp/cpp_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/cpp/cpp_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/cpp/cpp_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_unittest.Tpo google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/cpp/cpp_unittest.cc' object='google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_unittest.obj `if test -f 'google/protobuf/compiler/cpp/cpp_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/cpp/cpp_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/cpp/cpp_unittest.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-test_util.o: google/protobuf/test_util.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-test_util.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-test_util.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-test_util.o `test -f 'google/protobuf/test_util.cc' || echo '$(srcdir)/'`google/protobuf/test_util.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-test_util.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-test_util.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_util.cc' object='google/protobuf/protobuf_lazy_descriptor_test-test_util.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-test_util.o `test -f 'google/protobuf/test_util.cc' || echo '$(srcdir)/'`google/protobuf/test_util.cc - -google/protobuf/protobuf_lazy_descriptor_test-test_util.obj: google/protobuf/test_util.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-test_util.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-test_util.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-test_util.obj `if test -f 'google/protobuf/test_util.cc'; then $(CYGPATH_W) 'google/protobuf/test_util.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_util.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-test_util.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-test_util.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_util.cc' object='google/protobuf/protobuf_lazy_descriptor_test-test_util.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-test_util.obj `if test -f 'google/protobuf/test_util.cc'; then $(CYGPATH_W) 'google/protobuf/test_util.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_util.cc'; fi` - -google/protobuf/testing/protobuf_lazy_descriptor_test-googletest.o: google/protobuf/testing/googletest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/testing/protobuf_lazy_descriptor_test-googletest.o -MD -MP -MF google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-googletest.Tpo -c -o google/protobuf/testing/protobuf_lazy_descriptor_test-googletest.o `test -f 'google/protobuf/testing/googletest.cc' || echo '$(srcdir)/'`google/protobuf/testing/googletest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-googletest.Tpo google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-googletest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/testing/googletest.cc' object='google/protobuf/testing/protobuf_lazy_descriptor_test-googletest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/testing/protobuf_lazy_descriptor_test-googletest.o `test -f 'google/protobuf/testing/googletest.cc' || echo '$(srcdir)/'`google/protobuf/testing/googletest.cc - -google/protobuf/testing/protobuf_lazy_descriptor_test-googletest.obj: google/protobuf/testing/googletest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/testing/protobuf_lazy_descriptor_test-googletest.obj -MD -MP -MF google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-googletest.Tpo -c -o google/protobuf/testing/protobuf_lazy_descriptor_test-googletest.obj `if test -f 'google/protobuf/testing/googletest.cc'; then $(CYGPATH_W) 'google/protobuf/testing/googletest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/testing/googletest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-googletest.Tpo google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-googletest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/testing/googletest.cc' object='google/protobuf/testing/protobuf_lazy_descriptor_test-googletest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/testing/protobuf_lazy_descriptor_test-googletest.obj `if test -f 'google/protobuf/testing/googletest.cc'; then $(CYGPATH_W) 'google/protobuf/testing/googletest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/testing/googletest.cc'; fi` - -google/protobuf/testing/protobuf_lazy_descriptor_test-file.o: google/protobuf/testing/file.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/testing/protobuf_lazy_descriptor_test-file.o -MD -MP -MF google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-file.Tpo -c -o google/protobuf/testing/protobuf_lazy_descriptor_test-file.o `test -f 'google/protobuf/testing/file.cc' || echo '$(srcdir)/'`google/protobuf/testing/file.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-file.Tpo google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-file.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/testing/file.cc' object='google/protobuf/testing/protobuf_lazy_descriptor_test-file.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/testing/protobuf_lazy_descriptor_test-file.o `test -f 'google/protobuf/testing/file.cc' || echo '$(srcdir)/'`google/protobuf/testing/file.cc - -google/protobuf/testing/protobuf_lazy_descriptor_test-file.obj: google/protobuf/testing/file.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/testing/protobuf_lazy_descriptor_test-file.obj -MD -MP -MF google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-file.Tpo -c -o google/protobuf/testing/protobuf_lazy_descriptor_test-file.obj `if test -f 'google/protobuf/testing/file.cc'; then $(CYGPATH_W) 'google/protobuf/testing/file.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/testing/file.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-file.Tpo google/protobuf/testing/$(DEPDIR)/protobuf_lazy_descriptor_test-file.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/testing/file.cc' object='google/protobuf/testing/protobuf_lazy_descriptor_test-file.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/testing/protobuf_lazy_descriptor_test-file.obj `if test -f 'google/protobuf/testing/file.cc'; then $(CYGPATH_W) 'google/protobuf/testing/file.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/testing/file.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest_lite.pb.o: google/protobuf/unittest_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_lite.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_lite.pb.o `test -f 'google/protobuf/unittest_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_lite.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_lite.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_lite.pb.o `test -f 'google/protobuf/unittest_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_lite.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest_lite.pb.obj: google/protobuf/unittest_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_lite.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_lite.pb.obj `if test -f 'google/protobuf/unittest_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_lite.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_lite.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_lite.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_lite.pb.obj `if test -f 'google/protobuf/unittest_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_lite.pb.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest_import_lite.pb.o: google/protobuf/unittest_import_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_import_lite.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_lite.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import_lite.pb.o `test -f 'google/protobuf/unittest_import_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_lite.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_import_lite.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import_lite.pb.o `test -f 'google/protobuf/unittest_import_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_lite.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest_import_lite.pb.obj: google/protobuf/unittest_import_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_import_lite.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_lite.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import_lite.pb.obj `if test -f 'google/protobuf/unittest_import_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_lite.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_lite.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_import_lite.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import_lite.pb.obj `if test -f 'google/protobuf/unittest_import_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_lite.pb.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.o: google/protobuf/unittest_import_public_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.o `test -f 'google/protobuf/unittest_import_public_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_public_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_public_lite.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.o `test -f 'google/protobuf/unittest_import_public_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_public_lite.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.obj: google/protobuf/unittest_import_public_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.obj `if test -f 'google/protobuf/unittest_import_public_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_public_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_public_lite.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_public_lite.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public_lite.pb.obj `if test -f 'google/protobuf/unittest_import_public_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_public_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_public_lite.pb.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest.pb.o: google/protobuf/unittest.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest.pb.o `test -f 'google/protobuf/unittest.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest.pb.o `test -f 'google/protobuf/unittest.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest.pb.obj: google/protobuf/unittest.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest.pb.obj `if test -f 'google/protobuf/unittest.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest.pb.obj `if test -f 'google/protobuf/unittest.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest.pb.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest_empty.pb.o: google/protobuf/unittest_empty.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_empty.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_empty.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_empty.pb.o `test -f 'google/protobuf/unittest_empty.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_empty.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_empty.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_empty.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_empty.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_empty.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_empty.pb.o `test -f 'google/protobuf/unittest_empty.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_empty.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest_empty.pb.obj: google/protobuf/unittest_empty.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_empty.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_empty.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_empty.pb.obj `if test -f 'google/protobuf/unittest_empty.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_empty.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_empty.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_empty.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_empty.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_empty.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_empty.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_empty.pb.obj `if test -f 'google/protobuf/unittest_empty.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_empty.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_empty.pb.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest_import.pb.o: google/protobuf/unittest_import.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_import.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import.pb.o `test -f 'google/protobuf/unittest_import.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_import.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import.pb.o `test -f 'google/protobuf/unittest_import.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest_import.pb.obj: google/protobuf/unittest_import.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_import.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import.pb.obj `if test -f 'google/protobuf/unittest_import.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_import.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import.pb.obj `if test -f 'google/protobuf/unittest_import.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import.pb.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public.pb.o: google/protobuf/unittest_import_public.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public.pb.o `test -f 'google/protobuf/unittest_import_public.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_public.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_public.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public.pb.o `test -f 'google/protobuf/unittest_import_public.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_public.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public.pb.obj: google/protobuf/unittest_import_public.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public.pb.obj `if test -f 'google/protobuf/unittest_import_public.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_public.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_public.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_import_public.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_public.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_import_public.pb.obj `if test -f 'google/protobuf/unittest_import_public.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_public.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_public.pb.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest_mset.pb.o: google/protobuf/unittest_mset.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_mset.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_mset.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_mset.pb.o `test -f 'google/protobuf/unittest_mset.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_mset.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_mset.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_mset.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_mset.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_mset.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_mset.pb.o `test -f 'google/protobuf/unittest_mset.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_mset.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest_mset.pb.obj: google/protobuf/unittest_mset.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_mset.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_mset.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_mset.pb.obj `if test -f 'google/protobuf/unittest_mset.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_mset.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_mset.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_mset.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_mset.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_mset.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_mset.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_mset.pb.obj `if test -f 'google/protobuf/unittest_mset.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_mset.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_mset.pb.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.o: google/protobuf/unittest_optimize_for.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.o `test -f 'google/protobuf/unittest_optimize_for.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_optimize_for.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_optimize_for.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.o `test -f 'google/protobuf/unittest_optimize_for.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_optimize_for.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.obj: google/protobuf/unittest_optimize_for.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.obj `if test -f 'google/protobuf/unittest_optimize_for.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_optimize_for.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_optimize_for.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_optimize_for.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_optimize_for.pb.obj `if test -f 'google/protobuf/unittest_optimize_for.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_optimize_for.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_optimize_for.pb.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.o: google/protobuf/unittest_embed_optimize_for.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.o `test -f 'google/protobuf/unittest_embed_optimize_for.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_embed_optimize_for.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_embed_optimize_for.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.o `test -f 'google/protobuf/unittest_embed_optimize_for.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_embed_optimize_for.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.obj: google/protobuf/unittest_embed_optimize_for.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.obj `if test -f 'google/protobuf/unittest_embed_optimize_for.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_embed_optimize_for.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_embed_optimize_for.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_embed_optimize_for.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_embed_optimize_for.pb.obj `if test -f 'google/protobuf/unittest_embed_optimize_for.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_embed_optimize_for.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_embed_optimize_for.pb.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest_custom_options.pb.o: google/protobuf/unittest_custom_options.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_custom_options.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_custom_options.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_custom_options.pb.o `test -f 'google/protobuf/unittest_custom_options.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_custom_options.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_custom_options.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_custom_options.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_custom_options.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_custom_options.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_custom_options.pb.o `test -f 'google/protobuf/unittest_custom_options.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_custom_options.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest_custom_options.pb.obj: google/protobuf/unittest_custom_options.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_custom_options.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_custom_options.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_custom_options.pb.obj `if test -f 'google/protobuf/unittest_custom_options.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_custom_options.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_custom_options.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_custom_options.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_custom_options.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_custom_options.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_custom_options.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_custom_options.pb.obj `if test -f 'google/protobuf/unittest_custom_options.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_custom_options.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_custom_options.pb.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.o: google/protobuf/unittest_lite_imports_nonlite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.o `test -f 'google/protobuf/unittest_lite_imports_nonlite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_lite_imports_nonlite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_lite_imports_nonlite.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.o `test -f 'google/protobuf/unittest_lite_imports_nonlite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_lite_imports_nonlite.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.obj: google/protobuf/unittest_lite_imports_nonlite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.obj `if test -f 'google/protobuf/unittest_lite_imports_nonlite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_lite_imports_nonlite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_lite_imports_nonlite.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_lite_imports_nonlite.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_lite_imports_nonlite.pb.obj `if test -f 'google/protobuf/unittest_lite_imports_nonlite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_lite_imports_nonlite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_lite_imports_nonlite.pb.cc'; fi` - -google/protobuf/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.o: google/protobuf/unittest_no_generic_services.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.o `test -f 'google/protobuf/unittest_no_generic_services.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_no_generic_services.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_no_generic_services.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.o `test -f 'google/protobuf/unittest_no_generic_services.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_no_generic_services.pb.cc - -google/protobuf/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.obj: google/protobuf/unittest_no_generic_services.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.Tpo -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.obj `if test -f 'google/protobuf/unittest_no_generic_services.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_no_generic_services.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_no_generic_services.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_no_generic_services.pb.cc' object='google/protobuf/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lazy_descriptor_test-unittest_no_generic_services.pb.obj `if test -f 'google/protobuf/unittest_no_generic_services.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_no_generic_services.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_no_generic_services.pb.cc'; fi` - -google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.o: google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.o -MD -MP -MF google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.Tpo -c -o google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.o `test -f 'google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc' || echo '$(srcdir)/'`google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.Tpo google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc' object='google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.o `test -f 'google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc' || echo '$(srcdir)/'`google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc - -google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.obj: google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.obj -MD -MP -MF google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.Tpo -c -o google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.obj `if test -f 'google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.Tpo google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc' object='google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_lazy_descriptor_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_lazy_descriptor_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/cpp/protobuf_lazy_descriptor_test-cpp_test_bad_identifiers.pb.obj `if test -f 'google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc'; fi` - -google/protobuf/protobuf_lite_test-lite_unittest.o: google/protobuf/lite_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lite_test-lite_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lite_test-lite_unittest.Tpo -c -o google/protobuf/protobuf_lite_test-lite_unittest.o `test -f 'google/protobuf/lite_unittest.cc' || echo '$(srcdir)/'`google/protobuf/lite_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lite_test-lite_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_lite_test-lite_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/lite_unittest.cc' object='google/protobuf/protobuf_lite_test-lite_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lite_test-lite_unittest.o `test -f 'google/protobuf/lite_unittest.cc' || echo '$(srcdir)/'`google/protobuf/lite_unittest.cc - -google/protobuf/protobuf_lite_test-lite_unittest.obj: google/protobuf/lite_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lite_test-lite_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lite_test-lite_unittest.Tpo -c -o google/protobuf/protobuf_lite_test-lite_unittest.obj `if test -f 'google/protobuf/lite_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/lite_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/lite_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lite_test-lite_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_lite_test-lite_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/lite_unittest.cc' object='google/protobuf/protobuf_lite_test-lite_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lite_test-lite_unittest.obj `if test -f 'google/protobuf/lite_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/lite_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/lite_unittest.cc'; fi` - -google/protobuf/protobuf_lite_test-test_util_lite.o: google/protobuf/test_util_lite.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lite_test-test_util_lite.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lite_test-test_util_lite.Tpo -c -o google/protobuf/protobuf_lite_test-test_util_lite.o `test -f 'google/protobuf/test_util_lite.cc' || echo '$(srcdir)/'`google/protobuf/test_util_lite.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lite_test-test_util_lite.Tpo google/protobuf/$(DEPDIR)/protobuf_lite_test-test_util_lite.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_util_lite.cc' object='google/protobuf/protobuf_lite_test-test_util_lite.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lite_test-test_util_lite.o `test -f 'google/protobuf/test_util_lite.cc' || echo '$(srcdir)/'`google/protobuf/test_util_lite.cc - -google/protobuf/protobuf_lite_test-test_util_lite.obj: google/protobuf/test_util_lite.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lite_test-test_util_lite.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lite_test-test_util_lite.Tpo -c -o google/protobuf/protobuf_lite_test-test_util_lite.obj `if test -f 'google/protobuf/test_util_lite.cc'; then $(CYGPATH_W) 'google/protobuf/test_util_lite.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_util_lite.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lite_test-test_util_lite.Tpo google/protobuf/$(DEPDIR)/protobuf_lite_test-test_util_lite.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_util_lite.cc' object='google/protobuf/protobuf_lite_test-test_util_lite.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lite_test-test_util_lite.obj `if test -f 'google/protobuf/test_util_lite.cc'; then $(CYGPATH_W) 'google/protobuf/test_util_lite.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_util_lite.cc'; fi` - -google/protobuf/protobuf_lite_test-unittest_lite.pb.o: google/protobuf/unittest_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lite_test-unittest_lite.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_lite.pb.Tpo -c -o google/protobuf/protobuf_lite_test-unittest_lite.pb.o `test -f 'google/protobuf/unittest_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_lite.pb.cc' object='google/protobuf/protobuf_lite_test-unittest_lite.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lite_test-unittest_lite.pb.o `test -f 'google/protobuf/unittest_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_lite.pb.cc - -google/protobuf/protobuf_lite_test-unittest_lite.pb.obj: google/protobuf/unittest_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lite_test-unittest_lite.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_lite.pb.Tpo -c -o google/protobuf/protobuf_lite_test-unittest_lite.pb.obj `if test -f 'google/protobuf/unittest_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_lite.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_lite.pb.cc' object='google/protobuf/protobuf_lite_test-unittest_lite.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lite_test-unittest_lite.pb.obj `if test -f 'google/protobuf/unittest_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_lite.pb.cc'; fi` - -google/protobuf/protobuf_lite_test-unittest_import_lite.pb.o: google/protobuf/unittest_import_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lite_test-unittest_import_lite.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_lite.pb.Tpo -c -o google/protobuf/protobuf_lite_test-unittest_import_lite.pb.o `test -f 'google/protobuf/unittest_import_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_lite.pb.cc' object='google/protobuf/protobuf_lite_test-unittest_import_lite.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lite_test-unittest_import_lite.pb.o `test -f 'google/protobuf/unittest_import_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_lite.pb.cc - -google/protobuf/protobuf_lite_test-unittest_import_lite.pb.obj: google/protobuf/unittest_import_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lite_test-unittest_import_lite.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_lite.pb.Tpo -c -o google/protobuf/protobuf_lite_test-unittest_import_lite.pb.obj `if test -f 'google/protobuf/unittest_import_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_lite.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_lite.pb.cc' object='google/protobuf/protobuf_lite_test-unittest_import_lite.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lite_test-unittest_import_lite.pb.obj `if test -f 'google/protobuf/unittest_import_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_lite.pb.cc'; fi` - -google/protobuf/protobuf_lite_test-unittest_import_public_lite.pb.o: google/protobuf/unittest_import_public_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lite_test-unittest_import_public_lite.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_public_lite.pb.Tpo -c -o google/protobuf/protobuf_lite_test-unittest_import_public_lite.pb.o `test -f 'google/protobuf/unittest_import_public_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_public_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_public_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_public_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_public_lite.pb.cc' object='google/protobuf/protobuf_lite_test-unittest_import_public_lite.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lite_test-unittest_import_public_lite.pb.o `test -f 'google/protobuf/unittest_import_public_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_public_lite.pb.cc - -google/protobuf/protobuf_lite_test-unittest_import_public_lite.pb.obj: google/protobuf/unittest_import_public_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_lite_test-unittest_import_public_lite.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_public_lite.pb.Tpo -c -o google/protobuf/protobuf_lite_test-unittest_import_public_lite.pb.obj `if test -f 'google/protobuf/unittest_import_public_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_public_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_public_lite.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_public_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_lite_test-unittest_import_public_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_public_lite.pb.cc' object='google/protobuf/protobuf_lite_test-unittest_import_public_lite.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(protobuf_lite_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_lite_test-unittest_import_public_lite.pb.obj `if test -f 'google/protobuf/unittest_import_public_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_public_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_public_lite.pb.cc'; fi` - -google/protobuf/stubs/protobuf_test-common_unittest.o: google/protobuf/stubs/common_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-common_unittest.o -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-common_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-common_unittest.o `test -f 'google/protobuf/stubs/common_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/common_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-common_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-common_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/common_unittest.cc' object='google/protobuf/stubs/protobuf_test-common_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-common_unittest.o `test -f 'google/protobuf/stubs/common_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/common_unittest.cc - -google/protobuf/stubs/protobuf_test-common_unittest.obj: google/protobuf/stubs/common_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-common_unittest.obj -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-common_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-common_unittest.obj `if test -f 'google/protobuf/stubs/common_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/common_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/common_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-common_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-common_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/common_unittest.cc' object='google/protobuf/stubs/protobuf_test-common_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-common_unittest.obj `if test -f 'google/protobuf/stubs/common_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/common_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/common_unittest.cc'; fi` - -google/protobuf/stubs/protobuf_test-once_unittest.o: google/protobuf/stubs/once_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-once_unittest.o -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-once_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-once_unittest.o `test -f 'google/protobuf/stubs/once_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/once_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-once_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-once_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/once_unittest.cc' object='google/protobuf/stubs/protobuf_test-once_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-once_unittest.o `test -f 'google/protobuf/stubs/once_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/once_unittest.cc - -google/protobuf/stubs/protobuf_test-once_unittest.obj: google/protobuf/stubs/once_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-once_unittest.obj -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-once_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-once_unittest.obj `if test -f 'google/protobuf/stubs/once_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/once_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/once_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-once_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-once_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/once_unittest.cc' object='google/protobuf/stubs/protobuf_test-once_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-once_unittest.obj `if test -f 'google/protobuf/stubs/once_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/once_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/once_unittest.cc'; fi` - -google/protobuf/stubs/protobuf_test-strutil_unittest.o: google/protobuf/stubs/strutil_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-strutil_unittest.o -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-strutil_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-strutil_unittest.o `test -f 'google/protobuf/stubs/strutil_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/strutil_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-strutil_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-strutil_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/strutil_unittest.cc' object='google/protobuf/stubs/protobuf_test-strutil_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-strutil_unittest.o `test -f 'google/protobuf/stubs/strutil_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/strutil_unittest.cc - -google/protobuf/stubs/protobuf_test-strutil_unittest.obj: google/protobuf/stubs/strutil_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-strutil_unittest.obj -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-strutil_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-strutil_unittest.obj `if test -f 'google/protobuf/stubs/strutil_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/strutil_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/strutil_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-strutil_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-strutil_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/strutil_unittest.cc' object='google/protobuf/stubs/protobuf_test-strutil_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-strutil_unittest.obj `if test -f 'google/protobuf/stubs/strutil_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/strutil_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/strutil_unittest.cc'; fi` - -google/protobuf/stubs/protobuf_test-structurally_valid_unittest.o: google/protobuf/stubs/structurally_valid_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-structurally_valid_unittest.o -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-structurally_valid_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-structurally_valid_unittest.o `test -f 'google/protobuf/stubs/structurally_valid_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/structurally_valid_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-structurally_valid_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-structurally_valid_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/structurally_valid_unittest.cc' object='google/protobuf/stubs/protobuf_test-structurally_valid_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-structurally_valid_unittest.o `test -f 'google/protobuf/stubs/structurally_valid_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/structurally_valid_unittest.cc - -google/protobuf/stubs/protobuf_test-structurally_valid_unittest.obj: google/protobuf/stubs/structurally_valid_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-structurally_valid_unittest.obj -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-structurally_valid_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-structurally_valid_unittest.obj `if test -f 'google/protobuf/stubs/structurally_valid_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/structurally_valid_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/structurally_valid_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-structurally_valid_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-structurally_valid_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/structurally_valid_unittest.cc' object='google/protobuf/stubs/protobuf_test-structurally_valid_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-structurally_valid_unittest.obj `if test -f 'google/protobuf/stubs/structurally_valid_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/structurally_valid_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/structurally_valid_unittest.cc'; fi` - -google/protobuf/stubs/protobuf_test-stringprintf_unittest.o: google/protobuf/stubs/stringprintf_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-stringprintf_unittest.o -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-stringprintf_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-stringprintf_unittest.o `test -f 'google/protobuf/stubs/stringprintf_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/stringprintf_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-stringprintf_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-stringprintf_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/stringprintf_unittest.cc' object='google/protobuf/stubs/protobuf_test-stringprintf_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-stringprintf_unittest.o `test -f 'google/protobuf/stubs/stringprintf_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/stringprintf_unittest.cc - -google/protobuf/stubs/protobuf_test-stringprintf_unittest.obj: google/protobuf/stubs/stringprintf_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-stringprintf_unittest.obj -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-stringprintf_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-stringprintf_unittest.obj `if test -f 'google/protobuf/stubs/stringprintf_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/stringprintf_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/stringprintf_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-stringprintf_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-stringprintf_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/stringprintf_unittest.cc' object='google/protobuf/stubs/protobuf_test-stringprintf_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-stringprintf_unittest.obj `if test -f 'google/protobuf/stubs/stringprintf_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/stringprintf_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/stringprintf_unittest.cc'; fi` - -google/protobuf/stubs/protobuf_test-template_util_unittest.o: google/protobuf/stubs/template_util_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-template_util_unittest.o -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-template_util_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-template_util_unittest.o `test -f 'google/protobuf/stubs/template_util_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/template_util_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-template_util_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-template_util_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/template_util_unittest.cc' object='google/protobuf/stubs/protobuf_test-template_util_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-template_util_unittest.o `test -f 'google/protobuf/stubs/template_util_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/template_util_unittest.cc - -google/protobuf/stubs/protobuf_test-template_util_unittest.obj: google/protobuf/stubs/template_util_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-template_util_unittest.obj -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-template_util_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-template_util_unittest.obj `if test -f 'google/protobuf/stubs/template_util_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/template_util_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/template_util_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-template_util_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-template_util_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/template_util_unittest.cc' object='google/protobuf/stubs/protobuf_test-template_util_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-template_util_unittest.obj `if test -f 'google/protobuf/stubs/template_util_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/template_util_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/template_util_unittest.cc'; fi` - -google/protobuf/stubs/protobuf_test-type_traits_unittest.o: google/protobuf/stubs/type_traits_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-type_traits_unittest.o -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-type_traits_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-type_traits_unittest.o `test -f 'google/protobuf/stubs/type_traits_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/type_traits_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-type_traits_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-type_traits_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/type_traits_unittest.cc' object='google/protobuf/stubs/protobuf_test-type_traits_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-type_traits_unittest.o `test -f 'google/protobuf/stubs/type_traits_unittest.cc' || echo '$(srcdir)/'`google/protobuf/stubs/type_traits_unittest.cc - -google/protobuf/stubs/protobuf_test-type_traits_unittest.obj: google/protobuf/stubs/type_traits_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/stubs/protobuf_test-type_traits_unittest.obj -MD -MP -MF google/protobuf/stubs/$(DEPDIR)/protobuf_test-type_traits_unittest.Tpo -c -o google/protobuf/stubs/protobuf_test-type_traits_unittest.obj `if test -f 'google/protobuf/stubs/type_traits_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/type_traits_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/type_traits_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/stubs/$(DEPDIR)/protobuf_test-type_traits_unittest.Tpo google/protobuf/stubs/$(DEPDIR)/protobuf_test-type_traits_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/stubs/type_traits_unittest.cc' object='google/protobuf/stubs/protobuf_test-type_traits_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/stubs/protobuf_test-type_traits_unittest.obj `if test -f 'google/protobuf/stubs/type_traits_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/stubs/type_traits_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/stubs/type_traits_unittest.cc'; fi` - -google/protobuf/protobuf_test-descriptor_database_unittest.o: google/protobuf/descriptor_database_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-descriptor_database_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-descriptor_database_unittest.Tpo -c -o google/protobuf/protobuf_test-descriptor_database_unittest.o `test -f 'google/protobuf/descriptor_database_unittest.cc' || echo '$(srcdir)/'`google/protobuf/descriptor_database_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-descriptor_database_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-descriptor_database_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/descriptor_database_unittest.cc' object='google/protobuf/protobuf_test-descriptor_database_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-descriptor_database_unittest.o `test -f 'google/protobuf/descriptor_database_unittest.cc' || echo '$(srcdir)/'`google/protobuf/descriptor_database_unittest.cc - -google/protobuf/protobuf_test-descriptor_database_unittest.obj: google/protobuf/descriptor_database_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-descriptor_database_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-descriptor_database_unittest.Tpo -c -o google/protobuf/protobuf_test-descriptor_database_unittest.obj `if test -f 'google/protobuf/descriptor_database_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/descriptor_database_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/descriptor_database_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-descriptor_database_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-descriptor_database_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/descriptor_database_unittest.cc' object='google/protobuf/protobuf_test-descriptor_database_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-descriptor_database_unittest.obj `if test -f 'google/protobuf/descriptor_database_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/descriptor_database_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/descriptor_database_unittest.cc'; fi` - -google/protobuf/protobuf_test-descriptor_unittest.o: google/protobuf/descriptor_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-descriptor_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-descriptor_unittest.Tpo -c -o google/protobuf/protobuf_test-descriptor_unittest.o `test -f 'google/protobuf/descriptor_unittest.cc' || echo '$(srcdir)/'`google/protobuf/descriptor_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-descriptor_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-descriptor_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/descriptor_unittest.cc' object='google/protobuf/protobuf_test-descriptor_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-descriptor_unittest.o `test -f 'google/protobuf/descriptor_unittest.cc' || echo '$(srcdir)/'`google/protobuf/descriptor_unittest.cc - -google/protobuf/protobuf_test-descriptor_unittest.obj: google/protobuf/descriptor_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-descriptor_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-descriptor_unittest.Tpo -c -o google/protobuf/protobuf_test-descriptor_unittest.obj `if test -f 'google/protobuf/descriptor_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/descriptor_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/descriptor_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-descriptor_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-descriptor_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/descriptor_unittest.cc' object='google/protobuf/protobuf_test-descriptor_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-descriptor_unittest.obj `if test -f 'google/protobuf/descriptor_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/descriptor_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/descriptor_unittest.cc'; fi` - -google/protobuf/protobuf_test-dynamic_message_unittest.o: google/protobuf/dynamic_message_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-dynamic_message_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-dynamic_message_unittest.Tpo -c -o google/protobuf/protobuf_test-dynamic_message_unittest.o `test -f 'google/protobuf/dynamic_message_unittest.cc' || echo '$(srcdir)/'`google/protobuf/dynamic_message_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-dynamic_message_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-dynamic_message_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/dynamic_message_unittest.cc' object='google/protobuf/protobuf_test-dynamic_message_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-dynamic_message_unittest.o `test -f 'google/protobuf/dynamic_message_unittest.cc' || echo '$(srcdir)/'`google/protobuf/dynamic_message_unittest.cc - -google/protobuf/protobuf_test-dynamic_message_unittest.obj: google/protobuf/dynamic_message_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-dynamic_message_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-dynamic_message_unittest.Tpo -c -o google/protobuf/protobuf_test-dynamic_message_unittest.obj `if test -f 'google/protobuf/dynamic_message_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/dynamic_message_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/dynamic_message_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-dynamic_message_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-dynamic_message_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/dynamic_message_unittest.cc' object='google/protobuf/protobuf_test-dynamic_message_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-dynamic_message_unittest.obj `if test -f 'google/protobuf/dynamic_message_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/dynamic_message_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/dynamic_message_unittest.cc'; fi` - -google/protobuf/protobuf_test-extension_set_unittest.o: google/protobuf/extension_set_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-extension_set_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-extension_set_unittest.Tpo -c -o google/protobuf/protobuf_test-extension_set_unittest.o `test -f 'google/protobuf/extension_set_unittest.cc' || echo '$(srcdir)/'`google/protobuf/extension_set_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-extension_set_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-extension_set_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/extension_set_unittest.cc' object='google/protobuf/protobuf_test-extension_set_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-extension_set_unittest.o `test -f 'google/protobuf/extension_set_unittest.cc' || echo '$(srcdir)/'`google/protobuf/extension_set_unittest.cc - -google/protobuf/protobuf_test-extension_set_unittest.obj: google/protobuf/extension_set_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-extension_set_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-extension_set_unittest.Tpo -c -o google/protobuf/protobuf_test-extension_set_unittest.obj `if test -f 'google/protobuf/extension_set_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/extension_set_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/extension_set_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-extension_set_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-extension_set_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/extension_set_unittest.cc' object='google/protobuf/protobuf_test-extension_set_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-extension_set_unittest.obj `if test -f 'google/protobuf/extension_set_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/extension_set_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/extension_set_unittest.cc'; fi` - -google/protobuf/protobuf_test-generated_message_reflection_unittest.o: google/protobuf/generated_message_reflection_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-generated_message_reflection_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-generated_message_reflection_unittest.Tpo -c -o google/protobuf/protobuf_test-generated_message_reflection_unittest.o `test -f 'google/protobuf/generated_message_reflection_unittest.cc' || echo '$(srcdir)/'`google/protobuf/generated_message_reflection_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-generated_message_reflection_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-generated_message_reflection_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/generated_message_reflection_unittest.cc' object='google/protobuf/protobuf_test-generated_message_reflection_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-generated_message_reflection_unittest.o `test -f 'google/protobuf/generated_message_reflection_unittest.cc' || echo '$(srcdir)/'`google/protobuf/generated_message_reflection_unittest.cc - -google/protobuf/protobuf_test-generated_message_reflection_unittest.obj: google/protobuf/generated_message_reflection_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-generated_message_reflection_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-generated_message_reflection_unittest.Tpo -c -o google/protobuf/protobuf_test-generated_message_reflection_unittest.obj `if test -f 'google/protobuf/generated_message_reflection_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/generated_message_reflection_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/generated_message_reflection_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-generated_message_reflection_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-generated_message_reflection_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/generated_message_reflection_unittest.cc' object='google/protobuf/protobuf_test-generated_message_reflection_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-generated_message_reflection_unittest.obj `if test -f 'google/protobuf/generated_message_reflection_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/generated_message_reflection_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/generated_message_reflection_unittest.cc'; fi` - -google/protobuf/protobuf_test-message_unittest.o: google/protobuf/message_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-message_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-message_unittest.Tpo -c -o google/protobuf/protobuf_test-message_unittest.o `test -f 'google/protobuf/message_unittest.cc' || echo '$(srcdir)/'`google/protobuf/message_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-message_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-message_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/message_unittest.cc' object='google/protobuf/protobuf_test-message_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-message_unittest.o `test -f 'google/protobuf/message_unittest.cc' || echo '$(srcdir)/'`google/protobuf/message_unittest.cc - -google/protobuf/protobuf_test-message_unittest.obj: google/protobuf/message_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-message_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-message_unittest.Tpo -c -o google/protobuf/protobuf_test-message_unittest.obj `if test -f 'google/protobuf/message_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/message_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/message_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-message_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-message_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/message_unittest.cc' object='google/protobuf/protobuf_test-message_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-message_unittest.obj `if test -f 'google/protobuf/message_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/message_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/message_unittest.cc'; fi` - -google/protobuf/protobuf_test-reflection_ops_unittest.o: google/protobuf/reflection_ops_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-reflection_ops_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-reflection_ops_unittest.Tpo -c -o google/protobuf/protobuf_test-reflection_ops_unittest.o `test -f 'google/protobuf/reflection_ops_unittest.cc' || echo '$(srcdir)/'`google/protobuf/reflection_ops_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-reflection_ops_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-reflection_ops_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/reflection_ops_unittest.cc' object='google/protobuf/protobuf_test-reflection_ops_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-reflection_ops_unittest.o `test -f 'google/protobuf/reflection_ops_unittest.cc' || echo '$(srcdir)/'`google/protobuf/reflection_ops_unittest.cc - -google/protobuf/protobuf_test-reflection_ops_unittest.obj: google/protobuf/reflection_ops_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-reflection_ops_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-reflection_ops_unittest.Tpo -c -o google/protobuf/protobuf_test-reflection_ops_unittest.obj `if test -f 'google/protobuf/reflection_ops_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/reflection_ops_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/reflection_ops_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-reflection_ops_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-reflection_ops_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/reflection_ops_unittest.cc' object='google/protobuf/protobuf_test-reflection_ops_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-reflection_ops_unittest.obj `if test -f 'google/protobuf/reflection_ops_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/reflection_ops_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/reflection_ops_unittest.cc'; fi` - -google/protobuf/protobuf_test-repeated_field_unittest.o: google/protobuf/repeated_field_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-repeated_field_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_unittest.Tpo -c -o google/protobuf/protobuf_test-repeated_field_unittest.o `test -f 'google/protobuf/repeated_field_unittest.cc' || echo '$(srcdir)/'`google/protobuf/repeated_field_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/repeated_field_unittest.cc' object='google/protobuf/protobuf_test-repeated_field_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-repeated_field_unittest.o `test -f 'google/protobuf/repeated_field_unittest.cc' || echo '$(srcdir)/'`google/protobuf/repeated_field_unittest.cc - -google/protobuf/protobuf_test-repeated_field_unittest.obj: google/protobuf/repeated_field_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-repeated_field_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_unittest.Tpo -c -o google/protobuf/protobuf_test-repeated_field_unittest.obj `if test -f 'google/protobuf/repeated_field_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/repeated_field_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/repeated_field_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/repeated_field_unittest.cc' object='google/protobuf/protobuf_test-repeated_field_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-repeated_field_unittest.obj `if test -f 'google/protobuf/repeated_field_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/repeated_field_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/repeated_field_unittest.cc'; fi` - -google/protobuf/protobuf_test-repeated_field_reflection_unittest.o: google/protobuf/repeated_field_reflection_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-repeated_field_reflection_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_reflection_unittest.Tpo -c -o google/protobuf/protobuf_test-repeated_field_reflection_unittest.o `test -f 'google/protobuf/repeated_field_reflection_unittest.cc' || echo '$(srcdir)/'`google/protobuf/repeated_field_reflection_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_reflection_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_reflection_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/repeated_field_reflection_unittest.cc' object='google/protobuf/protobuf_test-repeated_field_reflection_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-repeated_field_reflection_unittest.o `test -f 'google/protobuf/repeated_field_reflection_unittest.cc' || echo '$(srcdir)/'`google/protobuf/repeated_field_reflection_unittest.cc - -google/protobuf/protobuf_test-repeated_field_reflection_unittest.obj: google/protobuf/repeated_field_reflection_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-repeated_field_reflection_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_reflection_unittest.Tpo -c -o google/protobuf/protobuf_test-repeated_field_reflection_unittest.obj `if test -f 'google/protobuf/repeated_field_reflection_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/repeated_field_reflection_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/repeated_field_reflection_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_reflection_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-repeated_field_reflection_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/repeated_field_reflection_unittest.cc' object='google/protobuf/protobuf_test-repeated_field_reflection_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-repeated_field_reflection_unittest.obj `if test -f 'google/protobuf/repeated_field_reflection_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/repeated_field_reflection_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/repeated_field_reflection_unittest.cc'; fi` - -google/protobuf/protobuf_test-text_format_unittest.o: google/protobuf/text_format_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-text_format_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-text_format_unittest.Tpo -c -o google/protobuf/protobuf_test-text_format_unittest.o `test -f 'google/protobuf/text_format_unittest.cc' || echo '$(srcdir)/'`google/protobuf/text_format_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-text_format_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-text_format_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/text_format_unittest.cc' object='google/protobuf/protobuf_test-text_format_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-text_format_unittest.o `test -f 'google/protobuf/text_format_unittest.cc' || echo '$(srcdir)/'`google/protobuf/text_format_unittest.cc - -google/protobuf/protobuf_test-text_format_unittest.obj: google/protobuf/text_format_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-text_format_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-text_format_unittest.Tpo -c -o google/protobuf/protobuf_test-text_format_unittest.obj `if test -f 'google/protobuf/text_format_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/text_format_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/text_format_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-text_format_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-text_format_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/text_format_unittest.cc' object='google/protobuf/protobuf_test-text_format_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-text_format_unittest.obj `if test -f 'google/protobuf/text_format_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/text_format_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/text_format_unittest.cc'; fi` - -google/protobuf/protobuf_test-unknown_field_set_unittest.o: google/protobuf/unknown_field_set_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unknown_field_set_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unknown_field_set_unittest.Tpo -c -o google/protobuf/protobuf_test-unknown_field_set_unittest.o `test -f 'google/protobuf/unknown_field_set_unittest.cc' || echo '$(srcdir)/'`google/protobuf/unknown_field_set_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unknown_field_set_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unknown_field_set_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unknown_field_set_unittest.cc' object='google/protobuf/protobuf_test-unknown_field_set_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unknown_field_set_unittest.o `test -f 'google/protobuf/unknown_field_set_unittest.cc' || echo '$(srcdir)/'`google/protobuf/unknown_field_set_unittest.cc - -google/protobuf/protobuf_test-unknown_field_set_unittest.obj: google/protobuf/unknown_field_set_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unknown_field_set_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unknown_field_set_unittest.Tpo -c -o google/protobuf/protobuf_test-unknown_field_set_unittest.obj `if test -f 'google/protobuf/unknown_field_set_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/unknown_field_set_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unknown_field_set_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unknown_field_set_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unknown_field_set_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unknown_field_set_unittest.cc' object='google/protobuf/protobuf_test-unknown_field_set_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unknown_field_set_unittest.obj `if test -f 'google/protobuf/unknown_field_set_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/unknown_field_set_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unknown_field_set_unittest.cc'; fi` - -google/protobuf/protobuf_test-wire_format_unittest.o: google/protobuf/wire_format_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-wire_format_unittest.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-wire_format_unittest.Tpo -c -o google/protobuf/protobuf_test-wire_format_unittest.o `test -f 'google/protobuf/wire_format_unittest.cc' || echo '$(srcdir)/'`google/protobuf/wire_format_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-wire_format_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-wire_format_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/wire_format_unittest.cc' object='google/protobuf/protobuf_test-wire_format_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-wire_format_unittest.o `test -f 'google/protobuf/wire_format_unittest.cc' || echo '$(srcdir)/'`google/protobuf/wire_format_unittest.cc - -google/protobuf/protobuf_test-wire_format_unittest.obj: google/protobuf/wire_format_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-wire_format_unittest.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-wire_format_unittest.Tpo -c -o google/protobuf/protobuf_test-wire_format_unittest.obj `if test -f 'google/protobuf/wire_format_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/wire_format_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/wire_format_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-wire_format_unittest.Tpo google/protobuf/$(DEPDIR)/protobuf_test-wire_format_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/wire_format_unittest.cc' object='google/protobuf/protobuf_test-wire_format_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-wire_format_unittest.obj `if test -f 'google/protobuf/wire_format_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/wire_format_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/wire_format_unittest.cc'; fi` - -google/protobuf/io/protobuf_test-coded_stream_unittest.o: google/protobuf/io/coded_stream_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/io/protobuf_test-coded_stream_unittest.o -MD -MP -MF google/protobuf/io/$(DEPDIR)/protobuf_test-coded_stream_unittest.Tpo -c -o google/protobuf/io/protobuf_test-coded_stream_unittest.o `test -f 'google/protobuf/io/coded_stream_unittest.cc' || echo '$(srcdir)/'`google/protobuf/io/coded_stream_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/io/$(DEPDIR)/protobuf_test-coded_stream_unittest.Tpo google/protobuf/io/$(DEPDIR)/protobuf_test-coded_stream_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/io/coded_stream_unittest.cc' object='google/protobuf/io/protobuf_test-coded_stream_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/io/protobuf_test-coded_stream_unittest.o `test -f 'google/protobuf/io/coded_stream_unittest.cc' || echo '$(srcdir)/'`google/protobuf/io/coded_stream_unittest.cc - -google/protobuf/io/protobuf_test-coded_stream_unittest.obj: google/protobuf/io/coded_stream_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/io/protobuf_test-coded_stream_unittest.obj -MD -MP -MF google/protobuf/io/$(DEPDIR)/protobuf_test-coded_stream_unittest.Tpo -c -o google/protobuf/io/protobuf_test-coded_stream_unittest.obj `if test -f 'google/protobuf/io/coded_stream_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/io/coded_stream_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/io/coded_stream_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/io/$(DEPDIR)/protobuf_test-coded_stream_unittest.Tpo google/protobuf/io/$(DEPDIR)/protobuf_test-coded_stream_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/io/coded_stream_unittest.cc' object='google/protobuf/io/protobuf_test-coded_stream_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/io/protobuf_test-coded_stream_unittest.obj `if test -f 'google/protobuf/io/coded_stream_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/io/coded_stream_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/io/coded_stream_unittest.cc'; fi` - -google/protobuf/io/protobuf_test-printer_unittest.o: google/protobuf/io/printer_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/io/protobuf_test-printer_unittest.o -MD -MP -MF google/protobuf/io/$(DEPDIR)/protobuf_test-printer_unittest.Tpo -c -o google/protobuf/io/protobuf_test-printer_unittest.o `test -f 'google/protobuf/io/printer_unittest.cc' || echo '$(srcdir)/'`google/protobuf/io/printer_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/io/$(DEPDIR)/protobuf_test-printer_unittest.Tpo google/protobuf/io/$(DEPDIR)/protobuf_test-printer_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/io/printer_unittest.cc' object='google/protobuf/io/protobuf_test-printer_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/io/protobuf_test-printer_unittest.o `test -f 'google/protobuf/io/printer_unittest.cc' || echo '$(srcdir)/'`google/protobuf/io/printer_unittest.cc - -google/protobuf/io/protobuf_test-printer_unittest.obj: google/protobuf/io/printer_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/io/protobuf_test-printer_unittest.obj -MD -MP -MF google/protobuf/io/$(DEPDIR)/protobuf_test-printer_unittest.Tpo -c -o google/protobuf/io/protobuf_test-printer_unittest.obj `if test -f 'google/protobuf/io/printer_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/io/printer_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/io/printer_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/io/$(DEPDIR)/protobuf_test-printer_unittest.Tpo google/protobuf/io/$(DEPDIR)/protobuf_test-printer_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/io/printer_unittest.cc' object='google/protobuf/io/protobuf_test-printer_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/io/protobuf_test-printer_unittest.obj `if test -f 'google/protobuf/io/printer_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/io/printer_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/io/printer_unittest.cc'; fi` - -google/protobuf/io/protobuf_test-tokenizer_unittest.o: google/protobuf/io/tokenizer_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/io/protobuf_test-tokenizer_unittest.o -MD -MP -MF google/protobuf/io/$(DEPDIR)/protobuf_test-tokenizer_unittest.Tpo -c -o google/protobuf/io/protobuf_test-tokenizer_unittest.o `test -f 'google/protobuf/io/tokenizer_unittest.cc' || echo '$(srcdir)/'`google/protobuf/io/tokenizer_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/io/$(DEPDIR)/protobuf_test-tokenizer_unittest.Tpo google/protobuf/io/$(DEPDIR)/protobuf_test-tokenizer_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/io/tokenizer_unittest.cc' object='google/protobuf/io/protobuf_test-tokenizer_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/io/protobuf_test-tokenizer_unittest.o `test -f 'google/protobuf/io/tokenizer_unittest.cc' || echo '$(srcdir)/'`google/protobuf/io/tokenizer_unittest.cc - -google/protobuf/io/protobuf_test-tokenizer_unittest.obj: google/protobuf/io/tokenizer_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/io/protobuf_test-tokenizer_unittest.obj -MD -MP -MF google/protobuf/io/$(DEPDIR)/protobuf_test-tokenizer_unittest.Tpo -c -o google/protobuf/io/protobuf_test-tokenizer_unittest.obj `if test -f 'google/protobuf/io/tokenizer_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/io/tokenizer_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/io/tokenizer_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/io/$(DEPDIR)/protobuf_test-tokenizer_unittest.Tpo google/protobuf/io/$(DEPDIR)/protobuf_test-tokenizer_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/io/tokenizer_unittest.cc' object='google/protobuf/io/protobuf_test-tokenizer_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/io/protobuf_test-tokenizer_unittest.obj `if test -f 'google/protobuf/io/tokenizer_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/io/tokenizer_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/io/tokenizer_unittest.cc'; fi` - -google/protobuf/io/protobuf_test-zero_copy_stream_unittest.o: google/protobuf/io/zero_copy_stream_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/io/protobuf_test-zero_copy_stream_unittest.o -MD -MP -MF google/protobuf/io/$(DEPDIR)/protobuf_test-zero_copy_stream_unittest.Tpo -c -o google/protobuf/io/protobuf_test-zero_copy_stream_unittest.o `test -f 'google/protobuf/io/zero_copy_stream_unittest.cc' || echo '$(srcdir)/'`google/protobuf/io/zero_copy_stream_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/io/$(DEPDIR)/protobuf_test-zero_copy_stream_unittest.Tpo google/protobuf/io/$(DEPDIR)/protobuf_test-zero_copy_stream_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/io/zero_copy_stream_unittest.cc' object='google/protobuf/io/protobuf_test-zero_copy_stream_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/io/protobuf_test-zero_copy_stream_unittest.o `test -f 'google/protobuf/io/zero_copy_stream_unittest.cc' || echo '$(srcdir)/'`google/protobuf/io/zero_copy_stream_unittest.cc - -google/protobuf/io/protobuf_test-zero_copy_stream_unittest.obj: google/protobuf/io/zero_copy_stream_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/io/protobuf_test-zero_copy_stream_unittest.obj -MD -MP -MF google/protobuf/io/$(DEPDIR)/protobuf_test-zero_copy_stream_unittest.Tpo -c -o google/protobuf/io/protobuf_test-zero_copy_stream_unittest.obj `if test -f 'google/protobuf/io/zero_copy_stream_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/io/zero_copy_stream_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/io/zero_copy_stream_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/io/$(DEPDIR)/protobuf_test-zero_copy_stream_unittest.Tpo google/protobuf/io/$(DEPDIR)/protobuf_test-zero_copy_stream_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/io/zero_copy_stream_unittest.cc' object='google/protobuf/io/protobuf_test-zero_copy_stream_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/io/protobuf_test-zero_copy_stream_unittest.obj `if test -f 'google/protobuf/io/zero_copy_stream_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/io/zero_copy_stream_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/io/zero_copy_stream_unittest.cc'; fi` - -google/protobuf/compiler/protobuf_test-command_line_interface_unittest.o: google/protobuf/compiler/command_line_interface_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/protobuf_test-command_line_interface_unittest.o -MD -MP -MF google/protobuf/compiler/$(DEPDIR)/protobuf_test-command_line_interface_unittest.Tpo -c -o google/protobuf/compiler/protobuf_test-command_line_interface_unittest.o `test -f 'google/protobuf/compiler/command_line_interface_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/command_line_interface_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/$(DEPDIR)/protobuf_test-command_line_interface_unittest.Tpo google/protobuf/compiler/$(DEPDIR)/protobuf_test-command_line_interface_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/command_line_interface_unittest.cc' object='google/protobuf/compiler/protobuf_test-command_line_interface_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/protobuf_test-command_line_interface_unittest.o `test -f 'google/protobuf/compiler/command_line_interface_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/command_line_interface_unittest.cc - -google/protobuf/compiler/protobuf_test-command_line_interface_unittest.obj: google/protobuf/compiler/command_line_interface_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/protobuf_test-command_line_interface_unittest.obj -MD -MP -MF google/protobuf/compiler/$(DEPDIR)/protobuf_test-command_line_interface_unittest.Tpo -c -o google/protobuf/compiler/protobuf_test-command_line_interface_unittest.obj `if test -f 'google/protobuf/compiler/command_line_interface_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/command_line_interface_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/command_line_interface_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/$(DEPDIR)/protobuf_test-command_line_interface_unittest.Tpo google/protobuf/compiler/$(DEPDIR)/protobuf_test-command_line_interface_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/command_line_interface_unittest.cc' object='google/protobuf/compiler/protobuf_test-command_line_interface_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/protobuf_test-command_line_interface_unittest.obj `if test -f 'google/protobuf/compiler/command_line_interface_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/command_line_interface_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/command_line_interface_unittest.cc'; fi` - -google/protobuf/compiler/protobuf_test-importer_unittest.o: google/protobuf/compiler/importer_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/protobuf_test-importer_unittest.o -MD -MP -MF google/protobuf/compiler/$(DEPDIR)/protobuf_test-importer_unittest.Tpo -c -o google/protobuf/compiler/protobuf_test-importer_unittest.o `test -f 'google/protobuf/compiler/importer_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/importer_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/$(DEPDIR)/protobuf_test-importer_unittest.Tpo google/protobuf/compiler/$(DEPDIR)/protobuf_test-importer_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/importer_unittest.cc' object='google/protobuf/compiler/protobuf_test-importer_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/protobuf_test-importer_unittest.o `test -f 'google/protobuf/compiler/importer_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/importer_unittest.cc - -google/protobuf/compiler/protobuf_test-importer_unittest.obj: google/protobuf/compiler/importer_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/protobuf_test-importer_unittest.obj -MD -MP -MF google/protobuf/compiler/$(DEPDIR)/protobuf_test-importer_unittest.Tpo -c -o google/protobuf/compiler/protobuf_test-importer_unittest.obj `if test -f 'google/protobuf/compiler/importer_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/importer_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/importer_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/$(DEPDIR)/protobuf_test-importer_unittest.Tpo google/protobuf/compiler/$(DEPDIR)/protobuf_test-importer_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/importer_unittest.cc' object='google/protobuf/compiler/protobuf_test-importer_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/protobuf_test-importer_unittest.obj `if test -f 'google/protobuf/compiler/importer_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/importer_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/importer_unittest.cc'; fi` - -google/protobuf/compiler/protobuf_test-mock_code_generator.o: google/protobuf/compiler/mock_code_generator.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/protobuf_test-mock_code_generator.o -MD -MP -MF google/protobuf/compiler/$(DEPDIR)/protobuf_test-mock_code_generator.Tpo -c -o google/protobuf/compiler/protobuf_test-mock_code_generator.o `test -f 'google/protobuf/compiler/mock_code_generator.cc' || echo '$(srcdir)/'`google/protobuf/compiler/mock_code_generator.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/$(DEPDIR)/protobuf_test-mock_code_generator.Tpo google/protobuf/compiler/$(DEPDIR)/protobuf_test-mock_code_generator.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/mock_code_generator.cc' object='google/protobuf/compiler/protobuf_test-mock_code_generator.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/protobuf_test-mock_code_generator.o `test -f 'google/protobuf/compiler/mock_code_generator.cc' || echo '$(srcdir)/'`google/protobuf/compiler/mock_code_generator.cc - -google/protobuf/compiler/protobuf_test-mock_code_generator.obj: google/protobuf/compiler/mock_code_generator.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/protobuf_test-mock_code_generator.obj -MD -MP -MF google/protobuf/compiler/$(DEPDIR)/protobuf_test-mock_code_generator.Tpo -c -o google/protobuf/compiler/protobuf_test-mock_code_generator.obj `if test -f 'google/protobuf/compiler/mock_code_generator.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/mock_code_generator.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/mock_code_generator.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/$(DEPDIR)/protobuf_test-mock_code_generator.Tpo google/protobuf/compiler/$(DEPDIR)/protobuf_test-mock_code_generator.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/mock_code_generator.cc' object='google/protobuf/compiler/protobuf_test-mock_code_generator.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/protobuf_test-mock_code_generator.obj `if test -f 'google/protobuf/compiler/mock_code_generator.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/mock_code_generator.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/mock_code_generator.cc'; fi` - -google/protobuf/compiler/protobuf_test-parser_unittest.o: google/protobuf/compiler/parser_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/protobuf_test-parser_unittest.o -MD -MP -MF google/protobuf/compiler/$(DEPDIR)/protobuf_test-parser_unittest.Tpo -c -o google/protobuf/compiler/protobuf_test-parser_unittest.o `test -f 'google/protobuf/compiler/parser_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/parser_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/$(DEPDIR)/protobuf_test-parser_unittest.Tpo google/protobuf/compiler/$(DEPDIR)/protobuf_test-parser_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/parser_unittest.cc' object='google/protobuf/compiler/protobuf_test-parser_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/protobuf_test-parser_unittest.o `test -f 'google/protobuf/compiler/parser_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/parser_unittest.cc - -google/protobuf/compiler/protobuf_test-parser_unittest.obj: google/protobuf/compiler/parser_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/protobuf_test-parser_unittest.obj -MD -MP -MF google/protobuf/compiler/$(DEPDIR)/protobuf_test-parser_unittest.Tpo -c -o google/protobuf/compiler/protobuf_test-parser_unittest.obj `if test -f 'google/protobuf/compiler/parser_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/parser_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/parser_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/$(DEPDIR)/protobuf_test-parser_unittest.Tpo google/protobuf/compiler/$(DEPDIR)/protobuf_test-parser_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/parser_unittest.cc' object='google/protobuf/compiler/protobuf_test-parser_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/protobuf_test-parser_unittest.obj `if test -f 'google/protobuf/compiler/parser_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/parser_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/parser_unittest.cc'; fi` - -google/protobuf/compiler/cpp/protobuf_test-cpp_bootstrap_unittest.o: google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/cpp/protobuf_test-cpp_bootstrap_unittest.o -MD -MP -MF google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_bootstrap_unittest.Tpo -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_bootstrap_unittest.o `test -f 'google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_bootstrap_unittest.Tpo google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_bootstrap_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc' object='google/protobuf/compiler/cpp/protobuf_test-cpp_bootstrap_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_bootstrap_unittest.o `test -f 'google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc - -google/protobuf/compiler/cpp/protobuf_test-cpp_bootstrap_unittest.obj: google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/cpp/protobuf_test-cpp_bootstrap_unittest.obj -MD -MP -MF google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_bootstrap_unittest.Tpo -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_bootstrap_unittest.obj `if test -f 'google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_bootstrap_unittest.Tpo google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_bootstrap_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc' object='google/protobuf/compiler/cpp/protobuf_test-cpp_bootstrap_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_bootstrap_unittest.obj `if test -f 'google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc'; fi` - -google/protobuf/compiler/cpp/protobuf_test-cpp_unittest.o: google/protobuf/compiler/cpp/cpp_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/cpp/protobuf_test-cpp_unittest.o -MD -MP -MF google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_unittest.Tpo -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_unittest.o `test -f 'google/protobuf/compiler/cpp/cpp_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/cpp/cpp_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_unittest.Tpo google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/cpp/cpp_unittest.cc' object='google/protobuf/compiler/cpp/protobuf_test-cpp_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_unittest.o `test -f 'google/protobuf/compiler/cpp/cpp_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/cpp/cpp_unittest.cc - -google/protobuf/compiler/cpp/protobuf_test-cpp_unittest.obj: google/protobuf/compiler/cpp/cpp_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/cpp/protobuf_test-cpp_unittest.obj -MD -MP -MF google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_unittest.Tpo -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_unittest.obj `if test -f 'google/protobuf/compiler/cpp/cpp_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/cpp/cpp_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/cpp/cpp_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_unittest.Tpo google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/cpp/cpp_unittest.cc' object='google/protobuf/compiler/cpp/protobuf_test-cpp_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_unittest.obj `if test -f 'google/protobuf/compiler/cpp/cpp_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/cpp/cpp_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/cpp/cpp_unittest.cc'; fi` - -google/protobuf/compiler/cpp/protobuf_test-cpp_plugin_unittest.o: google/protobuf/compiler/cpp/cpp_plugin_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/cpp/protobuf_test-cpp_plugin_unittest.o -MD -MP -MF google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_plugin_unittest.Tpo -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_plugin_unittest.o `test -f 'google/protobuf/compiler/cpp/cpp_plugin_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/cpp/cpp_plugin_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_plugin_unittest.Tpo google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_plugin_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/cpp/cpp_plugin_unittest.cc' object='google/protobuf/compiler/cpp/protobuf_test-cpp_plugin_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_plugin_unittest.o `test -f 'google/protobuf/compiler/cpp/cpp_plugin_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/cpp/cpp_plugin_unittest.cc - -google/protobuf/compiler/cpp/protobuf_test-cpp_plugin_unittest.obj: google/protobuf/compiler/cpp/cpp_plugin_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/cpp/protobuf_test-cpp_plugin_unittest.obj -MD -MP -MF google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_plugin_unittest.Tpo -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_plugin_unittest.obj `if test -f 'google/protobuf/compiler/cpp/cpp_plugin_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/cpp/cpp_plugin_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_plugin_unittest.Tpo google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_plugin_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/cpp/cpp_plugin_unittest.cc' object='google/protobuf/compiler/cpp/protobuf_test-cpp_plugin_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_plugin_unittest.obj `if test -f 'google/protobuf/compiler/cpp/cpp_plugin_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/cpp/cpp_plugin_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc'; fi` - -google/protobuf/compiler/java/protobuf_test-java_plugin_unittest.o: google/protobuf/compiler/java/java_plugin_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/java/protobuf_test-java_plugin_unittest.o -MD -MP -MF google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_plugin_unittest.Tpo -c -o google/protobuf/compiler/java/protobuf_test-java_plugin_unittest.o `test -f 'google/protobuf/compiler/java/java_plugin_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/java/java_plugin_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_plugin_unittest.Tpo google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_plugin_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/java/java_plugin_unittest.cc' object='google/protobuf/compiler/java/protobuf_test-java_plugin_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/java/protobuf_test-java_plugin_unittest.o `test -f 'google/protobuf/compiler/java/java_plugin_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/java/java_plugin_unittest.cc - -google/protobuf/compiler/java/protobuf_test-java_plugin_unittest.obj: google/protobuf/compiler/java/java_plugin_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/java/protobuf_test-java_plugin_unittest.obj -MD -MP -MF google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_plugin_unittest.Tpo -c -o google/protobuf/compiler/java/protobuf_test-java_plugin_unittest.obj `if test -f 'google/protobuf/compiler/java/java_plugin_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/java/java_plugin_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/java/java_plugin_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_plugin_unittest.Tpo google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_plugin_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/java/java_plugin_unittest.cc' object='google/protobuf/compiler/java/protobuf_test-java_plugin_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/java/protobuf_test-java_plugin_unittest.obj `if test -f 'google/protobuf/compiler/java/java_plugin_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/java/java_plugin_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/java/java_plugin_unittest.cc'; fi` - -google/protobuf/compiler/java/protobuf_test-java_doc_comment_unittest.o: google/protobuf/compiler/java/java_doc_comment_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/java/protobuf_test-java_doc_comment_unittest.o -MD -MP -MF google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_doc_comment_unittest.Tpo -c -o google/protobuf/compiler/java/protobuf_test-java_doc_comment_unittest.o `test -f 'google/protobuf/compiler/java/java_doc_comment_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/java/java_doc_comment_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_doc_comment_unittest.Tpo google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_doc_comment_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/java/java_doc_comment_unittest.cc' object='google/protobuf/compiler/java/protobuf_test-java_doc_comment_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/java/protobuf_test-java_doc_comment_unittest.o `test -f 'google/protobuf/compiler/java/java_doc_comment_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/java/java_doc_comment_unittest.cc - -google/protobuf/compiler/java/protobuf_test-java_doc_comment_unittest.obj: google/protobuf/compiler/java/java_doc_comment_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/java/protobuf_test-java_doc_comment_unittest.obj -MD -MP -MF google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_doc_comment_unittest.Tpo -c -o google/protobuf/compiler/java/protobuf_test-java_doc_comment_unittest.obj `if test -f 'google/protobuf/compiler/java/java_doc_comment_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/java/java_doc_comment_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/java/java_doc_comment_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_doc_comment_unittest.Tpo google/protobuf/compiler/java/$(DEPDIR)/protobuf_test-java_doc_comment_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/java/java_doc_comment_unittest.cc' object='google/protobuf/compiler/java/protobuf_test-java_doc_comment_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/java/protobuf_test-java_doc_comment_unittest.obj `if test -f 'google/protobuf/compiler/java/java_doc_comment_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/java/java_doc_comment_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/java/java_doc_comment_unittest.cc'; fi` - -google/protobuf/compiler/python/protobuf_test-python_plugin_unittest.o: google/protobuf/compiler/python/python_plugin_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/python/protobuf_test-python_plugin_unittest.o -MD -MP -MF google/protobuf/compiler/python/$(DEPDIR)/protobuf_test-python_plugin_unittest.Tpo -c -o google/protobuf/compiler/python/protobuf_test-python_plugin_unittest.o `test -f 'google/protobuf/compiler/python/python_plugin_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/python/python_plugin_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/python/$(DEPDIR)/protobuf_test-python_plugin_unittest.Tpo google/protobuf/compiler/python/$(DEPDIR)/protobuf_test-python_plugin_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/python/python_plugin_unittest.cc' object='google/protobuf/compiler/python/protobuf_test-python_plugin_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/python/protobuf_test-python_plugin_unittest.o `test -f 'google/protobuf/compiler/python/python_plugin_unittest.cc' || echo '$(srcdir)/'`google/protobuf/compiler/python/python_plugin_unittest.cc - -google/protobuf/compiler/python/protobuf_test-python_plugin_unittest.obj: google/protobuf/compiler/python/python_plugin_unittest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/python/protobuf_test-python_plugin_unittest.obj -MD -MP -MF google/protobuf/compiler/python/$(DEPDIR)/protobuf_test-python_plugin_unittest.Tpo -c -o google/protobuf/compiler/python/protobuf_test-python_plugin_unittest.obj `if test -f 'google/protobuf/compiler/python/python_plugin_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/python/python_plugin_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/python/python_plugin_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/python/$(DEPDIR)/protobuf_test-python_plugin_unittest.Tpo google/protobuf/compiler/python/$(DEPDIR)/protobuf_test-python_plugin_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/python/python_plugin_unittest.cc' object='google/protobuf/compiler/python/protobuf_test-python_plugin_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/python/protobuf_test-python_plugin_unittest.obj `if test -f 'google/protobuf/compiler/python/python_plugin_unittest.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/python/python_plugin_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/python/python_plugin_unittest.cc'; fi` - -google/protobuf/protobuf_test-test_util.o: google/protobuf/test_util.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-test_util.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-test_util.Tpo -c -o google/protobuf/protobuf_test-test_util.o `test -f 'google/protobuf/test_util.cc' || echo '$(srcdir)/'`google/protobuf/test_util.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-test_util.Tpo google/protobuf/$(DEPDIR)/protobuf_test-test_util.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_util.cc' object='google/protobuf/protobuf_test-test_util.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-test_util.o `test -f 'google/protobuf/test_util.cc' || echo '$(srcdir)/'`google/protobuf/test_util.cc - -google/protobuf/protobuf_test-test_util.obj: google/protobuf/test_util.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-test_util.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-test_util.Tpo -c -o google/protobuf/protobuf_test-test_util.obj `if test -f 'google/protobuf/test_util.cc'; then $(CYGPATH_W) 'google/protobuf/test_util.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_util.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-test_util.Tpo google/protobuf/$(DEPDIR)/protobuf_test-test_util.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/test_util.cc' object='google/protobuf/protobuf_test-test_util.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-test_util.obj `if test -f 'google/protobuf/test_util.cc'; then $(CYGPATH_W) 'google/protobuf/test_util.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/test_util.cc'; fi` - -google/protobuf/testing/protobuf_test-googletest.o: google/protobuf/testing/googletest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/testing/protobuf_test-googletest.o -MD -MP -MF google/protobuf/testing/$(DEPDIR)/protobuf_test-googletest.Tpo -c -o google/protobuf/testing/protobuf_test-googletest.o `test -f 'google/protobuf/testing/googletest.cc' || echo '$(srcdir)/'`google/protobuf/testing/googletest.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/testing/$(DEPDIR)/protobuf_test-googletest.Tpo google/protobuf/testing/$(DEPDIR)/protobuf_test-googletest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/testing/googletest.cc' object='google/protobuf/testing/protobuf_test-googletest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/testing/protobuf_test-googletest.o `test -f 'google/protobuf/testing/googletest.cc' || echo '$(srcdir)/'`google/protobuf/testing/googletest.cc - -google/protobuf/testing/protobuf_test-googletest.obj: google/protobuf/testing/googletest.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/testing/protobuf_test-googletest.obj -MD -MP -MF google/protobuf/testing/$(DEPDIR)/protobuf_test-googletest.Tpo -c -o google/protobuf/testing/protobuf_test-googletest.obj `if test -f 'google/protobuf/testing/googletest.cc'; then $(CYGPATH_W) 'google/protobuf/testing/googletest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/testing/googletest.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/testing/$(DEPDIR)/protobuf_test-googletest.Tpo google/protobuf/testing/$(DEPDIR)/protobuf_test-googletest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/testing/googletest.cc' object='google/protobuf/testing/protobuf_test-googletest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/testing/protobuf_test-googletest.obj `if test -f 'google/protobuf/testing/googletest.cc'; then $(CYGPATH_W) 'google/protobuf/testing/googletest.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/testing/googletest.cc'; fi` - -google/protobuf/testing/protobuf_test-file.o: google/protobuf/testing/file.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/testing/protobuf_test-file.o -MD -MP -MF google/protobuf/testing/$(DEPDIR)/protobuf_test-file.Tpo -c -o google/protobuf/testing/protobuf_test-file.o `test -f 'google/protobuf/testing/file.cc' || echo '$(srcdir)/'`google/protobuf/testing/file.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/testing/$(DEPDIR)/protobuf_test-file.Tpo google/protobuf/testing/$(DEPDIR)/protobuf_test-file.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/testing/file.cc' object='google/protobuf/testing/protobuf_test-file.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/testing/protobuf_test-file.o `test -f 'google/protobuf/testing/file.cc' || echo '$(srcdir)/'`google/protobuf/testing/file.cc - -google/protobuf/testing/protobuf_test-file.obj: google/protobuf/testing/file.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/testing/protobuf_test-file.obj -MD -MP -MF google/protobuf/testing/$(DEPDIR)/protobuf_test-file.Tpo -c -o google/protobuf/testing/protobuf_test-file.obj `if test -f 'google/protobuf/testing/file.cc'; then $(CYGPATH_W) 'google/protobuf/testing/file.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/testing/file.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/testing/$(DEPDIR)/protobuf_test-file.Tpo google/protobuf/testing/$(DEPDIR)/protobuf_test-file.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/testing/file.cc' object='google/protobuf/testing/protobuf_test-file.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/testing/protobuf_test-file.obj `if test -f 'google/protobuf/testing/file.cc'; then $(CYGPATH_W) 'google/protobuf/testing/file.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/testing/file.cc'; fi` - -google/protobuf/protobuf_test-unittest_lite.pb.o: google/protobuf/unittest_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_lite.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_lite.pb.o `test -f 'google/protobuf/unittest_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_lite.pb.cc' object='google/protobuf/protobuf_test-unittest_lite.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_lite.pb.o `test -f 'google/protobuf/unittest_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_lite.pb.cc - -google/protobuf/protobuf_test-unittest_lite.pb.obj: google/protobuf/unittest_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_lite.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_lite.pb.obj `if test -f 'google/protobuf/unittest_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_lite.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_lite.pb.cc' object='google/protobuf/protobuf_test-unittest_lite.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_lite.pb.obj `if test -f 'google/protobuf/unittest_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_lite.pb.cc'; fi` - -google/protobuf/protobuf_test-unittest_import_lite.pb.o: google/protobuf/unittest_import_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_import_lite.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_lite.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_import_lite.pb.o `test -f 'google/protobuf/unittest_import_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_lite.pb.cc' object='google/protobuf/protobuf_test-unittest_import_lite.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_import_lite.pb.o `test -f 'google/protobuf/unittest_import_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_lite.pb.cc - -google/protobuf/protobuf_test-unittest_import_lite.pb.obj: google/protobuf/unittest_import_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_import_lite.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_lite.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_import_lite.pb.obj `if test -f 'google/protobuf/unittest_import_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_lite.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_lite.pb.cc' object='google/protobuf/protobuf_test-unittest_import_lite.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_import_lite.pb.obj `if test -f 'google/protobuf/unittest_import_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_lite.pb.cc'; fi` - -google/protobuf/protobuf_test-unittest_import_public_lite.pb.o: google/protobuf/unittest_import_public_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_import_public_lite.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public_lite.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_import_public_lite.pb.o `test -f 'google/protobuf/unittest_import_public_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_public_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_public_lite.pb.cc' object='google/protobuf/protobuf_test-unittest_import_public_lite.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_import_public_lite.pb.o `test -f 'google/protobuf/unittest_import_public_lite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_public_lite.pb.cc - -google/protobuf/protobuf_test-unittest_import_public_lite.pb.obj: google/protobuf/unittest_import_public_lite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_import_public_lite.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public_lite.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_import_public_lite.pb.obj `if test -f 'google/protobuf/unittest_import_public_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_public_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_public_lite.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public_lite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public_lite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_public_lite.pb.cc' object='google/protobuf/protobuf_test-unittest_import_public_lite.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_import_public_lite.pb.obj `if test -f 'google/protobuf/unittest_import_public_lite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_public_lite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_public_lite.pb.cc'; fi` - -google/protobuf/protobuf_test-unittest.pb.o: google/protobuf/unittest.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest.pb.Tpo -c -o google/protobuf/protobuf_test-unittest.pb.o `test -f 'google/protobuf/unittest.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest.pb.cc' object='google/protobuf/protobuf_test-unittest.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest.pb.o `test -f 'google/protobuf/unittest.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest.pb.cc - -google/protobuf/protobuf_test-unittest.pb.obj: google/protobuf/unittest.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest.pb.Tpo -c -o google/protobuf/protobuf_test-unittest.pb.obj `if test -f 'google/protobuf/unittest.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest.pb.cc' object='google/protobuf/protobuf_test-unittest.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest.pb.obj `if test -f 'google/protobuf/unittest.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest.pb.cc'; fi` - -google/protobuf/protobuf_test-unittest_empty.pb.o: google/protobuf/unittest_empty.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_empty.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_empty.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_empty.pb.o `test -f 'google/protobuf/unittest_empty.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_empty.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_empty.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_empty.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_empty.pb.cc' object='google/protobuf/protobuf_test-unittest_empty.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_empty.pb.o `test -f 'google/protobuf/unittest_empty.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_empty.pb.cc - -google/protobuf/protobuf_test-unittest_empty.pb.obj: google/protobuf/unittest_empty.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_empty.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_empty.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_empty.pb.obj `if test -f 'google/protobuf/unittest_empty.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_empty.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_empty.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_empty.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_empty.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_empty.pb.cc' object='google/protobuf/protobuf_test-unittest_empty.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_empty.pb.obj `if test -f 'google/protobuf/unittest_empty.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_empty.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_empty.pb.cc'; fi` - -google/protobuf/protobuf_test-unittest_import.pb.o: google/protobuf/unittest_import.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_import.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_import.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_import.pb.o `test -f 'google/protobuf/unittest_import.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_import.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_import.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import.pb.cc' object='google/protobuf/protobuf_test-unittest_import.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_import.pb.o `test -f 'google/protobuf/unittest_import.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import.pb.cc - -google/protobuf/protobuf_test-unittest_import.pb.obj: google/protobuf/unittest_import.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_import.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_import.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_import.pb.obj `if test -f 'google/protobuf/unittest_import.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_import.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_import.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import.pb.cc' object='google/protobuf/protobuf_test-unittest_import.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_import.pb.obj `if test -f 'google/protobuf/unittest_import.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import.pb.cc'; fi` - -google/protobuf/protobuf_test-unittest_import_public.pb.o: google/protobuf/unittest_import_public.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_import_public.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_import_public.pb.o `test -f 'google/protobuf/unittest_import_public.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_public.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_public.pb.cc' object='google/protobuf/protobuf_test-unittest_import_public.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_import_public.pb.o `test -f 'google/protobuf/unittest_import_public.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_import_public.pb.cc - -google/protobuf/protobuf_test-unittest_import_public.pb.obj: google/protobuf/unittest_import_public.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_import_public.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_import_public.pb.obj `if test -f 'google/protobuf/unittest_import_public.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_public.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_public.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_import_public.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_import_public.pb.cc' object='google/protobuf/protobuf_test-unittest_import_public.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_import_public.pb.obj `if test -f 'google/protobuf/unittest_import_public.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_import_public.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_import_public.pb.cc'; fi` - -google/protobuf/protobuf_test-unittest_mset.pb.o: google/protobuf/unittest_mset.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_mset.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_mset.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_mset.pb.o `test -f 'google/protobuf/unittest_mset.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_mset.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_mset.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_mset.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_mset.pb.cc' object='google/protobuf/protobuf_test-unittest_mset.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_mset.pb.o `test -f 'google/protobuf/unittest_mset.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_mset.pb.cc - -google/protobuf/protobuf_test-unittest_mset.pb.obj: google/protobuf/unittest_mset.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_mset.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_mset.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_mset.pb.obj `if test -f 'google/protobuf/unittest_mset.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_mset.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_mset.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_mset.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_mset.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_mset.pb.cc' object='google/protobuf/protobuf_test-unittest_mset.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_mset.pb.obj `if test -f 'google/protobuf/unittest_mset.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_mset.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_mset.pb.cc'; fi` - -google/protobuf/protobuf_test-unittest_optimize_for.pb.o: google/protobuf/unittest_optimize_for.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_optimize_for.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_optimize_for.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_optimize_for.pb.o `test -f 'google/protobuf/unittest_optimize_for.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_optimize_for.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_optimize_for.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_optimize_for.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_optimize_for.pb.cc' object='google/protobuf/protobuf_test-unittest_optimize_for.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_optimize_for.pb.o `test -f 'google/protobuf/unittest_optimize_for.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_optimize_for.pb.cc - -google/protobuf/protobuf_test-unittest_optimize_for.pb.obj: google/protobuf/unittest_optimize_for.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_optimize_for.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_optimize_for.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_optimize_for.pb.obj `if test -f 'google/protobuf/unittest_optimize_for.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_optimize_for.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_optimize_for.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_optimize_for.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_optimize_for.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_optimize_for.pb.cc' object='google/protobuf/protobuf_test-unittest_optimize_for.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_optimize_for.pb.obj `if test -f 'google/protobuf/unittest_optimize_for.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_optimize_for.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_optimize_for.pb.cc'; fi` - -google/protobuf/protobuf_test-unittest_embed_optimize_for.pb.o: google/protobuf/unittest_embed_optimize_for.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_embed_optimize_for.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_embed_optimize_for.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_embed_optimize_for.pb.o `test -f 'google/protobuf/unittest_embed_optimize_for.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_embed_optimize_for.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_embed_optimize_for.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_embed_optimize_for.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_embed_optimize_for.pb.cc' object='google/protobuf/protobuf_test-unittest_embed_optimize_for.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_embed_optimize_for.pb.o `test -f 'google/protobuf/unittest_embed_optimize_for.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_embed_optimize_for.pb.cc - -google/protobuf/protobuf_test-unittest_embed_optimize_for.pb.obj: google/protobuf/unittest_embed_optimize_for.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_embed_optimize_for.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_embed_optimize_for.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_embed_optimize_for.pb.obj `if test -f 'google/protobuf/unittest_embed_optimize_for.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_embed_optimize_for.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_embed_optimize_for.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_embed_optimize_for.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_embed_optimize_for.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_embed_optimize_for.pb.cc' object='google/protobuf/protobuf_test-unittest_embed_optimize_for.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_embed_optimize_for.pb.obj `if test -f 'google/protobuf/unittest_embed_optimize_for.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_embed_optimize_for.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_embed_optimize_for.pb.cc'; fi` - -google/protobuf/protobuf_test-unittest_custom_options.pb.o: google/protobuf/unittest_custom_options.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_custom_options.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_custom_options.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_custom_options.pb.o `test -f 'google/protobuf/unittest_custom_options.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_custom_options.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_custom_options.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_custom_options.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_custom_options.pb.cc' object='google/protobuf/protobuf_test-unittest_custom_options.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_custom_options.pb.o `test -f 'google/protobuf/unittest_custom_options.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_custom_options.pb.cc - -google/protobuf/protobuf_test-unittest_custom_options.pb.obj: google/protobuf/unittest_custom_options.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_custom_options.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_custom_options.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_custom_options.pb.obj `if test -f 'google/protobuf/unittest_custom_options.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_custom_options.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_custom_options.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_custom_options.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_custom_options.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_custom_options.pb.cc' object='google/protobuf/protobuf_test-unittest_custom_options.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_custom_options.pb.obj `if test -f 'google/protobuf/unittest_custom_options.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_custom_options.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_custom_options.pb.cc'; fi` - -google/protobuf/protobuf_test-unittest_lite_imports_nonlite.pb.o: google/protobuf/unittest_lite_imports_nonlite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_lite_imports_nonlite.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite_imports_nonlite.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_lite_imports_nonlite.pb.o `test -f 'google/protobuf/unittest_lite_imports_nonlite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_lite_imports_nonlite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite_imports_nonlite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite_imports_nonlite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_lite_imports_nonlite.pb.cc' object='google/protobuf/protobuf_test-unittest_lite_imports_nonlite.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_lite_imports_nonlite.pb.o `test -f 'google/protobuf/unittest_lite_imports_nonlite.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_lite_imports_nonlite.pb.cc - -google/protobuf/protobuf_test-unittest_lite_imports_nonlite.pb.obj: google/protobuf/unittest_lite_imports_nonlite.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_lite_imports_nonlite.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite_imports_nonlite.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_lite_imports_nonlite.pb.obj `if test -f 'google/protobuf/unittest_lite_imports_nonlite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_lite_imports_nonlite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_lite_imports_nonlite.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite_imports_nonlite.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_lite_imports_nonlite.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_lite_imports_nonlite.pb.cc' object='google/protobuf/protobuf_test-unittest_lite_imports_nonlite.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_lite_imports_nonlite.pb.obj `if test -f 'google/protobuf/unittest_lite_imports_nonlite.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_lite_imports_nonlite.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_lite_imports_nonlite.pb.cc'; fi` - -google/protobuf/protobuf_test-unittest_no_generic_services.pb.o: google/protobuf/unittest_no_generic_services.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_no_generic_services.pb.o -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_no_generic_services.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_no_generic_services.pb.o `test -f 'google/protobuf/unittest_no_generic_services.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_no_generic_services.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_no_generic_services.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_no_generic_services.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_no_generic_services.pb.cc' object='google/protobuf/protobuf_test-unittest_no_generic_services.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_no_generic_services.pb.o `test -f 'google/protobuf/unittest_no_generic_services.pb.cc' || echo '$(srcdir)/'`google/protobuf/unittest_no_generic_services.pb.cc - -google/protobuf/protobuf_test-unittest_no_generic_services.pb.obj: google/protobuf/unittest_no_generic_services.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/protobuf_test-unittest_no_generic_services.pb.obj -MD -MP -MF google/protobuf/$(DEPDIR)/protobuf_test-unittest_no_generic_services.pb.Tpo -c -o google/protobuf/protobuf_test-unittest_no_generic_services.pb.obj `if test -f 'google/protobuf/unittest_no_generic_services.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_no_generic_services.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_no_generic_services.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/$(DEPDIR)/protobuf_test-unittest_no_generic_services.pb.Tpo google/protobuf/$(DEPDIR)/protobuf_test-unittest_no_generic_services.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/unittest_no_generic_services.pb.cc' object='google/protobuf/protobuf_test-unittest_no_generic_services.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/protobuf_test-unittest_no_generic_services.pb.obj `if test -f 'google/protobuf/unittest_no_generic_services.pb.cc'; then $(CYGPATH_W) 'google/protobuf/unittest_no_generic_services.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/unittest_no_generic_services.pb.cc'; fi` - -google/protobuf/compiler/cpp/protobuf_test-cpp_test_bad_identifiers.pb.o: google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/cpp/protobuf_test-cpp_test_bad_identifiers.pb.o -MD -MP -MF google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_test_bad_identifiers.pb.Tpo -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_test_bad_identifiers.pb.o `test -f 'google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc' || echo '$(srcdir)/'`google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_test_bad_identifiers.pb.Tpo google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_test_bad_identifiers.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc' object='google/protobuf/compiler/cpp/protobuf_test-cpp_test_bad_identifiers.pb.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_test_bad_identifiers.pb.o `test -f 'google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc' || echo '$(srcdir)/'`google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc - -google/protobuf/compiler/cpp/protobuf_test-cpp_test_bad_identifiers.pb.obj: google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/cpp/protobuf_test-cpp_test_bad_identifiers.pb.obj -MD -MP -MF google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_test_bad_identifiers.pb.Tpo -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_test_bad_identifiers.pb.obj `if test -f 'google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_test_bad_identifiers.pb.Tpo google/protobuf/compiler/cpp/$(DEPDIR)/protobuf_test-cpp_test_bad_identifiers.pb.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc' object='google/protobuf/compiler/cpp/protobuf_test-cpp_test_bad_identifiers.pb.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(protobuf_test_CPPFLAGS) $(CPPFLAGS) $(protobuf_test_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/cpp/protobuf_test-cpp_test_bad_identifiers.pb.obj `if test -f 'google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc'; fi` - -google/protobuf/compiler/test_plugin-mock_code_generator.o: google/protobuf/compiler/mock_code_generator.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/test_plugin-mock_code_generator.o -MD -MP -MF google/protobuf/compiler/$(DEPDIR)/test_plugin-mock_code_generator.Tpo -c -o google/protobuf/compiler/test_plugin-mock_code_generator.o `test -f 'google/protobuf/compiler/mock_code_generator.cc' || echo '$(srcdir)/'`google/protobuf/compiler/mock_code_generator.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/$(DEPDIR)/test_plugin-mock_code_generator.Tpo google/protobuf/compiler/$(DEPDIR)/test_plugin-mock_code_generator.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/mock_code_generator.cc' object='google/protobuf/compiler/test_plugin-mock_code_generator.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/test_plugin-mock_code_generator.o `test -f 'google/protobuf/compiler/mock_code_generator.cc' || echo '$(srcdir)/'`google/protobuf/compiler/mock_code_generator.cc - -google/protobuf/compiler/test_plugin-mock_code_generator.obj: google/protobuf/compiler/mock_code_generator.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/test_plugin-mock_code_generator.obj -MD -MP -MF google/protobuf/compiler/$(DEPDIR)/test_plugin-mock_code_generator.Tpo -c -o google/protobuf/compiler/test_plugin-mock_code_generator.obj `if test -f 'google/protobuf/compiler/mock_code_generator.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/mock_code_generator.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/mock_code_generator.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/$(DEPDIR)/test_plugin-mock_code_generator.Tpo google/protobuf/compiler/$(DEPDIR)/test_plugin-mock_code_generator.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/mock_code_generator.cc' object='google/protobuf/compiler/test_plugin-mock_code_generator.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/test_plugin-mock_code_generator.obj `if test -f 'google/protobuf/compiler/mock_code_generator.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/mock_code_generator.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/mock_code_generator.cc'; fi` - -google/protobuf/testing/test_plugin-file.o: google/protobuf/testing/file.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/testing/test_plugin-file.o -MD -MP -MF google/protobuf/testing/$(DEPDIR)/test_plugin-file.Tpo -c -o google/protobuf/testing/test_plugin-file.o `test -f 'google/protobuf/testing/file.cc' || echo '$(srcdir)/'`google/protobuf/testing/file.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/testing/$(DEPDIR)/test_plugin-file.Tpo google/protobuf/testing/$(DEPDIR)/test_plugin-file.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/testing/file.cc' object='google/protobuf/testing/test_plugin-file.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/testing/test_plugin-file.o `test -f 'google/protobuf/testing/file.cc' || echo '$(srcdir)/'`google/protobuf/testing/file.cc - -google/protobuf/testing/test_plugin-file.obj: google/protobuf/testing/file.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/testing/test_plugin-file.obj -MD -MP -MF google/protobuf/testing/$(DEPDIR)/test_plugin-file.Tpo -c -o google/protobuf/testing/test_plugin-file.obj `if test -f 'google/protobuf/testing/file.cc'; then $(CYGPATH_W) 'google/protobuf/testing/file.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/testing/file.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/testing/$(DEPDIR)/test_plugin-file.Tpo google/protobuf/testing/$(DEPDIR)/test_plugin-file.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/testing/file.cc' object='google/protobuf/testing/test_plugin-file.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/testing/test_plugin-file.obj `if test -f 'google/protobuf/testing/file.cc'; then $(CYGPATH_W) 'google/protobuf/testing/file.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/testing/file.cc'; fi` - -google/protobuf/compiler/test_plugin-test_plugin.o: google/protobuf/compiler/test_plugin.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/test_plugin-test_plugin.o -MD -MP -MF google/protobuf/compiler/$(DEPDIR)/test_plugin-test_plugin.Tpo -c -o google/protobuf/compiler/test_plugin-test_plugin.o `test -f 'google/protobuf/compiler/test_plugin.cc' || echo '$(srcdir)/'`google/protobuf/compiler/test_plugin.cc -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/$(DEPDIR)/test_plugin-test_plugin.Tpo google/protobuf/compiler/$(DEPDIR)/test_plugin-test_plugin.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/test_plugin.cc' object='google/protobuf/compiler/test_plugin-test_plugin.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/test_plugin-test_plugin.o `test -f 'google/protobuf/compiler/test_plugin.cc' || echo '$(srcdir)/'`google/protobuf/compiler/test_plugin.cc - -google/protobuf/compiler/test_plugin-test_plugin.obj: google/protobuf/compiler/test_plugin.cc -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT google/protobuf/compiler/test_plugin-test_plugin.obj -MD -MP -MF google/protobuf/compiler/$(DEPDIR)/test_plugin-test_plugin.Tpo -c -o google/protobuf/compiler/test_plugin-test_plugin.obj `if test -f 'google/protobuf/compiler/test_plugin.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/test_plugin.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/test_plugin.cc'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) google/protobuf/compiler/$(DEPDIR)/test_plugin-test_plugin.Tpo google/protobuf/compiler/$(DEPDIR)/test_plugin-test_plugin.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='google/protobuf/compiler/test_plugin.cc' object='google/protobuf/compiler/test_plugin-test_plugin.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_plugin_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o google/protobuf/compiler/test_plugin-test_plugin.obj `if test -f 'google/protobuf/compiler/test_plugin.cc'; then $(CYGPATH_W) 'google/protobuf/compiler/test_plugin.cc'; else $(CYGPATH_W) '$(srcdir)/google/protobuf/compiler/test_plugin.cc'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -rm -rf google/protobuf/.libs google/protobuf/_libs - -rm -rf google/protobuf/compiler/.libs google/protobuf/compiler/_libs - -rm -rf google/protobuf/compiler/cpp/.libs google/protobuf/compiler/cpp/_libs - -rm -rf google/protobuf/compiler/java/.libs google/protobuf/compiler/java/_libs - -rm -rf google/protobuf/compiler/python/.libs google/protobuf/compiler/python/_libs - -rm -rf google/protobuf/io/.libs google/protobuf/io/_libs - -rm -rf google/protobuf/stubs/.libs google/protobuf/stubs/_libs -install-nobase_dist_protoDATA: $(nobase_dist_proto_DATA) - @$(NORMAL_INSTALL) - @list='$(nobase_dist_proto_DATA)'; test -n "$(protodir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(protodir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(protodir)" || exit 1; \ - fi; \ - $(am__nobase_list) | while read dir files; do \ - xfiles=; for file in $$files; do \ - if test -f "$$file"; then xfiles="$$xfiles $$file"; \ - else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ - test -z "$$xfiles" || { \ - test "x$$dir" = x. || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(protodir)/$$dir'"; \ - $(MKDIR_P) "$(DESTDIR)$(protodir)/$$dir"; }; \ - echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(protodir)/$$dir'"; \ - $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(protodir)/$$dir" || exit $$?; }; \ - done - -uninstall-nobase_dist_protoDATA: - @$(NORMAL_UNINSTALL) - @list='$(nobase_dist_proto_DATA)'; test -n "$(protodir)" || list=; \ - $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ - dir='$(DESTDIR)$(protodir)'; $(am__uninstall_files_from_dir) -install-nobase_includeHEADERS: $(nobase_include_HEADERS) - @$(NORMAL_INSTALL) - @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ - fi; \ - $(am__nobase_list) | while read dir files; do \ - xfiles=; for file in $$files; do \ - if test -f "$$file"; then xfiles="$$xfiles $$file"; \ - else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ - test -z "$$xfiles" || { \ - test "x$$dir" = x. || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \ - $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \ - echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \ - $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \ - done - -uninstall-nobase_includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \ - $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ - dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -# Recover from deleted '.trs' file; this should ensure that -# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create -# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells -# to avoid problems with "make -n". -.log.trs: - rm -f $< $@ - $(MAKE) $(AM_MAKEFLAGS) $< - -# Leading 'am--fnord' is there to ensure the list of targets does not -# expand to empty, as could happen e.g. with make check TESTS=''. -am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) -am--force-recheck: - @: - -$(TEST_SUITE_LOG): $(TEST_LOGS) - @$(am__set_TESTS_bases); \ - am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ - redo_bases=`for i in $$bases; do \ - am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ - done`; \ - if test -n "$$redo_bases"; then \ - redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ - redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ - if $(am__make_dryrun); then :; else \ - rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ - fi; \ - fi; \ - if test -n "$$am__remaking_logs"; then \ - echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ - "recursion detected" >&2; \ - else \ - am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ - fi; \ - if $(am__make_dryrun); then :; else \ - st=0; \ - errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ - for i in $$redo_bases; do \ - test -f $$i.trs && test -r $$i.trs \ - || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ - test -f $$i.log && test -r $$i.log \ - || { echo "$$errmsg $$i.log" >&2; st=1; }; \ - done; \ - test $$st -eq 0 || exit 1; \ - fi - @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ - ws='[ ]'; \ - results=`for b in $$bases; do echo $$b.trs; done`; \ - test -n "$$results" || results=/dev/null; \ - all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ - pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ - fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ - skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ - xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ - xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ - error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ - if test `expr $$fail + $$xpass + $$error` -eq 0; then \ - success=true; \ - else \ - success=false; \ - fi; \ - br='==================='; br=$$br$$br$$br$$br; \ - result_count () \ - { \ - if test x"$$1" = x"--maybe-color"; then \ - maybe_colorize=yes; \ - elif test x"$$1" = x"--no-color"; then \ - maybe_colorize=no; \ - else \ - echo "$@: invalid 'result_count' usage" >&2; exit 4; \ - fi; \ - shift; \ - desc=$$1 count=$$2; \ - if test $$maybe_colorize = yes && test $$count -gt 0; then \ - color_start=$$3 color_end=$$std; \ - else \ - color_start= color_end=; \ - fi; \ - echo "$${color_start}# $$desc $$count$${color_end}"; \ - }; \ - create_testsuite_report () \ - { \ - result_count $$1 "TOTAL:" $$all "$$brg"; \ - result_count $$1 "PASS: " $$pass "$$grn"; \ - result_count $$1 "SKIP: " $$skip "$$blu"; \ - result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ - result_count $$1 "FAIL: " $$fail "$$red"; \ - result_count $$1 "XPASS:" $$xpass "$$red"; \ - result_count $$1 "ERROR:" $$error "$$mgn"; \ - }; \ - { \ - echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ - $(am__rst_title); \ - create_testsuite_report --no-color; \ - echo; \ - echo ".. contents:: :depth: 2"; \ - echo; \ - for b in $$bases; do echo $$b; done \ - | $(am__create_global_log); \ - } >$(TEST_SUITE_LOG).tmp || exit 1; \ - mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ - if $$success; then \ - col="$$grn"; \ - else \ - col="$$red"; \ - test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ - fi; \ - echo "$${col}$$br$${std}"; \ - echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ - echo "$${col}$$br$${std}"; \ - create_testsuite_report --maybe-color; \ - echo "$$col$$br$$std"; \ - if $$success; then :; else \ - echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ - if test -n "$(PACKAGE_BUGREPORT)"; then \ - echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ - fi; \ - echo "$$col$$br$$std"; \ - fi; \ - $$success || exit 1 - -check-TESTS: - @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list - @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list - @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) - @set +e; $(am__set_TESTS_bases); \ - log_list=`for i in $$bases; do echo $$i.log; done`; \ - trs_list=`for i in $$bases; do echo $$i.trs; done`; \ - log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ - $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ - exit $$?; -recheck: all $(check_PROGRAMS) - @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) - @set +e; $(am__set_TESTS_bases); \ - bases=`for i in $$bases; do echo $$i; done \ - | $(am__list_recheck_tests)` || exit 1; \ - log_list=`for i in $$bases; do echo $$i.log; done`; \ - log_list=`echo $$log_list`; \ - $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ - am__force_recheck=am--force-recheck \ - TEST_LOGS="$$log_list"; \ - exit $$? -protobuf-test.log: protobuf-test$(EXEEXT) - @p='protobuf-test$(EXEEXT)'; \ - b='protobuf-test'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -protobuf-lazy-descriptor-test.log: protobuf-lazy-descriptor-test$(EXEEXT) - @p='protobuf-lazy-descriptor-test$(EXEEXT)'; \ - b='protobuf-lazy-descriptor-test'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -protobuf-lite-test.log: protobuf-lite-test$(EXEEXT) - @p='protobuf-lite-test$(EXEEXT)'; \ - b='protobuf-lite-test'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -google/protobuf/compiler/zip_output_unittest.sh.log: google/protobuf/compiler/zip_output_unittest.sh - @p='google/protobuf/compiler/zip_output_unittest.sh'; \ - b='google/protobuf/compiler/zip_output_unittest.sh'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -google/protobuf/io/gzip_stream_unittest.sh.log: google/protobuf/io/gzip_stream_unittest.sh - @p='google/protobuf/io/gzip_stream_unittest.sh'; \ - b='google/protobuf/io/gzip_stream_unittest.sh'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -.test.log: - @p='$<'; \ - $(am__set_b); \ - $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -@am__EXEEXT_TRUE@.test$(EXEEXT).log: -@am__EXEEXT_TRUE@ @p='$<'; \ -@am__EXEEXT_TRUE@ $(am__set_b); \ -@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ -@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ -@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ -@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) -install-binPROGRAMS: install-libLTLIBRARIES - -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(protodir)" "$(DESTDIR)$(includedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) - -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) - -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -rm -f google/protobuf/$(DEPDIR)/$(am__dirstamp) - -rm -f google/protobuf/$(am__dirstamp) - -rm -f google/protobuf/compiler/$(DEPDIR)/$(am__dirstamp) - -rm -f google/protobuf/compiler/$(am__dirstamp) - -rm -f google/protobuf/compiler/cpp/$(DEPDIR)/$(am__dirstamp) - -rm -f google/protobuf/compiler/cpp/$(am__dirstamp) - -rm -f google/protobuf/compiler/java/$(DEPDIR)/$(am__dirstamp) - -rm -f google/protobuf/compiler/java/$(am__dirstamp) - -rm -f google/protobuf/compiler/python/$(DEPDIR)/$(am__dirstamp) - -rm -f google/protobuf/compiler/python/$(am__dirstamp) - -rm -f google/protobuf/io/$(DEPDIR)/$(am__dirstamp) - -rm -f google/protobuf/io/$(am__dirstamp) - -rm -f google/protobuf/stubs/$(DEPDIR)/$(am__dirstamp) - -rm -f google/protobuf/stubs/$(am__dirstamp) - -rm -f google/protobuf/testing/$(DEPDIR)/$(am__dirstamp) - -rm -f google/protobuf/testing/$(am__dirstamp) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-am - -clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ - clean-libLTLIBRARIES clean-libtool clean-local mostlyclean-am - -distclean: distclean-am - -rm -rf google/protobuf/$(DEPDIR) google/protobuf/compiler/$(DEPDIR) google/protobuf/compiler/cpp/$(DEPDIR) google/protobuf/compiler/java/$(DEPDIR) google/protobuf/compiler/python/$(DEPDIR) google/protobuf/io/$(DEPDIR) google/protobuf/stubs/$(DEPDIR) google/protobuf/testing/$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-nobase_dist_protoDATA \ - install-nobase_includeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-binPROGRAMS install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf google/protobuf/$(DEPDIR) google/protobuf/compiler/$(DEPDIR) google/protobuf/compiler/cpp/$(DEPDIR) google/protobuf/compiler/java/$(DEPDIR) google/protobuf/compiler/python/$(DEPDIR) google/protobuf/io/$(DEPDIR) google/protobuf/stubs/$(DEPDIR) google/protobuf/testing/$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ - uninstall-nobase_dist_protoDATA \ - uninstall-nobase_includeHEADERS - -.MAKE: all check check-am install install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ - clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ - clean-libLTLIBRARIES clean-libtool clean-local cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-libLTLIBRARIES \ - install-man install-nobase_dist_protoDATA \ - install-nobase_includeHEADERS install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - recheck tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ - uninstall-nobase_dist_protoDATA \ - uninstall-nobase_includeHEADERS - - -# Not sure why these don't get cleaned automatically. -clean-local: - rm -f *.loT - -@USE_EXTERNAL_PROTOC_TRUE@unittest_proto_middleman: $(protoc_inputs) -@USE_EXTERNAL_PROTOC_TRUE@ $(PROTOC) -I$(srcdir) --cpp_out=. $^ -@USE_EXTERNAL_PROTOC_TRUE@ touch unittest_proto_middleman - -# We have to cd to $(srcdir) before executing protoc because $(protoc_inputs) is -# relative to srcdir, which may not be the same as the current directory when -# building out-of-tree. -@USE_EXTERNAL_PROTOC_FALSE@unittest_proto_middleman: protoc$(EXEEXT) $(protoc_inputs) -@USE_EXTERNAL_PROTOC_FALSE@ oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/protoc$(EXEEXT) -I. --cpp_out=$$oldpwd $(protoc_inputs) ) -@USE_EXTERNAL_PROTOC_FALSE@ touch unittest_proto_middleman - -$(protoc_outputs): unittest_proto_middleman - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/src/vpc_scripts/protobuf_builder.vpc b/src/vpc_scripts/protobuf_builder.vpc index 2701e1d38..4998330cb 100644 --- a/src/vpc_scripts/protobuf_builder.vpc +++ b/src/vpc_scripts/protobuf_builder.vpc @@ -19,7 +19,8 @@ $CustomBuildStep "proto" " $ADDITIONAL_PROTOC_ARGS --cpp_out=$GENERATED_PROTO_DIR $(InputPath)" [$OSXALL] $CommandLine "mkdir $GENERATED_PROTO_DIR 2> /dev/null;" \ - "$SRCDIR/thirdparty/protobuf-2.6.1/bin/linux32/protoc --proto_path=$SRCDIR\thirdparty\protobuf-2.6.1\src" \ + "LD_LIBRARY_PATH=$SRCDIR/thirdparty/protobuf-2.6.1/src/.libs" \ + " $SRCDIR/thirdparty/protobuf-2.6.1/src/.libs/protoc --proto_path=$SRCDIR\thirdparty\protobuf-2.6.1\src" \ " --proto_path=$(InputDir) --proto_path=$SRCDIR\gcsdk --proto_path=$SRCDIR\game\shared" \ " $ADDITIONAL_PROTOC_ARGS --cpp_out=$GENERATED_PROTO_DIR $(InputPath)" [$LINUXALL] From 06053e4b53e98cb5f7c1fda5bd9fc5cd8ec10f52 Mon Sep 17 00:00:00 2001 From: ReplayCoding <replaycoding@gmail.com> Date: Sat, 18 Feb 2023 18:08:54 -0800 Subject: [PATCH 12/24] fix a compile error caused by using -> on a non-pointer I'm not sure if this will compile on windows, so *maybe* we should add a ifdef check for linux. But, this should be correct. /src/src/public/gcsdk/msgprotobuf.h:383:8: error: base operand of '->' has non-pointer type 'CMsgProtoBufHeader' 383 | Hdr()->set_client_session_id( nSessionIDClient ); | ^~ --- src/public/gcsdk/msgprotobuf.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/public/gcsdk/msgprotobuf.h b/src/public/gcsdk/msgprotobuf.h index 0d5100305..752a1ae98 100644 --- a/src/public/gcsdk/msgprotobuf.h +++ b/src/public/gcsdk/msgprotobuf.h @@ -379,8 +379,8 @@ class CProtoBufMsg : public CProtoBufMsgBase VPROF_BUDGET( "CProtoBufMsg::CProtoBufMsg( MsgType_t, CSteamID, int32 )", VPROF_BUDGETGROUP_OTHER_NETWORKING ); m_pProtoBufBody = AllocProto(); - Hdr()->set_client_steam_id( steamIDClient.ConvertToUint64() ); - Hdr()->set_client_session_id( nSessionIDClient ); + Hdr().set_client_steam_id( steamIDClient.ConvertToUint64() ); + Hdr().set_client_session_id( nSessionIDClient ); } // Constructor from an incoming netpacket From be77b9647fba3ee0497fed2fd6d5033d569d482e Mon Sep 17 00:00:00 2001 From: ReplayCoding <replaycoding@gmail.com> Date: Sat, 18 Feb 2023 18:15:29 -0800 Subject: [PATCH 13/24] use MIN macro in place of std::min this is technically a problem, but it's what valve probably intended /src/src/vgui2/vgui_surfacelib/linuxfont.cpp:505:43: error: no matching function for call to 'min(int&, unsigned int&)' 505 | int Width = min( rgbaWide, bitmap.width ); --- src/vgui2/vgui_surfacelib/linuxfont.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vgui2/vgui_surfacelib/linuxfont.cpp b/src/vgui2/vgui_surfacelib/linuxfont.cpp index b80d908c1..7366bcd0e 100644 --- a/src/vgui2/vgui_surfacelib/linuxfont.cpp +++ b/src/vgui2/vgui_surfacelib/linuxfont.cpp @@ -502,7 +502,7 @@ void CLinuxFont::GetCharRGBA( wchar_t ch, int rgbaWide, int rgbaTall, unsigned c if( error == 0 ) { uint32 alpha_scale = 1; - int Width = min( rgbaWide, bitmap.width ); + int Width = MIN( rgbaWide, bitmap.width ); unsigned char *rgba = prgba + ( nSkipRows * rgbaWide * 4 ); switch( m_face->glyph->bitmap.pixel_mode ) From 9ced95157127a6972c858b59aec313e5c7fc78c3 Mon Sep 17 00:00:00 2001 From: ReplayCoding <replaycoding@gmail.com> Date: Sat, 18 Feb 2023 18:44:31 -0800 Subject: [PATCH 14/24] add libedit src/thirdparty/libedit-3.1/configure.ac is modified from the original files, to make it work on modern autotools. --- .gitignore | 34 + src/dedicated/console/TextConsoleUnix.cpp | 6 +- src/thirdparty/libedit-3.1/COPYING | 30 + src/thirdparty/libedit-3.1/ChangeLog | 544 + src/thirdparty/libedit-3.1/INSTALL | 229 + src/thirdparty/libedit-3.1/Makefile.am | 13 + src/thirdparty/libedit-3.1/THANKS | 1 + src/thirdparty/libedit-3.1/acinclude.m4 | 84 + src/thirdparty/libedit-3.1/compile | 348 + src/thirdparty/libedit-3.1/config.guess | 1748 +++ src/thirdparty/libedit-3.1/config.sub | 1884 +++ src/thirdparty/libedit-3.1/configure.ac | 162 + src/thirdparty/libedit-3.1/depcomp | 791 ++ src/thirdparty/libedit-3.1/doc/Makefile.am | 73 + .../libedit-3.1/doc/editline.3.roff | 1020 ++ .../libedit-3.1/doc/editline.7.roff | 935 ++ src/thirdparty/libedit-3.1/doc/editrc.5.roff | 325 + src/thirdparty/libedit-3.1/doc/mdoc2man.awk | 459 + .../libedit-3.1/examples/Makefile.am | 13 + src/thirdparty/libedit-3.1/examples/fileman.c | 496 + src/thirdparty/libedit-3.1/examples/fuzz1.c | 63 + src/thirdparty/libedit-3.1/examples/tc1.c | 309 + src/thirdparty/libedit-3.1/examples/wtc1.c | 282 + src/thirdparty/libedit-3.1/install-sh | 541 + src/thirdparty/libedit-3.1/libedit.pc.in | 13 + src/thirdparty/libedit-3.1/ltmain.sh | 11436 ++++++++++++++++ src/thirdparty/libedit-3.1/m4/libtool.m4 | 8400 ++++++++++++ src/thirdparty/libedit-3.1/m4/ltoptions.m4 | 437 + src/thirdparty/libedit-3.1/m4/ltsugar.m4 | 124 + src/thirdparty/libedit-3.1/m4/ltversion.m4 | 24 + src/thirdparty/libedit-3.1/m4/lt~obsolete.m4 | 99 + src/thirdparty/libedit-3.1/missing | 215 + src/thirdparty/libedit-3.1/src/ChangeLog | 6 + src/thirdparty/libedit-3.1/src/Makefile.am | 60 + src/thirdparty/libedit-3.1/src/chared.c | 810 ++ src/thirdparty/libedit-3.1/src/chared.h | 155 + src/thirdparty/libedit-3.1/src/chartype.c | 339 + src/thirdparty/libedit-3.1/src/chartype.h | 120 + src/thirdparty/libedit-3.1/src/common.c | 837 ++ .../libedit-3.1/src/editline/readline.h | 267 + src/thirdparty/libedit-3.1/src/el.c | 678 + src/thirdparty/libedit-3.1/src/el.h | 159 + src/thirdparty/libedit-3.1/src/eln.c | 394 + src/thirdparty/libedit-3.1/src/emacs.c | 512 + src/thirdparty/libedit-3.1/src/filecomplete.c | 846 ++ src/thirdparty/libedit-3.1/src/filecomplete.h | 51 + src/thirdparty/libedit-3.1/src/getline.c | 111 + src/thirdparty/libedit-3.1/src/hist.c | 252 + src/thirdparty/libedit-3.1/src/hist.h | 80 + src/thirdparty/libedit-3.1/src/histedit.h | 321 + src/thirdparty/libedit-3.1/src/history.c | 1183 ++ src/thirdparty/libedit-3.1/src/historyn.c | 3 + src/thirdparty/libedit-3.1/src/keymacro.c | 669 + src/thirdparty/libedit-3.1/src/keymacro.h | 76 + src/thirdparty/libedit-3.1/src/literal.c | 138 + src/thirdparty/libedit-3.1/src/literal.h | 53 + src/thirdparty/libedit-3.1/src/makelist | 182 + src/thirdparty/libedit-3.1/src/map.c | 1427 ++ src/thirdparty/libedit-3.1/src/map.h | 79 + src/thirdparty/libedit-3.1/src/parse.c | 289 + src/thirdparty/libedit-3.1/src/parse.h | 48 + src/thirdparty/libedit-3.1/src/prompt.c | 202 + src/thirdparty/libedit-3.1/src/prompt.h | 58 + src/thirdparty/libedit-3.1/src/read.c | 621 + src/thirdparty/libedit-3.1/src/read.h | 45 + src/thirdparty/libedit-3.1/src/readline.c | 2617 ++++ src/thirdparty/libedit-3.1/src/reallocarr.c | 96 + src/thirdparty/libedit-3.1/src/refresh.c | 1228 ++ src/thirdparty/libedit-3.1/src/refresh.h | 59 + src/thirdparty/libedit-3.1/src/search.c | 642 + src/thirdparty/libedit-3.1/src/search.h | 64 + src/thirdparty/libedit-3.1/src/shlib_version | 5 + src/thirdparty/libedit-3.1/src/sig.c | 205 + src/thirdparty/libedit-3.1/src/sig.h | 70 + src/thirdparty/libedit-3.1/src/strlcat.c | 90 + src/thirdparty/libedit-3.1/src/strlcpy.c | 70 + src/thirdparty/libedit-3.1/src/sys.h | 135 + src/thirdparty/libedit-3.1/src/terminal.c | 1666 +++ src/thirdparty/libedit-3.1/src/terminal.h | 134 + src/thirdparty/libedit-3.1/src/tokenizer.c | 469 + src/thirdparty/libedit-3.1/src/tokenizern.c | 3 + src/thirdparty/libedit-3.1/src/tty.c | 1372 ++ src/thirdparty/libedit-3.1/src/tty.h | 482 + src/thirdparty/libedit-3.1/src/unvis.c | 560 + src/thirdparty/libedit-3.1/src/vi.c | 1160 ++ src/thirdparty/libedit-3.1/src/vis.c | 774 ++ src/thirdparty/libedit-3.1/src/vis.h | 117 + src/thirdparty/libedit-3.1/src/wcsdup.c | 45 + 88 files changed, 54271 insertions(+), 1 deletion(-) create mode 100644 src/thirdparty/libedit-3.1/COPYING create mode 100644 src/thirdparty/libedit-3.1/ChangeLog create mode 100644 src/thirdparty/libedit-3.1/INSTALL create mode 100644 src/thirdparty/libedit-3.1/Makefile.am create mode 100644 src/thirdparty/libedit-3.1/THANKS create mode 100644 src/thirdparty/libedit-3.1/acinclude.m4 create mode 100755 src/thirdparty/libedit-3.1/compile create mode 100755 src/thirdparty/libedit-3.1/config.guess create mode 100755 src/thirdparty/libedit-3.1/config.sub create mode 100644 src/thirdparty/libedit-3.1/configure.ac create mode 100755 src/thirdparty/libedit-3.1/depcomp create mode 100644 src/thirdparty/libedit-3.1/doc/Makefile.am create mode 100644 src/thirdparty/libedit-3.1/doc/editline.3.roff create mode 100644 src/thirdparty/libedit-3.1/doc/editline.7.roff create mode 100644 src/thirdparty/libedit-3.1/doc/editrc.5.roff create mode 100644 src/thirdparty/libedit-3.1/doc/mdoc2man.awk create mode 100644 src/thirdparty/libedit-3.1/examples/Makefile.am create mode 100644 src/thirdparty/libedit-3.1/examples/fileman.c create mode 100644 src/thirdparty/libedit-3.1/examples/fuzz1.c create mode 100644 src/thirdparty/libedit-3.1/examples/tc1.c create mode 100644 src/thirdparty/libedit-3.1/examples/wtc1.c create mode 100755 src/thirdparty/libedit-3.1/install-sh create mode 100644 src/thirdparty/libedit-3.1/libedit.pc.in create mode 100644 src/thirdparty/libedit-3.1/ltmain.sh create mode 100644 src/thirdparty/libedit-3.1/m4/libtool.m4 create mode 100644 src/thirdparty/libedit-3.1/m4/ltoptions.m4 create mode 100644 src/thirdparty/libedit-3.1/m4/ltsugar.m4 create mode 100644 src/thirdparty/libedit-3.1/m4/ltversion.m4 create mode 100644 src/thirdparty/libedit-3.1/m4/lt~obsolete.m4 create mode 100755 src/thirdparty/libedit-3.1/missing create mode 100644 src/thirdparty/libedit-3.1/src/ChangeLog create mode 100644 src/thirdparty/libedit-3.1/src/Makefile.am create mode 100644 src/thirdparty/libedit-3.1/src/chared.c create mode 100644 src/thirdparty/libedit-3.1/src/chared.h create mode 100644 src/thirdparty/libedit-3.1/src/chartype.c create mode 100644 src/thirdparty/libedit-3.1/src/chartype.h create mode 100644 src/thirdparty/libedit-3.1/src/common.c create mode 100644 src/thirdparty/libedit-3.1/src/editline/readline.h create mode 100644 src/thirdparty/libedit-3.1/src/el.c create mode 100644 src/thirdparty/libedit-3.1/src/el.h create mode 100644 src/thirdparty/libedit-3.1/src/eln.c create mode 100644 src/thirdparty/libedit-3.1/src/emacs.c create mode 100644 src/thirdparty/libedit-3.1/src/filecomplete.c create mode 100644 src/thirdparty/libedit-3.1/src/filecomplete.h create mode 100644 src/thirdparty/libedit-3.1/src/getline.c create mode 100644 src/thirdparty/libedit-3.1/src/hist.c create mode 100644 src/thirdparty/libedit-3.1/src/hist.h create mode 100644 src/thirdparty/libedit-3.1/src/histedit.h create mode 100644 src/thirdparty/libedit-3.1/src/history.c create mode 100644 src/thirdparty/libedit-3.1/src/historyn.c create mode 100644 src/thirdparty/libedit-3.1/src/keymacro.c create mode 100644 src/thirdparty/libedit-3.1/src/keymacro.h create mode 100644 src/thirdparty/libedit-3.1/src/literal.c create mode 100644 src/thirdparty/libedit-3.1/src/literal.h create mode 100644 src/thirdparty/libedit-3.1/src/makelist create mode 100644 src/thirdparty/libedit-3.1/src/map.c create mode 100644 src/thirdparty/libedit-3.1/src/map.h create mode 100644 src/thirdparty/libedit-3.1/src/parse.c create mode 100644 src/thirdparty/libedit-3.1/src/parse.h create mode 100644 src/thirdparty/libedit-3.1/src/prompt.c create mode 100644 src/thirdparty/libedit-3.1/src/prompt.h create mode 100644 src/thirdparty/libedit-3.1/src/read.c create mode 100644 src/thirdparty/libedit-3.1/src/read.h create mode 100644 src/thirdparty/libedit-3.1/src/readline.c create mode 100644 src/thirdparty/libedit-3.1/src/reallocarr.c create mode 100644 src/thirdparty/libedit-3.1/src/refresh.c create mode 100644 src/thirdparty/libedit-3.1/src/refresh.h create mode 100644 src/thirdparty/libedit-3.1/src/search.c create mode 100644 src/thirdparty/libedit-3.1/src/search.h create mode 100644 src/thirdparty/libedit-3.1/src/shlib_version create mode 100644 src/thirdparty/libedit-3.1/src/sig.c create mode 100644 src/thirdparty/libedit-3.1/src/sig.h create mode 100644 src/thirdparty/libedit-3.1/src/strlcat.c create mode 100644 src/thirdparty/libedit-3.1/src/strlcpy.c create mode 100644 src/thirdparty/libedit-3.1/src/sys.h create mode 100644 src/thirdparty/libedit-3.1/src/terminal.c create mode 100644 src/thirdparty/libedit-3.1/src/terminal.h create mode 100644 src/thirdparty/libedit-3.1/src/tokenizer.c create mode 100644 src/thirdparty/libedit-3.1/src/tokenizern.c create mode 100644 src/thirdparty/libedit-3.1/src/tty.c create mode 100644 src/thirdparty/libedit-3.1/src/tty.h create mode 100644 src/thirdparty/libedit-3.1/src/unvis.c create mode 100644 src/thirdparty/libedit-3.1/src/vi.c create mode 100644 src/thirdparty/libedit-3.1/src/vis.c create mode 100644 src/thirdparty/libedit-3.1/src/vis.h create mode 100644 src/thirdparty/libedit-3.1/src/wcsdup.c diff --git a/.gitignore b/.gitignore index df85cc94f..0d0f43511 100644 --- a/.gitignore +++ b/.gitignore @@ -186,6 +186,40 @@ src/thirdparty/protobuf-2.6.1/src/Makefile.in src/thirdparty/libpng-1.5.2/pngtest +src/thirdparty/libedit-3.1/Makefile.in +src/thirdparty/libedit-3.1/aclocal.m4 +src/thirdparty/libedit-3.1/config.h.in +src/thirdparty/libedit-3.1/configure +src/thirdparty/libedit-3.1/doc/Makefile.in +src/thirdparty/libedit-3.1/examples/Makefile.in +src/thirdparty/libedit-3.1/src/Makefile.in +src/thirdparty/libedit-3.1/Makefile +src/thirdparty/libedit-3.1/autom4te.cache/ +src/thirdparty/libedit-3.1/config.h +src/thirdparty/libedit-3.1/config.h.in~ +src/thirdparty/libedit-3.1/config.status +src/thirdparty/libedit-3.1/doc/Makefile +src/thirdparty/libedit-3.1/doc/editline.3 +src/thirdparty/libedit-3.1/doc/editline.7 +src/thirdparty/libedit-3.1/doc/editrc.5 +src/thirdparty/libedit-3.1/examples/.deps/ +src/thirdparty/libedit-3.1/examples/.libs/ +src/thirdparty/libedit-3.1/examples/Makefile +src/thirdparty/libedit-3.1/examples/fileman +src/thirdparty/libedit-3.1/examples/tc1 +src/thirdparty/libedit-3.1/examples/wtc1 +src/thirdparty/libedit-3.1/libedit.pc +src/thirdparty/libedit-3.1/libtool +src/thirdparty/libedit-3.1/src/.libs/ +src/thirdparty/libedit-3.1/src/Makefile +src/thirdparty/libedit-3.1/src/common.h +src/thirdparty/libedit-3.1/src/emacs.h +src/thirdparty/libedit-3.1/src/fcns.h +src/thirdparty/libedit-3.1/src/func.h +src/thirdparty/libedit-3.1/src/help.h +src/thirdparty/libedit-3.1/src/vi.h +src/thirdparty/libedit-3.1/stamp-h1 + # ignore generated protobufs generated_proto*/ diff --git a/src/dedicated/console/TextConsoleUnix.cpp b/src/dedicated/console/TextConsoleUnix.cpp index 4f7184514..90ef4a3ae 100644 --- a/src/dedicated/console/TextConsoleUnix.cpp +++ b/src/dedicated/console/TextConsoleUnix.cpp @@ -13,13 +13,17 @@ #include <sys/ioctl.h> +// Must be before any valve headers, otherwise it will conflict with tier0's +// definition of wcsdup. (tier0 undefs it, which is why this works) +#include "../thirdparty/libedit-3.1/src/histedit.h" + #include "TextConsoleUnix.h" #include "tier0/icommandline.h" #include "tier1/utllinkedlist.h" #include "filesystem.h" -#include "../thirdparty/libedit-3.1/src/histedit.h" #include "tier0/vprof.h" + #define CONSOLE_LOG_FILE "console.log" static pthread_mutex_t g_lock; diff --git a/src/thirdparty/libedit-3.1/COPYING b/src/thirdparty/libedit-3.1/COPYING new file mode 100644 index 000000000..742f005f8 --- /dev/null +++ b/src/thirdparty/libedit-3.1/COPYING @@ -0,0 +1,30 @@ +Copyright (c) 1992, 1993 + The Regents of the University of California. All rights reserved. + +This code is derived from software contributed to Berkeley by +Christos Zoulas of Cornell University. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + diff --git a/src/thirdparty/libedit-3.1/ChangeLog b/src/thirdparty/libedit-3.1/ChangeLog new file mode 100644 index 000000000..d11a9889e --- /dev/null +++ b/src/thirdparty/libedit-3.1/ChangeLog @@ -0,0 +1,544 @@ + * See also NetBSD changelog: + http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libedit + +2022-10-30 Jess Thrysoee + + * src/sys.h, src/reallocarr.c: Remove unused sys/cdefs.h include, to compile against musl libc + Reported by Matt Boehlke + + * version-info: 0:70:0 + +2022-10-09 Jess Thrysoee + + * version-info: 0:69:0 + + * src/sys.h: Add __sun guard around sys/types.h in sys.h + + * all: sync with upstream source + +2021-09-10 Jess Thrysoee + + * all: sync with upstream source + +2021-07-14 Jess Thrysoee + + * all: sync with upstream source + + * src/histedit.h: Add wcsdup declaration when ifndef HAVE_WCSDUP. Patch by Rainer Jung. + + * examples/wtc1.c: Fix warnings and add missing brace. Patch by Rainer Jung. + +2021-05-22 Jess Thrysoee + + * version-info: 0:66:0 + + * all: sync with upstream source + + * src/el.c: editrc not read on systems without issetugid + Patch by Trevor Cordes + +2021-04-19 Jess Thrysoee + + * version-info: 0:65:0 + + * all: sync with upstream source + + * src/getline.c,src/sys.h: Provide getline.c implementation if not available + Patch by Claes Nästén + + * src/makelist: Use Posix locale; mainly to get ASCII character classes in e.g. `tr` + Patch by Claes Nästén + + * examples/test_filecompletion.c, examples/wtc1.c: err.h not supported by + Solaris + +2021-02-16 Jess Thrysoee + + * version-info: 0:64:0 + + * all: sync with upstream source + +2019-12-31 Jess Thrysoee + + * version-info: 0:63:0 + + * configure.ac: Support -ltinfo as split in newer ncurses + The newer versions of ncurses support building terminfo routines as a split -ltinfo library. + Patch by Michał Górny + +2019-12-11 Jess Thrysoee + + * version-info: 0:62:0 + + * all: sync with upstream source + +2019-10-25 Jess Thrysoee + + * version-info: 0:61:0 + + * all: sync with upstream source + +2019-03-24 Jess Thrysoee + + * version-info: 0:60:0 + + * all: sync with upstream source + +2018-12-09 Jess Thrysoee + + * version-info: 0:59:0 + + * all: sync with upstream source + +2018-05-25 Jess Thrysoee + + * version-info: 0:58:0 + + * all: sync with upstream source + +2017-05-22 Jess Thrysoee + + * version-info: 0:57:0 + + * all: sync with upstream source + + * libedit.pc.in: Ncurses should not be a part of public link interface. + Patch by Yegor Timoshenko + +2017-03-29 Jess Thrysoee + + * version-info: 0:56:0 + + * all: sync with upstream source + +2016-09-03 Jess Thrysoee + + * version-info: 0:55:0 + + * all: sync with upstream source + +2016-06-18 Jess Thrysoee + + * version-info: 0:54:0 + + * all: sync with upstream source + + * deprecate option --enable-widec. + Upstream now always build with unicode (wide-char/UTF-8) support. + +2015-03-25 Jess Thrysoee + + * version-info: 0:53:0 + + * all: sync with upstream source + +2014-10-30 Jess Thrysoee + + * version-info: 0:52:0 + + * all: sync with upstream source + + * configura.ac: Fix posix shell portability issue. Patch by Ryo Onodera. + +2014-06-20 Jess Thrysoee + + * version-info: 0:51:0 + + * all: sync with upstream source + +2014-06-18 Jess Thrysoee + + * version-info: 0:50:0 + + * all: sync with upstream source - add weak alias patches + +2014-06-18 Jess Thrysoee + + * version-info: 0:49:0 + + * all: sync with upstream source. + +2014-02-13 Jess Thrysoee + + * version-info: 0:48:0 + + * all: sync with upstream source. + + * examples/fileman.c: Fix typo. Patch by Kamil Dudka. + + * Makefile.am, configure.ac: Add --enable-examples configure parameter. + Make it possible to enable/disable building of the examples programs. + Patch by James Le Cuirot. + +2013-07-12 Jess Thrysoee + + * version-info: 0:47:0 + + * all: sync with upstream source. + + * examples/fileman.c, examples/tc1.c: fix pedantic compiler warnings + +2013-07-10 Jess Thrysoee + + * version-info: 0:46:0 + + * configure.ac, src/el.c: ~/.editrc was never sourced on Linux. + On Linux issetugid is not available. When unable to determine if + the current process is tainted, we did not trust the HOME environment + variable and therefore could not load ~/.editrc. + Now instead use secure_getenv or a issetugid based implementation of secure_getenv. + Patch by Paolo Tosco. + +2013-06-11 Jess Thrysoee + + * version-info: 0:45:0 + + * configure.ac: fix AM_CONDITIONAL regression for strlcpy, strlcat, vis, + unvis checks. + +2013-06-08 Jess Thrysoee + + * version-info: 0:44:0 + + * configure.ac, src/Makefile.am: Prevent 'ranlib: has no symbols' build + warnings for systems that has strlcpy, strlcat, vis, unvis. + +2013-06-01 Jess Thrysoee + + * version-info: 0:43:0 + + * all: sync with upstream source. + +2012-12-13 Jess Thrysoee + + * version-info: 0:42:0 + + * all: sync with upstream source. + +2012-06-01 Jess Thrysoee + + * version-info: 0:41:0 + + * all: sync with upstream source. + +2012-05-22 Jess Thrysoee + + * version-info: 0:40:0 + + * all: sync with upstream source. + +2012-03-11 Jess Thrysoee + + * version-info: 0:39:0 + + * all: sync with upstream source. + +2011-08-02 Jess Thrysoee + + * version-info: 0:38:0 + + * all: sync with upstream source. + +2011-07-09 Jess Thrysoee + + * version-info: 0:37:0 + + * all: sync with upstream source. + +2011-02-27 Jess Thrysoee + + * version-info: 0:36:0 + + * all: sync with upstream source. + +2010-04-24 Jess Thrysoee + + * version-info: 0:35:0 + + * all: sync with upstream source. + Now with UTF-8 support. To enable this run 'configure --enable-widec'. + For now an UTF-32 encoded wchar_t is required. + This requirement is met on NetBSD, Solaris and OS X for any UTF-8 locale, + and any system that define __STDC_ISO_10646__ (e.g. GNU libc on Linux). + +2009-09-23 Jess Thrysoee + * version-info: 0:34:0 + + * all: apply Apple patches from: + http://opensource.apple.com/source/libedit/libedit-11/patches + +2009-09-05 Jess Thrysoee + + * version-info: 0:33:0 + + * all: Use predefined macro __sun to identify Solaris + + * src/el.c: Ignore comment lines in .editrc + +2009-07-23 Jess Thrysoee + + * version-info: 0:32:0 + + * all: sync with upstream source. + +2009-06-10 Jess Thrysoee + + * version-info: 0:31:0 + + * all: sync with upstream source. + +2009-05-03 Jess Thrysoee + + * version-info: 0:30:0 + + * all: sync with upstream source. + +2009-04-05 Jess Thrysoee + + * version-info: 0:29:0 + + * all: sync with upstream source. + +2009-01-11 Jess Thrysoee + + * version-info: 0:28:0 + + * all: sync with upstream source. MAJOR.MINOR version is now 3.0. + This is due to NetBSD changing time_t and dev_t to 64 bits. It does + not really effect this package. + + * configure.ac: Remove '--enable-debug' configure flag. The autoconf way + to control flags is by specifying them when running configure, + e.g. 'CFLAGS="-O0 -g" ./configure' + +2008-07-12 Jess Thrysoee + + * version-info: 0:27:0 + + * configure.ac: Added '--enable-debug' configure flag, to produce debugging + information. + + * examples/fileman.c: cast stat struct members, st_nlink and st_size, + appropriately (see also 'man 2 stat'). Patch by Alex Elder. + + * all: sync with upstream source. MINOR version is now 11. + +2007-08-31 Jess Thrysoee + + * version-info: 0:26:0 + + * libedit.pc.in,Makefile.am,configure.ac,patches/extra_dist_list.sh: + Added pkg-config support for libedit. Patch by Masatake YAMATO. + +2007-08-13 Jess Thrysoee + + * version-info: 0:25:0 + + * all: sync with upstream source. + +2007-03-02 Jess Thrysoee + + * version-info: 0:24:0 + + * all: sync with upstream source. + +2006-10-22 Jess Thrysoee + + * version-info: 0:23:0 + + * src/shlib_version: Upstream bumped minor version from 9 to 10. + + * all: sync with upstream source. More readline functions. + +2006-10-22 Jess Thrysoee + + * version-info: 0:22:0 + + * all: sync with upstream source. + +2006-08-29 Jess Thrysoee + + * version-info: 0:21:0 + + * all: License cleanup. All 4-clause advertising BSD licenses has been + changed to the 3-clause version by upstream. + + * src/fgetln.c: use src/tools/compat/fgetln.c instead of + othersrc/libexec/tnftpd/libnetbsd/fgetln.c + +2006-08-16 Jess Thrysoee + + * version-info: 0:20:0 + + * all: sync with upstream source. + +2006-06-03 Jess Thrysoee + + * version-info: 0:19:0 + + * COPYING: added global license file + + * all: sync with upstream source. + +2006-02-13 Jess Thrysoee + + * version-info: 0:18:0 + + * src/readline.c: Partial rl_getc_function support, patch by Kjeld Borch + Egevang. + + * src/readline.c: Make write_history and read_history returncode readline + compatible. Upstream patch. + +2006-01-03 Jess Thrysoee + + * version-info: 0:17:0 + + * patches/cvs_export.sh: strlcat.c and strlcpy.c was moved to + src/common/lib/libc/string in the upstream cvs repository. + + * all: sync with upstream source. + +2005-10-22 Jess Thrysoee + + * version-info: 0:16:0 + + * patches/*.patch, configure.ac: define SCCSID, undef LIBC_SCCS. Remove + fourteen cosmetic patches. + + * all: sync with upstream source. + +2005-09-11 Jess Thrysoee + + * version-info: 0:15:0 + + * src/Makefile.am: fix typo that meant generated files were distributes, + and make generated file targets dependent on the the 'makelist' input + files. + + * all: sync with upstream source. This is just a manpage update + +2005-08-28 Jess Thrysoee + + * version-info: 0:14:0 + + * src/sys.h: include config.h to avoid "redefinition of + `u_int32_t'". Patch by Norihiko Murase. + + * src/search.c: explicitly include sys/types.h, because regex.h on + FreeBSD needs it and does not include it itself. Patch by Norihiko Murase. + + * acinclude.m4: added EL_GETPW_R_DRAFT test and use AC_TRY_LINK instead + of AC_TRY_COMPILE. Suggested by Norihiko Murase. + + * all: sync with upstream source. + +2005-08-16 Jess Thrysoee + + * version-info: 0:13:0 + + * all: sync with upstream source. + +2005-08-05 Jess Thrysoee + + * version-info: 0:12:0 + + * all: sync with upstream source. + +2005-07-24 Jess Thrysoee + + * version-info: 0:11:0 + + * histedit.h, histedit.c, readline.c, editline/readline.h: From + upstream; added remove_history(). + +2005-07-07 Jess Thrysoee + + * version-info: 0:10:0 + + * history.c, key.c: From upstream source; Fix memory leaks found by + valgrind. + +2005-06-28 Jess Thrysoee + + * version-info: 0:9:0 + + * src/readline.c: getpwent_r is not POSIX, always use getpwent. + Reported by Gerrit P. Haase. + + * src/Makefile.am: Added libtool -no-undefined. This is needed on Cygwin + to get a shared editline library. Should not affect other platforms. + Suggested by Gerrit P. Haase. + +2005-06-15 Jess Thrysoee + + * version-info: 0:8:0 + + * all: sync with upstream source. + +2005-06-01 Jess Thrysoee + + * version-info: 0:7:0 + + * all: sync with upstream source. + + * src/readline.c, src/filecomplete.c: Solaris use POSIX draft versions + of getpwent_r, getpwnam_r and getpwuid_r which return 'struct passwd *'. + Define HAVE_GETPW_R_POSIX if these functions are (non draft) POSIX + compatible. Patch by Julien Torrès. + +2005-05-28 Jess Thrysoee + + * version-info: 0:6:0 + + * all: sync with upstream source. + +2005-03-11 Jess Thrysoee + + * version-info: 0:5:0 + + * all: sync with upstream source. + +2004-12-07 Jess Thrysoee + + * version-info: 0:4:0 + + * src/readline.c: d_namlen (in struct dirent) is not portable, always + use strlen. Patch by Scott Rankin. + +2004-11-27 Jess Thrysoee + + * version-info: 0:3:0 + + * src/history.c: bug #26785 fixed upstream, removed local patch. + +2004-11-06 Jess Thrysoee + + * version-info: 0:2:0 + + * all: sync with upstream source. + + * doc/Makefile.am: If mdoc2man fails, remove empty file. Patch by + Darren Tucker. + +2004-10-14 Jess Thrysoee + + * version-info: 0:1:0 + + * doc/Makefile.am: 'make install' twice fails. Remove old links before + trying to link the man pages. Patch by Rick Richardson. + +2004-09-28 Jess Thrysoee + + * version-info: 0:0:0 + + * acinclude.m4 configure.ac src/Makefile.am: Adhere to + LibTools library interface versions recommendation. + http://www.gnu.org/software/libtool/manual.html#SEC32 + + * doc/Makefile.am: name all manpage links as el_* (e.g. el_history.3) + to avoid conflicts. + +2004-09-08 Jess Thrysoee + + * all: Initial package. diff --git a/src/thirdparty/libedit-3.1/INSTALL b/src/thirdparty/libedit-3.1/INSTALL new file mode 100644 index 000000000..54caf7c19 --- /dev/null +++ b/src/thirdparty/libedit-3.1/INSTALL @@ -0,0 +1,229 @@ +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/src/thirdparty/libedit-3.1/Makefile.am b/src/thirdparty/libedit-3.1/Makefile.am new file mode 100644 index 000000000..093990798 --- /dev/null +++ b/src/thirdparty/libedit-3.1/Makefile.am @@ -0,0 +1,13 @@ + +AUTOMAKE_OPTIONS = foreign +ACLOCAL_AMFLAGS = -I m4 + +if ENABLE_EXAMPLES + EXAMPLES_DIR=examples +endif + +SUBDIRS = src $(EXAMPLES_DIR) doc + +EXTRA_DIST = libedit.pc.in +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libedit.pc diff --git a/src/thirdparty/libedit-3.1/THANKS b/src/thirdparty/libedit-3.1/THANKS new file mode 100644 index 000000000..98ad22b8b --- /dev/null +++ b/src/thirdparty/libedit-3.1/THANKS @@ -0,0 +1 @@ +Thanks to the NetBSD Project maintainers of libedit! diff --git a/src/thirdparty/libedit-3.1/acinclude.m4 b/src/thirdparty/libedit-3.1/acinclude.m4 new file mode 100644 index 000000000..95faf65f4 --- /dev/null +++ b/src/thirdparty/libedit-3.1/acinclude.m4 @@ -0,0 +1,84 @@ + +dnl +dnl read lib version from file (and trim trailing newline) +dnl +define([EL_RELEASE], [patsubst(esyscmd([. src/shlib_version; echo $major.$minor]), [ +])]) + +dnl +dnl read cvsexport timestamp from file (and trim trailing newline) +dnl +define([EL_TIMESTAMP], [patsubst(esyscmd([date +"%Y%m%d"]), [ +])]) + + +dnl +dnl NetBSD use the -mdoc macro package for manpages, but e.g. +dnl AIX and Solaris only support the -man package. +dnl +AC_DEFUN([EL_MANTYPE], +[ + MANTYPE= + TestPath="/usr/bin${PATH_SEPARATOR}/usr/ucb" + AC_PATH_PROGS(NROFF, nroff awf, /bin/false, $TestPath) + if ${NROFF} -mdoc ${srcdir}/doc/editrc.5.roff >/dev/null 2>&1; then + MANTYPE=mdoc + fi + AC_SUBST(MANTYPE) +]) + + +dnl +dnl Check if getpwnam_r and getpwuid_r are POSIX.1 compatible +dnl POSIX draft version returns 'struct passwd *' (used on Solaris) +dnl NOTE: getpwent_r is not POSIX so we always use getpwent +dnl +AC_DEFUN([EL_GETPW_R_POSIX], +[ + AC_MSG_CHECKING([whether getpwnam_r and getpwuid_r are posix like]) + # The prototype for the POSIX version is: + # int getpwnam_r(char *, struct passwd *, char *, size_t, struct passwd **) + # int getpwuid_r(uid_t, struct passwd *, char *, size_t, struct passwd **); + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include <stdlib.h> + #include <sys/types.h> + #include <pwd.h>]], + [[getpwnam_r(NULL, NULL, NULL, (size_t)0, NULL); + getpwuid_r((uid_t)0, NULL, NULL, (size_t)0, NULL);]])], + [AC_DEFINE([HAVE_GETPW_R_POSIX], 1, [Define to 1 if you have getpwnam_r and getpwuid_r that are POSIX.1 compatible.]) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) +]) + +AC_DEFUN([EL_GETPW_R_DRAFT], +[ + AC_MSG_CHECKING([whether getpwnam_r and getpwuid_r are posix _draft_ like]) + # The prototype for the POSIX draft version is: + # struct passwd *getpwuid_r(uid_t, struct passwd *, char *, int); + # struct passwd *getpwnam_r(char *, struct passwd *, char *, int); + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include <stdlib.h> + #include <sys/types.h> + #include <pwd.h>]], + [[getpwnam_r(NULL, NULL, NULL, (size_t)0); + getpwuid_r((uid_t)0, NULL, NULL, (size_t)0);]])], + [AC_DEFINE([HAVE_GETPW_R_DRAFT], 1, [Define to 1 if you have getpwnam_r and getpwuid_r that are draft POSIX.1 versions.]) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) +]) + + +dnl +dnl deprecate option --enable-widec to turn on use of wide-character support +dnl +AC_DEFUN([EL_DEPRECATE_WIDEC], +[ + AC_MSG_CHECKING(if you want wide-character code) + AC_ARG_ENABLE(widec, + [ --enable-widec deprecated, wide-character/UTF-8 is always enabled], + [with_widec=$enableval], + [with_widec=no]) + AC_MSG_RESULT($with_widec) + AC_MSG_WARN([--enable-widec is deprecated, wide-character/UTF-8 is always enabled]) +]) + diff --git a/src/thirdparty/libedit-3.1/compile b/src/thirdparty/libedit-3.1/compile new file mode 100755 index 000000000..df363c8fb --- /dev/null +++ b/src/thirdparty/libedit-3.1/compile @@ -0,0 +1,348 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 1999-2021 Free Software Foundation, Inc. +# Written by Tom Tromey <tromey@cygnus.com>. +# +# 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 2, 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 <https://www.gnu.org/licenses/>. + +# 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 file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN* | MSYS*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/* | msys/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ + icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# 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: diff --git a/src/thirdparty/libedit-3.1/config.guess b/src/thirdparty/libedit-3.1/config.guess new file mode 100755 index 000000000..e81d3ae7c --- /dev/null +++ b/src/thirdparty/libedit-3.1/config.guess @@ -0,0 +1,1748 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2021 Free Software Foundation, Inc. + +# shellcheck disable=SC2006,SC2268 # see below for rationale + +timestamp='2021-06-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 <https://www.gnu.org/licenses/>. +# +# 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 <config-patches@gnu.org>. + + +# 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 <config-patches@gnu.org>." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2021 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 <features.h> + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #elif defined(__GLIBC__) + LIBC=gnu + #else + #include <stdarg.h> + /* 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 -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 <stdio.h> /* 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 <sys/systemcfg.h> + + 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 <stdlib.h> + #include <unistd.h> + + 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 <unistd.h> + 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 + ;; + *: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' </usr/options/cb.name` + GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL + elif /bin/uname -X 2>/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 <Richard.M.Bartel@ccMail.Census.GOV> + GUESS=i586-unisys-sysv4 + ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes <hewes@openmarket.com>. + # 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 + ;; + *: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" <<EOF +#ifdef _SEQUENT_ +#include <sys/types.h> +#include <sys/utsname.h> +#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 <signal.h> +#if defined(_SIZE_T_) || defined(SIGLOST) +#include <sys/utsname.h> +#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 <sys/param.h> + 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 <sys/param.h> +#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 <<EOF + +NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize +the system type. Please install a C compiler and try again. +EOF + ;; +esac + +cat >&2 <<EOF + +This script (version $timestamp), has failed to recognize the +operating system you are using. If your script is old, overwrite *all* +copies of config.guess and config.sub with the latest versions from: + + https://git.savannah.gnu.org/cgit/config.git/plain/config.guess +and + https://git.savannah.gnu.org/cgit/config.git/plain/config.sub +EOF + +our_year=`echo $timestamp | sed 's,-.*,,'` +thisyear=`date +%Y` +# shellcheck disable=SC2003 +script_age=`expr "$thisyear" - "$our_year"` +if test "$script_age" -lt 3 ; then + cat >&2 <<EOF + +If $0 has already been updated, send the following data and any +information you think might be pertinent to config-patches@gnu.org to +provide the necessary information to handle your system. + +config.guess timestamp = $timestamp + +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` +/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: diff --git a/src/thirdparty/libedit-3.1/config.sub b/src/thirdparty/libedit-3.1/config.sub new file mode 100755 index 000000000..d74fb6dea --- /dev/null +++ b/src/thirdparty/libedit-3.1/config.sub @@ -0,0 +1,1884 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2021 Free Software Foundation, Inc. + +# shellcheck disable=SC2006,SC2268 # see below for rationale + +timestamp='2021-08-14' + +# 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 <https://www.gnu.org/licenses/>. +# +# 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 <config-patches@gnu.org>. +# +# 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 <config-patches@gnu.org>." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2021 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 <<EOF +$1 +EOF +IFS=$saved_IFS + +# Separate into logical components for further validation +case $1 in + *-*-*-*-*) + echo Invalid configuration \`"$1"\': more than four components >&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 <<EOF +$basic_machine +EOF + IFS=$saved_IFS + ;; + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + cpu=$basic_machine + vendor=pc + ;; + # These rules are duplicated from below for sake of the special case above; + # i.e. things that normalized to x86 arches should also default to "pc" + pc98) + cpu=i386 + vendor=pc + ;; + x64 | amd64) + cpu=x86_64 + vendor=pc + ;; + # Recognize the basic CPU types without company name. + *) + cpu=$basic_machine + vendor=unknown + ;; +esac + +unset -v basic_machine + +# Decode basic machines in the full and proper CPU-Company form. +case $cpu-$vendor in + # Here we handle the default manufacturer of certain CPU types in canonical form. It is in + # some cases the only manufacturer, in others, it is the most popular. + craynv-unknown) + vendor=cray + basic_os=${basic_os:-unicosmp} + ;; + c90-unknown | c90-cray) + vendor=cray + basic_os=${Basic_os:-unicos} + ;; + fx80-unknown) + vendor=alliant + ;; + romp-unknown) + vendor=ibm + ;; + mmix-unknown) + vendor=knuth + ;; + microblaze-unknown | microblazeel-unknown) + vendor=xilinx + ;; + rs6000-unknown) + vendor=ibm + ;; + vax-unknown) + vendor=dec + ;; + pdp11-unknown) + vendor=dec + ;; + we32k-unknown) + vendor=att + ;; + cydra-unknown) + vendor=cydrome + ;; + i370-ibm*) + vendor=ibm + ;; + orion-unknown) + vendor=highlevel + ;; + xps-unknown | xps100-unknown) + cpu=xps100 + vendor=honeywell + ;; + + # Here we normalize CPU types with a missing or matching vendor + dpx20-unknown | dpx20-bull) + cpu=rs6000 + vendor=bull + basic_os=${basic_os:-bosx} + ;; + + # Here we normalize CPU types irrespective of the vendor + amd64-*) + cpu=x86_64 + ;; + blackfin-*) + cpu=bfin + basic_os=linux + ;; + c54x-*) + cpu=tic54x + ;; + c55x-*) + cpu=tic55x + ;; + c6x-*) + cpu=tic6x + ;; + e500v[12]-*) + cpu=powerpc + basic_os=${basic_os}"spe" + ;; + mips3*-*) + cpu=mips64 + ;; + ms1-*) + cpu=mt + ;; + m68knommu-*) + cpu=m68k + basic_os=linux + ;; + m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) + cpu=s12z + ;; + openrisc-*) + cpu=or32 + ;; + parisc-*) + cpu=hppa + basic_os=linux + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + cpu=i586 + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*) + cpu=i686 + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + cpu=i686 + ;; + pentium4-*) + cpu=i786 + ;; + pc98-*) + cpu=i386 + ;; + ppc-* | ppcbe-*) + cpu=powerpc + ;; + ppcle-* | powerpclittle-*) + cpu=powerpcle + ;; + ppc64-*) + cpu=powerpc64 + ;; + ppc64le-* | powerpc64little-*) + cpu=powerpc64le + ;; + sb1-*) + cpu=mipsisa64sb1 + ;; + sb1el-*) + cpu=mipsisa64sb1el + ;; + sh5e[lb]-*) + cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` + ;; + spur-*) + cpu=spur + ;; + strongarm-* | thumb-*) + cpu=arm + ;; + tx39-*) + cpu=mipstx39 + ;; + tx39el-*) + cpu=mipstx39el + ;; + x64-*) + cpu=x86_64 + ;; + xscale-* | xscalee[bl]-*) + cpu=`echo "$cpu" | sed 's/^xscale/arm/'` + ;; + arm64-*) + cpu=aarch64 + ;; + + # Recognize the canonical CPU Types that limit and/or modify the + # company names they are paired with. + cr16-*) + basic_os=${basic_os:-elf} + ;; + crisv32-* | etraxfs*-*) + cpu=crisv32 + vendor=axis + ;; + cris-* | etrax*-*) + cpu=cris + vendor=axis + ;; + crx-*) + basic_os=${basic_os:-elf} + ;; + neo-tandem) + cpu=neo + vendor=tandem + ;; + nse-tandem) + cpu=nse + vendor=tandem + ;; + nsr-tandem) + cpu=nsr + vendor=tandem + ;; + nsv-tandem) + cpu=nsv + vendor=tandem + ;; + nsx-tandem) + cpu=nsx + vendor=tandem + ;; + mipsallegrexel-sony) + cpu=mipsallegrexel + vendor=sony + ;; + tile*-*) + basic_os=${basic_os:-linux-gnu} + ;; + + *) + # Recognize the canonical CPU types that are allowed with any + # company name. + case $cpu in + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | abacus \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ + | alphapca5[67] | alpha64pca5[67] \ + | am33_2.0 \ + | amdgcn \ + | arc | arceb | arc32 | arc64 \ + | arm | arm[lb]e | arme[lb] | armv* \ + | avr | avr32 \ + | asmjs \ + | ba \ + | be32 | be64 \ + | bfin | bpf | bs2000 \ + | c[123]* | c30 | [cjt]90 | c4x \ + | c8051 | clipper | craynv | csky | cydra \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | elxsi | epiphany \ + | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | h8300 | h8500 \ + | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i*86 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | loongarch32 | loongarch64 | loongarchx32 \ + | m32c | m32r | m32rle \ + | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ + | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ + | m88110 | m88k | maxq | mb | mcore | mep | metag \ + | microblaze | microblazeel \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64eb | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r3 | mipsisa32r3el \ + | mipsisa32r5 | mipsisa32r5el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r3 | mipsisa64r3el \ + | mipsisa64r5 | mipsisa64r5el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mmix \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | none | np1 | ns16k | ns32k | nvptx \ + | open8 \ + | or1k* \ + | or32 \ + | orion \ + | picochip \ + | pdp10 | pdp11 | pj | pjl | pn | power \ + | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ + | rl78 | romp | rs6000 | rx \ + | s390 | s390x \ + | score \ + | sh | shl \ + | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ + | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ + | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ + | spu \ + | tahoe \ + | thumbv7* \ + | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ + | tron \ + | ubicom32 \ + | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ + | vax \ + | visium \ + | w65 \ + | wasm32 | wasm64 \ + | we32k \ + | x86 | x86_64 | xc16x | xgate | xps100 \ + | xstormy16 | xtensa* \ + | ymp \ + | z8k | z80) + ;; + + *) + echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&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 caes, 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 <<EOF +$basic_os +EOF + IFS=$saved_IFS + ;; + # Default OS when just kernel was specified + nto*) + kernel=nto + os=`echo "$basic_os" | sed -e 's|nto|qnx|'` + ;; + linux*) + kernel=linux + os=`echo "$basic_os" | sed -e 's|linux|gnu|'` + ;; + *) + kernel= + os=$basic_os + ;; +esac + +# Now, normalize the OS (knowing we just have one component, it's not a kernel, +# etc.) +case $os in + # First match some system type aliases that might get confused + # with valid system types. + # solaris* is a basic system type, with this one exception. + auroraux) + os=auroraux + ;; + bluegene*) + os=cnk + ;; + solaris1 | solaris1.*) + os=`echo "$os" | sed -e 's|solaris1|sunos4|'` + ;; + solaris) + os=solaris2 + ;; + unixware*) + os=sysv4.2uw + ;; + # es1800 is here to avoid being matched by es* (a different OS) + es1800*) + os=ose + ;; + # Some version numbers need modification + chorusos*) + os=chorusos + ;; + isc) + os=isc2.2 + ;; + sco6) + os=sco5v6 + ;; + sco5) + os=sco3.2v5 + ;; + sco4) + os=sco3.2v4 + ;; + sco3.2.[4-9]*) + os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'` + ;; + sco*v* | scout) + # Don't match below + ;; + sco*) + os=sco3.2v2 + ;; + psos*) + os=psos + ;; + qnx*) + os=qnx + ;; + hiux*) + os=hiuxwe2 + ;; + lynx*178) + os=lynxos178 + ;; + lynx*5) + os=lynxos5 + ;; + lynxos*) + # don't get caught up in next wildcard + ;; + lynx*) + os=lynxos + ;; + mac[0-9]*) + os=`echo "$os" | sed -e 's|mac|macos|'` + ;; + opened*) + os=openedition + ;; + os400*) + os=os400 + ;; + sunos5*) + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` + ;; + sunos6*) + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` + ;; + wince*) + os=wince + ;; + utek*) + os=bsd + ;; + dynix*) + os=bsd + ;; + acis*) + os=aos + ;; + atheos*) + os=atheos + ;; + syllable*) + os=syllable + ;; + 386bsd) + os=bsd + ;; + ctix* | uts*) + os=sysv + ;; + nova*) + os=rtmk-nova + ;; + ns2) + os=nextstep2 + ;; + # Preserve the version number of sinix5. + sinix5.*) + os=`echo "$os" | sed -e 's|sinix|sysv|'` + ;; + sinix*) + os=sysv4 + ;; + tpf*) + os=tpf + ;; + triton*) + os=sysv3 + ;; + oss*) + os=sysv3 + ;; + svr4*) + os=sysv4 + ;; + svr3) + os=sysv3 + ;; + sysvr4) + os=sysv4 + ;; + ose*) + os=ose + ;; + *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) + os=mint + ;; + dicos*) + os=dicos + ;; + pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $cpu in + arm*) + os=eabi + ;; + *) + os=elf + ;; + esac + ;; + *) + # No normalization, but not necessarily accepted, that comes below. + ;; +esac + +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +kernel= +case $cpu-$vendor in + score-*) + os=elf + ;; + spu-*) + os=elf + ;; + *-acorn) + os=riscix1.2 + ;; + arm*-rebel) + kernel=linux + os=gnu + ;; + arm*-semi) + os=aout + ;; + c4x-* | tic4x-*) + os=coff + ;; + c8051-*) + os=elf + ;; + clipper-intergraph) + os=clix + ;; + hexagon-*) + os=elf + ;; + tic54x-*) + os=coff + ;; + tic55x-*) + os=coff + ;; + tic6x-*) + os=coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=tops20 + ;; + pdp11-*) + os=none + ;; + *-dec | vax-*) + os=ultrix4.2 + ;; + m68*-apollo) + os=domain + ;; + i386-sun) + os=sunos4.0.2 + ;; + m68000-sun) + os=sunos3 + ;; + m68*-cisco) + os=aout + ;; + mep-*) + os=elf + ;; + mips*-cisco) + os=elf + ;; + mips*-*) + os=elf + ;; + or32-*) + os=coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=sysv3 + ;; + sparc-* | *-sun) + os=sunos4.1.1 + ;; + pru-*) + os=elf + ;; + *-be) + os=beos + ;; + *-ibm) + os=aix + ;; + *-knuth) + os=mmixware + ;; + *-wec) + os=proelf + ;; + *-winbond) + os=proelf + ;; + *-oki) + os=proelf + ;; + *-hp) + os=hpux + ;; + *-hitachi) + os=hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=sysv + ;; + *-cbm) + os=amigaos + ;; + *-dg) + os=dgux + ;; + *-dolphin) + os=sysv3 + ;; + m68k-ccur) + os=rtu + ;; + m88k-omron*) + os=luna + ;; + *-next) + os=nextstep + ;; + *-sequent) + os=ptx + ;; + *-crds) + os=unos + ;; + *-ns) + os=genix + ;; + i370-*) + os=mvs + ;; + *-gould) + os=sysv + ;; + *-highlevel) + os=bsd + ;; + *-encore) + os=bsd + ;; + *-sgi) + os=irix + ;; + *-siemens) + os=sysv4 + ;; + *-masscomp) + os=rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=uxpv + ;; + *-rom68k) + os=coff + ;; + *-*bug) + os=coff + ;; + *-apple) + os=macos + ;; + *-atari*) + os=mint + ;; + *-wrs) + os=vxworks + ;; + *) + os=none + ;; +esac + +fi + +# Now, validate our (potentially fixed-up) OS. +case $os in + # Sometimes we do "kernel-libc", so those need to count as OSes. + musl* | newlib* | relibc* | uclibc*) + ;; + # Likewise for "kernel-abi" + eabi* | gnueabi*) + ;; + # VxWorks passes extra cpu info in the 4th filed. + simlinux | simwindows | spe) + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ + | hiux* | abug | nacl* | netware* | windows* \ + | os9* | macos* | osx* | ios* \ + | mpw* | magic* | mmixware* | mon960* | lnews* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* | twizzler* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | mirbsd* | netbsd* | dicos* | openedition* | ose* \ + | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ + | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* | serenity* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | mint* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ + | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ + | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr*) + ;; + # This one is extra strict with allowed versions + sco3.2v2 | sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + none) + ;; + *) + echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&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: diff --git a/src/thirdparty/libedit-3.1/configure.ac b/src/thirdparty/libedit-3.1/configure.ac new file mode 100644 index 000000000..2c767a46d --- /dev/null +++ b/src/thirdparty/libedit-3.1/configure.ac @@ -0,0 +1,162 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. +# +# Compile with debug symbols: +# CFLAGS="-ggdb -pedandic -O0" ./configure +# CFLAGS="-ggdb -Wall -Wextra -pedantic -O0" ./configure +# +# Use libtool (glibtool on OSX) to debug: +# +# libtool --mode=execute gdb examples/tc1 +# +# Run valgrind like this, but note +# http://invisible-island.net/ncurses/ncurses.faq.html#config_leaks. +# +# libtool --mode=execute valgrind --leak-check=full examples/tc1 +# +# A valgrind suppressions file for ncurses is available at +# http://www.opensource.apple.com/source/ncurses/ncurses-27/ncurses/misc/ncurses.supp +# +# libtool --mode=execute valgrind --suppressions=ncurses.supp.txt --leak-check=full examples/tc1 +# +# Verbose output can be enabled with +# "./configure --disable-silent-rules" or "make V=1" +# + +AC_INIT([libedit],[EL_RELEASE],[],[libedit-EL_TIMESTAMP]) +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_SRCDIR([src/strlcat.c]) +AC_CONFIG_HEADERS([config.h]) + +# features of Posix that are extensions to C (define _GNU_SOURCE) +AC_USE_SYSTEM_EXTENSIONS + +AM_INIT_AUTOMAKE +LT_INIT + +# libtool -version-info +AC_SUBST(LT_VERSION, [0:70:0]) + +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +# Checks for programs. +AC_PROG_CC +AC_PROG_LN_S +AC_PROG_AWK +EL_MANTYPE + +AC_CHECK_LIB(ncurses, tgetent,, + [AC_CHECK_LIB(curses, tgetent,, + [AC_CHECK_LIB(termcap, tgetent,, + [AC_CHECK_LIB(tinfo, tgetent,, + [AC_MSG_ERROR([libncurses, libcurses, libtermcap or libtinfo is required!])] + )] + )] + )] +) + +### deprecate option --enable-widec to turn on use of wide-character support +EL_DEPRECATE_WIDEC + +AC_ARG_ENABLE( + [examples], + [AS_HELP_STRING([--enable-examples], [build the example programs [default=yes]])], + [enable_examples="$enableval"], + [enable_examples="yes"] +) + +AM_CONDITIONAL(ENABLE_EXAMPLES, [test "$enable_examples" = "yes"]) + +# Checks for header files. +AC_HEADER_DIRENT +# note(replaycoding): Broken on newer autotools versions +# AC_CHECK_INCLUDES_DEFAULT +AC_PROG_EGREP + +AC_HEADER_SYS_WAIT +AC_CHECK_HEADERS([fcntl.h limits.h malloc.h stdlib.h string.h sys/ioctl.h sys/param.h unistd.h curses.h ncurses.h sys/cdefs.h termcap.h]) + +AC_CHECK_HEADER([ncurses.h], [], + [AC_CHECK_HEADER([curses.h], [], + [AC_CHECK_HEADER([termcap.h], [], + [AC_MSG_ERROR([ncurses.h, curses.h, or termcap.h is required!])], + [])], + [])], +[]) + +AC_CHECK_HEADER([termios.h], [], [AC_MSG_ERROR([termios.h is required!])], []) + +## include curses.h to prevent "Present But Cannot Be Compiled" +AC_CHECK_HEADERS([term.h],,, +[[#if HAVE_CURSES_H +# include <curses.h> +#elif HAVE_NCURSES_H +# include <ncurses.h> +#endif +]]) + +# Check for dirent.d_namlen field explicitly +# (This is a bit more straightforward than, if not quite as portable as, +# the recipe given by the autoconf maintainers.) +AC_CHECK_MEMBER(struct dirent.d_namlen, +AC_DEFINE([HAVE_STRUCT_DIRENT_D_NAMLEN],[1], +[Define to 1 if struct dirent has member d_namlen]),, +[#if HAVE_DIRENT_H +#include <dirent.h> +#endif +]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_CHECK_TYPES([u_int32_t]) + +# Checks for library functions. +AC_FUNC_CLOSEDIR_VOID +AC_FUNC_FORK +AC_PROG_GCC_TRADITIONAL +## _AIX is offended by rpl_malloc and rpl_realloc +#AC_FUNC_MALLOC +#AC_FUNC_REALLOC +AC_FUNC_STAT +AC_CHECK_FUNCS([endpwent isascii memchr memset re_comp regcomp strcasecmp strchr strcspn strdup strerror strrchr strstr strtol issetugid wcsdup strlcpy strlcat vis strvis strunvis __secure_getenv secure_getenv reallocarr]) + +# strlcpy +AC_CHECK_FUNC(strlcpy, found_strlcpy=yes, found_strlcpy=no) +AM_CONDITIONAL(HAVE_STRLCPY, [test "x$found_strlcpy" = xyes]) + +# strlcat +AC_CHECK_FUNC(strlcat, found_strlcat=yes, found_strlcat=no) +AM_CONDITIONAL(HAVE_STRLCAT, [test "x$found_strlcat" = xyes]) + +# getline +AC_CHECK_FUNC(getline, found_getline=yes, found_getline=no) +AM_CONDITIONAL(HAVE_GETLINE, [test "x$found_getline" = xyes]) + +# vis +AC_CHECK_FUNC(vis, found_vis=yes, found_vis=no) +AM_CONDITIONAL(HAVE_VIS, [test "x$found_vis" = xyes]) + +# unvis +AC_CHECK_FUNC(unvis, found_unvis=yes, found_unvis=no) +AM_CONDITIONAL(HAVE_UNVIS, [test "x$found_unvis" = xyes]) + + +EL_GETPW_R_POSIX +EL_GETPW_R_DRAFT + + +AH_BOTTOM([ +#include "sys.h" +#define SCCSID +#undef LIBC_SCCS +#define lint +]) + +AC_CONFIG_FILES([Makefile + libedit.pc + src/Makefile + doc/Makefile + examples/Makefile]) +AC_OUTPUT diff --git a/src/thirdparty/libedit-3.1/depcomp b/src/thirdparty/libedit-3.1/depcomp new file mode 100755 index 000000000..715e34311 --- /dev/null +++ b/src/thirdparty/libedit-3.1/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 1999-2021 Free Software Foundation, Inc. + +# 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 2, 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 <https://www.gnu.org/licenses/>. + +# 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. + +# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# 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: diff --git a/src/thirdparty/libedit-3.1/doc/Makefile.am b/src/thirdparty/libedit-3.1/doc/Makefile.am new file mode 100644 index 000000000..0e58949e8 --- /dev/null +++ b/src/thirdparty/libedit-3.1/doc/Makefile.am @@ -0,0 +1,73 @@ + +EL_MANS = editline.3 editline.7 editrc.5 + +man_MANS = $(EL_MANS) + + +EL_MAN_LINKS = \ + el_deletestr.3 \ + el_end.3 \ + el_get.3 \ + el_getc.3 \ + el_gets.3 \ + el_init.3 \ + el_init_fd.3 \ + el_insertstr.3 \ + el_line.3 \ + el_parse.3 \ + el_push.3 \ + el_reset.3 \ + el_resize.3 \ + el_set.3 \ + el_source.3 \ + history.3 \ + history_end.3 \ + history_init.3 \ + tok_end.3 \ + tok_init.3 \ + tok_line.3 \ + tok_reset.3 \ + tok_str.3 + +EL_MAN_LINKS += \ + el_wdeletestr.3 \ + el_wget.3 \ + el_wgetc.3 \ + el_wgets.3 \ + el_winsertstr.3 \ + el_wline.3 \ + el_wparse.3 \ + el_wpush.3 \ + el_wset.3 \ + history_w.3 \ + history_wend.3 \ + history_winit.3 \ + tok_wend.3 \ + tok_winit.3 \ + tok_wline.3 \ + tok_wreset.3 \ + tok_wstr.3 + + +install-data-hook: $(EL_MAN_LINKS) + +$(EL_MAN_LINKS): + (cd $(DESTDIR)$(man3dir) && rm -f $@ && $(LN_S) editline.3 $@) + +$(EL_MANS): + @if test "$(MANTYPE)" = "mdoc"; then\ + cp $(srcdir)/$@.roff $@;\ + else\ + $(AWK) -f $(srcdir)/mdoc2man.awk $(srcdir)/$@.roff > $@ || rm -f $@;\ + fi; + +uninstall-local: + (cd $(DESTDIR)$(man3dir) && rm -f $(EL_MAN_LINKS)) + +CLEANFILES = $(EL_MANS) +EXTRA_DIST = editline.3.roff editline.7.roff editrc.5.roff mdoc2man.awk + +changelog.txt: ../ChangeLog + @sed 's/@/ (at)/g; s/&/\&/g; s/</\</g; s/>/\>/g;' $(srcdir)/$< > $@; + + diff --git a/src/thirdparty/libedit-3.1/doc/editline.3.roff b/src/thirdparty/libedit-3.1/doc/editline.3.roff new file mode 100644 index 000000000..f104dcc07 --- /dev/null +++ b/src/thirdparty/libedit-3.1/doc/editline.3.roff @@ -0,0 +1,1020 @@ +.\" $NetBSD: editline.3,v 1.101 2021/08/15 10:12:54 wiz Exp $ +.\" +.\" Copyright (c) 1997-2014 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" This file was contributed to The NetBSD Foundation by Luke Mewburn. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd August 15, 2021 +.Dt EDITLINE 3 +.Os +.Sh NAME +.Nm editline , +.Nm el_init , +.Nm el_init_fd , +.Nm el_end , +.Nm el_reset , +.Nm el_gets , +.Nm el_wgets , +.Nm el_getc , +.Nm el_wgetc , +.Nm el_push , +.Nm el_wpush , +.Nm el_parse , +.Nm el_wparse , +.Nm el_set , +.Nm el_wset , +.Nm el_get , +.Nm el_wget , +.Nm el_source , +.Nm el_resize , +.Nm el_cursor , +.Nm el_line , +.Nm el_wline , +.Nm el_insertstr , +.Nm el_winsertstr , +.Nm el_deletestr , +.Nm el_wdeletestr , +.Nm history_init , +.Nm history_winit , +.Nm history_end , +.Nm history_wend , +.Nm history , +.Nm history_w , +.Nm tok_init , +.Nm tok_winit , +.Nm tok_end , +.Nm tok_wend , +.Nm tok_reset , +.Nm tok_wreset , +.Nm tok_line , +.Nm tok_wline , +.Nm tok_str , +.Nm tok_wstr +.Nd line editor, history and tokenization functions +.Sh LIBRARY +.Lb libedit +.Sh SYNOPSIS +.In histedit.h +.Ft EditLine * +.Fn el_init "const char *prog" "FILE *fin" "FILE *fout" "FILE *ferr" +.Ft EditLine * +.Fn el_init_fd "const char *prog" "FILE *fin" "FILE *fout" "FILE *ferr" "int fdin" "int fdout" "int fderr" +.Ft void +.Fn el_end "EditLine *e" +.Ft void +.Fn el_reset "EditLine *e" +.Ft const char * +.Fn el_gets "EditLine *e" "int *count" +.Ft const wchar_t * +.Fn el_wgets "EditLine *e" "int *count" +.Ft int +.Fn el_getc "EditLine *e" "char *ch" +.Ft int +.Fn el_wgetc "EditLine *e" "wchar_t *wc" +.Ft void +.Fn el_push "EditLine *e" "const char *mbs" +.Ft void +.Fn el_wpush "EditLine *e" "const wchar_t *wcs" +.Ft int +.Fn el_parse "EditLine *e" "int argc" "const char *argv[]" +.Ft int +.Fn el_wparse "EditLine *e" "int argc" "const wchar_t *argv[]" +.Ft int +.Fn el_set "EditLine *e" "int op" "..." +.Ft int +.Fn el_wset "EditLine *e" "int op" "..." +.Ft int +.Fn el_get "EditLine *e" "int op" "..." +.Ft int +.Fn el_wget "EditLine *e" "int op" "..." +.Ft int +.Fn el_source "EditLine *e" "const char *file" +.Ft void +.Fn el_resize "EditLine *e" +.Ft int +.Fn el_cursor "EditLine *e" "int count" +.Ft const LineInfo * +.Fn el_line "EditLine *e" +.Ft const LineInfoW * +.Fn el_wline "EditLine *e" +.Ft int +.Fn el_insertstr "EditLine *e" "const char *str" +.Ft int +.Fn el_winsertstr "EditLine *e" "const wchar_t *str" +.Ft void +.Fn el_deletestr "EditLine *e" "int count" +.Ft void +.Fn el_wdeletestr "EditLine *e" "int count" +.Ft History * +.Fn history_init void +.Ft HistoryW * +.Fn history_winit void +.Ft void +.Fn history_end "History *h" +.Ft void +.Fn history_wend "HistoryW *h" +.Ft int +.Fn history "History *h" "HistEvent *ev" "int op" "..." +.Ft int +.Fn history_w "HistoryW *h" "HistEventW *ev" "int op" "..." +.Ft Tokenizer * +.Fn tok_init "const char *IFS" +.Ft TokenizerW * +.Fn tok_winit "const wchar_t *IFS" +.Ft void +.Fn tok_end "Tokenizer *t" +.Ft void +.Fn tok_wend "TokenizerW *t" +.Ft void +.Fn tok_reset "Tokenizer *t" +.Ft void +.Fn tok_wreset "TokenizerW *t" +.Ft int +.Fn tok_line "Tokenizer *t" "const LineInfo *li" "int *argc" "const char **argv[]" "int *cursorc" "int *cursoro" +.Ft int +.Fn tok_wline "TokenizerW *t" "const LineInfoW *li" "int *argc" "const wchar_t **argv[]" "int *cursorc" "int *cursoro" +.Ft int +.Fn tok_str "Tokenizer *t" "const char *str" "int *argc" "const char **argv[]" +.Ft int +.Fn tok_wstr "TokenizerW *t" "const wchar_t *str" "int *argc" "const wchar_t **argv[]" +.Sh DESCRIPTION +The +.Nm +library provides generic line editing, history and tokenization functions, +similar to those found in +.Xr sh 1 . +.Pp +These functions are available in the +.Nm libedit +library (which needs the +.Nm libtermcap +library). +Programs should be linked with +.Fl ledit ltermcap . +.Pp +The +.Nm +library respects the +.Ev LC_CTYPE +locale set by the application program and never uses +.Xr setlocale 3 +to change the locale. +.Sh LINE EDITING FUNCTIONS +The line editing functions use a common data structure, +.Fa EditLine , +which is created by +.Fn el_init +or +.Fn el_init_fd +and freed by +.Fn el_end . +.Pp +The wide-character functions behave the same way as their narrow +counterparts. +.Pp +The following functions are available: +.Bl -tag -width 4n +.It Fn el_init +Initialize the line editor, and return a data structure +to be used by all other line editing functions, or +.Dv NULL +on failure. +.Fa prog +is the name of the invoking program, used when reading the +.Xr editrc 5 +file to determine which settings to use. +.Fa fin , +.Fa fout +and +.Fa ferr +are the input, output, and error streams (respectively) to use. +In this documentation, references to +.Dq the tty +are actually to this input/output stream combination. +.It Fn el_init_fd +Like +.Fn el_init +but allows specifying file descriptors for the +.Xr stdio 3 +corresponding streams, in case those were created with +.Xr funopen 3 . +.It Fn el_end +Clean up and finish with +.Fa e , +assumed to have been created with +.Fn el_init +or +.Fn el_init_fd . +.It Fn el_reset +Reset the tty and the parser. +This should be called after an error which may have upset the tty's +state. +.It Fn el_gets +Read a line from the tty. +.Fa count +is modified to contain the number of characters read. +Returns the line read if successful, or +.Dv NULL +if no characters were read or if an error occurred. +If an error occurred, +.Fa count +is set to \-1 and +.Dv errno +contains the error code that caused it. +The return value may not remain valid across calls to +.Fn el_gets +and must be copied if the data is to be retained. +.It Fn el_wgetc +Read a wide character from the tty, respecting the current locale, +or from the input queue described in +.Xr editline 7 +if that is not empty, and store it in +.Fa wc . +If an invalid or incomplete character is found, it is discarded, +.Va errno +is set to +.Er EILSEQ , +and the next character is read and stored in +.Fa wc . +Returns 1 if a valid character was read, 0 on end of file, or \-1 on +.Xr read 2 +failure. +In the latter case, +.Va errno +is set to indicate the error. +.It Fn el_getc +Read a wide character as described for +.Fn el_wgetc +and return 0 on end of file or \-1 on failure. +If the wide character can be represented as a single-byte character, +convert it with +.Xr wctob 3 , +store the result in +.Fa ch , +and return 1; otherwise, set +.Va errno +to +.Er ERANGE +and return \-1. +In the C or POSIX locale, this simply reads a byte, but for any other +locale, including UTF-8, this is rarely useful. +.It Fn el_wpush +Push the wide character string +.Fa wcs +back onto the input queue described in +.Xr editline 7 . +If the queue overflows, for example due to a recursive macro, +or if an error occurs, for example because +.Fa wcs +is +.Dv NULL +or memory allocation fails, the function beeps at the user, +but does not report the problem to the caller. +.It Fn el_push +Use the current locale to convert the multibyte string +.Fa mbs +to a wide character string, and pass the result to +.Fn el_wpush . +.It Fn el_parse +Parses the +.Fa argv +array (which is +.Fa argc +elements in size) +to execute builtin +.Nm +commands. +If the command is prefixed with +.Dq prog : +then +.Fn el_parse +will only execute the command if +.Dq prog +matches the +.Fa prog +argument supplied to +.Fn el_init . +The return value is +\-1 if the command is unknown, +0 if there was no error or +.Dq prog +didn't match, or +1 if the command returned an error. +Refer to +.Xr editrc 5 +for more information. +.It Fn el_set +Set +.Nm +parameters. +.Fa op +determines which parameter to set, and each operation has its +own parameter list. +Returns 0 on success, \-1 on failure. +.Pp +The following values for +.Fa op +are supported, along with the required argument list: +.Bl -tag -width 4n +.It Dv EL_PROMPT , Fa "char *(*f)(EditLine *)" +Define prompt printing function as +.Fa f , +which is to return a string that contains the prompt. +.It Dv EL_PROMPT_ESC , Fa "char *(*f)(EditLine *)" , Fa "char c" +Same as +.Dv EL_PROMPT , +but the +.Fa c +argument indicates the start/stop literal prompt character. +.Pp +If a start/stop literal character is found in the prompt, the +character itself +is not printed, but characters after it are printed directly to the +terminal without affecting the state of the current line. +A subsequent second start/stop literal character ends this behavior. +This is typically used to embed literal escape sequences that change the +color/style of the terminal in the prompt. +Note that the literal escape character cannot be the last character in the +prompt, as the escape sequence is attached to the next character in the prompt. +.Dv 0 +unsets it. +.It Dv EL_REFRESH +Re-display the current line on the next terminal line. +.It Dv EL_RPROMPT , Fa "char *(*f)(EditLine *)" +Define right side prompt printing function as +.Fa f , +which is to return a string that contains the prompt. +.It Dv EL_RPROMPT_ESC , Fa "char *(*f)(EditLine *)" , Fa "char c" +Define the right prompt printing function but with a literal escape character. +.It Dv EL_TERMINAL , Fa "const char *type" +Define terminal type of the tty to be +.Fa type , +or to +.Ev TERM +if +.Fa type +is +.Dv NULL . +.It Dv EL_EDITOR , Fa "const char *mode" +Set editing mode to +.Fa mode , +which must be one of +.Dq emacs +or +.Dq vi . +.It Dv EL_SIGNAL , Fa "int flag" +If +.Fa flag +is non-zero, +.Nm +will install its own signal handler for the following signals when +reading command input: +.Dv SIGCONT , +.Dv SIGHUP , +.Dv SIGINT , +.Dv SIGQUIT , +.Dv SIGSTOP , +.Dv SIGTERM , +.Dv SIGTSTP , +and +.Dv SIGWINCH . +Otherwise, the current signal handlers will be used. +.It Dv EL_BIND , Fa "const char *" , Fa "..." , Dv NULL +Perform the +.Ic bind +builtin command. +Refer to +.Xr editrc 5 +for more information. +.It Dv EL_ECHOTC , Fa "const char *" , Fa "..." , Dv NULL +Perform the +.Ic echotc +builtin command. +Refer to +.Xr editrc 5 +for more information. +.It Dv EL_SETTC , Fa "const char *" , Fa "..." , Dv NULL +Perform the +.Ic settc +builtin command. +Refer to +.Xr editrc 5 +for more information. +.It Dv EL_SETTY , Fa "const char *" , Fa "..." , Dv NULL +Perform the +.Ic setty +builtin command. +Refer to +.Xr editrc 5 +for more information. +.It Dv EL_TELLTC , Fa "const char *" , Fa "..." , Dv NULL +Perform the +.Ic telltc +builtin command. +Refer to +.Xr editrc 5 +for more information. +.It Dv EL_ADDFN , Fa "const char *name" , Fa "const char *help" , \ +Fa "unsigned char (*func)(EditLine *e, int ch)" +Add a user defined function, +.Fn func , +referred to as +.Fa name +which is invoked when a key which is bound to +.Fa name +is entered. +.Fa help +is a description of +.Fa name . +At invocation time, +.Fa ch +is the key which caused the invocation. +The return value of +.Fn func +should be one of: +.Bl -tag -width "CC_REDISPLAY" +.It Dv CC_NORM +Add a normal character. +.It Dv CC_NEWLINE +End of line was entered. +.It Dv CC_EOF +EOF was entered. +.It Dv CC_ARGHACK +Expecting further command input as arguments, do nothing visually. +.It Dv CC_REFRESH +Refresh display. +.It Dv CC_REFRESH_BEEP +Refresh display, and beep. +.It Dv CC_CURSOR +Cursor moved, so update and perform +.Dv CC_REFRESH . +.It Dv CC_REDISPLAY +Redisplay entire input line. +This is useful if a key binding outputs extra information. +.It Dv CC_ERROR +An error occurred. +Beep, and flush tty. +.It Dv CC_FATAL +Fatal error, reset tty to known state. +.El +.It Dv EL_HIST , Fa "History *(*func)(History *, int op, ...)" , \ +Fa "const char *ptr" +Defines which history function to use, which is usually +.Fn history . +.Fa ptr +should be the value returned by +.Fn history_init . +.It Dv EL_EDITMODE , Fa "int flag" +If +.Fa flag +is non-zero, +editing is enabled (the default). +Note that this is only an indication, and does not +affect the operation of +.Nm . +At this time, it is the caller's responsibility to +check this +(using +.Fn el_get ) +to determine if editing should be enabled or not. +.It Dv EL_UNBUFFERED , Fa "int flag" +If +.Fa flag +is zero, +unbuffered mode is disabled (the default). +In unbuffered mode, +.Fn el_gets +will return immediately after processing a single character. +.It Dv EL_SAFEREAD , Fa "int flag" +If the +.Fa flag +argument is non-zero, then +.Nm editline +attempts to recover from read errors, ignoring the first interrrupted +error, and trying to reset the input file descriptor to reset non-blocking I/O. +This is disabled by default, and desirable only when +.Nm editline +is used in shell-like applications. +.It Dv EL_GETCFN , Fa "el_rfunc_t f" +Whenever reading a character, use the function +.Bd -ragged -offset indent -compact +.Ft int +.Fo f +.Fa "EditLine *e" +.Fa "wchar_t *wc" +.Fc +.Ed +which stores the character in +.Fa wc +and returns 1 on success, 0 on end of file, or \-1 on I/O or encoding +errors. +Functions internally using it include +.Fn el_wgets , +.Fn el_wgetc , +.Fn el_gets , +and +.Fn el_getc . +Initially, a builtin function is installed, and replacing it +is discouraged because writing such a function is very error prone. +The builtin function can be restored at any time by passing the +special value +.Dv EL_BUILTIN_GETCFN +instead of a function pointer. +.It Dv EL_CLIENTDATA , Fa "void *data" +Register +.Fa data +to be associated with this EditLine structure. +It can be retrieved with the corresponding +.Fn el_get +call. +.It Dv EL_SETFP , Fa "int fd" , Fa "FILE *fp" +Set the current +.Nm editline +file pointer for +.Dq input +.Fa fd += +.Dv 0 , +.Dq output +.Fa fd += +.Dv 1 , +or +.Dq error +.Fa fd += +.Dv 2 +from +.Fa fp . +.El +.It Fn el_get +Get +.Nm +parameters. +.Fa op +determines which parameter to retrieve into +.Fa result . +Returns 0 if successful, \-1 otherwise. +.Pp +The following values for +.Fa op +are supported, along with actual type of +.Fa result : +.Bl -tag -width 4n +.It Dv EL_PROMPT , Fa "char *(*f)(EditLine *)" , Fa "char *c" +Set +.Fa f +to a pointer to the function that displays the prompt. +If +.Fa c +is not +.Dv NULL , +set it to the start/stop literal prompt character. +.It Dv EL_RPROMPT , Fa "char *(*f)(EditLine *)" , Fa "char *c" +Set +.Fa f +to a pointer to the function that displays the prompt. +If +.Fa c +is not +.Dv NULL , +set it to the start/stop literal prompt character. +.It Dv EL_EDITOR , Fa "const char **n" +Set the name of the editor in +.Fa n , +which will be one of +.Dq emacs +or +.Dq vi . +.It Dv EL_GETTC , Fa "const char *name" , Fa "void *value" +If +.Fa name +is a valid +.Xr termcap 5 +capability set +.Fa value +to the current value of that capability. +.It Dv EL_SIGNAL , Fa "int *s" +Set +.Fa s +to non-zero if +.Nm +has installed private signal handlers (see +.Fn el_get +above). +.It Dv EL_EDITMODE , Fa "int *c" +Set +.Fa c +to non-zero if editing is enabled. +.It Dv EL_GETCFN , Fa "el_rfunc_t *f" +Set +.Fa f +to a pointer to the function that reads characters, or to +.Dv EL_BUILTIN_GETCFN +if the builtin function is in use. +.It Dv EL_CLIENTDATA , Fa "void **data" +Set +.Fa data +to the previously registered client data set by an +.Fn el_set +call. +.It Dv EL_UNBUFFERED , Fa "int *c" +Set +.Fa c +to non-zero if unbuffered mode is enabled. +.It Dv EL_SAFEREAD , Fa "int *c" +Set +.Fa c +to non-zero if safe read is set. +.It Dv EL_GETFP , Fa "int fd", Fa "FILE **fp" +Set +.Fa fp +to the current +.Nm editline +file pointer for +.Dq input +.Fa fd += +.Dv 0 , +.Dq output +.Fa fd += +.Dv 1 , +or +.Dq error +.Fa fd += +.Dv 2 . +.El +.It Fn el_source +Initialize +.Nm +by reading the contents of +.Fa file . +.Fn el_parse +is called for each line in +.Fa file . +If +.Fa file +is +.Dv NULL , +try +.Pa $EDITRC +and if that is not set +.Pa $HOME/.editrc . +Refer to +.Xr editrc 5 +for details on the format of +.Fa file . +.Fn el_source +returns 0 on success and \-1 on error. +.It Fn el_resize +Must be called if the terminal size changes. +If +.Dv EL_SIGNAL +has been set with +.Fn el_set , +then this is done automatically. +Otherwise, it's the responsibility of the application to call +.Fn el_resize +on the appropriate occasions. +.It Fn el_cursor +Move the cursor to the right (if positive) or to the left (if negative) +.Fa count +characters. +Returns the resulting offset of the cursor from the beginning of the line. +.It Fn el_line +Return the editing information for the current line in a +.Fa LineInfo +structure, which is defined as follows: +.Bd -literal +typedef struct lineinfo { + const char *buffer; /* address of buffer */ + const char *cursor; /* address of cursor */ + const char *lastchar; /* address of last character */ +} LineInfo; +.Ed +.Pp +.Fa buffer +is not NUL terminated. +This function may be called after +.Fn el_gets +to obtain the +.Fa LineInfo +structure pertaining to line returned by that function, +and from within user defined functions added with +.Dv EL_ADDFN . +.It Fn el_insertstr +Insert +.Fa str +into the line at the cursor. +Returns \-1 if +.Fa str +is empty or won't fit, and 0 otherwise. +.It Fn el_deletestr +Delete +.Fa count +characters before the cursor. +.El +.Sh HISTORY LIST FUNCTIONS +The history functions use a common data structure, +.Fa History , +which is created by +.Fn history_init +and freed by +.Fn history_end . +.Pp +The following functions are available: +.Bl -tag -width 4n +.It Fn history_init +Initialize the history list, and return a data structure +to be used by all other history list functions, or +.Dv NULL +on failure. +.It Fn history_end +Clean up and finish with +.Fa h , +assumed to have been created with +.Fn history_init . +.It Fn history +Perform operation +.Fa op +on the history list, with optional arguments as needed by the +operation. +.Fa ev +is changed accordingly to operation. +The following values for +.Fa op +are supported, along with the required argument list: +.Bl -tag -width 4n +.It Dv H_SETSIZE , Fa "int size" +Set size of history to +.Fa size +elements. +.It Dv H_GETSIZE +Get number of events currently in history. +.It Dv H_END +Cleans up and finishes with +.Fa h , +assumed to be created with +.Fn history_init . +.It Dv H_CLEAR +Clear the history. +.It Dv H_FUNC , Fa "void *ptr" , Fa "history_gfun_t first" , \ +Fa "history_gfun_t next" , Fa "history_gfun_t last" , \ +Fa "history_gfun_t prev" , Fa "history_gfun_t curr" , \ +Fa "history_sfun_t set" , Fa "history_vfun_t clear" , \ +Fa "history_efun_t enter" , Fa "history_efun_t add" +Define functions to perform various history operations. +.Fa ptr +is the argument given to a function when it's invoked. +.It Dv H_FIRST +Return the first element in the history. +.It Dv H_LAST +Return the last element in the history. +.It Dv H_PREV +Return the previous element in the history. +It is newer than the current one. +.It Dv H_NEXT +Return the next element in the history. +It is older than the current one. +.It Dv H_CURR +Return the current element in the history. +.It Dv H_SET , Fa "int position" +Set the cursor to point to the requested element. +.It Dv H_ADD , Fa "const char *str" +Append +.Fa str +to the current element of the history, or perform the +.Dv H_ENTER +operation with argument +.Fa str +if there is no current element. +.It Dv H_APPEND , Fa "const char *str" +Append +.Fa str +to the last new element of the history. +.It Dv H_ENTER , Fa "const char *str" +Add +.Fa str +as a new element to the history and, if necessary, +removing the oldest entry to keep the list to the created size. +If +.Dv H_SETUNIQUE +has been called with a non-zero argument, the element +will not be entered into the history if its contents match +the ones of the current history element. +If the element is entered +.Fn history +returns 1; if it is ignored as a duplicate returns 0. +Finally +.Fn history +returns \-1 if an error occurred. +.It Dv H_PREV_STR , Fa "const char *str" +Return the closest previous event that starts with +.Fa str . +.It Dv H_NEXT_STR , Fa "const char *str" +Return the closest next event that starts with +.Fa str . +.It Dv H_PREV_EVENT , Fa "int e" +Return the previous event numbered +.Fa e . +.It Dv H_NEXT_EVENT , Fa "int e" +Return the next event numbered +.Fa e . +.It Dv H_LOAD , Fa "const char *file" +Load the history list stored in +.Fa file . +.It Dv H_SAVE , Fa "const char *file" +Save the history list to +.Fa file . +.It Dv H_SAVE_FP , Fa "FILE *fp" +Save the history list to the opened +.Ft FILE +pointer +.Fa fp . +.It Dv H_NSAVE_FP , Fa "size_t n" , Fa "FILE *fp" +Save the last +.Ft n +history entries to the opened +.Ft FILE +pointer +.Fa fp . +.It Dv H_SETUNIQUE , Fa "int unique" +Set flag that adjacent identical event strings should not be entered +into the history. +.It Dv H_GETUNIQUE +Retrieve the current setting if adjacent identical elements should +be entered into the history. +.It Dv H_DEL , Fa "int e" +Delete the event numbered +.Fa e . +This function is only provided for +.Nm readline +compatibility. +The caller is responsible for free'ing the string in the returned +.Fa HistEvent . +.El +.Pp +.Fn history +returns >= 0 if the operation +.Fa op +succeeds. +Otherwise, \-1 is returned and +.Fa ev +is updated to contain more details about the error. +.El +.Sh TOKENIZATION FUNCTIONS +The tokenization functions use a common data structure, +.Fa Tokenizer , +which is created by +.Fn tok_init +and freed by +.Fn tok_end . +.Pp +The following functions are available: +.Bl -tag -width 4n +.It Fn tok_init +Initialize the tokenizer, and return a data structure +to be used by all other tokenizer functions. +.Fa IFS +contains the Input Field Separators, which defaults to +.Aq space , +.Aq tab , +and +.Aq newline +if +.Dv NULL . +.It Fn tok_end +Clean up and finish with +.Fa t , +assumed to have been created with +.Fn tok_init . +.It Fn tok_reset +Reset the tokenizer state. +Use after a line has been successfully tokenized +by +.Fn tok_line +or +.Fn tok_str +and before a new line is to be tokenized. +.It Fn tok_line +Tokenize +.Fa li , +If successful, modify: +.Fa argv +to contain the words, +.Fa argc +to contain the number of words, +.Fa cursorc +(if not +.Dv NULL ) +to contain the index of the word containing the cursor, +and +.Fa cursoro +(if not +.Dv NULL ) +to contain the offset within +.Fa argv[cursorc] +of the cursor. +.Pp +Returns +0 if successful, +\-1 for an internal error, +1 for an unmatched single quote, +2 for an unmatched double quote, +and +3 for a backslash quoted +.Aq newline . +A positive exit code indicates that another line should be read +and tokenization attempted again. +. +.It Fn tok_str +A simpler form of +.Fn tok_line ; +.Fa str +is a NUL terminated string to tokenize. +.El +. +.\"XXX.Sh EXAMPLES +.\"XXX: provide some examples +.Sh SEE ALSO +.Xr sh 1 , +.Xr signal 3 , +.Xr termcap 3 , +.Xr editrc 5 , +.Xr termcap 5 , +.Xr editline 7 +.Sh HISTORY +The +.Nm +library first appeared in +.Bx 4.4 . +.Dv CC_REDISPLAY +appeared in +.Nx 1.3 . +.Dv CC_REFRESH_BEEP , +.Dv EL_EDITMODE +and the readline emulation appeared in +.Nx 1.4 . +.Dv EL_RPROMPT +appeared in +.Nx 1.5 . +.Sh AUTHORS +.An -nosplit +The +.Nm +library was written by +.An Christos Zoulas . +.An Luke Mewburn +wrote this manual and implemented +.Dv CC_REDISPLAY , +.Dv CC_REFRESH_BEEP , +.Dv EL_EDITMODE , +and +.Dv EL_RPROMPT . +.An Jaromir Dolecek +implemented the readline emulation. +.An Johny Mattsson +implemented wide-character support. +.Sh BUGS +At this time, it is the responsibility of the caller to +check the result of the +.Dv EL_EDITMODE +operation of +.Fn el_get +(after an +.Fn el_source +or +.Fn el_parse ) +to determine if +.Nm +should be used for further input. +I.e., +.Dv EL_EDITMODE +is purely an indication of the result of the most recent +.Xr editrc 5 +.Ic edit +command. diff --git a/src/thirdparty/libedit-3.1/doc/editline.7.roff b/src/thirdparty/libedit-3.1/doc/editline.7.roff new file mode 100644 index 000000000..863bab96d --- /dev/null +++ b/src/thirdparty/libedit-3.1/doc/editline.7.roff @@ -0,0 +1,935 @@ +.\" $NetBSD: editline.7,v 1.5 2016/05/09 21:27:55 christos Exp $ +.\" $OpenBSD: editline.7,v 1.1 2016/04/20 01:11:45 schwarze Exp $ +.\" +.\" Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org> +.\" +.\" Permission to use, copy, modify, and distribute this software for any +.\" purpose with or without fee is hereby granted, provided that the above +.\" copyright notice and this permission notice appear in all copies. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +.\" +.Dd May 7, 2016 +.Dt EDITLINE 7 +.Os +.Sh NAME +.Nm editline +.Nd line editing user interface +.Sh DESCRIPTION +When a program using the +.Xr editline 3 +library prompts for an input string using the function +.Xr el_wgets 3 , +it reads characters from the terminal. +Invalid input bytes that do not form characters are silently +discarded. +For each character read, one editor command is executed. +The mapping of input characters to editor commands depends on the +editing mode. +There are three editing modes: vi insert mode, vi command mode, +and emacs mode. +The default is vi insert mode. +The program can switch the default to emacs mode by using the +.Xr el_set 3 +or +.Xr el_parse 3 +functions, and the user can switch to emacs mode either in the +.Xr editrc 5 +configuration file or interactively with the +.Ic ed-command +editor command, in all three cases executing the +.Ic bind Fl e +builtin command. +.Pp +If trying to read from the terminal results in end of file or an +error, the library signals end of file to the program and does not +return a string. +.Ss Input character bindings +All default bindings described below can be overridden by individual +programs and can be changed with the +.Xr editrc 5 +.Ic bind +builtin command. +.Pp +In the following tables, +.Sq Ctrl- +indicates a character with the bit 0x40 flipped, and +.Sq Meta- +indicates a character with the bit 0x80 set. +In vi insert mode and in emacs mode, all Meta-characters considered +printable by the current +.Xr locale 1 +are bound to +.Ic ed-insert +instead of to the editor command listed below. +Consequently, in UTF-8 mode, most of the Meta-characters are not +directly accessible because their code points are occupied by +printable Unicode characters, and Meta-characters are usually input +using the +.Ic em-meta-next +editor command. +For example, to enter +.Sq Meta-B +in order to call the +.Ic ed-prev-word +editor command in emacs mode, call +.Ic em-meta-next +by pressing and releasing the escape key (or equivalently, Ctrl-[), +then press and release the +.Sq B +key. +If you have configured a Meta-key on your keyboard, for example +with +.Ql setxkbmap -option altwin:left_meta_win , +the Ctrl-Meta-characters are directly accessible. +For example, to enter +.Sq Ctrl-Meta-H +in order to call the +.Ic ed-delete-prev-word +editor command in emacs mode, hold down the keys +.Sq Ctrl , +.Sq Meta , +and +.Sq H +at the same time. +Alternatively, press and release the escape key, then press and +release +.Sq Ctrl-H . +.Pp +In vi input mode, input characters are bound to the following editor +commands by default: +.Bl -column -offset indent "Ctrl-Z, TSTP" "ed-search-next-history" +.It Ctrl-D, EOF Ta Ic vi-list-or-eof +.It Ctrl-H, BS Ta Ic vi-delete-prev-char +.It Ctrl-J, LF Ta Ic ed-newline +.It Ctrl-M, CR Ta Ic ed-newline +.It Ctrl-Q Ta Ic ed-tty-start-output +.It Ctrl-S Ta Ic ed-tty-stop-output +.It Ctrl-U Ta Ic vi-kill-line-prev +.It Ctrl-V Ta Ic ed-quoted-insert +.It Ctrl-W Ta Ic ed-delete-prev-word +.It Ctrl-[, ESC Ta Ic vi-command-mode +.It Ctrl-\e, QUIT Ta Ic ed-tty-sigquit +.It Ctrl-?, DEL Ta Ic vi-delete-prev-char +.El +.Pp +All other input characters except the NUL character (Ctrl-@) are +bound to +.Ic ed-insert . +.Pp +In vi command mode, input characters are bound to the following +editor commands by default: +.Bl -column -offset indent "Ctrl-Z, TSTP" "ed-search-next-history" +.It Ctrl-A Ta Ic ed-move-to-beg +.It Ctrl-C, INT Ta Ic ed-tty-sigint +.It Ctrl-E Ta Ic ed-move-to-end +.It Ctrl-H, BS Ta Ic ed-delete-prev-char +.It Ctrl-J, LF Ta Ic ed-newline +.It Ctrl-K Ta Ic ed-kill-line +.It Ctrl-L, FF Ta Ic ed-clear-screen +.It Ctrl-M, CR Ta Ic ed-newline +.It Ctrl-N Ta Ic ed-next-history +.It Ctrl-O Ta Ic ed-tty-flush-output +.It Ctrl-P Ta Ic ed-prev-history +.It Ctrl-Q Ta Ic ed-tty-start-output +.It Ctrl-R Ta Ic ed-redisplay +.It Ctrl-S Ta Ic ed-tty-stop-output +.It Ctrl-U Ta Ic vi-kill-line-prev +.It Ctrl-W Ta Ic ed-delete-prev-word +.It Ctrl-[, ESC Ta Ic em-meta-next +.It Ctrl-\e, QUIT Ta Ic ed-tty-sigquit +.It Space Ta Ic ed-next-char +.It # Ta Ic vi-comment-out +.It $ Ta Ic ed-move-to-end +.It % Ta Ic vi-match +.It + Ta Ic ed-next-history +.It \&, Ta Ic vi-repeat-prev-char +.It - Ta Ic ed-prev-history +.It \&. Ta Ic vi-redo +.It / Ta Ic vi-search-prev +.It 0 Ta Ic vi-zero +.It 1 to 9 Ta Ic ed-argument-digit +.It \&: Ta Ic ed-command +.It \&; Ta Ic vi-repeat-next-char +.It \&? Ta Ic vi-search-next +.It @ Ta Ic vi-alias +.It A Ta Ic vi-add-at-eol +.It B Ta Ic vi-prev-big-word +.It C Ta Ic vi-change-to-eol +.It D Ta Ic ed-kill-line +.It E Ta Ic vi-end-big-word +.It F Ta Ic vi-prev-char +.It G Ta Ic vi-to-history-line +.It I Ta Ic vi-insert-at-bol +.It J Ta Ic ed-search-next-history +.It K Ta Ic ed-search-prev-history +.It N Ta Ic vi-repeat-search-prev +.It O Ta Ic ed-sequence-lead-in +.It P Ta Ic vi-paste-prev +.It R Ta Ic vi-replace-mode +.It S Ta Ic vi-substitute-line +.It T Ta Ic vi-to-prev-char +.It U Ta Ic vi-undo-line +.It W Ta Ic vi-next-big-word +.It X Ta Ic ed-delete-prev-char +.It Y Ta Ic vi-yank-end +.It \&[ Ta Ic ed-sequence-lead-in +.It ^ Ta Ic ed-move-to-beg +.It _ Ta Ic vi-history-word +.It a Ta Ic vi-add +.It b Ta Ic vi-prev-word +.It c Ta Ic vi-change-meta +.It d Ta Ic vi-delete-meta +.It e Ta Ic vi-end-word +.It f Ta Ic vi-next-char +.It h Ta Ic ed-prev-char +.It i Ta Ic vi-insert +.It j Ta Ic ed-next-history +.It k Ta Ic ed-prev-history +.It l Ta Ic ed-next-char +.It n Ta Ic vi-repeat-search-next +.It p Ta Ic vi-paste-next +.It r Ta Ic vi-replace-char +.It s Ta Ic vi-substitute-char +.It t Ta Ic vi-to-next-char +.It u Ta Ic vi-undo +.It v Ta Ic vi-histedit +.It w Ta Ic vi-next-word +.It x Ta Ic ed-delete-next-char +.It y Ta Ic vi-yank +.It \&| Ta Ic vi-to-column +.It ~ Ta Ic vi-change-case +.It Ctrl-?, DEL Ta Ic ed-delete-prev-char +.It Meta-O Ta Ic ed-sequence-lead-in +.It Meta-[ Ta Ic ed-sequence-lead-in +.El +.Pp +In emacs mode, input characters are bound to the following editor +commands by default: +.Bl -column -offset indent "Ctrl-Z, TSTP" "ed-search-next-history" +.It 0 to 9 Ta Ic ed-digit +.It Ctrl-@, NUL Ta Ic em-set-mark +.It Ctrl-A Ta Ic ed-move-to-beg +.It Ctrl-B Ta Ic ed-prev-char +.It Ctrl-C, INT Ta Ic ed-tty-sigint +.It Ctrl-D, EOF Ta Ic em-delete-or-list +.It Ctrl-E Ta Ic ed-move-to-end +.It Ctrl-F Ta Ic ed-next-char +.It Ctrl-H, BS Ta Ic em-delete-prev-char +.It Ctrl-J, LF Ta Ic ed-newline +.It Ctrl-K Ta Ic ed-kill-line +.It Ctrl-L, FF Ta Ic ed-clear-screen +.It Ctrl-M, CR Ta Ic ed-newline +.It Ctrl-N Ta Ic ed-next-history +.It Ctrl-O Ta Ic ed-tty-flush-output +.It Ctrl-P Ta Ic ed-prev-history +.It Ctrl-Q Ta Ic ed-tty-start-output +.It Ctrl-R Ta Ic ed-redisplay +.It Ctrl-S Ta Ic ed-tty-stop-output +.It Ctrl-T Ta Ic ed-transpose-chars +.It Ctrl-U Ta Ic ed-kill-line +.It Ctrl-V Ta Ic ed-quoted-insert +.It Ctrl-W Ta Ic em-kill-region +.It Ctrl-X Ta Ic ed-sequence-lead-in +.It Ctrl-Y Ta Ic em-yank +.It Ctrl-Z, TSTP Ta Ic ed-tty-sigtstp +.It Ctrl-[, ESC Ta Ic em-meta-next +.It Ctrl-\e, QUIT Ta Ic ed-tty-sigquit +.It Ctrl-] Ta Ic ed-tty-dsusp +.It Ctrl-?, DEL Ta Ic em-delete-prev-char +.It Ctrl-Meta-H Ta Ic ed-delete-prev-word +.It Ctrl-Meta-L Ta Ic ed-clear-screen +.It Ctrl-Meta-_ Ta Ic em-copy-prev-word +.It Meta-0 to 9 Ta Ic ed-argument-digit +.It Meta-B Ta Ic ed-prev-word +.It Meta-C Ta Ic em-capitol-case +.It Meta-D Ta Ic em-delete-next-word +.It Meta-F Ta Ic em-next-word +.It Meta-L Ta Ic em-lower-case +.It Meta-N Ta Ic ed-search-next-history +.It Meta-O Ta Ic ed-sequence-lead-in +.It Meta-P Ta Ic ed-search-prev-history +.It Meta-U Ta Ic em-upper-case +.It Meta-W Ta Ic em-copy-region +.It Meta-X Ta Ic ed-command +.It Meta-[ Ta Ic ed-sequence-lead-in +.It Meta-b Ta Ic ed-prev-word +.It Meta-c Ta Ic em-capitol-case +.It Meta-d Ta Ic em-delete-next-word +.It Meta-f Ta Ic em-next-word +.It Meta-l Ta Ic em-lower-case +.It Meta-n Ta Ic ed-search-next-history +.It Meta-p Ta Ic ed-search-prev-history +.It Meta-u Ta Ic em-upper-case +.It Meta-w Ta Ic em-copy-region +.It Meta-x Ta Ic ed-command +.It Ctrl-Meta-? Ta Ic ed-delete-prev-word +.El +.Pp +The remaining +.Xr ascii 7 +characters in the range 0x20 to 0x7e are bound to +.Ic ed-insert . +.Pp +If standard output is not connected to a terminal device +or +.Xr el_set 3 +was used to set +.Dv EL_EDITMODE +to 0, all input character bindings are disabled and all characters +typed are appended to the edit buffer. +In that case, the edit buffer is returned to the program after a +newline or carriage return character is typed, or after the first +character typed if +.Xr el_set 3 +was used to set +.Dv EL_UNBUFFERED +to non-zero. +.Ss Editor commands +Most editor commands accept an optional argument. +The argument is entered by prefixing the editor command with one +or more of the editor commands +.Ic ed-argument-digit , +.Ic ed-digit , +.Ic em-universal-argument , +or +.Ic vi-zero . +When an argument is not provided, it defaults to 1. +For most editor commands, the effect of an argument is to repeatedly +execute the command that number of times. +.Pp +When talking about a character string from a left character to a +right character, the left character is included in the string, while +the right character is not included. +.Pp +If an editor command causes an error, the input character is discarded, +no action occurs, and the terminal bell is rung. +In case of a non-fatal error, the terminal bell is also rung, +but the editor command takes effect anyway. +.Pp +In the following list, the default key bindings are listed after +each editor command. +.Bl -tag -width 4n +.It Ic ed-argument-digit Pq vi command: 1 to 9; emacs: Meta-0 to Meta-9 +If in argument input mode, append the input digit to the argument +being read. +Otherwise, switch to argument input mode and use the input digit +as the most significant digit of the argument. +It is an error if the input character is not a digit or if the +existing argument is already greater than a million. +.It Ic ed-clear-screen Pq vi command: Ctrl-L; emacs: Ctrl-L, Ctrl-Meta-L +Clear the screen and display the edit buffer at the top. +Ignore any argument. +.It Ic ed-command Pq vi command: So \&: Sc ; emacs: Meta-X, Meta-x +Read a line from the terminal bypassing the normal line editing +functionality and execute that line as an +.Xr editrc 5 +builtin command. +If in vi command mode, also switch back to vi insert mode. +Ignore any argument. +.It Ic ed-delete-next-char Pq vi command: x +Delete the character at the cursor position. +With an argument, delete that number of characters. +In emacs mode, it is an error if the cursor is at the end of the +edit buffer. +In vi mode, the last character in the edit buffer is deleted in +that case, and it is an error if the buffer is empty. +.It Ic ed-delete-prev-char Pq vi command: X, Ctrl-H, BS, Ctrl-?, DEL +Delete the character to the left of the cursor position. +With an argument, delete that number of characters. +It is an error if the cursor is at the beginning of the edit buffer. +.It Ic ed-delete-prev-word Pq vi: Ctrl-W; emacs: Ctrl-Meta-H, Ctrl-Meta-? +Move to the left to the closest beginning of a word, delete the +string from that position to the cursor, and save it to the cut +buffer. +With an argument, delete that number of words. +It is an error if the cursor is at the beginning of the edit buffer. +.It Ic ed-digit Pq emacs: 0 to 9 +If in argument input mode, append the input digit to the argument +being read. +Otherwise, call +.Ic ed-insert . +It is an error if the input character is not a digit or if the +existing argument is already greater than a million. +.It Ic ed-end-of-file Pq not bound by default +Discard the edit buffer and indicate end of file to the program. +Ignore any argument. +.It Ic ed-ignore Pq various +Discard the input character and do nothing. +.It Ic ed-insert Pq vi input: almost all; emacs: printable characters +In insert mode, insert the input character left of the cursor +position. +In replace mode, overwrite the character at the cursor and move the +cursor to the right by one character position. +Accept an argument to do this repeatedly. +It is an error if the input character is the NUL character (Ctrl-@). +Failure to enlarge the edit buffer also results in an error. +.It Ic ed-kill-line Pq vi command: D, Ctrl-K; emacs: Ctrl-K, Ctrl-U +Delete the string from the cursor position to the end of the line +and save it to the cut buffer. +Ignore any argument. +.It Ic ed-move-to-beg Pq vi command: ^, Ctrl-A; emacs: Ctrl-A +In vi mode, move the cursor to the first non-space character in the +edit buffer. +In emacs mode, move the cursor to the beginning of the edit buffer. +Ignore any argument. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +.It Ic ed-move-to-end Pq vi command: $, Ctrl-E; emacs: Ctrl-E +Move the cursor to the end of the edit buffer. +Ignore any argument. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +.It Ic ed-newline Pq all modes: Ctrl-J, LF, Ctrl-M, CR +Append a newline character to the edit buffer and return the edit +buffer to the program. +Ignore any argument. +.It Ic ed-next-char Pq vi command: Space, l; emacs: Ctrl-F +Move the cursor one character position to the right. +With an argument, move by that number of characters. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +It is an error if the cursor is already at the end of the edit +buffer. +.It Ic ed-next-history Pq vi command: j, +, Ctrl-N; emacs: Ctrl-N +Replace the edit buffer with the next history line. +That line is older than the current line. +With an argument, go forward by that number of history lines. +It is a non-fatal error to advance by more lines than are available. +.It Ic ed-next-line Pq not bound by default +Move the cursor down one line. +With an argument, move down by that number of lines. +It is an error if the edit buffer does not contain enough newline +characters to the right of the cursor position. +.It Ic ed-prev-char Pq vi command: h; emacs: Ctrl-B +Move the cursor one character position to the left. +With an argument, move by that number of characters. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +It is an error if the cursor is already at the beginning of the +edit buffer. +.It Ic ed-prev-history Pq vi command: k, -, Ctrl-P; emacs: Ctrl-P +Replace the edit buffer with the previous history line. +That line is newer than the current line. +With an argument, go back by that number of lines. +It is a non-fatal error to back up by more lines than are available. +.It Ic ed-prev-line Pq not bound by default +Move the cursor up one line. +With an argument, move up by that number of lines. +It is an error if the edit buffer does not contain enough newline +characters to the left of the cursor position. +.It Ic ed-prev-word Pq emacs: Meta-B, Meta-b +Move the cursor to the left to the closest beginning of a word. +With an argument, repeat that number of times. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +It is an error if the cursor is already at the beginning of the +edit buffer. +.It Ic ed-quoted-insert Pq vi insert, emacs: Ctrl-V +Read one character from the terminal bypassing the normal line +editing functionality and call +.Ic ed-insert +on it. +If trying to read the character returns end of file or an error, +call +.Ic ed-end-of-file +instead. +.It Ic ed-redisplay Pq vi command, emacs: Ctrl-R +Redisplay everything. +Ignore any argument. +.It Ic ed-search-next-history Pq vi command: J; emacs: Meta-N, Meta-n +Replace the edit buffer with the next matching history entry. +.It Ic ed-search-prev-history Pq vi command: K; emacs: Meta-P, Meta-p +Replace the edit buffer with the previous matching history entry. +.It Ic ed-sequence-lead-in Pq vi cmd: O, \&[; emacs: Ctrl-X;\ + both: Meta-O, Meta-[ +Call a macro. +See the section about +.Sx Macros +below for details. +.It Ic ed-start-over Pq not bound by default +Discard the contents of the edit buffer and start from scratch. +Ignore any argument. +.It Ic ed-transpose-chars Pq emacs: Ctrl-T +Exchange the character at the cursor position with the one to the +left of it and move the cursor to the character to the right of the +two exchanged characters. +Ignore any argument. +It is an error if the cursor is at the beginning of the edit buffer +or if the edit buffer contains less than two characters. +.It Ic ed-unassigned Pq all characters not listed +This editor command always results in an error. +.It Ic em-capitol-case Pq emacs: Meta-C, Meta-c +Capitalize the string from the cursor to the end of the current +word. +That is, if it contains at least one alphabetic character, convert +the first alphabetic character to upper case, and convert all +characters to the right of it to lower case. +In any case, move the cursor to the next character after the end +of the current word. +.It Ic em-copy-prev-word Pq emacs: Ctrl-Meta-_ +Copy the string from the beginning of the current word to the cursor +and insert it to the left of the cursor. +Move the cursor to the character after the inserted string. +It is an error if the cursor is at the beginning of the edit buffer. +.It Ic em-copy-region Pq emacs: Meta-W, Meta-w +Copy the string from the cursor to the mark to the cut buffer. +It is an error if the mark is not set. +.It Ic em-delete-next-word Pq emacs: Meta-D, Meta-d +Delete the string from the cursor to the end of the current word +and save it to the cut buffer. +It is an error if the cursor is at the end of the edit buffer. +.It Ic em-delete-or-list Pq emacs: Ctrl-D, EOF +If the cursor is not at the end of the line, delete the character +at the cursor. +If the edit buffer is empty, indicate end of file to the program. +It is an error if the cursor is at the end of the edit buffer and +the edit buffer is not empty. +.It Ic em-delete-prev-char Pq emacs: Ctrl-H, BS, Ctrl-?, DEL +Delete the character to the left of the cursor. +It is an error if the cursor is at the beginning of the edit buffer. +.It Ic em-exchange-mark Pq not bound by default +Exchange the cursor and the mark. +.It Ic em-gosmacs-transpose Pq not bound by default +Exchange the two characters to the left of the cursor. +It is an error if the cursor is on the first or second character +of the edit buffer. +.It Ic em-inc-search-next Pq not bound by default +Emacs incremental next search. +.It Ic em-inc-search-prev Pq not bound by default +Emacs incremental reverse search. +.It Ic em-kill-line Pq not bound by default +Delete the entire contents of the edit buffer and save it to the +cut buffer. +.It Ic em-kill-region Pq emacs: Ctrl-W +Delete the string from the cursor to the mark and save it to the +cut buffer. +It is an error if the mark is not set. +.It Ic em-lower-case Pq emacs: Meta-L, Meta-l +Convert the characters from the cursor to the end of the current +word to lower case. +.It Ic em-meta-next Pq vi command, emacs: Ctrl-[, ESC +Set the bit 0x80 on the next character typed. +Unless the resulting code point is printable, holding down the +.Sq Meta- +key while typing that character is a simpler way to achieve the +same effect. +.It Ic em-next-word Pq Meta-F, Meta-f +Move the cursor to the end of the current word. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +It is an error if the cursor is already at the end of the edit +buffer. +.It Ic em-set-mark Pq emacs: Ctrl-Q, NUL +Set the mark at the current cursor position. +.It Ic em-toggle-overwrite Pq not bound by default +Switch from insert to overwrite mode or vice versa. +.It Ic em-universal-argument Pq not bound by default +If in argument input mode, multiply the argument by 4. +Otherwise, switch to argument input mode and set the argument to 4. +It is an error if the existing argument is already greater than a +million. +.It Ic em-upper-case Pq emacs: Meta-U, Meta-u +Convert the characters from the cursor to the end of the current +word to upper case. +.It Ic em-yank Pq emacs: Ctrl-Y +Paste the cut buffer to the left of the cursor. +.It Ic vi-add Pq vi command: a +Switch to vi insert mode. +Unless the cursor is already at the end of the edit buffer, move +it one character position to the right. +.It Ic vi-add-at-eol Pq vi command: A +Switch to vi insert mode and move the cursor to the end of the edit +buffer. +.It Ic vi-alias Pq vi command: @ +If an alias function was defined by calling the +.Xr el_set 3 +or +.Xr el_wset 3 +function with the argument +.Dv EL_ALIAS_TEXT , +read one character from the terminal bypassing the normal line +editing functionality, call the alias function passing the argument that was specified with +.Dv EL_ALIAS_TEXT +as the first argument and the character read, with an underscore +prepended, as the second argument, and pass the string returned +from the alias function to +.Xr el_wpush 3 . +It is an error if no alias function is defined or if trying to read +the character results in end of file or an error. +.It Ic vi-change-case Pq vi command: ~ +Change the case of the character at the cursor and move the cursor +one character position to the right. +It is an error if the cursor is already at the end of the edit +buffer. +.It Ic vi-change-meta Pq vi command: c +Delete the string from the cursor to the position specified by the +following movement command and save a copy of it to the cut buffer. +When given twice in a row, instead delete the whole contents of the +edit buffer and save a copy of it to the cut buffer. +In either case, switch to vi insert mode after that. +.It Ic vi-change-to-eol Pq vi command: C +Delete the string from the cursor position to the end of the line +and save it to the cut buffer, then switch to vi insert mode. +.It Ic vi-command-mode Pq vi insert: Ctrl-[, ESC +Discard pending actions and arguments and switch to vi command mode. +Unless the cursor is already at the beginning of the edit buffer, +move it to the left by one character position. +.It Ic vi-comment-out Pq vi command: # +Insert a +.Sq # +character at the beginning of the edit buffer and return the edit +buffer to the program. +.It Ic vi-delete-meta Pq vi command: d +Delete the string from the cursor to the position specified by the +following movement command and save a copy of it to the cut buffer. +When given twice in a row, instead delete the whole contents of the +edit buffer and save a copy of it to the cut buffer. +.It Ic vi-delete-prev-char Pq vi insert: Ctrl-H, BS, Ctrl-?, DEL +Delete the character to the left of the cursor. +It is an error if the cursor is already at the beginning of the +edit buffer. +.It Ic vi-end-big-word Pq vi command: E +Move the cursor to the end of the current space delimited word. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +It is an error if the cursor is already at the end of the edit +buffer. +.It Ic vi-end-word Pq vi command: e +Move the cursor to the end of the current word. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +It is an error if the cursor is already at the end of the edit +buffer. +.It Ic vi-history-word Pq vi command: _ +Insert the first word from the most recent history entry after the +cursor, move the cursor after to the character after the inserted +word, and switch to vi insert mode. +It is an error if there is no history entry or the most recent +history entry is empty. +.It Ic vi-insert Pq vi command: i +Enter insert mode. +.It Ic vi-insert-at-bol Pq vi command: I +Move the cursor to the beginning of the edit buffer and switch to +vi insert mode. +.It Ic vi-kill-line-prev Pq vi: Ctrl-U +Delete the string from the beginning of the edit buffer to the +cursor and save it to the cut buffer. +.It Ic vi-list-or-eof Pq vi insert: Ctrl-D, EOF +If the edit buffer is empty, indicate end of file to the program. +It is an error if the edit buffer is not empty. +.It Ic vi-match Pq vi command: % +Consider opening and closing parentheses, braces, and brackets as +delimiters. +If the cursor is not at a delimiter, move it to the right until it +gets to one, then move it to the matching delimiter. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +It is an error if there is no delimiter at the cursor or in the +string to the right of the cursor, or if the first such delimiter +has no matching delimiter. +.It Ic vi-next-big-word Pq vi command: W +Move the cursor to the right to the beginning of the next space +delimited word. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +It is an error if the cursor is already at the end of the edit +buffer or on its last character. +.It Ic vi-next-char Pq vi command: f +Read one character from the terminal bypassing the normal line +editing functionality and move the cursor to the right to the next +instance of that character in the edit buffer. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +If trying to read the character results in end of file or an error, +call +.Ic ed-end-of-file +instead. +It is an error if the character is not found searching to the right +in the edit buffer. +.It Ic vi-next-word Pq vi command: w +Move the cursor to the right to the beginning of the next word. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +It is an error if the cursor is already at the end of the edit +buffer or on its last character. +.It Ic vi-paste-next Pq vi command: p +Insert a copy of the cut buffer to the right of the cursor. +It is an error if the cut buffer is empty. +.It Ic vi-paste-prev Pq vi command: P +Insert a copy of the cut buffer to the left of the cursor. +It is an error if the cut buffer is empty. +.It Ic vi-prev-big-word Pq vi command: B +Move the cursor to the left to the next beginning of a space delimited +word. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +It is an error if the cursor is already at the beginning of the +edit buffer. +.It Ic vi-prev-char Pq vi command: F +Read one character from the terminal bypassing the normal line +editing functionality and move the cursor to the left to the next +instance of that character in the edit buffer. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +If trying to read the character results in end of file or an error, +call +.Ic ed-end-of-file +instead. +It is an error if the character is not found searching to the left +in the edit buffer. +.It Ic vi-prev-word Pq vi command: b +Move the cursor to the left to the next beginning of a word. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +It is an error if the cursor is already at the beginning of the +edit buffer. +.It Ic vi-redo Pq vi command: Sq \&. +Redo the last non-motion command. +.It Ic vi-repeat-next-char Pq vi command: Sq \&; +Repeat the most recent character search in the same search direction. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +.It Ic vi-repeat-prev-char Pq vi command: Sq \&, +Repeat the most recent character search in the opposite search +direction. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +.It Ic vi-repeat-search-next Pq vi command: n +Repeat the most recent history search in the same search direction. +.It Ic vi-repeat-search-prev Pq vi command: N +Repeat the most recent history search in the opposite search +direction. +.It Ic vi-replace-char Pq vi command: r +Switch to vi replace mode, and automatically switch back to vi +command mode after the next character typed. +See +.Ic ed-insert +for a description of replace mode. +It is an error if the cursor is at the end of the edit buffer. +.It Ic vi-replace-mode Pq vi command: R +Switch to vi replace mode. +This is a variant of vi insert mode; see +.Ic ed-insert +for the difference. +.It Ic vi-search-next Pq vi command: \&? +Replace the edit buffer with the next matching history entry. +.It Ic vi-search-prev Pq vi command: / +Replace the edit buffer with the previous matching history entry. +.It Ic vi-substitute-char Pq vi command: s +Delete the character at the cursor and switch to vi insert mode. +.It Ic vi-substitute-line Pq vi command: S +Delete the entire contents of the edit buffer, save a copy of it +in the cut buffer, and enter vi insert mode. +.It Ic vi-to-column Pq vi command: \&| +Move the cursor to the column specified as the argument. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +.It Ic vi-to-history-line Pq vi command: G +Replace the edit buffer with the specified history entry. +.It Ic vi-to-next-char Pq vi command: t +Read one character from the terminal bypassing the normal line +editing functionality and move the cursor to the right to the +character before the next instance of that character in the edit +buffer. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +If trying to read the character results in end of file or an error, +call +.Ic ed-end-of-file +instead. +It is an error if the character is not found searching to the right +in the edit buffer. +.It Ic vi-to-prev-char Pq vi command: T +Read one character from the terminal bypassing the normal line +editing functionality and move the cursor to the left to the character +after the next instance of that character in the edit buffer. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +If trying to read the character results in end of file or an error, +call +.Ic ed-end-of-file +instead. +It is an error if the character is not found searching to the left +in the edit buffer. +.It Ic vi-undo Pq vi command: u +Undo the last change. +.It Ic vi-undo-line Pq vi command: U +Undo all changes to the edit buffer. +.It Ic vi-yank Pq vi command: y +Copy the string from the cursor to the position specified by the +following movement command to the cut buffer. +When given twice in a row, instead copy the whole contents of the +edit buffer to the cut buffer. +.It Ic vi-yank-end Pq vi command: Y +Copy the string from the cursor to the end of the edit buffer to +the cut buffer. +.It Ic vi-zero Pq vi command: 0 +If in argument input mode, multiply the argument by ten. +Otherwise, move the cursor to the beginning of the edit buffer. +Can be used as a movement command after +.Ic vi_change_meta , +.Ic vi_delete_meta , +or +.Ic vi_yank . +.El +.Ss Macros +If an input character is bound to the editor command +.Ic ed-sequence-lead-in , +.Nm +attempts to call a macro. +If the input character by itself forms the name of a macro, that +macro is executed. +Otherwise, additional input characters are read until the string +read forms the name of a macro, in which case that macro is executed, +or until the string read matches the beginning of none of the existing +macro names, in which case the string including the final, mismatching +character is discarded and the terminal bell is rung. +.Pp +There are two kinds of macros. +Command macros execute a single editor command. +Keyboard macros return a string of characters that is appended +as a new line to the +.Sx Input Queue . +.Pp +The following command macros are defined by default in vi command +mode and in emacs mode: +.Bl -column -offset indent "Esc O A, Esc O A" "em-exchange-mark" +.It Esc \&[ A, Esc O A Ta Ic ed-prev-history +.It Esc \&[ B, Esc O B Ta Ic ed-next-history +.It Esc \&[ C, Esc O C Ta Ic ed-next-char +.It Esc \&[ D, Esc O D Ta Ic ed-prev-char +.It Esc \&[ F, Esc O F Ta Ic ed-move-to-end +.It Esc \&[ H, Esc O H Ta Ic ed-move-to-beg +.El +.Pp +In vi command mode, they are also defined by default without the +initial escape character. +.Pp +In addition, the +.Nm +library tries to bind the strings generated by the arrow keys +as reported by the +.Xr terminfo 5 +database to these editor commands, unless that would clobber +user settings. +.Pp +In emacs mode, the two-character string +.Dq Ctrl-X Ctrl-X +is bound to the +.Ic em-exchange-mark +editor command. +.Ss Input Queue +The +.Nm +library maintains an input queue operated in FIFO mode. +Whenever it needs an input character, it takes the first character +from the first line of the input queue. +When the queue is empty, it reads from the terminal. +.Pp +A line can be appended to the end of the input queue in several ways: +.Bl -dash -offset indent +.It +By calling one of the keyboard +.Sx Macros . +.It +By calling the editor command +.Ic vi-redo . +.It +By calling the editor command +.Ic vi-alias . +.It +By pressing a key in emacs incremental search mode that doesn't +have a special meaning in that mode but returns to normal emacs +mode. +.It +If an application program directly calls the functions +.Xr el_push 3 +or +.Xr el_wpush 3 , +it can provide additional, program-specific ways +of appending to the input queue. +.El +.Sh SEE ALSO +.Xr mg 1 , +.Xr vi 1 , +.Xr editline 3 , +.Xr el_wgets 3 , +.Xr el_wpush 3 , +.Xr el_wset 3 , +.Xr editrc 5 +.Sh HISTORY +This manual page first appeared in +.Ox 6.0 +and +.Nx 8 . +.Sh AUTHORS +.An -nosplit +This manual page was written by +.An Ingo Schwarze Aq Mt schwarze@openbsd.org . diff --git a/src/thirdparty/libedit-3.1/doc/editrc.5.roff b/src/thirdparty/libedit-3.1/doc/editrc.5.roff new file mode 100644 index 000000000..fa41dbb7d --- /dev/null +++ b/src/thirdparty/libedit-3.1/doc/editrc.5.roff @@ -0,0 +1,325 @@ +.\" $NetBSD: editrc.5,v 1.33 2017/06/27 01:22:58 kre Exp $ +.\" +.\" Copyright (c) 1997-2000 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" This file was contributed to The NetBSD Foundation by Luke Mewburn. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd May 22, 2016 +.Dt EDITRC 5 +.Os +.Sh NAME +.Nm editrc +.Nd configuration file for editline library +.Sh SYNOPSIS +.Nm +.Sh DESCRIPTION +The +.Nm +file defines various settings to be used by the +.Xr editline 3 +library. +.Pp +The format of each line is: +.Pp +.Dl [prog:]command [arg ...] +.Pp +.Ar command +is one of the +.Xr editline 3 +builtin commands. +Refer to +.Sx BUILTIN COMMANDS +for more information. +.Pp +.Ar prog +is the program name string that a program defines when it calls +.Xr el_init 3 +to set up +.Xr editline 3 , +which is usually +.Va argv[0] . +.Ar command +will be executed for any program which matches +.Ar prog . +.Pp +.Ar prog +may also be a +.Xr regex 3 +style +regular expression, in which case +.Ar command +will be executed for any program that matches the regular expression. +.Pp +If +.Ar prog +is absent, +.Ar command +is executed for all programs. +.Sh BUILTIN COMMANDS +The +.Nm editline +library has some builtin commands, which affect the way +that the line editing and history functions operate. +These are based on similar named builtins present in the +.Xr tcsh 1 +shell. +.Pp +The following builtin commands are available: +.Bl -tag -width 4n +.It Ic bind Oo Fl aeklrsv Oc Op Ar key Op Ar command +Without options and arguments, list all bound keys and macros, and +the editor command or input string to which each one is bound. +If only +.Ar key +is supplied, show the binding for that key or macro. +If +.Ar key command +is supplied, bind the editor +.Ar command +to that key or macro. +.Pp +The options are as follows: +.Bl -tag -width 4n +.It Fl a +List or change key bindings in the +.Xr vi 1 +mode alternate (command mode) key map. +.It Fl e +Bind all keys to the standard GNU Emacs-like bindings. +.It Fl k +.Ar key +is interpreted as a symbolic arrow key name, which may be one of +.Sq up , +.Sq down , +.Sq left +or +.Sq right . +.It Fl l +List all editor commands and a short description of each. +.It Fl r +Remove the binding of the key or macro +.Ar key . +.It Fl s +Define a keyboard macro rather than a key binding or command macro: +.Ar command +is taken as a literal string and appended to the input queue whenever +.Ar key +is typed. +Bound keys and macros in +.Ar command +are themselves reinterpreted, and this continues for ten levels of +interpretation. +.It Fl v +Bind all keys to the standard +.Xr vi 1 Ns -like +bindings. +.El +.Pp +The +.Xr editline 7 +manual documents all editor commands and contains more information +about macros and the input queue. +.Pp +.Ar key +and +.Ar command +can contain control characters of the form +.Sm off +.Sq No ^ Ar character +.Sm on +.Po +e.g.\& +.Sq ^A +.Pc , +and the following backslashed escape sequences: +.Pp +.Bl -tag -compact -offset indent -width 4n +.It Ic \ea +Bell +.It Ic \eb +Backspace +.It Ic \ee +Escape +.It Ic \ef +Formfeed +.It Ic \en +Newline +.It Ic \er +Carriage return +.It Ic \et +Horizontal tab +.It Ic \ev +Vertical tab +.Sm off +.It Sy \e Ar nnn +.Sm on +The ASCII character corresponding to the octal number +.Ar nnn . +.El +.Pp +.Sq \e +nullifies the special meaning of the following character, +if it has any, notably +.Sq \e +and +.Sq ^ . +.It Ic echotc Oo Fl sv Oc Ar arg Ar ... +Exercise terminal capabilities given in +.Ar arg ... . +If +.Ar arg +is +.Sq baud , +.Sq cols , +.Sq lines , +.Sq rows , +.Sq meta , +or +.Sq tabs , +the value of that capability is printed, with +.Dq yes +or +.Dq no +indicating that the terminal does or does not have that capability. +.Pp +.Fl s +returns an empty string for non-existent capabilities, rather than +causing an error. +.Fl v +causes messages to be verbose. +.It Ic edit Op Li on | Li off +Enable or disable the +.Nm editline +functionality in a program. +.It Ic history Ar list | Ar size Dv n | Ar unique Dv n +The +.Ar list +command lists all entries in the history. +The +.Ar size +command sets the history size to +.Dv n +entries. +The +.Ar unique +command controls if history should keep duplicate entries. +If +.Dv n +is non zero, only keep unique history entries. +If +.Dv n +is zero, then keep all entries (the default). +.It Ic settc Ar cap Ar val +Set the terminal capability +.Ar cap +to +.Ar val , +as defined in +.Xr termcap 5 . +No sanity checking is done. +.It Ic setty Oo Fl a Oc Oo Fl d Oc Oo Fl q Oc Oo Fl x Oc Oo Ar +mode Oc \ +Oo Ar -mode Oc Oo Ar mode Oc Oo Ar char=c Oc +Control which tty modes that +.Nm +won't allow the user to change. +.Fl d , +.Fl q +or +.Fl x +tells +.Ic setty +to act on the +.Sq edit , +.Sq quote +or +.Sq execute +set of tty modes respectively; defaulting to +.Fl x . +.Pp +Without other arguments, +.Ic setty +lists the modes in the chosen set which are fixed on +.Po +.Sq +mode +.Pc +or off +.Po +.Sq -mode +.Pc . +.Fl a +lists all tty modes in the chosen set regardless of the setting. +With +.Ar +mode , +.Ar -mode +or +.Ar mode , +fixes +.Ar mode +on or off or removes control of +.Ar mode +in the chosen set. +.Pp +.Ic Setty +can also be used to set tty characters to particular values using +.Ar char=value . +If +.Ar value +is empty +then the character is set to +.Dv _POSIX_VDISABLE . +.It Ic telltc +List the values of all the terminal capabilities (see +.Xr termcap 5 ) . +.El +.Sh ENVIRONMENT +.Bl -tag -width "~/.editrcXXX" +.It Ev EDITRC +Names the default configuration file for the +.Xr editline 3 +library. +.El +.Sh FILES +.Bl -tag -width "~/.editrcXXX" +.It Pa ~/.editrc +Last resort, if no other file is specified, +user configuration file for the +.Xr editline 3 +library. +.El +.Sh SEE ALSO +.Xr editline 3 , +.Xr regex 3 , +.Xr termcap 5 , +.Xr editline 7 +.Sh AUTHORS +.An -nosplit +The +.Nm editline +library was written by +.An Christos Zoulas , +and this manual was written by +.An Luke Mewburn , +with some sections inspired by +.Xr tcsh 1 . diff --git a/src/thirdparty/libedit-3.1/doc/mdoc2man.awk b/src/thirdparty/libedit-3.1/doc/mdoc2man.awk new file mode 100644 index 000000000..e21753f44 --- /dev/null +++ b/src/thirdparty/libedit-3.1/doc/mdoc2man.awk @@ -0,0 +1,459 @@ +#!/usr/bin/awk +# +# Version history: +# v3, I put the program under a proper license +# Dan Nelson <dnelson@allantgroup.com> added .An, .Aq and fixed a typo +# v2, fixed to work on GNU awk --posix and MacOS X +# v1, first attempt, didn't work on MacOS X +# +# Copyright (c) 2003 Peter Stuge <stuge-mdoc2man@cdy.org> +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +BEGIN { + optlist=0 + oldoptlist=0 + nospace=0 + synopsis=0 + reference=0 + block=0 + ext=0 + extopt=0 + literal=0 + prenl=0 + breakw=0 + line="" + proto=0 + bl_level=0 +} + +function wtail() { + retval="" + while(w<nwords) { + if(length(retval)) + retval=retval OFS + retval=retval words[++w] + } + return retval +} + +function add(str) { + for(;prenl;prenl--) + line=line "\n" + line=line str +} + +! /^\./ { + for(;prenl;prenl--) + print "" + print + if(literal) + print ".br" + next +} + +/^\.\\"/ { next } + +{ + option=0 + parens=0 + angles=0 + sub("^\\.","") + nwords=split($0,words) + for(w=1;w<=nwords;w++) { + skip=0 + if(match(words[w],"^Li|Pf$")) { + skip=1 + } else if(match(words[w],"^Xo$")) { + skip=1 + ext=1 + if(length(line)&&!(match(line," $")||prenl)) + add(OFS) + } else if(match(words[w],"^Xc$")) { + skip=1 + ext=0 + if(!extopt) + prenl++ + w=nwords + } else if(match(words[w],"^Bd$")) { + skip=1 + if(match(words[w+1],"-literal")) { + literal=1 + prenl++ + w=nwords + } + } else if(match(words[w],"^Po$")) { + skip=1 + add("(") + if(!nospace) + nospace=1 + } else if(match(words[w],"^Pc$")) { + skip=1 + add(")") + if(!nospace) + nospace=1 + } else if(match(words[w],"^Ed$")) { + skip=1 + literal=0 + } else if(match(words[w],"^Ns$")) { + skip=1 + if(!nospace) + nospace=1 + sub(" $","",line) + } else if(match(words[w],"^No$")) { + skip=1 + sub(" $","",line) + add(words[++w]) + } else if(match(words[w],"^Dq$")) { + skip=1 + add("``") + add(words[++w]) + while(w<nwords&&!match(words[w+1],"^[\\.,]")) + add(OFS words[++w]) + add("''") + if(!nospace&&match(words[w+1],"^[\\.,]")) + nospace=1 + } else if(match(words[w],"^Va$")) { + skip=1 + add("\\fI" words[++w]) + while(w<nwords&&!match(words[w+1],"^[\\.,]")) + add(OFS words[++w]) + add("\\fP") + if(!nospace&&match(words[w+1],"^[\\.,]")) + nospace=1 + } else if(match(words[w],"^Sq|Ql$")) { + skip=1 + add("`" words[++w] "'") + if(!nospace&&match(words[w+1],"^[\\.,]")) + nospace=1 + } else if(match(words[w],"^Oo$")) { + skip=1 + extopt=1 + if(!nospace) + nospace=1 + add("[") + } else if(match(words[w],"^Oc$")) { + skip=1 + extopt=0 + add("]") + } + if(!skip) { + if(!nospace&&length(line)&&!(match(line," $")||prenl)) + add(OFS) + if(nospace==1) + nospace=0 + } + if(match(words[w],"^Dd$")) { + date=wtail() + next + } else if(match(words[w],"^Dt$")) { + id=wtail() + next + } else if(match(words[w],"^Os$")) { + add(".TH " id " \"" date "\" \"" wtail() "\"") + } else if(match(words[w],"^Sh$")) { + add(".SH") + synopsis=match(words[w+1],"SYNOPSIS") + } else if(match(words[w],"^Xr$")) { + #add("\\fB" words[++w] "\\fP(" words[++w] ")" words[++w]) + add("\\fB" words[++w] "\\fP(" words[++w] ")") + sub("^Ns$", "", words[w+1]) + add(words[++w]) + } else if(match(words[w],"^Rs$")) { + split("",refauthors) + nrefauthors=0 + reftitle="" + refissue="" + refdate="" + refopt="" + reference=1 + next + } else if(match(words[w],"^Re$")) { + prenl++ + for(i=nrefauthors-1;i>0;i--) { + add(refauthors[i]) + if(i>1) + add(", ") + } + if(nrefauthors>1) + add(" and ") + add(refauthors[0] ", \\fI" reftitle "\\fP") + if(length(refissue)) + add(", " refissue) + if(length(refdate)) + add(", " refdate) + if(length(refopt)) + add(", " refopt) + add(".") + reference=0 + } else if(reference) { + if(match(words[w],"^%A$")) { refauthors[nrefauthors++]=wtail() } + if(match(words[w],"^%T$")) { + reftitle=wtail() + sub("^\"","",reftitle) + sub("\"$","",reftitle) + } + if(match(words[w],"^%N$")) { refissue=wtail() } + if(match(words[w],"^%D$")) { refdate=wtail() } + if(match(words[w],"^%O$")) { refopt=wtail() } + } else if(match(words[w],"^Nm$")) { + if(synopsis) { + add(".br") + prenl++ + } + n=words[++w] + if(!length(name)) + name=n + if(!length(n)) + n=name + add("\\fB" n "\\fP") + if(!nospace&&match(words[w+1],"^[\\.,]")) + nospace=1 + } else if(match(words[w],"^Nd$")) { + add("\\- " wtail()) + } else if(match(words[w],"^Fl$")) { + add("\\fB\\-" words[++w] "\\fP") + if(!nospace&&match(words[w+1],"^[\\.,]")) + nospace=1 + } else if(match(words[w],"^Ar$")) { + add("\\fI") + if(w==nwords) + add("file ...\\fP") + else { + add(words[++w] "\\fP") + while(match(words[w+1],"^\\|$")) + add(OFS words[++w] " \\fI" words[++w] "\\fP") + } + if(!nospace&&match(words[w+1],"^[\\.,]")) + nospace=1 + } else if(match(words[w],"^Cm$")) { + add("\\fB" words[++w] "\\fP") + while(w<nwords&&match(words[w+1],"^[\\.,:;)]")) + add(words[++w]) + } else if(match(words[w],"^Op$")) { + option=1 + if(!nospace) + nospace=1 + add("[") + } else if(match(words[w],"^Pp$")) { + prenl++ + } else if(match(words[w],"^An$")) { + prenl++ + } else if(match(words[w],"^Ss$")) { + add(".SS") + } else if(match(words[w],"^Pa$")&&!option) { + add("\\fI") + w++ + if(match(words[w],"^\\.")) + add("\\&") + add(words[w] "\\fP") + while(w<nwords&&match(words[w+1],"^[\\.,:;)]")) + add(words[++w]) + } else if(match(words[w],"^Dv$")) { + #add(".BR") + } else if(match(words[w],"^Em|Ev$")) { + add(".IR") + } else if(match(words[w],"^Pq$")) { + add("(") + nospace=1 + parens=1 + } else if(match(words[w],"^Aq$")) { + add("<") + nospace=1 + angles=1 + } else if(match(words[w],"^S[xy]$")) { + add(".B " wtail()) + } else if(match(words[w],"^Ic$")) { + plain=1 + add("\\fB") + while(w<nwords) { + w++ + if(match(words[w],"^Op$")) { + w++ + add("[") + words[nwords]=words[nwords] "]" + } + if(match(words[w],"^Ar$")) { + add("\\fI" words[++w] "\\fP") + } else if(match(words[w],"^[\\.,]")) { + sub(" $","",line) + if(plain) { + add("\\fP") + plain=0 + } + add(words[w]) + } else if(match(words[w],"^Xo$")) { + } else { + if(!plain) { + add("\\fB") + plain=1 + } + add(words[w]) + } + if(!nospace) + add(OFS) + } + sub(" $","",line) + if(plain) + add("\\fP") + } else if(match(words[w],"^Dl$")) { + ## remove is ok for editrc.5 + } else if(match(words[w],"^Bl$")) { + ++bl_level + if (bl_level > 1) + add(".RS") + oldoptlist=optlist + if(match(words[w+1],"-bullet")) + optlist=1 + else if(match(words[w+1],"-enum")) { + optlist=2 + enum=0 + } else if(match(words[w+1],"-tag")) + optlist=3 + else if(match(words[w+1],"-item")) + optlist=4 + else if(match(words[w+1],"-bullet")) + optlist=1 + w=nwords + } else if(match(words[w],"^El$")) { + if (bl_level > 1) + add(".RE") + --bl_level + optlist=oldoptlist + } else if(match(words[w],"^Bk$")) { + if(match(words[w+1],"-words")) { + w++ + breakw=1 + } + } else if(match(words[w],"^Ek$")) { + breakw=0 + } else if(match(words[w],"^It$")&&optlist) { + if(optlist==1) + add(".IP \\(bu") + else if(optlist==2) + add(".IP " ++enum ".") + else if(optlist==3) { + add(".TP") + prenl++ + if(match(words[w+1],"^Pa$|^Ev$")) { + add(".B") + w++ + } + } else if(optlist==4) + add(".IP") + } else if(match(words[w],"^Sm$")) { + if(match(words[w+1],"off")) + nospace=2 + else if(match(words[w+1],"on")) + nospace=0 + w++ + } else if(match(words[w],"^Lb$")) { + wtail() + add("Command Line Editor Library (libedit, -ledit)") + } else if(match(words[w],"^In$")) { + add(".PP\n") + add("\\fB#include <" wtail() ">\\fP") + } else if(match(words[w],"^Ft$")) { + add(".PP\n") + add("\\fI" wtail() "\\fP\n") + add(".br") + proto=1 + } else if(match(words[w],"^Fn$")) { + add("\\fB" words[++w] "\\fP(") + punct=0 + while(++w<=nwords) { + if(match(words[w], "^\".*\"$")) { + sub("^\"", "", words[w]) + sub("\"$", "", words[w]) + add("\\fI" words[w] "\\fP") + if (w!=nwords) { + add(", ") + } + } else if(match(words[w], "^\"")) { + sub("^\"", "", words[w]) + add("\\fI" words[w] " ") + } else if (match(words[w], "\"$")) { + sub("\"$", "", words[w]) + add(words[w] "\\fP") + if (w!=nwords) { + add(", ") + } + } else { + if (w==nwords&&(match(words[w], "^[.,]$"))) { + punct=1 + } else { + add(words[w] " ") + } + + } + } + add(")") + if (punct==1) { + add(words[w-1]) + } else { + if (proto==1) { + add(";") + proto=0 + } + } + } else if(match(words[w],"^Fa$")) { + punct=0 + add("\\fI") + while(++w<=nwords) { + if(match(words[w], "^\".*\"$")) { + sub("^\"", "", words[w]) + sub("\"$", "", words[w]) + add(words[w]) + } else if(match(words[w], "^\"")) { + sub("^\"", "", words[w]) + add(words[w] " ") + } else if (match(words[w], "\"$")) { + sub("\"$", "", words[w]) + add(words[w]) + } else { + if (w==nwords&&(match(words[w], "^[.,]$"))) { + punct=1 + } else { + if (w+1==nwords&&(match(words[w+1], "^[.,]$"))) { + add(words[w]) + } else { + add(words[w] " ") + } + } + } + } + add("\\fP") + if (punct==1) { + add(words[w-1]) + } + } else if(!skip) { + add(words[w]) + } + } + if(match(line,"^\\.[^a-zA-Z]")) + sub("^\\.","",line) + if(parens) + add(")") + if(angles) + add(">") + if(option) + add("]") + if(ext&&!extopt&&!match(line," $")) + add(OFS) + if(!ext&&!extopt&&length(line)) { + print line + prenl=0 + line="" + } +} diff --git a/src/thirdparty/libedit-3.1/examples/Makefile.am b/src/thirdparty/libedit-3.1/examples/Makefile.am new file mode 100644 index 000000000..cbee508cb --- /dev/null +++ b/src/thirdparty/libedit-3.1/examples/Makefile.am @@ -0,0 +1,13 @@ + +LDADD = $(top_builddir)/src/libedit.la +AM_CFLAGS = -I$(top_srcdir)/src + +noinst_PROGRAMS = tc1 fileman + +tc1_SOURCES = tc1.c +fileman_SOURCES = fileman.c + +noinst_PROGRAMS += wtc1 +wtc1_SOURCES = wtc1.c + +EXTRA_DIST = fuzz1.c diff --git a/src/thirdparty/libedit-3.1/examples/fileman.c b/src/thirdparty/libedit-3.1/examples/fileman.c new file mode 100644 index 000000000..974a7ccd0 --- /dev/null +++ b/src/thirdparty/libedit-3.1/examples/fileman.c @@ -0,0 +1,496 @@ +/* fileman.c -- A tiny application which demonstrates how to use the + GNU Readline library. This application interactively allows users + to manipulate files and their modes. + + NOTE: this was taken from the GNU Readline documentation and ported + to libedit. A command to output the history list was added. + + */ + +#include <stdio.h> +#include <sys/types.h> +#include <sys/file.h> +#include <sys/stat.h> +#include <errno.h> +#include <ctype.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <locale.h> +#include <time.h> + +/* GNU readline +#include <readline/readline.h> +#include <readline/history.h> +*/ +#include <editline/readline.h> + +void * xmalloc (size_t size); +void too_dangerous (char *caller); +void initialize_readline (); +int execute_line (char *line); +int valid_argument (char *caller, char *arg); + +typedef int rl_icpfunc_t (char *); + +/* The names of functions that actually do the manipulation. */ +int com_list (char *); +int com_view (char *); +int com_history (char *); +int com_rename(char *); +int com_stat(char *); +int com_pwd(char *); +int com_delete(char *); +int com_help(char *); +int com_cd(char *); +int com_quit(char *); + +/* A structure which contains information on the commands this program + can understand. */ + +typedef struct { + char *name; /* User printable name of the function. */ + rl_icpfunc_t *func; /* Function to call to do the job. */ + char *doc; /* Documentation for this function. */ +} COMMAND; + +COMMAND commands[] = { + { "cd", com_cd, "Change to directory DIR" }, + { "delete", com_delete, "Delete FILE" }, + { "help", com_help, "Display this text" }, + { "?", com_help, "Synonym for `help'" }, + { "list", com_list, "List files in DIR" }, + { "ls", com_list, "Synonym for `list'" }, + { "pwd", com_pwd, "Print the current working directory" }, + { "quit", com_quit, "Quit using Fileman" }, + { "rename", com_rename, "Rename FILE to NEWNAME" }, + { "stat", com_stat, "Print out statistics on FILE" }, + { "view", com_view, "View the contents of FILE" }, + { "history", com_history, "List editline history" }, + { (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL } +}; + +/* Forward declarations. */ +char *stripwhite (); +COMMAND *find_command (); + +/* The name of this program, as taken from argv[0]. */ +char *progname; + +/* When non-zero, this means the user is done using this program. */ +int done; + +char * +dupstr (char* s) +{ + char *r; + + r = xmalloc (strlen (s) + 1); + strcpy (r, s); + return (r); +} + +int +main (int argc __attribute__((__unused__)), char **argv) +{ + char *line, *s; + + progname = argv[0]; + + setlocale(LC_CTYPE, ""); + + initialize_readline(); /* Bind our completer. */ + + stifle_history(7); + + /* Loop reading and executing lines until the user quits. */ + for ( ; done == 0; ) + { + line = readline ("FileMan: "); + + if (!line) + break; + + /* Remove leading and trailing whitespace from the line. + Then, if there is anything left, add it to the history list + and execute it. */ + s = stripwhite(line); + + if (*s) { + + char* expansion; + int result; + + result = history_expand(s, &expansion); + + if (result < 0 || result == 2) { + fprintf(stderr, "%s\n", expansion); + } else { + add_history(expansion); + execute_line(expansion); + } + free(expansion); + } + + free(line); + } + exit (0); + + return 0; +} + +/* Execute a command line. */ +int +execute_line (char *line) +{ + register int i; + COMMAND *command; + char *word; + + /* Isolate the command word. */ + i = 0; + while (line[i] && isspace (line[i])) + i++; + word = line + i; + + while (line[i] && !isspace (line[i])) + i++; + + if (line[i]) + line[i++] = '\0'; + + command = find_command (word); + + if (!command) + { + fprintf (stderr, "%s: No such command for FileMan.\n", word); + return (-1); + } + + /* Get argument to command, if any. */ + while (isspace (line[i])) + i++; + + word = line + i; + + /* Call the function. */ + return ((*(command->func)) (word)); +} + +/* Look up NAME as the name of a command, and return a pointer to that + command. Return a NULL pointer if NAME isn't a command name. */ +COMMAND * +find_command (char *name) +{ + register int i; + + for (i = 0; commands[i].name; i++) + if (strcmp (name, commands[i].name) == 0) + return (&commands[i]); + + return ((COMMAND *)NULL); +} + +/* Strip whitespace from the start and end of STRING. Return a pointer + into STRING. */ +char * +stripwhite (char *string) +{ + register char *s, *t; + + for (s = string; isspace (*s); s++) + ; + + if (*s == 0) + return (s); + + t = s + strlen (s) - 1; + while (t > s && isspace (*t)) + t--; + *++t = '\0'; + + return s; +} + +/* **************************************************************** */ +/* */ +/* Interface to Readline Completion */ +/* */ +/* **************************************************************** */ + +char *command_generator(const char *, int); +char **fileman_completion(const char *, int, int); + +/* Tell the GNU Readline library how to complete. We want to try to + complete on command names if this is the first word in the line, or + on filenames if not. */ +void +initialize_readline () +{ + /* Allow conditional parsing of the ~/.inputrc file. */ + rl_readline_name = "FileMan"; + + /* Tell the completer that we want a crack first. */ + rl_attempted_completion_function = fileman_completion; +} + +/* Attempt to complete on the contents of TEXT. START and END + bound the region of rl_line_buffer that contains the word to + complete. TEXT is the word to complete. We can use the entire + contents of rl_line_buffer in case we want to do some simple + parsing. Returnthe array of matches, or NULL if there aren't any. */ +char ** +fileman_completion (const char* text, int start, int end __attribute__((__unused__))) +{ + char **matches; + + matches = (char **)NULL; + + /* If this word is at the start of the line, then it is a command + to complete. Otherwise it is the name of a file in the current + directory. */ + if (start == 0) + /* TODO */ + matches = completion_matches ((char*)text, command_generator); + /* matches = rl_completion_matches (text, command_generator); */ + + return (matches); +} + +/* Generator function for command completion. STATE lets us + know whether to start from scratch; without any state + (i.e. STATE == 0), then we start at the top of the list. */ +char * +command_generator (text, state) + const char *text; + int state; +{ + static int list_index, len; + char *name; + + /* If this is a new word to complete, initialize now. This + includes saving the length of TEXT for efficiency, and + initializing the index variable to 0. */ + if (!state) + { + list_index = 0; + len = strlen (text); + } + + /* Return the next name which partially matches from the + command list. */ + while ((name = commands[list_index].name)) + { + list_index++; + + if (strncmp (name, text, len) == 0) + return (dupstr(name)); + } + + /* If no names matched, then return NULL. */ + return ((char *)NULL); +} + +/* **************************************************************** */ +/* */ +/* FileMan Commands */ +/* */ +/* **************************************************************** */ + +/* String to pass to system (). This is for the LIST, VIEW and RENAME + commands. */ +static char syscom[1024]; + +/* List the file(s) named in arg. */ +int +com_list (char *arg) +{ + if (!arg) + arg = ""; + + sprintf (syscom, "ls -FClg %s", arg); + return (system (syscom)); +} + +int +com_view (char *arg) +{ + if (!valid_argument ("view", arg)) + return 1; + + sprintf (syscom, "more %s", arg); + return (system (syscom)); +} + +int +com_history(char* arg __attribute__((__unused__))) +{ + HIST_ENTRY *he; + + /* rewind history */ + while (previous_history()) + ; + + for (he = current_history(); he != NULL; he = next_history()) { + //printf("%5d %s\n", *((int*)he->data) - 1, he->line); + printf("%s\n", he->line); + } + + return 0; +} + +int +com_rename (char *arg __attribute__((__unused__))) +{ + too_dangerous ("rename"); + return (1); +} + +int +com_stat (char *arg) +{ + struct stat finfo; + + if (!valid_argument ("stat", arg)) + return (1); + + if (stat (arg, &finfo) == -1) + { + perror (arg); + return (1); + } + + printf ("Statistics for `%s':\n", arg); + + printf ("%s has %ld link%s, and is %lld byte%s in length.\n", arg, + (long) finfo.st_nlink, + (finfo.st_nlink == 1) ? "" : "s", + (long long) finfo.st_size, + (finfo.st_size == 1) ? "" : "s"); + printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime)); + printf (" Last access at: %s", ctime (&finfo.st_atime)); + printf (" Last modified at: %s", ctime (&finfo.st_mtime)); + return (0); +} + +int +com_delete (char *arg __attribute__((__unused__))) +{ + too_dangerous ("delete"); + return (1); +} + +/* Print out help for ARG, or for all of the commands if ARG is + not present. */ +int +com_help (char *arg) +{ + register int i; + int printed = 0; + + for (i = 0; commands[i].name; i++) + { + if (!*arg || (strcmp (arg, commands[i].name) == 0)) + { + printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc); + printed++; + } + } + + if (!printed) + { + printf ("No commands match `%s'. Possibilties are:\n", arg); + + for (i = 0; commands[i].name; i++) + { + /* Print in six columns. */ + if (printed == 6) + { + printed = 0; + printf ("\n"); + } + + printf ("%s\t", commands[i].name); + printed++; + } + + if (printed) + printf ("\n"); + } + return (0); +} + +/* Change to the directory ARG. */ +int +com_cd (char *arg) +{ + if (chdir (arg) == -1) + { + perror (arg); + return 1; + } + + com_pwd (""); + return (0); +} + +/* Print out the current working directory. */ +int +com_pwd (char* ignore __attribute__((__unused__))) +{ + char dir[1024], *s; + + s = (char*)getcwd(dir, sizeof(dir) - 1); + if (s == 0) + { + printf ("Error getting pwd: %s\n", dir); + return 1; + } + + printf ("Current directory is %s\n", dir); + return 0; +} + +/* The user wishes to quit using this program. Just set DONE + non-zero. */ +int +com_quit (char *arg __attribute__((__unused__))) +{ + done = 1; + return (0); +} + +/* Function which tells you that you can't do this. */ +void +too_dangerous (char *caller) +{ + fprintf (stderr, + "%s: Too dangerous for me to distribute.\n", + caller); + fprintf (stderr, "Write it yourself.\n"); +} + +/* Return non-zero if ARG is a valid argument for CALLER, + else print an error message and return zero. */ +int +valid_argument (char *caller, char *arg) +{ + if (!arg || !*arg) + { + fprintf (stderr, "%s: Argument required.\n", caller); + return (0); + } + + return (1); +} + +void * +xmalloc (size_t size) +{ + register void *value = (void*)malloc(size); + if (value == 0) + fprintf(stderr, "virtual memory exhausted"); + return value; +} + + diff --git a/src/thirdparty/libedit-3.1/examples/fuzz1.c b/src/thirdparty/libedit-3.1/examples/fuzz1.c new file mode 100644 index 000000000..e31d26538 --- /dev/null +++ b/src/thirdparty/libedit-3.1/examples/fuzz1.c @@ -0,0 +1,63 @@ +/* + * build: + * CC=clang CXX=clang++ CFLAGS="-fsanitize=address,fuzzer-no-link -g" \ + * CXXFLAGS="-fsanitize=address,fuzzer-no-link -g" ./configure && make + * run: + * LD_LIBRARY_PATH=../src/.libs/ .libs/fuzz1 -max_len=32 \ + * -use_value_profile=1 -only_ascii=1 + */ +#include <readline/readline.h> +#include <locale.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int init = 0; + +int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { + if (!Size) + return 0; + + if (!init) { + setlocale(LC_CTYPE, ""); + stifle_history(7); + init = 1; + } + + clear_history(); + + size_t lasti = 0; + + for (size_t i = 0;; ++i) { + if (i == Size || Data[i] == '\n') { + if (i - lasti) { + char *s = (char *)malloc(i - lasti + 1); + memcpy(s, &Data[lasti], i - lasti); + s[i - lasti] = '\0'; + + char *expansion; + int result; + +#ifdef DEBUG + fprintf(stderr, "Calling history_expand: >%s<\n", s); +#endif + result = history_expand(s, &expansion); + + if (result < 0 || result == 2) { + /* Errors ignored */ + } else { + add_history(expansion); + } + free(expansion); + free(s); + } + lasti = i + 1; + } + + if (i == Size) + break; + } + + return 0; +} diff --git a/src/thirdparty/libedit-3.1/examples/tc1.c b/src/thirdparty/libedit-3.1/examples/tc1.c new file mode 100644 index 000000000..3061038b7 --- /dev/null +++ b/src/thirdparty/libedit-3.1/examples/tc1.c @@ -0,0 +1,309 @@ +/* $NetBSD: tc1.c,v 1.7 2016/02/17 19:47:49 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#ifndef lint +__COPYRIGHT("@(#) Copyright (c) 1992, 1993\n\ + The Regents of the University of California. All rights reserved.\n"); +#endif /* not lint */ + +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)test.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: tc1.c,v 1.7 2016/02/17 19:47:49 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* from src/sys/sys/cdefs.h */ +#ifndef __UNCONST +# define __UNCONST(a) ((void *)(unsigned long)(const void *)(a)) +#endif + +/* + * test.c: A little test program + */ +#include <sys/wait.h> +#include <ctype.h> +#include <dirent.h> +#include <locale.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "histedit.h" + +static int continuation = 0; +volatile sig_atomic_t gotsig = 0; + +static unsigned char complete(EditLine *, int); + int main(int, char **); +static char *prompt(EditLine *); +static void sig(int); + +static char * +prompt(EditLine *el __attribute__((__unused__))) +{ + static char a[] = "\1\033[7m\1Edit$\1\033[0m\1 "; + static char b[] = "Edit> "; + + return (continuation ? b : a); +} + +static void +sig(int i) +{ + gotsig = i; +} + +static unsigned char +complete(EditLine *el, int ch __attribute__((__unused__))) +{ + DIR *dd = opendir("."); + struct dirent *dp; + const char* ptr; + const LineInfo *lf = el_line(el); + size_t len; + int res = CC_ERROR; + + /* + * Find the last word + */ + for (ptr = lf->cursor - 1; + !isspace((unsigned char)*ptr) && ptr > lf->buffer; ptr--) + continue; + len = lf->cursor - ++ptr; + + for (dp = readdir(dd); dp != NULL; dp = readdir(dd)) { + if (len > strlen(dp->d_name)) + continue; + if (strncmp(dp->d_name, ptr, len) == 0) { + if (el_insertstr(el, &dp->d_name[len]) == -1) + res = CC_ERROR; + else + res = CC_REFRESH; + break; + } + } + + closedir(dd); + return res; +} + +int +main(int argc __attribute__((__unused__)), char *argv[]) +{ + EditLine *el = NULL; + int num; + const char *buf; + Tokenizer *tok; +#if 0 + int lastevent = 0; +#endif + int ncontinuation; + History *hist; + HistEvent ev; + + (void) setlocale(LC_CTYPE, ""); + (void) signal(SIGINT, sig); + (void) signal(SIGQUIT, sig); + (void) signal(SIGHUP, sig); + (void) signal(SIGTERM, sig); + + hist = history_init(); /* Init the builtin history */ + /* Remember 100 events */ + history(hist, &ev, H_SETSIZE, 100); + + tok = tok_init(NULL); /* Initialize the tokenizer */ + + /* Initialize editline */ + el = el_init(*argv, stdin, stdout, stderr); + + el_set(el, EL_EDITOR, "vi"); /* Default editor is vi */ + el_set(el, EL_SIGNAL, 1); /* Handle signals gracefully */ + el_set(el, EL_PROMPT_ESC, prompt, '\1');/* Set the prompt function */ + + /* Tell editline to use this history interface */ + el_set(el, EL_HIST, history, hist); + + /* Add a user-defined function */ + el_set(el, EL_ADDFN, "ed-complete", "Complete argument", complete); + + /* Bind tab to it */ + el_set(el, EL_BIND, "^I", "ed-complete", NULL); + + /* + * Bind j, k in vi command mode to previous and next line, instead + * of previous and next history. + */ + el_set(el, EL_BIND, "-a", "k", "ed-prev-line", NULL); + el_set(el, EL_BIND, "-a", "j", "ed-next-line", NULL); + + /* + * Source the user's defaults file. + */ + el_source(el, NULL); + + while ((buf = el_gets(el, &num)) != NULL && num != 0) { + int ac, cc, co; +#ifdef DEBUG + int i; +#endif + const char **av; + const LineInfo *li; + li = el_line(el); +#ifdef DEBUG + (void) fprintf(stderr, "==> got %d %s", num, buf); + (void) fprintf(stderr, " > li `%.*s_%.*s'\n", + (li->cursor - li->buffer), li->buffer, + (li->lastchar - 1 - li->cursor), + (li->cursor >= li->lastchar) ? "" : li->cursor); + +#endif + if (gotsig) { + (void) fprintf(stderr, "Got signal %d.\n", (int)gotsig); + gotsig = 0; + el_reset(el); + } + + if (!continuation && num == 1) + continue; + + ac = cc = co = 0; + ncontinuation = tok_line(tok, li, &ac, &av, &cc, &co); + if (ncontinuation < 0) { + (void) fprintf(stderr, "Internal error\n"); + continuation = 0; + continue; + } +#ifdef DEBUG + (void) fprintf(stderr, " > nc %d ac %d cc %d co %d\n", + ncontinuation, ac, cc, co); +#endif +#if 0 + if (continuation) { + /* + * Append to the right event in case the user + * moved around in history. + */ + if (history(hist, &ev, H_SET, lastevent) == -1) + err(1, "%d: %s", lastevent, ev.str); + history(hist, &ev, H_ADD , buf); + } else { + history(hist, &ev, H_ENTER, buf); + lastevent = ev.num; + } +#else + /* Simpler */ + history(hist, &ev, continuation ? H_APPEND : H_ENTER, buf); +#endif + + continuation = ncontinuation; + ncontinuation = 0; + if (continuation) + continue; +#ifdef DEBUG + for (i = 0; i < ac; i++) { + (void) fprintf(stderr, " > arg# %2d ", i); + if (i != cc) + (void) fprintf(stderr, "`%s'\n", av[i]); + else + (void) fprintf(stderr, "`%.*s_%s'\n", + co, av[i], av[i] + co); + } +#endif + + if (strcmp(av[0], "history") == 0) { + int rv; + + switch (ac) { + case 1: + for (rv = history(hist, &ev, H_LAST); rv != -1; + rv = history(hist, &ev, H_PREV)) + (void) fprintf(stdout, "%4d %s", + ev.num, ev.str); + break; + + case 2: + if (strcmp(av[1], "clear") == 0) + history(hist, &ev, H_CLEAR); + else + goto badhist; + break; + + case 3: + if (strcmp(av[1], "load") == 0) + history(hist, &ev, H_LOAD, av[2]); + else if (strcmp(av[1], "save") == 0) + history(hist, &ev, H_SAVE, av[2]); + break; + + badhist: + default: + (void) fprintf(stderr, + "Bad history arguments\n"); + break; + } + } else if (el_parse(el, ac, av) == -1) { + switch (fork()) { + case 0: + execvp(av[0], (char *const *)__UNCONST(av)); + perror(av[0]); + _exit(1); + /*NOTREACHED*/ + break; + + case -1: + perror("fork"); + break; + + default: + if (wait(&num) == -1) + perror("wait"); + (void) fprintf(stderr, "Exit %x\n", num); + break; + } + } + + tok_reset(tok); + } + + el_end(el); + tok_end(tok); + history_end(hist); + + return (0); +} diff --git a/src/thirdparty/libedit-3.1/examples/wtc1.c b/src/thirdparty/libedit-3.1/examples/wtc1.c new file mode 100644 index 000000000..d4fab9a85 --- /dev/null +++ b/src/thirdparty/libedit-3.1/examples/wtc1.c @@ -0,0 +1,282 @@ +#include <sys/wait.h> +#include <ctype.h> +#include <dirent.h> +#include <limits.h> +#include <locale.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <errno.h> + +#include <histedit.h> + + +static int continuation; +volatile sig_atomic_t gotsig; +static const char hfile[] = ".whistory"; + +static wchar_t * +prompt(EditLine __attribute__((unused)) *el) +{ + static wchar_t a[] = L"\1\033[7m\1Edit$\1\033[0m\1 "; + static wchar_t b[] = L"Edit> "; + + return continuation ? b : a; +} + + +static void +sig(int i) +{ + gotsig = i; +} + +const char * +my_wcstombs(const wchar_t *wstr) +{ + static struct { + char *str; + int len; + } buf; + + int needed = wcstombs(0, wstr, 0) + 1; + if (needed > buf.len) { + buf.str = malloc(needed); + buf.len = needed; + } + wcstombs(buf.str, wstr, needed); + buf.str[needed - 1] = 0; + + return buf.str; +} + + +static unsigned char +complete(EditLine *el, int __attribute__((unused)) ch) +{ + DIR *dd = opendir("."); + struct dirent *dp; + const wchar_t *ptr; + char *buf, *bptr; + const LineInfoW *lf = el_wline(el); + int len, i; + size_t mblen; + unsigned char res = 0; + wchar_t dir[1024]; + + /* Find the last word */ + for (ptr = lf->cursor -1; !iswspace(*ptr) && ptr > lf->buffer; --ptr) + continue; + len = lf->cursor - ++ptr; + + /* Convert last word to multibyte encoding, so we can compare to it */ + wctomb(NULL, 0); /* Reset shift state */ + mblen = MB_LEN_MAX * len + 1; + buf = bptr = malloc(mblen); + if (buf == NULL) { + fprintf(stderr, "malloc: %s\n", strerror(errno)); + exit(EXIT_FAILURE); + } + + for (i = 0; i < len; ++i) { + /* Note: really should test for -1 return from wctomb */ + bptr += wctomb(bptr, ptr[i]); + } + *bptr = 0; /* Terminate multibyte string */ + mblen = bptr - buf; + + /* Scan directory for matching name */ + for (dp = readdir(dd); dp != NULL; dp = readdir(dd)) { + if (mblen > strlen(dp->d_name)) + continue; + if (strncmp(dp->d_name, buf, mblen) == 0) { + mbstowcs(dir, &dp->d_name[mblen], + sizeof(dir) / sizeof(*dir)); + if (el_winsertstr(el, dir) == -1) + res = CC_ERROR; + else + res = CC_REFRESH; + break; + } + } + + closedir(dd); + free(buf); + return res; +} + + +int +main(int __attribute__((unused)) argc, char *argv[]) +{ + EditLine *el = NULL; + int numc, ncontinuation; + const wchar_t *line; + TokenizerW *tok; + HistoryW *hist; + HistEventW ev; +#ifdef DEBUG + int i; +#endif + + setlocale(LC_ALL, ""); + + (void)signal(SIGINT, sig); + (void)signal(SIGQUIT, sig); + (void)signal(SIGHUP, sig); + (void)signal(SIGTERM, sig); + + hist = history_winit(); /* Init built-in history */ + history_w(hist, &ev, H_SETSIZE, 100); /* Remember 100 events */ + history_w(hist, &ev, H_LOAD, hfile); + + tok = tok_winit(NULL); /* Init the tokenizer */ + + el = el_init(argv[0], stdin, stdout, stderr); + + el_wset(el, EL_EDITOR, L"vi"); /* Default editor is vi */ + el_wset(el, EL_SIGNAL, 1); /* Handle signals gracefully */ + el_wset(el, EL_PROMPT_ESC, prompt, '\1'); /* Set the prompt function */ + + el_wset(el, EL_HIST, history_w, hist); /* FIXME - history_w? */ + + /* Add a user-defined function */ + el_wset(el, EL_ADDFN, L"ed-complete", L"Complete argument", complete); + + /* Bind <tab> to it */ + el_wset(el, EL_BIND, L"^I", L"ed-complete", NULL); + + /* + * Bind j, k in vi command mode to previous and next line, instead + * of previous and next history. + */ + el_wset(el, EL_BIND, L"-a", L"k", L"ed-prev-line", NULL); + el_wset(el, EL_BIND, L"-a", L"j", L"ed-next-line", NULL); + + /* Source the user's defaults file. */ + el_source(el, NULL); + + while((line = el_wgets(el, &numc)) != NULL && numc != 0) { + int ac, cc, co, rc; + const wchar_t **av; + + const LineInfoW *li; + li = el_wline(el); + +#ifdef DEBUG + (void)fwprintf(stderr, L"==> got %d %ls", numc, line); + (void)fwprintf(stderr, L" > li `%.*ls_%.*ls'\n", + (li->cursor - li->buffer), li->buffer, + (li->lastchar - 1 - li->cursor), + (li->cursor >= li->lastchar) ? L"" : li->cursor); +#endif + + if (gotsig) { + (void)fprintf(stderr, "Got signal %d.\n", (int)gotsig); + gotsig = 0; + el_reset(el); + } + + if(!continuation && numc == 1) + continue; /* Only got a linefeed */ + + ac = cc = co = 0; + ncontinuation = tok_wline(tok, li, &ac, &av, &cc, &co); + if (ncontinuation < 0) { + (void) fprintf(stderr, "Internal error\n"); + continuation = 0; + continue; + } + +#ifdef DEBUG + (void)fprintf(stderr, " > nc %d ac %d cc %d co %d\n", + ncontinuation, ac, cc, co); +#endif + history_w(hist, &ev, continuation ? H_APPEND : H_ENTER, line); + + continuation = ncontinuation; + ncontinuation = 0; + if(continuation) + continue; + +#ifdef DEBUG + for (i = 0; i < ac; ++i) { + (void)fwprintf(stderr, L" > arg# %2d ", i); + if (i != cc) + (void)fwprintf(stderr, L"`%ls'\n", av[i]); + else + (void)fwprintf(stderr, L"`%.*ls_%ls'\n", + co, av[i], av[i] + co); + } +#endif + + if (wcscmp (av[0], L"history") == 0) { + switch(ac) { + case 1: + for(rc = history_w(hist, &ev, H_LAST); + rc != -1; + rc = history_w(hist, &ev, H_PREV)) + (void)fwprintf(stdout, L"%4d %ls", + ev.num, ev.str); + break; + case 2: + if (wcscmp(av[1], L"clear") == 0) + history_w(hist, &ev, H_CLEAR); + else + goto badhist; + break; + case 3: + if (wcscmp(av[1], L"load") == 0) + history_w(hist, &ev, H_LOAD, + my_wcstombs(av[2])); + else if (wcscmp(av[1], L"save") == 0) + history_w(hist, &ev, H_SAVE, + my_wcstombs(av[2])); + else + goto badhist; + break; + badhist: + default: + (void)fprintf(stderr, + "Bad history arguments\n"); + break; + } + } else if (el_wparse(el, ac, av) == -1) { + switch (fork()) { + case 0: { + Tokenizer *ntok = tok_init(NULL); + int nargc; + const char **nav; + tok_str(ntok, my_wcstombs(line), &nargc, &nav); + execvp(nav[0],(char **)nav); + perror(nav[0]); + _exit(1); + /* NOTREACHED */ + break; + } + case -1: + perror("fork"); + break; + default: + if (wait(&rc) == -1) + perror("wait"); + (void)fprintf(stderr, "Exit %x\n", rc); + break; + } + } + + tok_wreset(tok); + } + + el_end(el); + tok_wend(tok); + history_w(hist, &ev, H_SAVE, hfile); + history_wend(hist); + + fprintf(stdout, "\n"); + return 0; +} + + diff --git a/src/thirdparty/libedit-3.1/install-sh b/src/thirdparty/libedit-3.1/install-sh new file mode 100755 index 000000000..ec298b537 --- /dev/null +++ b/src/thirdparty/libedit-3.1/install-sh @@ -0,0 +1,541 @@ +#!/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: diff --git a/src/thirdparty/libedit-3.1/libedit.pc.in b/src/thirdparty/libedit-3.1/libedit.pc.in new file mode 100644 index 000000000..1fb2f05bd --- /dev/null +++ b/src/thirdparty/libedit-3.1/libedit.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libedit +Description: command line editor library provides generic line editing, history, and tokenization functions. +Version: @VERSION@ +Requires: +Libs: -L${libdir} -ledit +Libs.private: @LIBS@ +Cflags: -I${includedir} -I${includedir}/editline + diff --git a/src/thirdparty/libedit-3.1/ltmain.sh b/src/thirdparty/libedit-3.1/ltmain.sh new file mode 100644 index 000000000..2a50d7f6f --- /dev/null +++ b/src/thirdparty/libedit-3.1/ltmain.sh @@ -0,0 +1,11436 @@ +#! /usr/bin/env sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2019-02-19.15 + +# libtool (GNU libtool) 2.4.7 +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 + +# Copyright (C) 1996-2019, 2021-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. + +# GNU Libtool 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 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 <http://www.gnu.org/licenses/>. + + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.4.7 +package_revision=2.4.7 + + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2019-02-19.15; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# This is free software. There is NO warranty; not even for +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Copyright (C) 2004-2019, 2021 Bootstrap Authors +# +# This file is dual licensed under the terms of the MIT license +# <https://opensource.org/license/MIT>, and GPL version 2 or later +# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of +# these licenses when using or redistributing this software or any of +# the files within it. See the URLs above, or the file `LICENSE` +# included in the Bootstrap distribution for the full license texts. + +# Please report bugs or propose patches to: +# <https://github.com/gnulib-modules/bootstrap/issues> + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (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 + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac +fi + +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" + fi" +done +# These NLS vars are set unconditionally (bootstrap issue #24). Unset those +# in case the environment reset is needed later and the $save_* variant is not +# defined (see the code above). +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; 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 + + +# func_unset VAR +# -------------- +# Portably unset VAR. +# In some shells, an 'unset VAR' statement leaves a non-zero return +# status if VAR is already unset, which might be problematic if the +# statement is used at the end of a function (thus poisoning its return +# value) or when 'set -e' is active (causing even a spurious abort of +# the script in this case). +func_unset () +{ + { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } +} + + +# Make sure CDPATH doesn't cause `cd` commands to output the target dir. +func_unset CDPATH + +# Make sure ${,E,F}GREP behave sanely. +func_unset GREP_OPTIONS + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + +# require_check_ifs_backslash +# --------------------------- +# Check if we can use backslash as IFS='\' separator, and set +# $check_ifs_backshlash_broken to ':' or 'false'. +require_check_ifs_backslash=func_require_check_ifs_backslash +func_require_check_ifs_backslash () +{ + _G_save_IFS=$IFS + IFS='\' + _G_check_ifs_backshlash='a\\b' + for _G_i in $_G_check_ifs_backshlash + do + case $_G_i in + a) + check_ifs_backshlash_broken=false + ;; + '') + break + ;; + *) + check_ifs_backshlash_broken=: + break + ;; + esac + done + IFS=$_G_save_IFS + require_check_ifs_backslash=: +} + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac + + +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. + +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_arg pretty "$2" + eval "$1+=\\ \$func_quote_arg_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_arg pretty "$2" + eval "$1=\$$1\\ \$func_quote_arg_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" + fi +} + + +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () +{ + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_portable EVAL ARG +# ---------------------------- +# Internal function to portably implement func_quote_arg. Note that we still +# keep attention to performance here so we as much as possible try to avoid +# calling sed binary (so far O(N) complexity as long as func_append is O(1)). +func_quote_portable () +{ + $debug_cmd + + $require_check_ifs_backslash + + func_quote_portable_result=$2 + + # one-time-loop (easy break) + while true + do + if $1; then + func_quote_portable_result=`$ECHO "$2" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` + break + fi + + # Quote for eval. + case $func_quote_portable_result in + *[\\\`\"\$]*) + # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string + # contains the shell wildcard characters. + case $check_ifs_backshlash_broken$func_quote_portable_result in + :*|*[\[\*\?]*) + func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ + | $SED "$sed_quote_subst"` + break + ;; + esac + + func_quote_portable_old_IFS=$IFS + for _G_char in '\' '`' '"' '$' + do + # STATE($1) PREV($2) SEPARATOR($3) + set start "" "" + func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy + IFS=$_G_char + for _G_part in $func_quote_portable_result + do + case $1 in + quote) + func_append func_quote_portable_result "$3$2" + set quote "$_G_part" "\\$_G_char" + ;; + start) + set first "" "" + func_quote_portable_result= + ;; + first) + set quote "$_G_part" "" + ;; + esac + done + done + IFS=$func_quote_portable_old_IFS + ;; + *) ;; + esac + break + done + + func_quote_portable_unquoted_result=$func_quote_portable_result + case $func_quote_portable_result in + # double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # many bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_portable_result=\"$func_quote_portable_result\" + ;; + esac +} + + +# func_quotefast_eval ARG +# ----------------------- +# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', +# but optimized for speed. Result is stored in $func_quotefast_eval. +if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then + printf -v _GL_test_printf_tilde %q '~' + if test '\~' = "$_GL_test_printf_tilde"; then + func_quotefast_eval () + { + printf -v func_quotefast_eval_result %q "$1" + } + else + # Broken older Bash implementations. Make those faster too if possible. + func_quotefast_eval () + { + case $1 in + '~'*) + func_quote_portable false "$1" + func_quotefast_eval_result=$func_quote_portable_result + ;; + *) + printf -v func_quotefast_eval_result %q "$1" + ;; + esac + } + fi +else + func_quotefast_eval () + { + func_quote_portable false "$1" + func_quotefast_eval_result=$func_quote_portable_result + } +fi + + +# func_quote_arg MODEs ARG +# ------------------------ +# Quote one ARG to be evaled later. MODEs argument may contain zero or more +# specifiers listed below separated by ',' character. This function returns two +# values: +# i) func_quote_arg_result +# double-quoted (when needed), suitable for a subsequent eval +# ii) func_quote_arg_unquoted_result +# has all characters that are still active within double +# quotes backslashified. Available only if 'unquoted' is specified. +# +# Available modes: +# ---------------- +# 'eval' (default) +# - escape shell special characters +# 'expand' +# - the same as 'eval'; but do not quote variable references +# 'pretty' +# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might +# be used later in func_quote to get output like: 'echo "a b"' instead +# of 'echo a\ b'. This is slower than default on some shells. +# 'unquoted' +# - produce also $func_quote_arg_unquoted_result which does not contain +# wrapping double-quotes. +# +# Examples for 'func_quote_arg pretty,unquoted string': +# +# string | *_result | *_unquoted_result +# ------------+-----------------------+------------------- +# " | \" | \" +# a b | "a b" | a b +# "a b" | "\"a b\"" | \"a b\" +# * | "*" | * +# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" +# +# Examples for 'func_quote_arg pretty,unquoted,expand string': +# +# string | *_result | *_unquoted_result +# --------------+---------------------+-------------------- +# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" +func_quote_arg () +{ + _G_quote_expand=false + case ,$1, in + *,expand,*) + _G_quote_expand=: + ;; + esac + + case ,$1, in + *,pretty,*|*,expand,*|*,unquoted,*) + func_quote_portable $_G_quote_expand "$2" + func_quote_arg_result=$func_quote_portable_result + func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result + ;; + *) + # Faster quote-for-eval for some shells. + func_quotefast_eval "$2" + func_quote_arg_result=$func_quotefast_eval_result + ;; + esac +} + + +# func_quote MODEs ARGs... +# ------------------------ +# Quote all ARGs to be evaled later and join them into single command. See +# func_quote_arg's description for more info. +func_quote () +{ + $debug_cmd + _G_func_quote_mode=$1 ; shift + func_quote_result= + while test 0 -lt $#; do + func_quote_arg "$_G_func_quote_mode" "$1" + if test -n "$func_quote_result"; then + func_append func_quote_result " $func_quote_arg_result" + else + func_append func_quote_result "$func_quote_arg_result" + fi + shift + done +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_arg pretty,expand "$_G_cmd" + eval "func_notquiet $func_quote_arg_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_arg expand,pretty "$_G_cmd" + eval "func_echo $func_quote_arg_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# This is free software. There is NO warranty; not even for +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Copyright (C) 2010-2019, 2021 Bootstrap Authors +# +# This file is dual licensed under the terms of the MIT license +# <https://opensource.org/license/MIT>, and GPL version 2 or later +# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of +# these licenses when using or redistributing this software or any of +# the files within it. See the URLs above, or the file `LICENSE` +# included in the Bootstrap distribution for the full license texts. + +# Please report bugs or propose patches to: +# <https://github.com/gnulib-modules/bootstrap/issues> + +# Set a version string for this script. +scriptversion=2019-02-19.15; # UTC + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# Copyright'. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug in processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# in the main code. A hook is just a list of function names that can be +# run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of hook functions to be called by +# FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_propagate_result FUNC_NAME_A FUNC_NAME_B +# --------------------------------------------- +# If the *_result variable of FUNC_NAME_A _is set_, assign its value to +# *_result variable of FUNC_NAME_B. +func_propagate_result () +{ + $debug_cmd + + func_propagate_result_result=: + if eval "test \"\${${1}_result+set}\" = set" + then + eval "${2}_result=\$${1}_result" + else + func_propagate_result_result=false + fi +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It's assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook functions." ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + func_unset "${_G_hook}_result" + eval $_G_hook '${1+"$@"}' + func_propagate_result $_G_hook func_run_hooks + if $func_propagate_result_result; then + eval set dummy "$func_run_hooks_result"; shift + fi + done +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list from your hook function. You may remove +# or edit any options that you action, and then pass back the remaining +# unprocessed options in '<hooked_function_name>_result', escaped +# suitably for 'eval'. +# +# The '<hooked_function_name>_result' variable is automatically unset +# before your hook gets called; for best performance, only set the +# *_result variable when necessary (i.e. don't call the 'func_quote' +# function unnecessarily because it can be an expensive operation on some +# machines). +# +# Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# # No change in '$@' (ignored completely by this hook). Leave +# # my_options_prep_result variable intact. +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# args_changed=false +# +# # Note that, for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: +# args_changed=: +# ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# args_changed=: +# ;; +# *) # Make sure the first unrecognised option "$_G_opt" +# # is added back to "$@" in case we need it later, +# # if $args_changed was set to 'true'. +# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; +# esac +# done +# +# # Only call 'func_quote' here if we processed at least one argument. +# if $args_changed; then +# func_quote eval ${1+"$@"} +# my_silent_option_result=$func_quote_result +# fi +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll also need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options_finish [ARG]... +# ---------------------------- +# Finishing the option parse loop (call 'func_options' hooks ATM). +func_options_finish () +{ + $debug_cmd + + func_run_hooks func_options ${1+"$@"} + func_propagate_result func_run_hooks func_options_finish +} + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + _G_options_quoted=false + + for my_func in options_prep parse_options validate_options options_finish + do + func_unset func_${my_func}_result + func_unset func_run_hooks_result + eval func_$my_func '${1+"$@"}' + func_propagate_result func_$my_func func_options + if $func_propagate_result_result; then + eval set dummy "$func_options_result"; shift + _G_options_quoted=: + fi + done + + $_G_options_quoted || { + # As we (func_options) are top-level options-parser function and + # nobody quoted "$@" for us yet, we need to do it explicitly for + # caller. + func_quote eval ${1+"$@"} + func_options_result=$func_quote_result + } +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propagate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + func_propagate_result func_run_hooks func_options_prep +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + _G_parse_options_requote=false + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + func_propagate_result func_run_hooks func_parse_options + if $func_propagate_result_result; then + eval set dummy "$func_parse_options_result"; shift + # Even though we may have changed "$@", we passed the "$@" array + # down into the hook and it quoted it for us (because we are in + # this if-branch). No need to quote it again. + _G_parse_options_requote=false + fi + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + # We expect that one of the options parsed in this function matches + # and thus we remove _G_opt from "$@" and need to re-quote. + _G_match_parse_options=: + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" >&2 + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + if test $# = 0 && func_missing_arg $_G_opt; then + _G_parse_options_requote=: + break + fi + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) _G_parse_options_requote=: ; break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift + _G_match_parse_options=false + break + ;; + esac + + if $_G_match_parse_options; then + _G_parse_options_requote=: + fi + done + + if $_G_parse_options_requote; then + # save modified positional parameters for caller + func_quote eval ${1+"$@"} + func_parse_options_result=$func_quote_result + fi +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + func_propagate_result func_run_hooks func_validate_options + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 +} + + +# func_missing_arg ARGNAME +# ------------------------ +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $debug_cmd + + func_error "Missing argument for '$1'." + exit_cmd=exit +} + + +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables +# after splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + if test "x$func_split_equals_lhs" = "x$1"; then + func_split_equals_rhs= + fi + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs=" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () +{ + $debug_cmd + + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} + + +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} + + +# func_version +# ------------ +# Echo version message to standard output and exit. +# The version message is extracted from the calling file's header +# comments, with leading '# ' stripped: +# 1. First display the progname and version +# 2. Followed by the header comment line matching /^# Written by / +# 3. Then a blank line followed by the first following line matching +# /^# Copyright / +# 4. Immediately followed by any lines between the previous matches, +# except lines preceding the intervening completely blank line. +# For example, see the header comments of this file. +func_version () +{ + $debug_cmd + + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /^# Written by /!b + s|^# ||; p; n + + :fwd2blnk + /./ { + n + b fwd2blnk + } + p; n + + :holdwrnt + s|^# || + s|^# *$|| + /^Copyright /!{ + /./H + n + b holdwrnt + } + + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + G + s|\(\n\)\n*|\1|g + p; q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.7' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + $debug_cmd + + $warning_func ${1+"$@"} +} + + +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname (GNU libtool) 2.4.7 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to <bug-libtool@gnu.org>. +GNU libtool home page: <http://www.gnu.org/software/libtool/>. +General help using GNU software: <http://www.gnu.org/gethelp/>." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi + + +# func_fatal_configuration ARG... +# ------------------------------- +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." +} + + +# func_config +# ----------- +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + + +# func_features +# ------------- +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test yes = "$build_libtool_libs"; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test yes = "$build_old_libs"; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + + +# func_enable_tag TAGNAME +# ----------------------- +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname=$1 + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + + +# func_check_version_match +# ------------------------ +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + + nonopt= + preserve_args= + + _G_rc_lt_options_prep=: + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + *) + _G_rc_lt_options_prep=false + ;; + esac + + if $_G_rc_lt_options_prep; then + # Pass back the list of options. + func_quote eval ${1+"$@"} + libtool_options_prep_result=$func_quote_result + fi +} +func_add_hook func_options_prep libtool_options_prep + + +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + _G_rc_lt_parse_options=false + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_match_lt_parse_options=: + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"} ; shift + _G_match_lt_parse_options=false + break + ;; + esac + $_G_match_lt_parse_options && _G_rc_lt_parse_options=: + done + + if $_G_rc_lt_parse_options; then + # save modified positional parameters for caller + func_quote eval ${1+"$@"} + libtool_parse_options_result=$func_quote_result + fi +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote eval ${1+"$@"} + libtool_validate_options_result=$func_quote_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + + + +## ----------- ## +## Main. ## +## ----------- ## + +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if 'file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case $lalib_p_line in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test yes = "$lalib_p" +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $debug_cmd + + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# 'FILE.' does not work on cygwin managed mounts. +func_source () +{ + $debug_cmd + + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case $lt_sysroot:$1 in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result='='$func_stripname_result + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $debug_cmd + + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with '--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' + else + write_lobj=none + fi + + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <<EOF +# $write_libobj - a libtool object file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object=$write_lobj + +# Name of the non-PIC object +non_pic_object=$write_oldobj + +EOF + $MV "${write_libobj}T" "$write_libobj" + } +} + + +################################################## +# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # +################################################## + +# func_convert_core_file_wine_to_w32 ARG +# Helper function used by file name conversion functions when $build is *nix, +# and $host is mingw, cygwin, or some other w32 environment. Relies on a +# correctly configured wine environment available, with the winepath program +# in $build's $PATH. +# +# ARG is the $build file name to be converted to w32 format. +# Result is available in $func_convert_core_file_wine_to_w32_result, and will +# be empty on error (or when ARG is empty) +func_convert_core_file_wine_to_w32 () +{ + $debug_cmd + + func_convert_core_file_wine_to_w32_result=$1 + if test -n "$1"; then + # Unfortunately, winepath does not exit with a non-zero error code, so we + # are forced to check the contents of stdout. On the other hand, if the + # command is not found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both error code of + # zero AND non-empty stdout, which explains the odd construction: + func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $debug_cmd + + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result= + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result"; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $debug_cmd + + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $debug_cmd + + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $debug_cmd + + if test -z "$2" && test -n "$1"; then + func_error "Could not determine host file name corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result=$1 + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $debug_cmd + + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " '$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result=$3 + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $debug_cmd + + case $4 in + $1 ) func_to_host_path_result=$3$func_to_host_path_result + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via '$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $debug_cmd + + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $debug_cmd + + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result=$1 +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result=$func_convert_core_msys_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via '$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $debug_cmd + + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd=func_convert_path_$func_stripname_result + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $debug_cmd + + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result=$1 +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_msys_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + +# func_mode_compile arg... +func_mode_compile () +{ + $debug_cmd + + # Get the compilation command and the source file. + base_compile= + srcfile=$nonopt # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg=$arg + arg_mode=normal + ;; + + target ) + libobj=$arg + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify '-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs=$IFS; IFS=, + for arg in $args; do + IFS=$save_ifs + func_append_quoted lastarg "$arg" + done + IFS=$save_ifs + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg=$srcfile + srcfile=$arg + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with '-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj=$func_basename_result + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from '$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_arg pretty "$libobj" + test "X$libobj" != "X$func_quote_arg_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name '$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test yes = "$build_old_libs"; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test yes = "$need_locks"; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test warn = "$need_locks"; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_arg pretty "$srcfile" + qsrcfile=$func_quote_arg_result + + # Only build a PIC object if we are building libtool libraries. + if test yes = "$build_libtool_libs"; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test no != "$pic_mode"; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test yes = "$suppress_opt"; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test yes = "$compiler_c_o"; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test no != "$need_locks"; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking + -Wc,FLAG + -Xcompiler FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a 'standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to '-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the '--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the 'install' or 'cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wa,FLAG + -Xassembler FLAG pass linker-specific FLAG directly to the assembler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with '-') are ignored. + +Every other argument is treated as a filename. Files ending in '.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. + +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode '$opt_mode'" + ;; + esac + + echo + $ECHO "Try '$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test : = "$opt_help"; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + $SED '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $debug_cmd + + # The first argument is the command name. + cmd=$nonopt + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "'$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "'$file' was not linked with '-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir=$func_dirname_result + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir=$func_dirname_result + ;; + + *) + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir=$absdir + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic=$magic + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file=$progdir/$program + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file=$progdir/$program + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd=\$cmd$args + fi +} + +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $debug_cmd + + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "'$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument '$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and '=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_quiet && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the '$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the '$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the '$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $debug_cmd + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac + then + # Aesthetically quote it. + func_quote_arg pretty "$nonopt" + install_prog="$func_quote_arg_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_arg pretty "$arg" + func_append install_prog "$func_quote_arg_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=false + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=: ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_arg pretty "$arg" + func_append install_prog " $func_quote_arg_result" + if test -n "$arg2"; then + func_quote_arg pretty "$arg2" + fi + func_append install_shared_prog " $func_quote_arg_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the '$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_arg pretty "$install_override_mode" + func_append install_shared_prog " -m $func_quote_arg_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir=$func_dirname_result + destname=$func_basename_result + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "'$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "'$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir=$func_dirname_result + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking '$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname=$1 + shift + + srcname=$realname + test -n "$relink_command" && srcname=${realname}T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme=$stripme + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try 'ln -sf' first, because the 'ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib=$destdir/$realname + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name=$func_basename_result + instname=$dir/${name}i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest=$destfile + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to '$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test yes = "$build_old_libs"; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext= + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=.exe + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script '$wrapper'" + + finalize=: + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test no = "$fast_install" && test -n "$relink_command"; then + $opt_dry_run || { + if $finalize; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file=$func_basename_result + outputname=$tmpdir/$file + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_quiet || { + func_quote_arg expand,pretty "$relink_command" + eval "func_echo $func_quote_arg_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink '$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file=$outputname + else + func_warning "cannot relink '$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name=$func_basename_result + + # Set up the ranlib parameters. + oldlib=$destdir/$name + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run '$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test install = "$opt_mode" && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms=${my_outputname}S.c + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist=$output_objdir/$my_outputname.nm + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* External symbol declarations for the compiler. */\ +" + + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols=$output_objdir/$outputname.exp + $opt_dry_run || { + $RM $export_symbols + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from '$dlprefile'" + func_basename "$dlprefile" + name=$func_basename_result + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename= + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname"; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename=$func_basename_result + else + # no lafile. user explicitly requested -dlpreopen <import library>. + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename"; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 </dev/null >/dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + $my_pic_p && pic_flag_for_symtable=" $pic_flag" + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' + + # Transform the symbol file into the correct name. + symfileobj=$output_objdir/${my_outputname}S.$objext + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for '$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $debug_cmd + + win32_libid_type=unknown + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s|.*|import| + p + q + } + }'` + ;; + esac + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $debug_cmd + + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $debug_cmd + + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1"; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result= + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test yes = "$lock_old_archive_extraction"; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $debug_cmd + + my_gentop=$1; shift + my_oldlibs=${1+"$@"} + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib=$func_basename_result + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" + cd "$darwin_curdir" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result=$my_oldobjs +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory where it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + func_quote_arg pretty "$ECHO" + qECHO=$func_quote_arg_result + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=$qECHO + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test yes = "$fast_install"; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + \$ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat <<EOF + +/* $cwrappersource - temporary wrapper executable for $objdir/$outputname + Generated by $PROGRAM (GNU $PACKAGE) $VERSION + + The $output program cannot be directly executed until all the libtool + libraries that it depends on are installed. + + This wrapper executable should never be moved out of the build directory. + If it is, it will not operate correctly. +*/ +EOF + cat <<"EOF" +#ifdef _MSC_VER +# define _CRT_SECURE_NO_DEPRECATE 1 +#endif +#include <stdio.h> +#include <stdlib.h> +#ifdef _MSC_VER +# include <direct.h> +# include <process.h> +# include <io.h> +#else +# include <unistd.h> +# include <stdint.h> +# ifdef __CYGWIN__ +# include <io.h> +# endif +#endif +#include <malloc.h> +#include <stdarg.h> +#include <assert.h> +#include <string.h> +#include <ctype.h> +#include <errno.h> +#include <fcntl.h> +#include <sys/stat.h> + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* declarations of non-ANSI functions */ +#if defined __MINGW32__ +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined __CYGWIN__ +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined other_platform || defined ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined _MSC_VER +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +#elif defined __MINGW32__ +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined __CYGWIN__ +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined other platforms ... */ +#endif + +#if defined PATH_MAX +# define LT_PATHMAX PATH_MAX +#elif defined MAXPATHLEN +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free (stale); stale = 0; } \ +} while (0) + +#if defined LT_DEBUGWRAPPER +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <<EOF +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) +# define externally_visible volatile +#else +# define externally_visible __attribute__((externally_visible)) volatile +#endif +externally_visible const char * MAGIC_EXE = "$magic_exe"; +const char * LIB_PATH_VARNAME = "$shlibpath_var"; +EOF + + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + func_to_host_path "$temp_rpath" + cat <<EOF +const char * LIB_PATH_VALUE = "$func_to_host_path_result"; +EOF + else + cat <<"EOF" +const char * LIB_PATH_VALUE = ""; +EOF + fi + + if test -n "$dllsearchpath"; then + func_to_host_path "$dllsearchpath:" + cat <<EOF +const char * EXE_PATH_VARNAME = "PATH"; +const char * EXE_PATH_VALUE = "$func_to_host_path_result"; +EOF + else + cat <<"EOF" +const char * EXE_PATH_VARNAME = ""; +const char * EXE_PATH_VALUE = ""; +EOF + fi + + if test yes = "$fast_install"; then + cat <<EOF +const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ +EOF + else + cat <<EOF +const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ +EOF + fi + + + cat <<"EOF" + +#define LTWRAPPER_OPTION_PREFIX "--lt-" + +static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; +static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; +static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; + +int +main (int argc, char *argv[]) +{ + char **newargz; + int newargc; + char *tmp_pathspec; + char *actual_cwrapper_path; + char *actual_cwrapper_name; + char *target_name; + char *lt_argv_zero; + int rval = 127; + + int i; + + program_name = (char *) xstrdup (base_name (argv[0])); + newargz = XMALLOC (char *, (size_t) argc + 1); + + /* very simple arg parsing; don't want to rely on getopt + * also, copy all non cwrapper options to newargz, except + * argz[0], which is handled differently + */ + newargc=0; + for (i = 1; i < argc; i++) + { + if (STREQ (argv[i], dumpscript_opt)) + { +EOF + case $host in + *mingw* | *cygwin* ) + # make stdout use "unix" line endings + echo " setmode(1,_O_BINARY);" + ;; + esac + + cat <<"EOF" + lt_dump_script (stdout); + return 0; + } + if (STREQ (argv[i], debug_opt)) + { + lt_debug = 1; + continue; + } + if (STREQ (argv[i], ltwrapper_option_prefix)) + { + /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX + namespace, but it is not one of the ones we know about and + have already dealt with, above (inluding dump-script), then + report an error. Otherwise, targets might begin to believe + they are allowed to use options in the LTWRAPPER_OPTION_PREFIX + namespace. The first time any user complains about this, we'll + need to make LTWRAPPER_OPTION_PREFIX a configure-time option + or a configure.ac-settable value. + */ + lt_fatal (__FILE__, __LINE__, + "unrecognized %s option: '%s'", + ltwrapper_option_prefix, argv[i]); + } + /* otherwise ... */ + newargz[++newargc] = xstrdup (argv[i]); + } + newargz[++newargc] = NULL; + +EOF + cat <<EOF + /* The GNU banner must be the first non-error debug message */ + lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); +EOF + cat <<"EOF" + lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); + lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); + + tmp_pathspec = find_executable (argv[0]); + if (tmp_pathspec == NULL) + lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); + lt_debugprintf (__FILE__, __LINE__, + "(main) found exe (before symlink chase) at: %s\n", + tmp_pathspec); + + actual_cwrapper_path = chase_symlinks (tmp_pathspec); + lt_debugprintf (__FILE__, __LINE__, + "(main) found exe (after symlink chase) at: %s\n", + actual_cwrapper_path); + XFREE (tmp_pathspec); + + actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); + strendzap (actual_cwrapper_path, actual_cwrapper_name); + + /* wrapper name transforms */ + strendzap (actual_cwrapper_name, ".exe"); + tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); + XFREE (actual_cwrapper_name); + actual_cwrapper_name = tmp_pathspec; + tmp_pathspec = 0; + + /* target_name transforms -- use actual target program name; might have lt- prefix */ + target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); + strendzap (target_name, ".exe"); + tmp_pathspec = lt_extend_str (target_name, ".exe", 1); + XFREE (target_name); + target_name = tmp_pathspec; + tmp_pathspec = 0; + + lt_debugprintf (__FILE__, __LINE__, + "(main) libtool target name: %s\n", + target_name); +EOF + + cat <<EOF + newargz[0] = + XMALLOC (char, (strlen (actual_cwrapper_path) + + strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); + strcpy (newargz[0], actual_cwrapper_path); + strcat (newargz[0], "$objdir"); + strcat (newargz[0], "/"); +EOF + + cat <<"EOF" + /* stop here, and copy so we don't have to do this twice */ + tmp_pathspec = xstrdup (newargz[0]); + + /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ + strcat (newargz[0], actual_cwrapper_name); + + /* DO want the lt- prefix here if it exists, so use target_name */ + lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); + XFREE (tmp_pathspec); + tmp_pathspec = NULL; +EOF + + case $host_os in + mingw*) + cat <<"EOF" + { + char* p; + while ((p = strchr (newargz[0], '\\')) != NULL) + { + *p = '/'; + } + while ((p = strchr (lt_argv_zero, '\\')) != NULL) + { + *p = '/'; + } + } +EOF + ;; + esac + + cat <<"EOF" + XFREE (target_name); + XFREE (actual_cwrapper_path); + XFREE (actual_cwrapper_name); + + lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ + lt_setenv ("DUALCASE", "1"); /* for MSK sh */ + /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must + be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) + because on Windows, both *_VARNAMEs are PATH but uninstalled + libraries must come first. */ + lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); + lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); + + lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", + nonnull (lt_argv_zero)); + for (i = 0; i < newargc; i++) + { + lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", + i, nonnull (newargz[i])); + } + +EOF + + case $host_os in + mingw*) + cat <<"EOF" + /* execv doesn't actually work on mingw as expected on unix */ + newargz = prepare_spawn (newargz); + rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); + if (rval == -1) + { + /* failed to start process */ + lt_debugprintf (__FILE__, __LINE__, + "(main) failed to launch target \"%s\": %s\n", + lt_argv_zero, nonnull (strerror (errno))); + return 127; + } + return rval; +EOF + ;; + *) + cat <<"EOF" + execv (lt_argv_zero, newargz); + return rval; /* =127, but avoids unused variable warning */ +EOF + ;; + esac + + cat <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void *p = (void *) malloc (num); + if (!p) + lt_fatal (__FILE__, __LINE__, "memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), + string) : NULL; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined HAVE_DOS_BASED_FILE_SYSTEM + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char) name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable (const char *path) +{ + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + size_t tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined HAVE_DOS_BASED_FILE_SYSTEM + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined HAVE_DOS_BASED_FILE_SYSTEM + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = (size_t) (q - p); + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (STREQ (str, pat)) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + size_t len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + size_t orig_value_len = strlen (orig_value); + size_t add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[--len] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $debug_cmd + + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $debug_cmd + + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # what system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll that has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=false + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module=$wl-single_module + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg=$1 + shift + func_quote_arg pretty,unquoted "$arg" + qarg=$func_quote_arg_unquoted_result + func_append libtool_args " $func_quote_arg_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir=$arg + prev= + continue + ;; + dlfiles|dlprefiles) + $preload || { + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=: + } + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test no = "$dlself"; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test dlprefiles = "$prev"; then + dlself=yes + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test dlfiles = "$prev"; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols=$arg + test -f "$arg" \ + || func_fatal_error "symbol file '$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex=$arg + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + if test none != "$pic_object"; then + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + fi + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file '$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; + precious_regex) + precious_files_regex=$arg + prev= + continue + ;; + release) + release=-$arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test rpath = "$prev"; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds=$arg + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xassembler) + func_append compiler_flags " -Xassembler $qarg" + prev= + func_append compile_command " -Xassembler $qarg" + func_append finalize_command " -Xassembler $qarg" + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg=$arg + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "'-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test X-export-symbols = "X$arg"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between '-L' and '$1'" + else + func_fatal_error "need path for '-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test X-lc = "X$arg" || test X-lm = "X$arg"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test X-lc = "X$arg" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) + # Do not include libc due to us having libc/libc_r. + test X-lc = "X$arg" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test X-lc = "X$arg" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test X-lc = "X$arg" && continue + ;; + esac + elif test X-lc_r = "X$arg"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -mllvm) + prev=mllvm + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. + -pthread) + case $host in + *solaris2*) ;; + *) + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + ;; + esac + continue + ;; + -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module=$wl-multi_module + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_arg pretty "$flag" + func_append arg " $func_quote_arg_result" + func_append compiler_flags " $func_quote_arg_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_arg pretty "$flag" + func_append arg " $wl$func_quote_arg_result" + func_append compiler_flags " $wl$func_quote_arg_result" + func_append linker_flags " $func_quote_arg_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xassembler) + prev=xassembler + continue + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files + # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer + # -fuse-ld=* Linker select flags for GCC + # -Wa,* Pass flags directly to the assembler + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*) + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result + fi + ;; + + # Some other compiler flag. + -* | +*) + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + test none = "$pic_object" || { + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + } + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test dlfiles = "$prev"; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test dlprefiles = "$prev"; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the '$prevarg' option requires an argument" + + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname=$func_basename_result + libobjs_save=$libobjs + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + + func_dirname "$output" "/" "" + output_objdir=$func_dirname_result$objdir + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test lib = "$linkmode"; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=false + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test lib,link = "$linkmode,$pass"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs=$tmp_deplibs + fi + + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs + deplibs= + fi + if test prog = "$linkmode"; then + case $pass in + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test lib,dlpreopen = "$linkmode,$pass"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs=$dlprefiles + fi + if test dlopen = "$pass"; then + # Collect dlpreopened libraries + save_deplibs=$deplibs + deplibs= + fi + + for deplib in $libs; do + lib= + found=false + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test lib = "$linkmode"; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib=$searchdir/lib$name$search_ext + if test -f "$lib"; then + if test .la = "$search_ext"; then + found=: + else + found=false + fi + break 2 + fi + done + done + if $found; then + # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll=$l + done + if test "X$ll" = "X$old_library"; then # only static version available + found=false + func_dirname "$lib" "" "." + ladir=$func_dirname_result + lib=$ladir/$old_library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + *.ltframework) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test conv = "$pass" && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + if test scan = "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "'-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test link = "$pass"; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=false + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=: + fi + ;; + pass_all) + valid_a_lib=: + ;; + esac + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + fi + ;; + esac + continue + ;; + prog) + if test link != "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=: + continue + ;; + esac # case $deplib + + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "'$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir=$func_dirname_result + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test conv = "$pass"; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib=$l + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + + # This library was specified with -dlopen. + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" + if test -z "$dlname" || + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of '$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir=$ladir + fi + ;; + esac + func_basename "$lib" + laname=$func_basename_result + + # Find the relevant object directory and library name. + if test yes = "$installed"; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir + else + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir + fi + test yes = "$hardcode_automatic" && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir=$ladir + absdir=$abs_ladir + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" + fi + case $host in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test lib = "$linkmode"; then + deplibs="$dir/$old_library $deplibs" + elif test prog,link = "$linkmode,$pass"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test prog = "$linkmode" && test link != "$pass"; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if $linkalldeplibs; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test prog,link = "$linkmode,$pass"; then + if test -n "$library_names" && + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then + # Make sure the rpath contains only unique directories. + case $temp_rpath: in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test built = "$use_static_libs" && test yes = "$installed"; then + use_static_libs=no + fi + if test -n "$library_names" && + { test no = "$use_static_libs" || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test no = "$installed"; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule= + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule=$dlpremoduletest + break + fi + done + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then + echo + if test prog = "$linkmode"; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname=$1 + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname=$dlname + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc* | *os2*) + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + esac + eval soname=\"$soname_spec\" + else + soname=$realname + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot=$soname + func_basename "$soroot" + soname=$func_basename_result + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from '$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for '$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test prog = "$linkmode" || test relink != "$opt_mode"; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test no = "$hardcode_direct"; then + add=$dir/$linklib + case $host in + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir=-L$dir ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we cannot + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library"; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add=$dir/$old_library + fi + elif test -n "$old_library"; then + add=$dir/$old_library + fi + fi + esac + elif test no = "$hardcode_minus_L"; then + case $host in + *-*-sunos*) add_shlibpath=$dir ;; + esac + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + relink) + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test yes != "$lib_linked"; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test prog = "$linkmode"; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test prog = "$linkmode" || test relink = "$opt_mode"; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir=-L$libdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + fi + + if test prog = "$linkmode"; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test prog = "$linkmode"; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test yes = "$build_libtool_libs"; then + # Not a shared library + if test pass_all != "$deplibs_check_method"; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system cannot link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test yes = "$module"; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test lib = "$linkmode"; then + if test -n "$dependency_libs" && + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs=$temp_deplibs + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test no != "$link_all_deplibs"; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path=$deplib ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" + path= + fi + fi + ;; + *) + path=-L$absdir/$objdir + ;; + esac + else + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "'$deplib' seems to be moved" + + path=-L$absdir + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test link = "$pass"; then + if test prog = "$linkmode"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test dlopen != "$pass"; then + test conv = "$pass" || { + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + } + + if test prog,link = "$linkmode,$pass"; then + vars="compile_deplibs finalize_deplibs" + else + vars=deplibs + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | $SED 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i= + ;; + esac + if test -n "$i"; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test prog = "$linkmode"; then + dlfiles=$newdlfiles + fi + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "'-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "'-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs=$output + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form 'libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" + + if test no != "$need_lib_prefix"; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" + + install_libdir=$1 + + oldlibs= + if test -z "$rpath"; then + if test yes = "$build_libtool_libs"; then + # Building a libtool convenience library. + # Some compilers have problems with a '.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "'-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs=$IFS; IFS=: + set dummy $vinfo 0 0 0 + shift + IFS=$save_ifs + + test -n "$7" && \ + func_fatal_help "too many parameters to '-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major=$1 + number_minor=$2 + number_revision=$3 + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # that has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_revision + ;; + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_minor + lt_irix_increment=no + ;; + esac + ;; + no) + current=$1 + revision=$2 + age=$3 + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac + ;; + + freebsd-aout) + major=.$current + versuffix=.$current.$revision + ;; + + freebsd-elf | midnightbsd-elf) + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + irix | nonstopux) + if test no = "$lt_irix_increment"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring=$verstring_prefix$major.$revision + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test 0 -ne "$loop"; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring_prefix$major.$iface:$verstring + done + + # Before this point, $major must not contain '.'. + major=.$major + versuffix=$major.$revision + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision + + # Add in all the interfaces that we are compatible with. + loop=$age + while test 0 -ne "$loop"; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring:$iface.0 + done + + # Make executables depend on our current version. + func_append verstring ":$current.0" + ;; + + qnx) + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current + ;; + + sunos) + major=.$current + versuffix=.$current.$revision + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 file systems. + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + + *) + func_fatal_configuration "unknown library version type '$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring=0.0 + ;; + esac + if test no = "$need_version"; then + versuffix= + else + versuffix=.0.0 + fi + fi + + # Remove version info from name if versioning should be avoided + if test yes,no = "$avoid_version,$need_version"; then + major= + versuffix= + verstring= + fi + + # Check to see if the archive will have undefined symbols. + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi + fi + else + # Don't allow undefined symbols. + allow_undefined_flag=$no_undefined_flag + fi + + fi + + func_generate_dlsyms "$libname" "$libname" : + func_append libobjs " $symfileobj" + test " " = "$libobjs" && libobjs= + + if test relink != "$opt_mode"; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles=$dlfiles + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles=$dlprefiles + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test yes = "$build_libtool_libs"; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test yes = "$build_libtool_need_lc"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release= + versuffix= + major= + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c <<EOF + int main() { return 0; } +EOF + $opt_dry_run || $RM conftest + if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then + ldd_output=`ldd conftest` + for i in $deplibs; do + case $i in + -l*) + func_stripname -l '' "$i" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $i "*) + func_append newdeplibs " $i" + i= + ;; + esac + fi + if test -n "$i"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` + set dummy $deplib_matches; shift + deplib_match=$1 + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then + func_append newdeplibs " $i" + else + droppeddeps=yes + echo + $ECHO "*** Warning: dynamic linker does not accept needed library $i." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which I believe you do not have" + echo "*** because a test_compile did reveal that the linker did not use it for" + echo "*** its dynamic dependency list that programs get resolved with at runtime." + fi + fi + ;; + *) + func_append newdeplibs " $i" + ;; + esac + done + else + # Error occurred in the first compile. Let's try to salvage + # the situation: Compile a separate program for each library. + for i in $deplibs; do + case $i in + -l*) + func_stripname -l '' "$i" + name=$func_stripname_result + $opt_dry_run || $RM conftest + if $LTCC $LTCFLAGS -o conftest conftest.c $i; then + ldd_output=`ldd conftest` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $i "*) + func_append newdeplibs " $i" + i= + ;; + esac + fi + if test -n "$i"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` + set dummy $deplib_matches; shift + deplib_match=$1 + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then + func_append newdeplibs " $i" + else + droppeddeps=yes + echo + $ECHO "*** Warning: dynamic linker does not accept needed library $i." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because a test_compile did reveal that the linker did not use this one" + echo "*** as a dynamic dependency that programs can get resolved with at runtime." + fi + fi + else + droppeddeps=yes + echo + $ECHO "*** Warning! Library $i is needed by this library but I was not able to" + echo "*** make it link in! You will probably need to install it or some" + echo "*** library that it depends on before this library will be fully" + echo "*** functional. Installing it before continuing would be even better." + fi + ;; + *) + func_append newdeplibs " $i" + ;; + esac + done + fi + ;; + file_magic*) + set dummy $deplibs_check_method; shift + file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + if test -n "$file_magic_glob"; then + libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` + else + libnameglob=$libname + fi + test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + if test yes = "$want_nocaseglob"; then + shopt -s nocaseglob + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib=$potent_lib + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib=$potent_lib # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs= + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test none = "$deplibs_check_method"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test yes = "$droppeddeps"; then + if test yes = "$module"; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test no = "$allow_undefined"; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs=$new_libs + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test yes = "$hardcode_into_libs"; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname=$1 + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname=$realname + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib=$output_objdir/$realname + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + func_dll_def_p "$export_symbols" || { + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols=$export_symbols + export_symbols= + always_export_symbols=yes + } + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs=$IFS; IFS='~' + for cmd1 in $cmds; do + IFS=$save_ifs + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test yes = "$try_normal_branch" \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=$output_objdir/$output_la.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs=$tmp_deplibs + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test yes = "$compiler_needs_object" && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test : != "$skipped_export" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test yes = "$compiler_needs_object"; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-$k.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test -z "$objlist" || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test 1 -eq "$k"; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-$k.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-$k.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + } + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs=$IFS; IFS='~' + for cmd in $concat_cmds; do + IFS=$save_ifs + $opt_quiet || { + func_quote_arg expand,pretty "$cmd" + eval "func_echo $func_quote_arg_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + ${skipped_export-false} && { + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + } + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs=$IFS; IFS='~' + for cmd in $cmds; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + $opt_quiet || { + func_quote_arg expand,pretty "$cmd" + eval "func_echo $func_quote_arg_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test yes = "$module" || test yes = "$export_dynamic"; then + # On all known operating systems, these are identical. + dlname=$soname + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "'-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object '$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj=$output + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags + else + gentop=$output_objdir/${obj}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects + + # Create the old-style object. + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs + + output=$obj + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + test yes = "$build_libtool_libs" || { + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + } + + if test -n "$pic_flag" || test default != "$pic_mode"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output=$libobj + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "'-release' is ignored for programs" + + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test CXX = "$tagname"; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs=$new_libs + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath=$rpath + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath=$rpath + + if test -n "$libobjs" && test yes = "$build_old_libs"; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" false + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=: + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + test yes = "$build_libtool_libs" || wrappers_required=false + ;; + *) + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false + fi + ;; + esac + $wrappers_required || { + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command=$compile_command$compile_rpath + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' + fi + + exit $exit_status + } + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test yes = "$no_install"; then + # We don't need to create a wrapper script. + link_command=$compile_var$compile_command$compile_rpath + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_arg pretty "$var_value" + relink_command="$var=$func_quote_arg_result; export $var; $relink_command" + fi + done + func_quote eval cd "`pwd`" + func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" + relink_command=$func_quote_arg_unquoted_result + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host"; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience + build_libtool_libs=no + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) + oldobjs="$old_deplibs $non_pic_objects" + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac + + if test -n "$addlibs"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase=$func_basename_result + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj"; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test -z "$oldobjs"; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test yes = "$build_old_libs" && old_library=$libname.$libext + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_arg pretty,unquoted "$var_value" + relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + func_quote eval cd "`pwd`" + relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + func_quote_arg pretty,unquoted "$relink_command" + relink_command=$func_quote_arg_unquoted_result + if test yes = "$hardcode_automatic"; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test yes = "$installed"; then + if test -z "$install_libdir"; then + break + fi + output=$output_objdir/${outputname}i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name=$func_basename_result + func_resolve_sysroot "$deplib" + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs=$newdependency_libs + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles=$newdlprefiles + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles=$newdlprefiles + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test -n "$bindir"; then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result/$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test no,yes = "$installed,$need_relink"; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $debug_cmd + + RM=$nonopt + files= + rmforce=false + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=: ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir + else + odir=$dir/$objdir + fi + func_basename "$file" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir + + # Remember odir for removal later, being careful to avoid duplicates + if test clean = "$opt_mode"; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif $rmforce; then + continue + fi + + rmfiles=$file + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case $opt_mode in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && test none != "$pic_object"; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && test none != "$non_pic_object"; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test clean = "$opt_mode"; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the $objdir's in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi + +test -z "$opt_mode" && { + help=$generic_help + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode '$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# where we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/src/thirdparty/libedit-3.1/m4/libtool.m4 b/src/thirdparty/libedit-3.1/m4/libtool.m4 new file mode 100644 index 000000000..79a2451ef --- /dev/null +++ b/src/thirdparty/libedit-3.1/m4/libtool.m4 @@ -0,0 +1,8400 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# 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. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 2014 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. + +# GNU Libtool 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 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 <http://www.gnu.org/licenses/>. +]) + +# serial 59 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + +# _LT_CC_BASENAME(CC) +# ------------------- +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. +m4_defun([_LT_CC_BASENAME], +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_DECL_FILECMD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC and +# ICC, which need '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from 'configure', and 'config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain=$ac_aux_dir/ltmain.sh +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the 'libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags='_LT_TAGS'dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# '#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test 0 = "$lt_write_fail" && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to <bug-libtool@gnu.org>." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $[#] +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try '$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try '$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +_LT_COPYING +_LT_LIBTOOL_TAGS + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + $SED '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS=$save_LDFLAGS + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) + case $MACOSX_DEPLOYMENT_TARGET,$host in + 10.[[012]],*|,*powerpc*-darwin[[5-8]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + m4_if([$1], [CXX], +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case $ECHO in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[m4_require([_LT_DECL_SED])dnl +AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([$with_sysroot]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and where our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `$FILECMD conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `$FILECMD conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `$FILECMD conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `$FILECMD conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `$FILECMD conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `$FILECMD conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `$FILECMD conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `$FILECMD conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `$FILECMD conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +_LT_DECL([], [AR], [1], [The archiver]) + +# Use ARFLAGS variable as AR's operation code to sync the variable naming with +# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have +# higher priority because thats what people were doing historically (setting +# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS +# variable obsoleted/removed. + +test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} +lt_ar_flags=$AR_FLAGS +_LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)]) + +# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override +# by AR_FLAGS because that was never working and AR_FLAGS is about to die. +_LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}], + [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test yes = "[$]$2"; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +]) + +if test yes = "[$]$2"; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n "$lt_cv_sys_max_cmd_len"; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes = "$cross_compiling"; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen=shl_load], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen=dlopen], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then + + # We can hardcode non-existent directories. + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -z "$STRIP"; then + AC_MSG_RESULT([no]) +else + if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + old_striplib="$STRIP --strip-debug" + striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) + else + case $host_os in + darwin*) + # FIXME - insert some real tests, host_os isn't really good enough + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + ;; + freebsd*) + if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then + old_striplib="$STRIP --strip-debug" + striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac + fi +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib<name>.so + # instead of lib<name>.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl* | *,icl*) + # Native MSVC or ICC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC and ICC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly* | midnightbsd*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program that can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac]) +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program that can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test no = "$withval" || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in + *GNU* | *'with BFD'*) + test no != "$with_gnu_ld" && break + ;; + *) + test yes != "$with_gnu_ld" && break + ;; + esac + fi + done + IFS=$lt_save_ifs +else + lt_cv_path_LD=$LD # Let the user override the test with a path. +fi]) +LD=$lt_cv_path_LD +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +_LT_PATH_LD_GNU +AC_SUBST([LD]) + +_LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) +])# LT_PATH_LD + +# Old names: +AU_ALIAS([AM_PROG_LD], [LT_PATH_LD]) +AU_ALIAS([AC_PROG_LD], [LT_PATH_LD]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_LD], []) +dnl AC_DEFUN([AC_PROG_LD], []) + + +# _LT_PATH_LD_GNU +#- -------------- +m4_defun([_LT_PATH_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 </dev/null` in +*GNU* | *'with BFD'*) + lt_cv_prog_gnu_ld=yes + ;; +*) + lt_cv_prog_gnu_ld=no + ;; +esac]) +with_gnu_ld=$lt_cv_prog_gnu_ld +])# _LT_PATH_LD_GNU + + +# _LT_CMD_RELOAD +# -------------- +# find reload flag for linker +# -- PORTME Some linkers may need a different reload flag. +m4_defun([_LT_CMD_RELOAD], +[AC_CACHE_CHECK([for $LD option to reload object files], + lt_cv_ld_reload_flag, + [lt_cv_ld_reload_flag='-r']) +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac +_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl +_LT_TAGDECL([], [reload_cmds], [2])dnl +])# _LT_CMD_RELOAD + + +# _LT_PATH_DD +# ----------- +# find a working dd +m4_defun([_LT_PATH_DD], +[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[[45]]*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='$FILECMD -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly* | midnightbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=$FILECMD + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=$FILECMD + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=$FILECMD + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi]) +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM=-lm) + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++ or ICC, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly* | midnightbsd*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | $SED 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test yes = "$GCC"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | $SED 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl* | icl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++ or Intel C++ Compiler. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach <jrb3@best.com> says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | $SED 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++ or Intel C++ Compiler. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl* | icl*) + # Native MSVC or ICC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC and ICC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly* | midnightbsd*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + ;; + + osf3*) + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting $shlibpath_var if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC=$CC +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report what library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC=$lt_save_CC +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach <jrb3@best.com> says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl* | ,icl* | no,icl*) + # Native MSVC or ICC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly* | midnightbsd*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | $SED 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)=$prev$p + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)=$p + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)=$p + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test no = "$F77"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_F77"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test no = "$FC"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_FC"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_FC" + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code=$lt_simple_compile_test_code + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_FILECMD +# ---------------- +# Check for a file(cmd) program that can be used to detect file type and magic +m4_defun([_LT_DECL_FILECMD], +[AC_CHECK_TOOL([FILECMD], [file], [:]) +_LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types]) +])# _LD_DECL_FILECMD + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f "$lt_ac_sed" && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test 10 -lt "$lt_ac_count" && break + lt_ac_count=`expr $lt_ac_count + 1` + if test "$lt_ac_count" -gt "$lt_ac_max"; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine what file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/src/thirdparty/libedit-3.1/m4/ltoptions.m4 b/src/thirdparty/libedit-3.1/m4/ltoptions.m4 new file mode 100644 index 000000000..b0b5e9c21 --- /dev/null +++ b/src/thirdparty/libedit-3.1/m4/ltoptions.m4 @@ -0,0 +1,437 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free +# Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# 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. + +# serial 8 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option '$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# LT_INIT options. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/src/thirdparty/libedit-3.1/m4/ltsugar.m4 b/src/thirdparty/libedit-3.1/m4/ltsugar.m4 new file mode 100644 index 000000000..902508bd9 --- /dev/null +++ b/src/thirdparty/libedit-3.1/m4/ltsugar.m4 @@ -0,0 +1,124 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# 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. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59, which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/src/thirdparty/libedit-3.1/m4/ltversion.m4 b/src/thirdparty/libedit-3.1/m4/ltversion.m4 new file mode 100644 index 000000000..b155d0ace --- /dev/null +++ b/src/thirdparty/libedit-3.1/m4/ltversion.m4 @@ -0,0 +1,24 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation, +# Inc. +# Written by Scott James Remnant, 2004 +# +# 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. + +# @configure_input@ + +# serial 4245 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.7]) +m4_define([LT_PACKAGE_REVISION], [2.4.7]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.7' +macro_revision='2.4.7' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/src/thirdparty/libedit-3.1/m4/lt~obsolete.m4 b/src/thirdparty/libedit-3.1/m4/lt~obsolete.m4 new file mode 100644 index 000000000..0f7a8759d --- /dev/null +++ b/src/thirdparty/libedit-3.1/m4/lt~obsolete.m4 @@ -0,0 +1,99 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free +# Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# 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. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/src/thirdparty/libedit-3.1/missing b/src/thirdparty/libedit-3.1/missing new file mode 100755 index 000000000..1fe1611f1 --- /dev/null +++ b/src/thirdparty/libedit-3.1/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 1996-2021 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. + +# 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 2, 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 <https://www.gnu.org/licenses/>. + +# 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. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to <bug-automake@gnu.org>." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=https://www.perl.org/ +flex_URL=https://github.com/westes/flex +gnu_software_URL=https://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# 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: diff --git a/src/thirdparty/libedit-3.1/src/ChangeLog b/src/thirdparty/libedit-3.1/src/ChangeLog new file mode 100644 index 000000000..35c9205a4 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/ChangeLog @@ -0,0 +1,6 @@ +2021-08-29 Christos Zoulas <christos@netbsd.org> + + Change default mappings: + map ^W to ed-delete-prev-word and not kill-region + map ^R to em-inc-search-next and not redisplay + diff --git a/src/thirdparty/libedit-3.1/src/Makefile.am b/src/thirdparty/libedit-3.1/src/Makefile.am new file mode 100644 index 000000000..9a0b23549 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/Makefile.am @@ -0,0 +1,60 @@ + +BUILT_SOURCES = vi.h emacs.h common.h fcns.h help.h func.h + +AHDR= vi.h emacs.h common.h +ASRC= $(srcdir)/vi.c $(srcdir)/emacs.c $(srcdir)/common.c + +vi.h: Makefile $(srcdir)/vi.c + AWK=$(AWK) sh $(srcdir)/makelist -h $(srcdir)/vi.c > $@ + +emacs.h: Makefile $(srcdir)/emacs.c + AWK=$(AWK) sh $(srcdir)/makelist -h $(srcdir)/emacs.c > $@ + +common.h: Makefile $(srcdir)/common.c + AWK=$(AWK) sh $(srcdir)/makelist -h $(srcdir)/common.c > $@ + +fcns.h: Makefile $(AHDR) + AWK=$(AWK) sh $(srcdir)/makelist -fh $(AHDR) > $@ + +help.h: Makefile $(ASRC) + AWK=$(AWK) sh $(srcdir)/makelist -bh $(ASRC) > $@ + +func.h: Makefile $(AHDR) + AWK=$(AWK) sh $(srcdir)/makelist -fc $(AHDR) > $@ + +CLEANFILES = $(BUILT_SOURCES) + +lib_LTLIBRARIES = libedit.la +libedit_la_SOURCES = chared.c common.c el.c eln.c emacs.c hist.c keymacro.c map.c chartype.c parse.c \ + prompt.c read.c refresh.c search.c sig.c terminal.c tty.c vi.c \ + reallocarr.c wcsdup.c \ + tokenizer.c tokenizern.c \ + history.c historyn.c \ + filecomplete.c readline.c chared.h literal.c el.h hist.h \ + histedit.h keymacro.h map.h chartype.h parse.h prompt.h read.h refresh.h \ + search.h sig.h sys.h terminal.h tty.h vis.h filecomplete.h \ + editline/readline.h literal.h + +if !HAVE_STRLCPY +libedit_la_SOURCES += strlcpy.c +endif +if !HAVE_STRLCAT +libedit_la_SOURCES += strlcat.c +endif +if !HAVE_GETLINE +libedit_la_SOURCES += getline.c +endif +if !HAVE_VIS +libedit_la_SOURCES += vis.c +endif +if !HAVE_UNVIS +libedit_la_SOURCES += unvis.c +endif + +EXTRA_DIST = makelist shlib_version +nobase_include_HEADERS = histedit.h editline/readline.h + +nodist_libedit_la_SOURCES = $(BUILT_SOURCES) + +libedit_la_LDFLAGS = -no-undefined -version-info $(LT_VERSION) + diff --git a/src/thirdparty/libedit-3.1/src/chared.c b/src/thirdparty/libedit-3.1/src/chared.c new file mode 100644 index 000000000..ff5545bbe --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/chared.c @@ -0,0 +1,810 @@ +/* $NetBSD: chared.c,v 1.62 2022/02/08 21:13:22 rillig Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)chared.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: chared.c,v 1.62 2022/02/08 21:13:22 rillig Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * chared.c: Character editor utilities + */ +#include <ctype.h> +#include <stdlib.h> +#include <string.h> + +#include "el.h" +#include "common.h" +#include "fcns.h" + +/* value to leave unused in line buffer */ +#define EL_LEAVE 2 + +/* cv_undo(): + * Handle state for the vi undo command + */ +libedit_private void +cv_undo(EditLine *el) +{ + c_undo_t *vu = &el->el_chared.c_undo; + c_redo_t *r = &el->el_chared.c_redo; + size_t size; + + /* Save entire line for undo */ + size = (size_t)(el->el_line.lastchar - el->el_line.buffer); + vu->len = (ssize_t)size; + vu->cursor = (int)(el->el_line.cursor - el->el_line.buffer); + (void)memcpy(vu->buf, el->el_line.buffer, size * sizeof(*vu->buf)); + + /* save command info for redo */ + r->count = el->el_state.doingarg ? el->el_state.argument : 0; + r->action = el->el_chared.c_vcmd.action; + r->pos = r->buf; + r->cmd = el->el_state.thiscmd; + r->ch = el->el_state.thisch; +} + +/* cv_yank(): + * Save yank/delete data for paste + */ +libedit_private void +cv_yank(EditLine *el, const wchar_t *ptr, int size) +{ + c_kill_t *k = &el->el_chared.c_kill; + + (void)memcpy(k->buf, ptr, (size_t)size * sizeof(*k->buf)); + k->last = k->buf + size; +} + + +/* c_insert(): + * Insert num characters + */ +libedit_private void +c_insert(EditLine *el, int num) +{ + wchar_t *cp; + + if (el->el_line.lastchar + num >= el->el_line.limit) { + if (!ch_enlargebufs(el, (size_t)num)) + return; /* can't go past end of buffer */ + } + + if (el->el_line.cursor < el->el_line.lastchar) { + /* if I must move chars */ + for (cp = el->el_line.lastchar; cp >= el->el_line.cursor; cp--) + cp[num] = *cp; + } + el->el_line.lastchar += num; +} + + +/* c_delafter(): + * Delete num characters after the cursor + */ +libedit_private void +c_delafter(EditLine *el, int num) +{ + + if (el->el_line.cursor + num > el->el_line.lastchar) + num = (int)(el->el_line.lastchar - el->el_line.cursor); + + if (el->el_map.current != el->el_map.emacs) { + cv_undo(el); + cv_yank(el, el->el_line.cursor, num); + } + + if (num > 0) { + wchar_t *cp; + + for (cp = el->el_line.cursor; cp <= el->el_line.lastchar; cp++) + *cp = cp[num]; + + el->el_line.lastchar -= num; + } +} + + +/* c_delafter1(): + * Delete the character after the cursor, do not yank + */ +libedit_private void +c_delafter1(EditLine *el) +{ + wchar_t *cp; + + for (cp = el->el_line.cursor; cp <= el->el_line.lastchar; cp++) + *cp = cp[1]; + + el->el_line.lastchar--; +} + + +/* c_delbefore(): + * Delete num characters before the cursor + */ +libedit_private void +c_delbefore(EditLine *el, int num) +{ + + if (el->el_line.cursor - num < el->el_line.buffer) + num = (int)(el->el_line.cursor - el->el_line.buffer); + + if (el->el_map.current != el->el_map.emacs) { + cv_undo(el); + cv_yank(el, el->el_line.cursor - num, num); + } + + if (num > 0) { + wchar_t *cp; + + for (cp = el->el_line.cursor - num; + &cp[num] <= el->el_line.lastchar; + cp++) + *cp = cp[num]; + + el->el_line.lastchar -= num; + } +} + + +/* c_delbefore1(): + * Delete the character before the cursor, do not yank + */ +libedit_private void +c_delbefore1(EditLine *el) +{ + wchar_t *cp; + + for (cp = el->el_line.cursor - 1; cp <= el->el_line.lastchar; cp++) + *cp = cp[1]; + + el->el_line.lastchar--; +} + + +/* ce__isword(): + * Return if p is part of a word according to emacs + */ +libedit_private int +ce__isword(wint_t p) +{ + return iswalnum(p) || wcschr(L"*?_-.[]~=", p) != NULL; +} + + +/* cv__isword(): + * Return if p is part of a word according to vi + */ +libedit_private int +cv__isword(wint_t p) +{ + if (iswalnum(p) || p == L'_') + return 1; + if (iswgraph(p)) + return 2; + return 0; +} + + +/* cv__isWord(): + * Return if p is part of a big word according to vi + */ +libedit_private int +cv__isWord(wint_t p) +{ + return !iswspace(p); +} + + +/* c__prev_word(): + * Find the previous word + */ +libedit_private wchar_t * +c__prev_word(wchar_t *p, wchar_t *low, int n, int (*wtest)(wint_t)) +{ + p--; + + while (n--) { + while ((p >= low) && !(*wtest)(*p)) + p--; + while ((p >= low) && (*wtest)(*p)) + p--; + } + + /* cp now points to one character before the word */ + p++; + if (p < low) + p = low; + /* cp now points where we want it */ + return p; +} + + +/* c__next_word(): + * Find the next word + */ +libedit_private wchar_t * +c__next_word(wchar_t *p, wchar_t *high, int n, int (*wtest)(wint_t)) +{ + while (n--) { + while ((p < high) && !(*wtest)(*p)) + p++; + while ((p < high) && (*wtest)(*p)) + p++; + } + if (p > high) + p = high; + /* p now points where we want it */ + return p; +} + +/* cv_next_word(): + * Find the next word vi style + */ +libedit_private wchar_t * +cv_next_word(EditLine *el, wchar_t *p, wchar_t *high, int n, + int (*wtest)(wint_t)) +{ + int test; + + while (n--) { + test = (*wtest)(*p); + while ((p < high) && (*wtest)(*p) == test) + p++; + /* + * vi historically deletes with cw only the word preserving the + * trailing whitespace! This is not what 'w' does.. + */ + if (n || el->el_chared.c_vcmd.action != (DELETE|INSERT)) + while ((p < high) && iswspace(*p)) + p++; + } + + /* p now points where we want it */ + if (p > high) + return high; + else + return p; +} + + +/* cv_prev_word(): + * Find the previous word vi style + */ +libedit_private wchar_t * +cv_prev_word(wchar_t *p, wchar_t *low, int n, int (*wtest)(wint_t)) +{ + int test; + + p--; + while (n--) { + while ((p > low) && iswspace(*p)) + p--; + test = (*wtest)(*p); + while ((p >= low) && (*wtest)(*p) == test) + p--; + } + p++; + + /* p now points where we want it */ + if (p < low) + return low; + else + return p; +} + + +/* cv_delfini(): + * Finish vi delete action + */ +libedit_private void +cv_delfini(EditLine *el) +{ + int size; + int action = el->el_chared.c_vcmd.action; + + if (action & INSERT) + el->el_map.current = el->el_map.key; + + if (el->el_chared.c_vcmd.pos == 0) + /* sanity */ + return; + + size = (int)(el->el_line.cursor - el->el_chared.c_vcmd.pos); + if (size == 0) + size = 1; + el->el_line.cursor = el->el_chared.c_vcmd.pos; + if (action & YANK) { + if (size > 0) + cv_yank(el, el->el_line.cursor, size); + else + cv_yank(el, el->el_line.cursor + size, -size); + } else { + if (size > 0) { + c_delafter(el, size); + re_refresh_cursor(el); + } else { + c_delbefore(el, -size); + el->el_line.cursor += size; + } + } + el->el_chared.c_vcmd.action = NOP; +} + + +/* cv__endword(): + * Go to the end of this word according to vi + */ +libedit_private wchar_t * +cv__endword(wchar_t *p, wchar_t *high, int n, int (*wtest)(wint_t)) +{ + int test; + + p++; + + while (n--) { + while ((p < high) && iswspace(*p)) + p++; + + test = (*wtest)(*p); + while ((p < high) && (*wtest)(*p) == test) + p++; + } + p--; + return p; +} + +/* ch_init(): + * Initialize the character editor + */ +libedit_private int +ch_init(EditLine *el) +{ + el->el_line.buffer = el_calloc(EL_BUFSIZ, + sizeof(*el->el_line.buffer)); + if (el->el_line.buffer == NULL) + return -1; + + el->el_line.cursor = el->el_line.buffer; + el->el_line.lastchar = el->el_line.buffer; + el->el_line.limit = &el->el_line.buffer[EL_BUFSIZ - EL_LEAVE]; + + el->el_chared.c_undo.buf = el_calloc(EL_BUFSIZ, + sizeof(*el->el_chared.c_undo.buf)); + if (el->el_chared.c_undo.buf == NULL) + return -1; + el->el_chared.c_undo.len = -1; + el->el_chared.c_undo.cursor = 0; + el->el_chared.c_redo.buf = el_calloc(EL_BUFSIZ, + sizeof(*el->el_chared.c_redo.buf)); + if (el->el_chared.c_redo.buf == NULL) + return -1; + el->el_chared.c_redo.pos = el->el_chared.c_redo.buf; + el->el_chared.c_redo.lim = el->el_chared.c_redo.buf + EL_BUFSIZ; + el->el_chared.c_redo.cmd = ED_UNASSIGNED; + + el->el_chared.c_vcmd.action = NOP; + el->el_chared.c_vcmd.pos = el->el_line.buffer; + + el->el_chared.c_kill.buf = el_calloc(EL_BUFSIZ, + sizeof(*el->el_chared.c_kill.buf)); + if (el->el_chared.c_kill.buf == NULL) + return -1; + el->el_chared.c_kill.mark = el->el_line.buffer; + el->el_chared.c_kill.last = el->el_chared.c_kill.buf; + el->el_chared.c_resizefun = NULL; + el->el_chared.c_resizearg = NULL; + el->el_chared.c_aliasfun = NULL; + el->el_chared.c_aliasarg = NULL; + + el->el_map.current = el->el_map.key; + + el->el_state.inputmode = MODE_INSERT; /* XXX: save a default */ + el->el_state.doingarg = 0; + el->el_state.metanext = 0; + el->el_state.argument = 1; + el->el_state.lastcmd = ED_UNASSIGNED; + + return 0; +} + +/* ch_reset(): + * Reset the character editor + */ +libedit_private void +ch_reset(EditLine *el) +{ + el->el_line.cursor = el->el_line.buffer; + el->el_line.lastchar = el->el_line.buffer; + + el->el_chared.c_undo.len = -1; + el->el_chared.c_undo.cursor = 0; + + el->el_chared.c_vcmd.action = NOP; + el->el_chared.c_vcmd.pos = el->el_line.buffer; + + el->el_chared.c_kill.mark = el->el_line.buffer; + + el->el_map.current = el->el_map.key; + + el->el_state.inputmode = MODE_INSERT; /* XXX: save a default */ + el->el_state.doingarg = 0; + el->el_state.metanext = 0; + el->el_state.argument = 1; + el->el_state.lastcmd = ED_UNASSIGNED; + + el->el_history.eventno = 0; +} + +/* ch_enlargebufs(): + * Enlarge line buffer to be able to hold twice as much characters. + * Returns 1 if successful, 0 if not. + */ +libedit_private int +ch_enlargebufs(EditLine *el, size_t addlen) +{ + size_t sz, newsz; + wchar_t *newbuffer, *oldbuf, *oldkbuf; + + sz = (size_t)(el->el_line.limit - el->el_line.buffer + EL_LEAVE); + newsz = sz * 2; + /* + * If newly required length is longer than current buffer, we need + * to make the buffer big enough to hold both old and new stuff. + */ + if (addlen > sz) { + while(newsz - sz < addlen) + newsz *= 2; + } + + /* + * Reallocate line buffer. + */ + newbuffer = el_realloc(el->el_line.buffer, newsz * sizeof(*newbuffer)); + if (!newbuffer) + return 0; + + /* zero the newly added memory, leave old data in */ + (void) memset(&newbuffer[sz], 0, (newsz - sz) * sizeof(*newbuffer)); + + oldbuf = el->el_line.buffer; + + el->el_line.buffer = newbuffer; + el->el_line.cursor = newbuffer + (el->el_line.cursor - oldbuf); + el->el_line.lastchar = newbuffer + (el->el_line.lastchar - oldbuf); + /* don't set new size until all buffers are enlarged */ + el->el_line.limit = &newbuffer[sz - EL_LEAVE]; + + /* + * Reallocate kill buffer. + */ + newbuffer = el_realloc(el->el_chared.c_kill.buf, newsz * + sizeof(*newbuffer)); + if (!newbuffer) + return 0; + + /* zero the newly added memory, leave old data in */ + (void) memset(&newbuffer[sz], 0, (newsz - sz) * sizeof(*newbuffer)); + + oldkbuf = el->el_chared.c_kill.buf; + + el->el_chared.c_kill.buf = newbuffer; + el->el_chared.c_kill.last = newbuffer + + (el->el_chared.c_kill.last - oldkbuf); + el->el_chared.c_kill.mark = el->el_line.buffer + + (el->el_chared.c_kill.mark - oldbuf); + + /* + * Reallocate undo buffer. + */ + newbuffer = el_realloc(el->el_chared.c_undo.buf, + newsz * sizeof(*newbuffer)); + if (!newbuffer) + return 0; + + /* zero the newly added memory, leave old data in */ + (void) memset(&newbuffer[sz], 0, (newsz - sz) * sizeof(*newbuffer)); + el->el_chared.c_undo.buf = newbuffer; + + newbuffer = el_realloc(el->el_chared.c_redo.buf, + newsz * sizeof(*newbuffer)); + if (!newbuffer) + return 0; + el->el_chared.c_redo.pos = newbuffer + + (el->el_chared.c_redo.pos - el->el_chared.c_redo.buf); + el->el_chared.c_redo.lim = newbuffer + + (el->el_chared.c_redo.lim - el->el_chared.c_redo.buf); + el->el_chared.c_redo.buf = newbuffer; + + if (!hist_enlargebuf(el, sz, newsz)) + return 0; + + /* Safe to set enlarged buffer size */ + el->el_line.limit = &el->el_line.buffer[newsz - EL_LEAVE]; + if (el->el_chared.c_resizefun) + (*el->el_chared.c_resizefun)(el, el->el_chared.c_resizearg); + return 1; +} + +/* ch_end(): + * Free the data structures used by the editor + */ +libedit_private void +ch_end(EditLine *el) +{ + el_free(el->el_line.buffer); + el->el_line.buffer = NULL; + el->el_line.limit = NULL; + el_free(el->el_chared.c_undo.buf); + el->el_chared.c_undo.buf = NULL; + el_free(el->el_chared.c_redo.buf); + el->el_chared.c_redo.buf = NULL; + el->el_chared.c_redo.pos = NULL; + el->el_chared.c_redo.lim = NULL; + el->el_chared.c_redo.cmd = ED_UNASSIGNED; + el_free(el->el_chared.c_kill.buf); + el->el_chared.c_kill.buf = NULL; + ch_reset(el); +} + + +/* el_insertstr(): + * Insert string at cursor + */ +int +el_winsertstr(EditLine *el, const wchar_t *s) +{ + size_t len; + + if (s == NULL || (len = wcslen(s)) == 0) + return -1; + if (el->el_line.lastchar + len >= el->el_line.limit) { + if (!ch_enlargebufs(el, len)) + return -1; + } + + c_insert(el, (int)len); + while (*s) + *el->el_line.cursor++ = *s++; + return 0; +} + + +/* el_deletestr(): + * Delete num characters before the cursor + */ +void +el_deletestr(EditLine *el, int n) +{ + if (n <= 0) + return; + + if (el->el_line.cursor < &el->el_line.buffer[n]) + return; + + c_delbefore(el, n); /* delete before dot */ + el->el_line.cursor -= n; + if (el->el_line.cursor < el->el_line.buffer) + el->el_line.cursor = el->el_line.buffer; +} + +/* el_deletestr1(): + * Delete characters between start and end + */ +int +el_deletestr1(EditLine *el, int start, int end) +{ + size_t line_length, len; + wchar_t *p1, *p2; + + if (end <= start) + return 0; + + line_length = (size_t)(el->el_line.lastchar - el->el_line.buffer); + + if (start >= (int)line_length || end >= (int)line_length) + return 0; + + len = (size_t)(end - start); + if (len > line_length - (size_t)end) + len = line_length - (size_t)end; + + p1 = el->el_line.buffer + start; + p2 = el->el_line.buffer + end; + for (size_t i = 0; i < len; i++) { + *p1++ = *p2++; + el->el_line.lastchar--; + } + + if (el->el_line.cursor < el->el_line.buffer) + el->el_line.cursor = el->el_line.buffer; + + return end - start; +} + +/* el_wreplacestr(): + * Replace the contents of the line with the provided string + */ +int +el_wreplacestr(EditLine *el, const wchar_t *s) +{ + size_t len; + wchar_t * p; + + if (s == NULL || (len = wcslen(s)) == 0) + return -1; + + if (el->el_line.buffer + len >= el->el_line.limit) { + if (!ch_enlargebufs(el, len)) + return -1; + } + + p = el->el_line.buffer; + for (size_t i = 0; i < len; i++) + *p++ = *s++; + + el->el_line.buffer[len] = '\0'; + el->el_line.lastchar = el->el_line.buffer + len; + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; + + return 0; +} + +/* el_cursor(): + * Move the cursor to the left or the right of the current position + */ +int +el_cursor(EditLine *el, int n) +{ + if (n == 0) + goto out; + + el->el_line.cursor += n; + + if (el->el_line.cursor < el->el_line.buffer) + el->el_line.cursor = el->el_line.buffer; + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; +out: + return (int)(el->el_line.cursor - el->el_line.buffer); +} + +/* c_gets(): + * Get a string + */ +libedit_private int +c_gets(EditLine *el, wchar_t *buf, const wchar_t *prompt) +{ + ssize_t len; + wchar_t *cp = el->el_line.buffer, ch; + + if (prompt) { + len = (ssize_t)wcslen(prompt); + (void)memcpy(cp, prompt, (size_t)len * sizeof(*cp)); + cp += len; + } + len = 0; + + for (;;) { + el->el_line.cursor = cp; + *cp = ' '; + el->el_line.lastchar = cp + 1; + re_refresh(el); + + if (el_wgetc(el, &ch) != 1) { + ed_end_of_file(el, 0); + len = -1; + break; + } + + switch (ch) { + + case L'\b': /* Delete and backspace */ + case 0177: + if (len == 0) { + len = -1; + break; + } + len--; + cp--; + continue; + + case 0033: /* ESC */ + case L'\r': /* Newline */ + case L'\n': + buf[len] = ch; + break; + + default: + if (len >= (ssize_t)(EL_BUFSIZ - 16)) + terminal_beep(el); + else { + buf[len++] = ch; + *cp++ = ch; + } + continue; + } + break; + } + + el->el_line.buffer[0] = '\0'; + el->el_line.lastchar = el->el_line.buffer; + el->el_line.cursor = el->el_line.buffer; + return (int)len; +} + + +/* c_hpos(): + * Return the current horizontal position of the cursor + */ +libedit_private int +c_hpos(EditLine *el) +{ + wchar_t *ptr; + + /* + * Find how many characters till the beginning of this line. + */ + if (el->el_line.cursor == el->el_line.buffer) + return 0; + else { + for (ptr = el->el_line.cursor - 1; + ptr >= el->el_line.buffer && *ptr != '\n'; + ptr--) + continue; + return (int)(el->el_line.cursor - ptr - 1); + } +} + +libedit_private int +ch_resizefun(EditLine *el, el_zfunc_t f, void *a) +{ + el->el_chared.c_resizefun = f; + el->el_chared.c_resizearg = a; + return 0; +} + +libedit_private int +ch_aliasfun(EditLine *el, el_afunc_t f, void *a) +{ + el->el_chared.c_aliasfun = f; + el->el_chared.c_aliasarg = a; + return 0; +} diff --git a/src/thirdparty/libedit-3.1/src/chared.h b/src/thirdparty/libedit-3.1/src/chared.h new file mode 100644 index 000000000..39f7d5173 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/chared.h @@ -0,0 +1,155 @@ +/* $NetBSD: chared.h,v 1.30 2016/05/22 19:44:26 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)chared.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * el.chared.h: Character editor interface + */ +#ifndef _h_el_chared +#define _h_el_chared + +/* + * This is an issue of basic "vi" look-and-feel. Defining VI_MOVE works + * like real vi: i.e. the transition from command<->insert modes moves + * the cursor. + * + * On the other hand we really don't want to move the cursor, because + * all the editing commands don't include the character under the cursor. + * Probably the best fix is to make all the editing commands aware of + * this fact. + */ +#define VI_MOVE + +/* + * Undo information for vi - no undo in emacs (yet) + */ +typedef struct c_undo_t { + ssize_t len; /* length of saved line */ + int cursor; /* position of saved cursor */ + wchar_t *buf; /* full saved text */ +} c_undo_t; + +/* redo for vi */ +typedef struct c_redo_t { + wchar_t *buf; /* redo insert key sequence */ + wchar_t *pos; + wchar_t *lim; + el_action_t cmd; /* command to redo */ + wchar_t ch; /* char that invoked it */ + int count; + int action; /* from cv_action() */ +} c_redo_t; + +/* + * Current action information for vi + */ +typedef struct c_vcmd_t { + int action; + wchar_t *pos; +} c_vcmd_t; + +/* + * Kill buffer for emacs + */ +typedef struct c_kill_t { + wchar_t *buf; + wchar_t *last; + wchar_t *mark; +} c_kill_t; + +typedef void (*el_zfunc_t)(EditLine *, void *); +typedef const char *(*el_afunc_t)(void *, const char *); + +/* + * Note that we use both data structures because the user can bind + * commands from both editors! + */ +typedef struct el_chared_t { + c_undo_t c_undo; + c_kill_t c_kill; + c_redo_t c_redo; + c_vcmd_t c_vcmd; + el_zfunc_t c_resizefun; + el_afunc_t c_aliasfun; + void * c_resizearg; + void * c_aliasarg; +} el_chared_t; + + +#define STRQQ "\"\"" + +#define isglob(a) (strchr("*[]?", (a)) != NULL) + +#define NOP 0x00 +#define DELETE 0x01 +#define INSERT 0x02 +#define YANK 0x04 + +#define CHAR_FWD (+1) +#define CHAR_BACK (-1) + +#define MODE_INSERT 0 +#define MODE_REPLACE 1 +#define MODE_REPLACE_1 2 + + +libedit_private int cv__isword(wint_t); +libedit_private int cv__isWord(wint_t); +libedit_private void cv_delfini(EditLine *); +libedit_private wchar_t *cv__endword(wchar_t *, wchar_t *, int, int (*)(wint_t)); +libedit_private int ce__isword(wint_t); +libedit_private void cv_undo(EditLine *); +libedit_private void cv_yank(EditLine *, const wchar_t *, int); +libedit_private wchar_t *cv_next_word(EditLine*, wchar_t *, wchar_t *, int, + int (*)(wint_t)); +libedit_private wchar_t *cv_prev_word(wchar_t *, wchar_t *, int, int (*)(wint_t)); +libedit_private wchar_t *c__next_word(wchar_t *, wchar_t *, int, int (*)(wint_t)); +libedit_private wchar_t *c__prev_word(wchar_t *, wchar_t *, int, int (*)(wint_t)); +libedit_private void c_insert(EditLine *, int); +libedit_private void c_delbefore(EditLine *, int); +libedit_private void c_delbefore1(EditLine *); +libedit_private void c_delafter(EditLine *, int); +libedit_private void c_delafter1(EditLine *); +libedit_private int c_gets(EditLine *, wchar_t *, const wchar_t *); +libedit_private int c_hpos(EditLine *); + +libedit_private int ch_init(EditLine *); +libedit_private void ch_reset(EditLine *); +libedit_private int ch_resizefun(EditLine *, el_zfunc_t, void *); +libedit_private int ch_aliasfun(EditLine *, el_afunc_t, void *); +libedit_private int ch_enlargebufs(EditLine *, size_t); +libedit_private void ch_end(EditLine *); + +#endif /* _h_el_chared */ diff --git a/src/thirdparty/libedit-3.1/src/chartype.c b/src/thirdparty/libedit-3.1/src/chartype.c new file mode 100644 index 000000000..3df4af69b --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/chartype.c @@ -0,0 +1,339 @@ +/* $NetBSD: chartype.c,v 1.35 2019/07/23 10:18:52 christos Exp $ */ + +/*- + * Copyright (c) 2009 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * chartype.c: character classification and meta information + */ +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +__RCSID("$NetBSD: chartype.c,v 1.35 2019/07/23 10:18:52 christos Exp $"); +#endif /* not lint && not SCCSID */ + +#include <ctype.h> +#include <limits.h> +#include <stdlib.h> +#include <string.h> + +#include "el.h" + +#define CT_BUFSIZ ((size_t)1024) + +static int ct_conv_cbuff_resize(ct_buffer_t *, size_t); +static int ct_conv_wbuff_resize(ct_buffer_t *, size_t); + +static int +ct_conv_cbuff_resize(ct_buffer_t *conv, size_t csize) +{ + void *p; + + if (csize <= conv->csize) + return 0; + + conv->csize = csize; + + p = el_realloc(conv->cbuff, conv->csize * sizeof(*conv->cbuff)); + if (p == NULL) { + conv->csize = 0; + el_free(conv->cbuff); + conv->cbuff = NULL; + return -1; + } + conv->cbuff = p; + return 0; +} + +static int +ct_conv_wbuff_resize(ct_buffer_t *conv, size_t wsize) +{ + void *p; + + if (wsize <= conv->wsize) + return 0; + + conv->wsize = wsize; + + p = el_realloc(conv->wbuff, conv->wsize * sizeof(*conv->wbuff)); + if (p == NULL) { + conv->wsize = 0; + el_free(conv->wbuff); + conv->wbuff = NULL; + return -1; + } + conv->wbuff = p; + return 0; +} + + +char * +ct_encode_string(const wchar_t *s, ct_buffer_t *conv) +{ + char *dst; + ssize_t used; + + if (!s) + return NULL; + + dst = conv->cbuff; + for (;;) { + used = (ssize_t)(dst - conv->cbuff); + if ((conv->csize - (size_t)used) < 5) { + if (ct_conv_cbuff_resize(conv, + conv->csize + CT_BUFSIZ) == -1) + return NULL; + dst = conv->cbuff + used; + } + if (!*s) + break; + used = ct_encode_char(dst, (size_t)5, *s); + if (used == -1) /* failed to encode, need more buffer space */ + abort(); + ++s; + dst += used; + } + *dst = '\0'; + return conv->cbuff; +} + +wchar_t * +ct_decode_string(const char *s, ct_buffer_t *conv) +{ + size_t len; + + if (!s) + return NULL; + + len = mbstowcs(NULL, s, (size_t)0); + if (len == (size_t)-1) + return NULL; + + if (conv->wsize < ++len) + if (ct_conv_wbuff_resize(conv, len + CT_BUFSIZ) == -1) + return NULL; + + mbstowcs(conv->wbuff, s, conv->wsize); + return conv->wbuff; +} + + +libedit_private wchar_t ** +ct_decode_argv(int argc, const char *argv[], ct_buffer_t *conv) +{ + size_t bufspace; + int i; + wchar_t *p; + wchar_t **wargv; + ssize_t bytes; + + /* Make sure we have enough space in the conversion buffer to store all + * the argv strings. */ + for (i = 0, bufspace = 0; i < argc; ++i) + bufspace += argv[i] ? strlen(argv[i]) + 1 : 0; + if (conv->wsize < ++bufspace) + if (ct_conv_wbuff_resize(conv, bufspace + CT_BUFSIZ) == -1) + return NULL; + + wargv = el_calloc((size_t)(argc + 1), sizeof(*wargv)); + + for (i = 0, p = conv->wbuff; i < argc; ++i) { + if (!argv[i]) { /* don't pass null pointers to mbstowcs */ + wargv[i] = NULL; + continue; + } else { + wargv[i] = p; + bytes = (ssize_t)mbstowcs(p, argv[i], bufspace); + } + if (bytes == -1) { + el_free(wargv); + return NULL; + } else + bytes++; /* include '\0' in the count */ + bufspace -= (size_t)bytes; + p += bytes; + } + wargv[i] = NULL; + + return wargv; +} + + +libedit_private size_t +ct_enc_width(wchar_t c) +{ + mbstate_t mbs; + char buf[MB_LEN_MAX]; + size_t size; + memset(&mbs, 0, sizeof(mbs)); + + if ((size = wcrtomb(buf, c, &mbs)) == (size_t)-1) + return 0; + return size; +} + +libedit_private ssize_t +ct_encode_char(char *dst, size_t len, wchar_t c) +{ + ssize_t l = 0; + if (len < ct_enc_width(c)) + return -1; + l = wctomb(dst, c); + + if (l < 0) { + wctomb(NULL, L'\0'); + l = 0; + } + return l; +} + +libedit_private const wchar_t * +ct_visual_string(const wchar_t *s, ct_buffer_t *conv) +{ + wchar_t *dst; + ssize_t used; + + if (!s) + return NULL; + + if (ct_conv_wbuff_resize(conv, CT_BUFSIZ) == -1) + return NULL; + + used = 0; + dst = conv->wbuff; + while (*s) { + used = ct_visual_char(dst, + conv->wsize - (size_t)(dst - conv->wbuff), *s); + if (used != -1) { + ++s; + dst += used; + continue; + } + + /* failed to encode, need more buffer space */ + used = dst - conv->wbuff; + if (ct_conv_wbuff_resize(conv, conv->wsize + CT_BUFSIZ) == -1) + return NULL; + dst = conv->wbuff + used; + } + + if (dst >= (conv->wbuff + conv->wsize)) { /* sigh */ + used = dst - conv->wbuff; + if (ct_conv_wbuff_resize(conv, conv->wsize + CT_BUFSIZ) == -1) + return NULL; + dst = conv->wbuff + used; + } + + *dst = L'\0'; + return conv->wbuff; +} + + + +libedit_private int +ct_visual_width(wchar_t c) +{ + int t = ct_chr_class(c); + switch (t) { + case CHTYPE_ASCIICTL: + return 2; /* ^@ ^? etc. */ + case CHTYPE_TAB: + return 1; /* Hmm, this really need to be handled outside! */ + case CHTYPE_NL: + return 0; /* Should this be 1 instead? */ + case CHTYPE_PRINT: + return wcwidth(c); + case CHTYPE_NONPRINT: + if (c > 0xffff) /* prefer standard 4-byte display over 5-byte */ + return 8; /* \U+12345 */ + else + return 7; /* \U+1234 */ + default: + return 0; /* should not happen */ + } +} + + +libedit_private ssize_t +ct_visual_char(wchar_t *dst, size_t len, wchar_t c) +{ + int t = ct_chr_class(c); + switch (t) { + case CHTYPE_TAB: + case CHTYPE_NL: + case CHTYPE_ASCIICTL: + if (len < 2) + return -1; /* insufficient space */ + *dst++ = '^'; + if (c == '\177') + *dst = '?'; /* DEL -> ^? */ + else + *dst = c | 0100; /* uncontrolify it */ + return 2; + case CHTYPE_PRINT: + if (len < 1) + return -1; /* insufficient space */ + *dst = c; + return 1; + case CHTYPE_NONPRINT: + /* we only use single-width glyphs for display, + * so this is right */ + if ((ssize_t)len < ct_visual_width(c)) + return -1; /* insufficient space */ + *dst++ = '\\'; + *dst++ = 'U'; + *dst++ = '+'; +#define tohexdigit(v) "0123456789ABCDEF"[v] + if (c > 0xffff) /* prefer standard 4-byte display over 5-byte */ + *dst++ = tohexdigit(((unsigned int) c >> 16) & 0xf); + *dst++ = tohexdigit(((unsigned int) c >> 12) & 0xf); + *dst++ = tohexdigit(((unsigned int) c >> 8) & 0xf); + *dst++ = tohexdigit(((unsigned int) c >> 4) & 0xf); + *dst = tohexdigit(((unsigned int) c ) & 0xf); + return c > 0xffff ? 8 : 7; + /*FALLTHROUGH*/ + /* these two should be handled outside this function */ + default: /* we should never hit the default */ + return 0; + } +} + + + + +libedit_private int +ct_chr_class(wchar_t c) +{ + if (c == '\t') + return CHTYPE_TAB; + else if (c == '\n') + return CHTYPE_NL; + else if (c < 0x100 && iswcntrl(c)) + return CHTYPE_ASCIICTL; + else if (iswprint(c)) + return CHTYPE_PRINT; + else + return CHTYPE_NONPRINT; +} diff --git a/src/thirdparty/libedit-3.1/src/chartype.h b/src/thirdparty/libedit-3.1/src/chartype.h new file mode 100644 index 000000000..bcdb293a1 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/chartype.h @@ -0,0 +1,120 @@ +/* $NetBSD: chartype.h,v 1.37 2022/04/11 19:37:20 tnn Exp $ */ + +/*- + * Copyright (c) 2009 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _h_chartype_f +#define _h_chartype_f + +/* Ideally we should also test the value of the define to see if it + * supports non-BMP code points without requiring UTF-16, but nothing + * seems to actually advertise this properly, despite Unicode 3.1 having + * been around since 2001... */ +#if !defined(__NetBSD__) && \ + !defined(__sun) && \ + !defined(__osf__) && \ + !(defined(__APPLE__) && defined(__MACH__)) && \ + !defined(__OpenBSD__) && \ + !defined(__FreeBSD__) && \ + !defined(__DragonFly__) +#ifndef __STDC_ISO_10646__ +/* In many places it is assumed that the first 127 code points are ASCII + * compatible, so ensure wchar_t indeed does ISO 10646 and not some other + * funky encoding that could break us in weird and wonderful ways. */ + #error wchar_t must store ISO 10646 characters +#endif +#endif + +/* Oh for a <uchar.h> with char32_t and __STDC_UTF_32__ in it... + * ref: ISO/IEC DTR 19769 + */ +#if WCHAR_MAX < INT32_MAX +#warning Build environment does not support non-BMP characters +#endif + +/* + * Conversion buffer + */ +typedef struct ct_buffer_t { + char *cbuff; + size_t csize; + wchar_t *wbuff; + size_t wsize; +} ct_buffer_t; + +/* Encode a wide-character string and return the UTF-8 encoded result. */ +char *ct_encode_string(const wchar_t *, ct_buffer_t *); + +/* Decode a (multi)?byte string and return the wide-character string result. */ +wchar_t *ct_decode_string(const char *, ct_buffer_t *); + +/* Decode a (multi)?byte argv string array. + * The pointer returned must be free()d when done. */ +libedit_private wchar_t **ct_decode_argv(int, const char *[], ct_buffer_t *); + +/* Encode a character into the destination buffer, provided there is sufficient + * buffer space available. Returns the number of bytes used up (zero if the + * character cannot be encoded, -1 if there was not enough space available). */ +libedit_private ssize_t ct_encode_char(char *, size_t, wchar_t); +libedit_private size_t ct_enc_width(wchar_t); + +/* The maximum buffer size to hold the most unwieldy visual representation, + * in this case \U+nnnnn. */ +#define VISUAL_WIDTH_MAX ((size_t)8) + +/* The terminal is thought of in terms of X columns by Y lines. In the cases + * where a wide character takes up more than one column, the adjacent + * occupied column entries will contain this faux character. */ +#define MB_FILL_CHAR ((wint_t)-1) + +/* Visual width of character c, taking into account ^? , \0177 and \U+nnnnn + * style visual expansions. */ +libedit_private int ct_visual_width(wchar_t); + +/* Turn the given character into the appropriate visual format, matching + * the width given by ct_visual_width(). Returns the number of characters used + * up, or -1 if insufficient space. Buffer length is in count of wchar_t's. */ +libedit_private ssize_t ct_visual_char(wchar_t *, size_t, wchar_t); + +/* Convert the given string into visual format, using the ct_visual_char() + * function. Uses a static buffer, so not threadsafe. */ +libedit_private const wchar_t *ct_visual_string(const wchar_t *, ct_buffer_t *); + + +/* printable character, use ct_visual_width() to find out display width */ +#define CHTYPE_PRINT ( 0) +/* control character found inside the ASCII portion of the charset */ +#define CHTYPE_ASCIICTL (-1) +/* a \t */ +#define CHTYPE_TAB (-2) +/* a \n */ +#define CHTYPE_NL (-3) +/* non-printable character */ +#define CHTYPE_NONPRINT (-4) +/* classification of character c, as one of the above defines */ +libedit_private int ct_chr_class(wchar_t c); + +#endif /* _chartype_f */ diff --git a/src/thirdparty/libedit-3.1/src/common.c b/src/thirdparty/libedit-3.1/src/common.c new file mode 100644 index 000000000..f33c29650 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/common.c @@ -0,0 +1,837 @@ +/* $NetBSD: common.c,v 1.49 2020/03/30 06:54:37 ryo Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)common.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: common.c,v 1.49 2020/03/30 06:54:37 ryo Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * common.c: Common Editor functions + */ +#include <ctype.h> +#include <string.h> + +#include "el.h" +#include "common.h" +#include "fcns.h" +#include "parse.h" +#include "vi.h" + +/* ed_end_of_file(): + * Indicate end of file + * [^D] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_end_of_file(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + re_goto_bottom(el); + *el->el_line.lastchar = '\0'; + return CC_EOF; +} + + +/* ed_insert(): + * Add character to the line + * Insert a character [bound to all insert keys] + */ +libedit_private el_action_t +ed_insert(EditLine *el, wint_t c) +{ + int count = el->el_state.argument; + + if (c == '\0') + return CC_ERROR; + + if (el->el_line.lastchar + el->el_state.argument >= + el->el_line.limit) { + /* end of buffer space, try to allocate more */ + if (!ch_enlargebufs(el, (size_t) count)) + return CC_ERROR; /* error allocating more */ + } + + if (count == 1) { + if (el->el_state.inputmode == MODE_INSERT + || el->el_line.cursor >= el->el_line.lastchar) + c_insert(el, 1); + + *el->el_line.cursor++ = c; + re_fastaddc(el); /* fast refresh for one char. */ + } else { + if (el->el_state.inputmode != MODE_REPLACE_1) + c_insert(el, el->el_state.argument); + + while (count-- && el->el_line.cursor < el->el_line.lastchar) + *el->el_line.cursor++ = c; + re_refresh(el); + } + + if (el->el_state.inputmode == MODE_REPLACE_1) + return vi_command_mode(el, 0); + + return CC_NORM; +} + + +/* ed_delete_prev_word(): + * Delete from beginning of current word to cursor + * [M-^?] [^W] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_delete_prev_word(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *cp, *p, *kp; + + if (el->el_line.cursor == el->el_line.buffer) + return CC_ERROR; + + cp = c__prev_word(el->el_line.cursor, el->el_line.buffer, + el->el_state.argument, ce__isword); + + for (p = cp, kp = el->el_chared.c_kill.buf; p < el->el_line.cursor; p++) + *kp++ = *p; + el->el_chared.c_kill.last = kp; + + c_delbefore(el, (int)(el->el_line.cursor - cp));/* delete before dot */ + el->el_line.cursor = cp; + if (el->el_line.cursor < el->el_line.buffer) + el->el_line.cursor = el->el_line.buffer; /* bounds check */ + return CC_REFRESH; +} + + +/* ed_delete_next_char(): + * Delete character under cursor + * [^D] [x] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_delete_next_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ +#ifdef DEBUG_EDIT +#define EL el->el_line + (void) fprintf(el->el_errfile, + "\nD(b: %p(%ls) c: %p(%ls) last: %p(%ls) limit: %p(%ls)\n", + EL.buffer, EL.buffer, EL.cursor, EL.cursor, EL.lastchar, + EL.lastchar, EL.limit, EL.limit); +#endif + if (el->el_line.cursor == el->el_line.lastchar) { + /* if I'm at the end */ + if (el->el_map.type == MAP_VI) { + if (el->el_line.cursor == el->el_line.buffer) { + /* if I'm also at the beginning */ +#ifdef KSHVI + return CC_ERROR; +#else + /* then do an EOF */ + terminal_writec(el, c); + return CC_EOF; +#endif + } else { +#ifdef KSHVI + el->el_line.cursor--; +#else + return CC_ERROR; +#endif + } + } else + return CC_ERROR; + } + c_delafter(el, el->el_state.argument); /* delete after dot */ + if (el->el_map.type == MAP_VI && + el->el_line.cursor >= el->el_line.lastchar && + el->el_line.cursor > el->el_line.buffer) + /* bounds check */ + el->el_line.cursor = el->el_line.lastchar - 1; + return CC_REFRESH; +} + + +/* ed_kill_line(): + * Cut to the end of line + * [^K] [^K] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_kill_line(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *kp, *cp; + + cp = el->el_line.cursor; + kp = el->el_chared.c_kill.buf; + while (cp < el->el_line.lastchar) + *kp++ = *cp++; /* copy it */ + el->el_chared.c_kill.last = kp; + /* zap! -- delete to end */ + el->el_line.lastchar = el->el_line.cursor; + return CC_REFRESH; +} + + +/* ed_move_to_end(): + * Move cursor to the end of line + * [^E] [^E] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_move_to_end(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_line.cursor = el->el_line.lastchar; + if (el->el_map.type == MAP_VI) { + if (el->el_chared.c_vcmd.action != NOP) { + cv_delfini(el); + return CC_REFRESH; + } +#ifdef VI_MOVE + el->el_line.cursor--; +#endif + } + return CC_CURSOR; +} + + +/* ed_move_to_beg(): + * Move cursor to the beginning of line + * [^A] [^A] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_move_to_beg(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_line.cursor = el->el_line.buffer; + + if (el->el_map.type == MAP_VI) { + /* We want FIRST non space character */ + while (iswspace(*el->el_line.cursor)) + el->el_line.cursor++; + if (el->el_chared.c_vcmd.action != NOP) { + cv_delfini(el); + return CC_REFRESH; + } + } + return CC_CURSOR; +} + + +/* ed_transpose_chars(): + * Exchange the character to the left of the cursor with the one under it + * [^T] [^T] + */ +libedit_private el_action_t +ed_transpose_chars(EditLine *el, wint_t c) +{ + + if (el->el_line.cursor < el->el_line.lastchar) { + if (el->el_line.lastchar <= &el->el_line.buffer[1]) + return CC_ERROR; + else + el->el_line.cursor++; + } + if (el->el_line.cursor > &el->el_line.buffer[1]) { + /* must have at least two chars entered */ + c = el->el_line.cursor[-2]; + el->el_line.cursor[-2] = el->el_line.cursor[-1]; + el->el_line.cursor[-1] = c; + return CC_REFRESH; + } else + return CC_ERROR; +} + + +/* ed_next_char(): + * Move to the right one character + * [^F] [^F] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_next_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *lim = el->el_line.lastchar; + + if (el->el_line.cursor >= lim || + (el->el_line.cursor == lim - 1 && + el->el_map.type == MAP_VI && + el->el_chared.c_vcmd.action == NOP)) + return CC_ERROR; + + el->el_line.cursor += el->el_state.argument; + if (el->el_line.cursor > lim) + el->el_line.cursor = lim; + + if (el->el_map.type == MAP_VI) + if (el->el_chared.c_vcmd.action != NOP) { + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; +} + + +/* ed_prev_word(): + * Move to the beginning of the current word + * [M-b] [b] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_prev_word(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_line.cursor == el->el_line.buffer) + return CC_ERROR; + + el->el_line.cursor = c__prev_word(el->el_line.cursor, + el->el_line.buffer, + el->el_state.argument, + ce__isword); + + if (el->el_map.type == MAP_VI) + if (el->el_chared.c_vcmd.action != NOP) { + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; +} + + +/* ed_prev_char(): + * Move to the left one character + * [^B] [^B] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_prev_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_line.cursor > el->el_line.buffer) { + el->el_line.cursor -= el->el_state.argument; + if (el->el_line.cursor < el->el_line.buffer) + el->el_line.cursor = el->el_line.buffer; + + if (el->el_map.type == MAP_VI) + if (el->el_chared.c_vcmd.action != NOP) { + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; + } else + return CC_ERROR; +} + + +/* ed_quoted_insert(): + * Add the next character typed verbatim + * [^V] [^V] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_quoted_insert(EditLine *el, wint_t c __attribute__((__unused__))) +{ + int num; + wchar_t ch; + + tty_quotemode(el); + num = el_wgetc(el, &ch); + tty_noquotemode(el); + if (num == 1) + return ed_insert(el, ch); + else + return ed_end_of_file(el, 0); +} + + +/* ed_digit(): + * Adds to argument or enters a digit + */ +libedit_private el_action_t +ed_digit(EditLine *el, wint_t c) +{ + + if (!iswdigit(c)) + return CC_ERROR; + + if (el->el_state.doingarg) { + /* if doing an arg, add this in... */ + if (el->el_state.lastcmd == EM_UNIVERSAL_ARGUMENT) + el->el_state.argument = c - '0'; + else { + if (el->el_state.argument > 1000000) + return CC_ERROR; + el->el_state.argument = + (el->el_state.argument * 10) + (c - '0'); + } + return CC_ARGHACK; + } + + return ed_insert(el, c); +} + + +/* ed_argument_digit(): + * Digit that starts argument + * For ESC-n + */ +libedit_private el_action_t +ed_argument_digit(EditLine *el, wint_t c) +{ + + if (!iswdigit(c)) + return CC_ERROR; + + if (el->el_state.doingarg) { + if (el->el_state.argument > 1000000) + return CC_ERROR; + el->el_state.argument = (el->el_state.argument * 10) + + (c - '0'); + } else { /* else starting an argument */ + el->el_state.argument = c - '0'; + el->el_state.doingarg = 1; + } + return CC_ARGHACK; +} + + +/* ed_unassigned(): + * Indicates unbound character + * Bound to keys that are not assigned + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_unassigned(EditLine *el __attribute__((__unused__)), + wint_t c __attribute__((__unused__))) +{ + + return CC_ERROR; +} + + +/* ed_ignore(): + * Input characters that have no effect + * [^C ^O ^Q ^S ^Z ^\ ^]] [^C ^O ^Q ^S ^\] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_ignore(EditLine *el __attribute__((__unused__)), + wint_t c __attribute__((__unused__))) +{ + + return CC_NORM; +} + + +/* ed_newline(): + * Execute command + * [^J] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_newline(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + re_goto_bottom(el); + *el->el_line.lastchar++ = '\n'; + *el->el_line.lastchar = '\0'; + return CC_NEWLINE; +} + + +/* ed_delete_prev_char(): + * Delete the character to the left of the cursor + * [^?] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_delete_prev_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_line.cursor <= el->el_line.buffer) + return CC_ERROR; + + c_delbefore(el, el->el_state.argument); + el->el_line.cursor -= el->el_state.argument; + if (el->el_line.cursor < el->el_line.buffer) + el->el_line.cursor = el->el_line.buffer; + return CC_REFRESH; +} + + +/* ed_clear_screen(): + * Clear screen leaving current line at the top + * [^L] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_clear_screen(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + terminal_clear_screen(el); /* clear the whole real screen */ + re_clear_display(el); /* reset everything */ + return CC_REFRESH; +} + + +/* ed_redisplay(): + * Redisplay everything + * ^R + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_redisplay(EditLine *el __attribute__((__unused__)), + wint_t c __attribute__((__unused__))) +{ + + return CC_REDISPLAY; +} + + +/* ed_start_over(): + * Erase current line and start from scratch + * [^G] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_start_over(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + ch_reset(el); + return CC_REFRESH; +} + + +/* ed_sequence_lead_in(): + * First character in a bound sequence + * Placeholder for external keys + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_sequence_lead_in(EditLine *el __attribute__((__unused__)), + wint_t c __attribute__((__unused__))) +{ + + return CC_NORM; +} + + +/* ed_prev_history(): + * Move to the previous history line + * [^P] [k] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_prev_history(EditLine *el, wint_t c __attribute__((__unused__))) +{ + char beep = 0; + int sv_event = el->el_history.eventno; + + el->el_chared.c_undo.len = -1; + *el->el_line.lastchar = '\0'; /* just in case */ + + if (el->el_history.eventno == 0) { /* save the current buffer + * away */ + (void) wcsncpy(el->el_history.buf, el->el_line.buffer, + EL_BUFSIZ); + el->el_history.last = el->el_history.buf + + (el->el_line.lastchar - el->el_line.buffer); + } + el->el_history.eventno += el->el_state.argument; + + if (hist_get(el) == CC_ERROR) { + if (el->el_map.type == MAP_VI) { + el->el_history.eventno = sv_event; + } + beep = 1; + /* el->el_history.eventno was fixed by first call */ + (void) hist_get(el); + } + if (beep) + return CC_REFRESH_BEEP; + return CC_REFRESH; +} + + +/* ed_next_history(): + * Move to the next history line + * [^N] [j] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_next_history(EditLine *el, wint_t c __attribute__((__unused__))) +{ + el_action_t beep = CC_REFRESH, rval; + + el->el_chared.c_undo.len = -1; + *el->el_line.lastchar = '\0'; /* just in case */ + + el->el_history.eventno -= el->el_state.argument; + + if (el->el_history.eventno < 0) { + el->el_history.eventno = 0; + beep = CC_REFRESH_BEEP; + } + rval = hist_get(el); + if (rval == CC_REFRESH) + return beep; + return rval; + +} + + +/* ed_search_prev_history(): + * Search previous in history for a line matching the current + * next search history [M-P] [K] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_search_prev_history(EditLine *el, wint_t c __attribute__((__unused__))) +{ + const wchar_t *hp; + int h; + int found = 0; + + el->el_chared.c_vcmd.action = NOP; + el->el_chared.c_undo.len = -1; + *el->el_line.lastchar = '\0'; /* just in case */ + if (el->el_history.eventno < 0) { +#ifdef DEBUG_EDIT + (void) fprintf(el->el_errfile, + "e_prev_search_hist(): eventno < 0;\n"); +#endif + el->el_history.eventno = 0; + return CC_ERROR; + } + if (el->el_history.eventno == 0) { + (void) wcsncpy(el->el_history.buf, el->el_line.buffer, + EL_BUFSIZ); + el->el_history.last = el->el_history.buf + + (el->el_line.lastchar - el->el_line.buffer); + } + if (el->el_history.ref == NULL) + return CC_ERROR; + + hp = HIST_FIRST(el); + if (hp == NULL) + return CC_ERROR; + + c_setpat(el); /* Set search pattern !! */ + + for (h = 1; h <= el->el_history.eventno; h++) + hp = HIST_NEXT(el); + + while (hp != NULL) { +#ifdef SDEBUG + (void) fprintf(el->el_errfile, "Comparing with \"%ls\"\n", hp); +#endif + if ((wcsncmp(hp, el->el_line.buffer, (size_t) + (el->el_line.lastchar - el->el_line.buffer)) || + hp[el->el_line.lastchar - el->el_line.buffer]) && + c_hmatch(el, hp)) { + found = 1; + break; + } + h++; + hp = HIST_NEXT(el); + } + + if (!found) { +#ifdef SDEBUG + (void) fprintf(el->el_errfile, "not found\n"); +#endif + return CC_ERROR; + } + el->el_history.eventno = h; + + return hist_get(el); +} + + +/* ed_search_next_history(): + * Search next in history for a line matching the current + * [M-N] [J] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_search_next_history(EditLine *el, wint_t c __attribute__((__unused__))) +{ + const wchar_t *hp; + int h; + int found = 0; + + el->el_chared.c_vcmd.action = NOP; + el->el_chared.c_undo.len = -1; + *el->el_line.lastchar = '\0'; /* just in case */ + + if (el->el_history.eventno == 0) + return CC_ERROR; + + if (el->el_history.ref == NULL) + return CC_ERROR; + + hp = HIST_FIRST(el); + if (hp == NULL) + return CC_ERROR; + + c_setpat(el); /* Set search pattern !! */ + + for (h = 1; h < el->el_history.eventno && hp; h++) { +#ifdef SDEBUG + (void) fprintf(el->el_errfile, "Comparing with \"%ls\"\n", hp); +#endif + if ((wcsncmp(hp, el->el_line.buffer, (size_t) + (el->el_line.lastchar - el->el_line.buffer)) || + hp[el->el_line.lastchar - el->el_line.buffer]) && + c_hmatch(el, hp)) + found = h; + hp = HIST_NEXT(el); + } + + if (!found) { /* is it the current history number? */ + if (!c_hmatch(el, el->el_history.buf)) { +#ifdef SDEBUG + (void) fprintf(el->el_errfile, "not found\n"); +#endif + return CC_ERROR; + } + } + el->el_history.eventno = found; + + return hist_get(el); +} + + +/* ed_prev_line(): + * Move up one line + * Could be [k] [^p] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_prev_line(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *ptr; + int nchars = c_hpos(el); + + /* + * Move to the line requested + */ + if (*(ptr = el->el_line.cursor) == '\n') + ptr--; + + for (; ptr >= el->el_line.buffer; ptr--) + if (*ptr == '\n' && --el->el_state.argument <= 0) + break; + + if (el->el_state.argument > 0) + return CC_ERROR; + + /* + * Move to the beginning of the line + */ + for (ptr--; ptr >= el->el_line.buffer && *ptr != '\n'; ptr--) + continue; + + /* + * Move to the character requested + */ + for (ptr++; + nchars-- > 0 && ptr < el->el_line.lastchar && *ptr != '\n'; + ptr++) + continue; + + el->el_line.cursor = ptr; + return CC_CURSOR; +} + + +/* ed_next_line(): + * Move down one line + * Could be [j] [^n] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_next_line(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *ptr; + int nchars = c_hpos(el); + + /* + * Move to the line requested + */ + for (ptr = el->el_line.cursor; ptr < el->el_line.lastchar; ptr++) + if (*ptr == '\n' && --el->el_state.argument <= 0) + break; + + if (el->el_state.argument > 0) + return CC_ERROR; + + /* + * Move to the character requested + */ + for (ptr++; + nchars-- > 0 && ptr < el->el_line.lastchar && *ptr != '\n'; + ptr++) + continue; + + el->el_line.cursor = ptr; + return CC_CURSOR; +} + + +/* ed_command(): + * Editline extended command + * [M-X] [:] + */ +libedit_private el_action_t +/*ARGSUSED*/ +ed_command(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t tmpbuf[EL_BUFSIZ]; + int tmplen; + + tmplen = c_gets(el, tmpbuf, L"\n: "); + terminal__putc(el, '\n'); + + if (tmplen < 0 || (tmpbuf[tmplen] = 0, parse_line(el, tmpbuf)) == -1) + terminal_beep(el); + + el->el_map.current = el->el_map.key; + re_clear_display(el); + return CC_REFRESH; +} diff --git a/src/thirdparty/libedit-3.1/src/editline/readline.h b/src/thirdparty/libedit-3.1/src/editline/readline.h new file mode 100644 index 000000000..2bd0b7e80 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/editline/readline.h @@ -0,0 +1,267 @@ +/* $NetBSD: readline.h,v 1.53 2022/02/19 17:45:02 christos Exp $ */ + +/*- + * Copyright (c) 1997 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jaromir Dolecek. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _READLINE_H_ +#define _READLINE_H_ + +#include <sys/types.h> +#include <stdio.h> + +/* list of readline stuff supported by editline library's readline wrapper */ + +/* typedefs */ +typedef int Function(const char *, int); +typedef char *CPFunction(const char *, int); +typedef void VFunction(void); +typedef void rl_vcpfunc_t(char *); +typedef char **rl_completion_func_t(const char *, int, int); +typedef char *rl_compentry_func_t(const char *, int); +typedef int rl_command_func_t(int, int); +typedef int rl_hook_func_t(void); +typedef int rl_icppfunc_t(char **); + +/* only supports length */ +typedef struct { + int length; +} HISTORY_STATE; + +typedef void *histdata_t; + +typedef struct _hist_entry { + const char *line; + histdata_t data; +} HIST_ENTRY; + +typedef struct _keymap_entry { + char type; +#define ISFUNC 0 +#define ISKMAP 1 +#define ISMACR 2 + Function *function; +} KEYMAP_ENTRY; + +#define KEYMAP_SIZE 256 + +typedef KEYMAP_ENTRY KEYMAP_ENTRY_ARRAY[KEYMAP_SIZE]; +typedef KEYMAP_ENTRY *Keymap; + +#define control_character_threshold 0x20 +#define control_character_bit 0x40 + +#ifndef CTRL +#include <sys/ioctl.h> +#if !defined(__sun) && !defined(__hpux) && !defined(_AIX) +#include <sys/ttydefaults.h> +#endif +#ifndef CTRL +#define CTRL(c) ((c) & 037) +#endif +#endif +#ifndef UNCTRL +#define UNCTRL(c) (((c) - 'a' + 'A')|control_character_bit) +#endif + +#define RUBOUT 0x7f +#define ABORT_CHAR CTRL('G') +#define RL_READLINE_VERSION 0x0402 +#define RL_PROMPT_START_IGNORE '\1' +#define RL_PROMPT_END_IGNORE '\2' + +#define RL_STATE_NONE 0x000000 +#define RL_STATE_DONE 0x000001 + +#define RL_SETSTATE(x) (rl_readline_state |= ((unsigned long) x)) +#define RL_UNSETSTATE(x) (rl_readline_state &= ~((unsigned long) x)) +#define RL_ISSTATE(x) (rl_readline_state & ((unsigned long) x)) + +/* global variables used by readline enabled applications */ +#ifdef __cplusplus +extern "C" { +#endif +extern const char *rl_library_version; +extern int rl_readline_version; +extern const char *rl_readline_name; +extern FILE *rl_instream; +extern FILE *rl_outstream; +extern char *rl_line_buffer; +extern int rl_point, rl_end; +extern int history_base, history_length; +extern int max_input_history; +extern const char *rl_basic_quote_characters; +extern const char *rl_basic_word_break_characters; +extern char *rl_completer_word_break_characters; +extern const char *rl_completer_quote_characters; +extern rl_compentry_func_t *rl_completion_entry_function; +extern char *(*rl_completion_word_break_hook)(void); +extern rl_completion_func_t *rl_attempted_completion_function; +extern int rl_attempted_completion_over; +extern int rl_completion_type; +extern int rl_completion_query_items; +extern const char *rl_special_prefixes; +extern int rl_completion_append_character; +extern int rl_inhibit_completion; +extern rl_hook_func_t *rl_pre_input_hook; +extern rl_hook_func_t *rl_startup_hook; +extern char *rl_terminal_name; +extern int rl_already_prompted; +extern char *rl_prompt; +extern int rl_done; +/* + * The following is not implemented + */ +extern unsigned long rl_readline_state; +extern int rl_catch_signals; +extern int rl_catch_sigwinch; +extern KEYMAP_ENTRY_ARRAY emacs_standard_keymap, + emacs_meta_keymap, + emacs_ctlx_keymap; +extern int rl_filename_completion_desired; +extern int rl_ignore_completion_duplicates; +extern int (*rl_getc_function)(FILE *); +extern VFunction *rl_redisplay_function; +extern VFunction *rl_completion_display_matches_hook; +extern VFunction *rl_prep_term_function; +extern VFunction *rl_deprep_term_function; +extern rl_hook_func_t *rl_event_hook; +extern int readline_echoing_p; +extern int _rl_print_completions_horizontally; +extern int _rl_complete_mark_directories; +extern rl_icppfunc_t *rl_directory_completion_hook; +extern int rl_completion_suppress_append; +extern int rl_sort_completion_matches; +extern int _rl_completion_prefix_display_length; +extern int _rl_echoing_p; +extern int history_max_entries; +extern char *rl_display_prompt; +extern int rl_erase_empty_line; + +/* supported functions */ +char *readline(const char *); +int rl_initialize(void); + +void using_history(void); +int add_history(const char *); +void clear_history(void); +int append_history(int, const char *); +void stifle_history(int); +int unstifle_history(void); +int history_is_stifled(void); +int where_history(void); +HIST_ENTRY *current_history(void); +HIST_ENTRY *history_get(int); +HIST_ENTRY *remove_history(int); +HIST_ENTRY *replace_history_entry(int, const char *, histdata_t); +int history_total_bytes(void); +int history_set_pos(int); +HIST_ENTRY *previous_history(void); +HIST_ENTRY *next_history(void); +HIST_ENTRY **history_list(void); +int history_search(const char *, int); +int history_search_prefix(const char *, int); +int history_search_pos(const char *, int, int); +int read_history(const char *); +int write_history(const char *); +int history_truncate_file(const char *, int); +int history_expand(char *, char **); +char **history_tokenize(const char *); +const char *get_history_event(const char *, int *, int); +char *history_arg_extract(int, int, const char *); + +char *tilde_expand(char *); +char *filename_completion_function(const char *, int); +char *username_completion_function(const char *, int); +int rl_complete(int, int); +int rl_read_key(void); +char **completion_matches(/* const */ char *, rl_compentry_func_t *); +void rl_display_match_list(char **, int, int); + +int rl_insert(int, int); +int rl_insert_text(const char *); +int rl_reset_terminal(const char *); +void rl_resize_terminal(void); +int rl_bind_key(int, rl_command_func_t *); +int rl_newline(int, int); +void rl_callback_read_char(void); +void rl_callback_handler_install(const char *, rl_vcpfunc_t *); +void rl_callback_handler_remove(void); +void rl_redisplay(void); +int rl_get_previous_history(int, int); +void rl_prep_terminal(int); +void rl_deprep_terminal(void); +int rl_read_init_file(const char *); +int rl_parse_and_bind(const char *); +int rl_variable_bind(const char *, const char *); +int rl_stuff_char(int); +int rl_add_defun(const char *, rl_command_func_t *, int); +HISTORY_STATE *history_get_history_state(void); +void rl_get_screen_size(int *, int *); +void rl_set_screen_size(int, int); +char *rl_filename_completion_function(const char *, int); +int _rl_abort_internal(void); +int _rl_qsort_string_compare(char **, char **); +char **rl_completion_matches(const char *, rl_compentry_func_t *); +void rl_forced_update_display(void); +int rl_set_prompt(const char *); +int rl_on_new_line(void); +void rl_reset_after_signal(void); +void rl_echo_signal_char(int); +int rl_crlf(void); +int rl_ding(void); +char *rl_copy_text(int, int); +void rl_replace_line(const char *, int); +int rl_delete_text(int, int); +void rl_message(const char *format, ...) + __attribute__((__format__(__printf__, 1, 2))); +void rl_save_prompt(void); +void rl_restore_prompt(void); + +/* + * The following are not implemented + */ +int rl_kill_text(int, int); +Keymap rl_get_keymap(void); +void rl_set_keymap(Keymap); +Keymap rl_make_bare_keymap(void); +int rl_generic_bind(int, const char *, const char *, Keymap); +int rl_bind_key_in_map(int, rl_command_func_t *, Keymap); +int rl_set_key(const char *, rl_command_func_t *, Keymap); +void rl_cleanup_after_signal(void); +void rl_free_line_state(void); +int rl_set_keyboard_input_timeout(int); +int rl_abort(int, int); +int rl_set_keymap_name(const char *, Keymap); +histdata_t free_history_entry(HIST_ENTRY *); +void _rl_erase_entire_line(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _READLINE_H_ */ diff --git a/src/thirdparty/libedit-3.1/src/el.c b/src/thirdparty/libedit-3.1/src/el.c new file mode 100644 index 000000000..4faf1cfc2 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/el.c @@ -0,0 +1,678 @@ +/* $NetBSD: el.c,v 1.100 2021/08/15 10:08:41 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)el.c 8.2 (Berkeley) 1/3/94"; +#else +__RCSID("$NetBSD: el.c,v 1.100 2021/08/15 10:08:41 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +#ifndef MAXPATHLEN +#define MAXPATHLEN 4096 +#endif + +/* + * el.c: EditLine interface functions + */ +#include <sys/types.h> +#include <sys/param.h> +#include <ctype.h> +#include <langinfo.h> +#include <locale.h> +#include <stdarg.h> +#include <stdlib.h> +#include <string.h> + +#include "el.h" +#include "parse.h" +#include "read.h" + +#ifndef HAVE_SECURE_GETENV +# ifdef HAVE___SECURE_GETENV +# define secure_getenv __secure_getenv +# define HAVE_SECURE_GETENV 1 +# else +# ifdef HAVE_ISSETUGID +# include <unistd.h> +# else +# undef issetugid +# define issetugid() 1 +# endif +# endif +#endif + +#ifndef HAVE_SECURE_GETENV +char *secure_getenv(char const *name) +{ + if (issetugid()) + return 0; + return getenv(name); +} +#endif + +/* el_init(): + * Initialize editline and set default parameters. + */ +EditLine * +el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr) +{ + return el_init_fd(prog, fin, fout, ferr, fileno(fin), fileno(fout), + fileno(ferr)); +} + +libedit_private EditLine * +el_init_internal(const char *prog, FILE *fin, FILE *fout, FILE *ferr, + int fdin, int fdout, int fderr, int flags) +{ + EditLine *el = el_calloc(1, sizeof(*el)); + + if (el == NULL) + return NULL; + + el->el_infile = fin; + el->el_outfile = fout; + el->el_errfile = ferr; + + el->el_infd = fdin; + el->el_outfd = fdout; + el->el_errfd = fderr; + + el->el_prog = wcsdup(ct_decode_string(prog, &el->el_scratch)); + if (el->el_prog == NULL) { + el_free(el); + return NULL; + } + + /* + * Initialize all the modules. Order is important!!! + */ + el->el_flags = flags; + + if (terminal_init(el) == -1) { + el_free(el->el_prog); + el_free(el); + return NULL; + } + (void) keymacro_init(el); + (void) map_init(el); + if (tty_init(el) == -1) + el->el_flags |= NO_TTY; + (void) ch_init(el); + (void) search_init(el); + (void) hist_init(el); + (void) prompt_init(el); + (void) sig_init(el); + (void) literal_init(el); + if (read_init(el) == -1) { + el_end(el); + return NULL; + } + return el; +} + +EditLine * +el_init_fd(const char *prog, FILE *fin, FILE *fout, FILE *ferr, + int fdin, int fdout, int fderr) +{ + return el_init_internal(prog, fin, fout, ferr, fdin, fdout, fderr, 0); +} + +/* el_end(): + * Clean up. + */ +void +el_end(EditLine *el) +{ + + if (el == NULL) + return; + + el_reset(el); + + terminal_end(el); + keymacro_end(el); + map_end(el); + if (!(el->el_flags & NO_TTY)) + tty_end(el, TCSAFLUSH); + ch_end(el); + read_end(el->el_read); + search_end(el); + hist_end(el); + prompt_end(el); + sig_end(el); + literal_end(el); + + el_free(el->el_prog); + el_free(el->el_visual.cbuff); + el_free(el->el_visual.wbuff); + el_free(el->el_scratch.cbuff); + el_free(el->el_scratch.wbuff); + el_free(el->el_lgcyconv.cbuff); + el_free(el->el_lgcyconv.wbuff); + el_free(el); +} + + +/* el_reset(): + * Reset the tty and the parser + */ +void +el_reset(EditLine *el) +{ + + tty_cookedmode(el); + ch_reset(el); /* XXX: Do we want that? */ +} + + +/* el_set(): + * set the editline parameters + */ +int +el_wset(EditLine *el, int op, ...) +{ + va_list ap; + int rv = 0; + + if (el == NULL) + return -1; + va_start(ap, op); + + switch (op) { + case EL_PROMPT: + case EL_RPROMPT: { + el_pfunc_t p = va_arg(ap, el_pfunc_t); + + rv = prompt_set(el, p, 0, op, 1); + break; + } + + case EL_RESIZE: { + el_zfunc_t p = va_arg(ap, el_zfunc_t); + void *arg = va_arg(ap, void *); + rv = ch_resizefun(el, p, arg); + break; + } + + case EL_ALIAS_TEXT: { + el_afunc_t p = va_arg(ap, el_afunc_t); + void *arg = va_arg(ap, void *); + rv = ch_aliasfun(el, p, arg); + break; + } + + case EL_PROMPT_ESC: + case EL_RPROMPT_ESC: { + el_pfunc_t p = va_arg(ap, el_pfunc_t); + int c = va_arg(ap, int); + + rv = prompt_set(el, p, (wchar_t)c, op, 1); + break; + } + + case EL_TERMINAL: + rv = terminal_set(el, va_arg(ap, char *)); + break; + + case EL_EDITOR: + rv = map_set_editor(el, va_arg(ap, wchar_t *)); + break; + + case EL_SIGNAL: + if (va_arg(ap, int)) + el->el_flags |= HANDLE_SIGNALS; + else + el->el_flags &= ~HANDLE_SIGNALS; + break; + + case EL_BIND: + case EL_TELLTC: + case EL_SETTC: + case EL_ECHOTC: + case EL_SETTY: + { + const wchar_t *argv[20]; + int i; + + for (i = 1; i < (int)__arraycount(argv); i++) + if ((argv[i] = va_arg(ap, wchar_t *)) == NULL) + break; + + switch (op) { + case EL_BIND: + argv[0] = L"bind"; + rv = map_bind(el, i, argv); + break; + + case EL_TELLTC: + argv[0] = L"telltc"; + rv = terminal_telltc(el, i, argv); + break; + + case EL_SETTC: + argv[0] = L"settc"; + rv = terminal_settc(el, i, argv); + break; + + case EL_ECHOTC: + argv[0] = L"echotc"; + rv = terminal_echotc(el, i, argv); + break; + + case EL_SETTY: + argv[0] = L"setty"; + rv = tty_stty(el, i, argv); + break; + + default: + rv = -1; + EL_ABORT((el->el_errfile, "Bad op %d\n", op)); + break; + } + break; + } + + case EL_ADDFN: + { + wchar_t *name = va_arg(ap, wchar_t *); + wchar_t *help = va_arg(ap, wchar_t *); + el_func_t func = va_arg(ap, el_func_t); + + rv = map_addfunc(el, name, help, func); + break; + } + + case EL_HIST: + { + hist_fun_t func = va_arg(ap, hist_fun_t); + void *ptr = va_arg(ap, void *); + + rv = hist_set(el, func, ptr); + if (MB_CUR_MAX == 1) + el->el_flags &= ~NARROW_HISTORY; + break; + } + + case EL_SAFEREAD: + if (va_arg(ap, int)) + el->el_flags |= FIXIO; + else + el->el_flags &= ~FIXIO; + rv = 0; + break; + + case EL_EDITMODE: + if (va_arg(ap, int)) + el->el_flags &= ~EDIT_DISABLED; + else + el->el_flags |= EDIT_DISABLED; + rv = 0; + break; + + case EL_GETCFN: + { + el_rfunc_t rc = va_arg(ap, el_rfunc_t); + rv = el_read_setfn(el->el_read, rc); + break; + } + + case EL_CLIENTDATA: + el->el_data = va_arg(ap, void *); + break; + + case EL_UNBUFFERED: + rv = va_arg(ap, int); + if (rv && !(el->el_flags & UNBUFFERED)) { + el->el_flags |= UNBUFFERED; + read_prepare(el); + } else if (!rv && (el->el_flags & UNBUFFERED)) { + el->el_flags &= ~UNBUFFERED; + read_finish(el); + } + rv = 0; + break; + + case EL_PREP_TERM: + rv = va_arg(ap, int); + if (rv) + (void) tty_rawmode(el); + else + (void) tty_cookedmode(el); + rv = 0; + break; + + case EL_SETFP: + { + FILE *fp; + int what; + + what = va_arg(ap, int); + fp = va_arg(ap, FILE *); + + rv = 0; + switch (what) { + case 0: + el->el_infile = fp; + el->el_infd = fileno(fp); + break; + case 1: + el->el_outfile = fp; + el->el_outfd = fileno(fp); + break; + case 2: + el->el_errfile = fp; + el->el_errfd = fileno(fp); + break; + default: + rv = -1; + break; + } + break; + } + + case EL_REFRESH: + re_clear_display(el); + re_refresh(el); + terminal__flush(el); + break; + + default: + rv = -1; + break; + } + + va_end(ap); + return rv; +} + + +/* el_get(): + * retrieve the editline parameters + */ +int +el_wget(EditLine *el, int op, ...) +{ + va_list ap; + int rv; + + if (el == NULL) + return -1; + + va_start(ap, op); + + switch (op) { + case EL_PROMPT: + case EL_RPROMPT: { + el_pfunc_t *p = va_arg(ap, el_pfunc_t *); + rv = prompt_get(el, p, 0, op); + break; + } + case EL_PROMPT_ESC: + case EL_RPROMPT_ESC: { + el_pfunc_t *p = va_arg(ap, el_pfunc_t *); + wchar_t *c = va_arg(ap, wchar_t *); + + rv = prompt_get(el, p, c, op); + break; + } + + case EL_EDITOR: + rv = map_get_editor(el, va_arg(ap, const wchar_t **)); + break; + + case EL_SIGNAL: + *va_arg(ap, int *) = (el->el_flags & HANDLE_SIGNALS); + rv = 0; + break; + + case EL_EDITMODE: + *va_arg(ap, int *) = !(el->el_flags & EDIT_DISABLED); + rv = 0; + break; + + case EL_SAFEREAD: + *va_arg(ap, int *) = (el->el_flags & FIXIO); + rv = 0; + break; + + case EL_TERMINAL: + terminal_get(el, va_arg(ap, const char **)); + rv = 0; + break; + + case EL_GETTC: + { + static char name[] = "gettc"; + char *argv[3]; + argv[0] = name; + argv[1] = va_arg(ap, char *); + argv[2] = va_arg(ap, void *); + rv = terminal_gettc(el, 3, argv); + break; + } + + case EL_GETCFN: + *va_arg(ap, el_rfunc_t *) = el_read_getfn(el->el_read); + rv = 0; + break; + + case EL_CLIENTDATA: + *va_arg(ap, void **) = el->el_data; + rv = 0; + break; + + case EL_UNBUFFERED: + *va_arg(ap, int *) = (el->el_flags & UNBUFFERED) != 0; + rv = 0; + break; + + case EL_GETFP: + { + int what; + FILE **fpp; + + what = va_arg(ap, int); + fpp = va_arg(ap, FILE **); + rv = 0; + switch (what) { + case 0: + *fpp = el->el_infile; + break; + case 1: + *fpp = el->el_outfile; + break; + case 2: + *fpp = el->el_errfile; + break; + default: + rv = -1; + break; + } + break; + } + default: + rv = -1; + break; + } + va_end(ap); + + return rv; +} + + +/* el_line(): + * Return editing info + */ +const LineInfoW * +el_wline(EditLine *el) +{ + + return (const LineInfoW *)(void *)&el->el_line; +} + + +/* el_source(): + * Source a file + */ +int +el_source(EditLine *el, const char *fname) +{ + FILE *fp; + size_t len; + ssize_t slen; + char *ptr; + char *path = NULL; + const wchar_t *dptr; + int error = 0; + + fp = NULL; + if (fname == NULL) { + + /* secure_getenv is guaranteed to be defined and do the right thing here */ + /* because of the defines above which take into account issetugid, */ + /* secure_getenv and __secure_getenv availability. */ + if ((fname = secure_getenv("EDITRC")) == NULL) { + static const char elpath[] = "/.editrc"; + size_t plen = sizeof(elpath); + + if ((ptr = secure_getenv("HOME")) == NULL) + return -1; + plen += strlen(ptr); + if ((path = el_calloc(plen, sizeof(*path))) == NULL) + return -1; + (void)snprintf(path, plen, "%s%s", ptr, + elpath + (*ptr == '\0')); + fname = path; + } + + } + if (fname[0] == '\0') + return -1; + + if (fp == NULL) + fp = fopen(fname, "r"); + if (fp == NULL) { + el_free(path); + return -1; + } + + ptr = NULL; + len = 0; + while ((slen = getline(&ptr, &len, fp)) != -1) { + if (*ptr == '\n') + continue; /* Empty line. */ + if (slen > 0 && ptr[--slen] == '\n') + ptr[slen] = '\0'; + + dptr = ct_decode_string(ptr, &el->el_scratch); + if (!dptr) + continue; + /* loop until first non-space char or EOL */ + while (*dptr != '\0' && iswspace(*dptr)) + dptr++; + if (*dptr == '#') + continue; /* ignore, this is a comment line */ + if ((error = parse_line(el, dptr)) == -1) + break; + } + free(ptr); + + el_free(path); + (void) fclose(fp); + return error; +} + + +/* el_resize(): + * Called from program when terminal is resized + */ +void +el_resize(EditLine *el) +{ + int lins, cols; + sigset_t oset, nset; + + (void) sigemptyset(&nset); + (void) sigaddset(&nset, SIGWINCH); + (void) sigprocmask(SIG_BLOCK, &nset, &oset); + + /* get the correct window size */ + if (terminal_get_size(el, &lins, &cols)) + terminal_change_size(el, lins, cols); + + (void) sigprocmask(SIG_SETMASK, &oset, NULL); +} + + +/* el_beep(): + * Called from the program to beep + */ +void +el_beep(EditLine *el) +{ + + terminal_beep(el); +} + + +/* el_editmode() + * Set the state of EDIT_DISABLED from the `edit' command. + */ +libedit_private int +/*ARGSUSED*/ +el_editmode(EditLine *el, int argc, const wchar_t **argv) +{ + const wchar_t *how; + + if (argv == NULL || argc != 2 || argv[1] == NULL) + return -1; + + how = argv[1]; + if (wcscmp(how, L"on") == 0) { + el->el_flags &= ~EDIT_DISABLED; + tty_rawmode(el); + } else if (wcscmp(how, L"off") == 0) { + tty_cookedmode(el); + el->el_flags |= EDIT_DISABLED; + } + else { + (void) fprintf(el->el_errfile, "edit: Bad value `%ls'.\n", + how); + return -1; + } + return 0; +} diff --git a/src/thirdparty/libedit-3.1/src/el.h b/src/thirdparty/libedit-3.1/src/el.h new file mode 100644 index 000000000..757137839 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/el.h @@ -0,0 +1,159 @@ +/* $NetBSD: el.h,v 1.46 2021/08/15 10:08:41 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)el.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * el.h: Internal structures. + */ +#ifndef _h_el +#define _h_el +/* + * Local defaults + */ +#define KSHVI +#define VIDEFAULT +#define ANCHOR + +#include "histedit.h" +#include "chartype.h" + +#define EL_BUFSIZ ((size_t)1024) /* Maximum line size */ + +#define HANDLE_SIGNALS 0x001 +#define NO_TTY 0x002 +#define EDIT_DISABLED 0x004 +#define UNBUFFERED 0x008 +#define NARROW_HISTORY 0x040 +#define NO_RESET 0x080 +#define FIXIO 0x100 + +typedef unsigned char el_action_t; /* Index to command array */ + +typedef struct coord_t { /* Position on the screen */ + int h; + int v; +} coord_t; + +typedef struct el_line_t { + wchar_t *buffer; /* Input line */ + wchar_t *cursor; /* Cursor position */ + wchar_t *lastchar; /* Last character */ + const wchar_t *limit; /* Max position */ +} el_line_t; + +/* + * Editor state + */ +typedef struct el_state_t { + int inputmode; /* What mode are we in? */ + int doingarg; /* Are we getting an argument? */ + int argument; /* Numeric argument */ + int metanext; /* Is the next char a meta char */ + el_action_t lastcmd; /* Previous command */ + el_action_t thiscmd; /* this command */ + wchar_t thisch; /* char that generated it */ +} el_state_t; + +/* + * Until we come up with something better... + */ +#define el_malloc(a) malloc(a) +#define el_calloc(a,b) calloc(a, b) +#define el_realloc(a,b) realloc(a, b) +#define el_free(a) free(a) + +#include "tty.h" +#include "prompt.h" +#include "literal.h" +#include "keymacro.h" +#include "terminal.h" +#include "refresh.h" +#include "chared.h" +#include "search.h" +#include "hist.h" +#include "map.h" +#include "sig.h" + +struct el_read_t; + +struct editline { + wchar_t *el_prog; /* the program name */ + FILE *el_infile; /* Stdio stuff */ + FILE *el_outfile; /* Stdio stuff */ + FILE *el_errfile; /* Stdio stuff */ + int el_infd; /* Input file descriptor */ + int el_outfd; /* Output file descriptor */ + int el_errfd; /* Error file descriptor */ + int el_flags; /* Various flags. */ + coord_t el_cursor; /* Cursor location */ + wint_t **el_display; /* Real screen image = what is there */ + wint_t **el_vdisplay; /* Virtual screen image = what we see */ + void *el_data; /* Client data */ + el_line_t el_line; /* The current line information */ + el_state_t el_state; /* Current editor state */ + el_terminal_t el_terminal; /* Terminal dependent stuff */ + el_tty_t el_tty; /* Tty dependent stuff */ + el_refresh_t el_refresh; /* Refresh stuff */ + el_prompt_t el_prompt; /* Prompt stuff */ + el_prompt_t el_rprompt; /* Prompt stuff */ + el_literal_t el_literal; /* prompt literal bits */ + el_chared_t el_chared; /* Characted editor stuff */ + el_map_t el_map; /* Key mapping stuff */ + el_keymacro_t el_keymacro; /* Key binding stuff */ + el_history_t el_history; /* History stuff */ + el_search_t el_search; /* Search stuff */ + el_signal_t el_signal; /* Signal handling stuff */ + struct el_read_t *el_read; /* Character reading stuff */ + ct_buffer_t el_visual; /* Buffer for displayable str */ + ct_buffer_t el_scratch; /* Scratch conversion buffer */ + ct_buffer_t el_lgcyconv; /* Buffer for legacy wrappers */ + LineInfo el_lgcylinfo; /* Legacy LineInfo buffer */ +}; + +libedit_private int el_editmode(EditLine *, int, const wchar_t **); +libedit_private EditLine *el_init_internal(const char *, FILE *, FILE *, + FILE *, int, int, int, int); + +#ifdef DEBUG +#define EL_ABORT(a) do { \ + fprintf(el->el_errfile, "%s, %d: ", \ + __FILE__, __LINE__); \ + fprintf a; \ + abort(); \ + } while( /*CONSTCOND*/0); +#else +#define EL_ABORT(a) abort() +#endif +#endif /* _h_el */ diff --git a/src/thirdparty/libedit-3.1/src/eln.c b/src/thirdparty/libedit-3.1/src/eln.c new file mode 100644 index 000000000..563ec2a67 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/eln.c @@ -0,0 +1,394 @@ +/* $NetBSD: eln.c,v 1.37 2022/01/11 18:30:15 christos Exp $ */ + +/*- + * Copyright (c) 2009 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +__RCSID("$NetBSD: eln.c,v 1.37 2022/01/11 18:30:15 christos Exp $"); +#endif /* not lint && not SCCSID */ + +#include <errno.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> + +#include "el.h" + +int +el_getc(EditLine *el, char *cp) +{ + int num_read; + wchar_t wc = 0; + + num_read = el_wgetc(el, &wc); + *cp = '\0'; + if (num_read <= 0) + return num_read; + num_read = wctob(wc); + if (num_read == EOF) { + errno = ERANGE; + return -1; + } else { + *cp = (char)num_read; + return 1; + } +} + + +void +el_push(EditLine *el, const char *str) +{ + /* Using multibyte->wide string decoding works fine under single-byte + * character sets too, and Does The Right Thing. */ + el_wpush(el, ct_decode_string(str, &el->el_lgcyconv)); +} + + +const char * +el_gets(EditLine *el, int *nread) +{ + const wchar_t *tmp; + + tmp = el_wgets(el, nread); + if (tmp != NULL) { + int i; + size_t nwread = 0; + + for (i = 0; i < *nread; i++) + nwread += ct_enc_width(tmp[i]); + *nread = (int)nwread; + } + return ct_encode_string(tmp, &el->el_lgcyconv); +} + + +int +el_parse(EditLine *el, int argc, const char *argv[]) +{ + int ret; + const wchar_t **wargv; + + wargv = (void *)ct_decode_argv(argc, argv, &el->el_lgcyconv); + if (!wargv) + return -1; + ret = el_wparse(el, argc, wargv); + el_free(wargv); + + return ret; +} + + +int +el_set(EditLine *el, int op, ...) +{ + va_list ap; + int ret; + + if (!el) + return -1; + va_start(ap, op); + + switch (op) { + case EL_PROMPT: /* el_pfunc_t */ + case EL_RPROMPT: { + el_pfunc_t p = va_arg(ap, el_pfunc_t); + ret = prompt_set(el, p, 0, op, 0); + break; + } + + case EL_RESIZE: { + el_zfunc_t p = va_arg(ap, el_zfunc_t); + void *arg = va_arg(ap, void *); + ret = ch_resizefun(el, p, arg); + break; + } + + case EL_ALIAS_TEXT: { + el_afunc_t p = va_arg(ap, el_afunc_t); + void *arg = va_arg(ap, void *); + ret = ch_aliasfun(el, p, arg); + break; + } + + case EL_PROMPT_ESC: + case EL_RPROMPT_ESC: { + el_pfunc_t p = va_arg(ap, el_pfunc_t); + int c = va_arg(ap, int); + + ret = prompt_set(el, p, c, op, 0); + break; + } + + case EL_TERMINAL: /* const char * */ + ret = el_wset(el, op, va_arg(ap, char *)); + break; + + case EL_EDITOR: /* const wchar_t * */ + ret = el_wset(el, op, ct_decode_string(va_arg(ap, char *), + &el->el_lgcyconv)); + break; + + case EL_SIGNAL: /* int */ + case EL_EDITMODE: + case EL_SAFEREAD: + case EL_UNBUFFERED: + case EL_PREP_TERM: + ret = el_wset(el, op, va_arg(ap, int)); + break; + + case EL_BIND: /* const char * list -> const wchar_t * list */ + case EL_TELLTC: + case EL_SETTC: + case EL_ECHOTC: + case EL_SETTY: { + const char *argv[20]; + int i; + const wchar_t **wargv; + for (i = 1; i < (int)__arraycount(argv) - 1; ++i) + if ((argv[i] = va_arg(ap, const char *)) == NULL) + break; + argv[0] = argv[i] = NULL; + wargv = (void *)ct_decode_argv(i + 1, argv, &el->el_lgcyconv); + if (!wargv) { + ret = -1; + goto out; + } + /* + * AFAIK we can't portably pass through our new wargv to + * el_wset(), so we have to reimplement the body of + * el_wset() for these ops. + */ + switch (op) { + case EL_BIND: + wargv[0] = L"bind"; + ret = map_bind(el, i, wargv); + break; + case EL_TELLTC: + wargv[0] = L"telltc"; + ret = terminal_telltc(el, i, wargv); + break; + case EL_SETTC: + wargv[0] = L"settc"; + ret = terminal_settc(el, i, wargv); + break; + case EL_ECHOTC: + wargv[0] = L"echotc"; + ret = terminal_echotc(el, i, wargv); + break; + case EL_SETTY: + wargv[0] = L"setty"; + ret = tty_stty(el, i, wargv); + break; + default: + ret = -1; + } + el_free(wargv); + break; + } + + /* XXX: do we need to change el_func_t too? */ + case EL_ADDFN: { /* const char *, const char *, el_func_t */ + const char *args[2]; + el_func_t func; + wchar_t **wargv; + + args[0] = va_arg(ap, const char *); + args[1] = va_arg(ap, const char *); + func = va_arg(ap, el_func_t); + + wargv = ct_decode_argv(2, args, &el->el_lgcyconv); + if (!wargv) { + ret = -1; + goto out; + } + /* XXX: The two strdup's leak */ + ret = map_addfunc(el, wcsdup(wargv[0]), wcsdup(wargv[1]), + func); + el_free(wargv); + break; + } + case EL_HIST: { /* hist_fun_t, const char * */ + hist_fun_t fun = va_arg(ap, hist_fun_t); + void *ptr = va_arg(ap, void *); + ret = hist_set(el, fun, ptr); + el->el_flags |= NARROW_HISTORY; + break; + } + + case EL_GETCFN: /* el_rfunc_t */ + ret = el_wset(el, op, va_arg(ap, el_rfunc_t)); + break; + + case EL_CLIENTDATA: /* void * */ + ret = el_wset(el, op, va_arg(ap, void *)); + break; + + case EL_SETFP: { /* int, FILE * */ + int what = va_arg(ap, int); + FILE *fp = va_arg(ap, FILE *); + ret = el_wset(el, op, what, fp); + break; + } + + case EL_REFRESH: + re_clear_display(el); + re_refresh(el); + terminal__flush(el); + ret = 0; + break; + + default: + ret = -1; + break; + } + +out: + va_end(ap); + return ret; +} + + +int +el_get(EditLine *el, int op, ...) +{ + va_list ap; + int ret; + + if (!el) + return -1; + + va_start(ap, op); + + switch (op) { + case EL_PROMPT: /* el_pfunc_t * */ + case EL_RPROMPT: { + el_pfunc_t *p = va_arg(ap, el_pfunc_t *); + ret = prompt_get(el, p, 0, op); + break; + } + + case EL_PROMPT_ESC: /* el_pfunc_t *, char **/ + case EL_RPROMPT_ESC: { + el_pfunc_t *p = va_arg(ap, el_pfunc_t *); + char *c = va_arg(ap, char *); + wchar_t wc = 0; + ret = prompt_get(el, p, &wc, op); + *c = (char)wc; + break; + } + + case EL_EDITOR: { + const char **p = va_arg(ap, const char **); + const wchar_t *pw; + ret = el_wget(el, op, &pw); + *p = ct_encode_string(pw, &el->el_lgcyconv); + if (!el->el_lgcyconv.csize) + ret = -1; + break; + } + + case EL_TERMINAL: /* const char ** */ + ret = el_wget(el, op, va_arg(ap, const char **)); + break; + + case EL_SIGNAL: /* int * */ + case EL_EDITMODE: + case EL_SAFEREAD: + case EL_UNBUFFERED: + case EL_PREP_TERM: + ret = el_wget(el, op, va_arg(ap, int *)); + break; + + case EL_GETTC: { + char *argv[3]; + static char gettc[] = "gettc"; + argv[0] = gettc; + argv[1] = va_arg(ap, char *); + argv[2] = va_arg(ap, void *); + ret = terminal_gettc(el, 3, argv); + break; + } + + case EL_GETCFN: /* el_rfunc_t */ + ret = el_wget(el, op, va_arg(ap, el_rfunc_t *)); + break; + + case EL_CLIENTDATA: /* void ** */ + ret = el_wget(el, op, va_arg(ap, void **)); + break; + + case EL_GETFP: { /* int, FILE ** */ + int what = va_arg(ap, int); + FILE **fpp = va_arg(ap, FILE **); + ret = el_wget(el, op, what, fpp); + break; + } + + default: + ret = -1; + break; + } + + va_end(ap); + return ret; +} + + +const LineInfo * +el_line(EditLine *el) +{ + const LineInfoW *winfo = el_wline(el); + LineInfo *info = &el->el_lgcylinfo; + size_t offset; + const wchar_t *p; + + info->buffer = ct_encode_string(winfo->buffer, &el->el_lgcyconv); + + offset = 0; + for (p = winfo->buffer; p < winfo->cursor; p++) + offset += ct_enc_width(*p); + info->cursor = info->buffer + offset; + + offset = 0; + for (p = winfo->buffer; p < winfo->lastchar; p++) + offset += ct_enc_width(*p); + info->lastchar = info->buffer + offset; + + return info; +} + + +int +el_insertstr(EditLine *el, const char *str) +{ + return el_winsertstr(el, ct_decode_string(str, &el->el_lgcyconv)); +} + +int +el_replacestr(EditLine *el, const char *str) +{ + return el_wreplacestr(el, ct_decode_string(str, &el->el_lgcyconv)); +} diff --git a/src/thirdparty/libedit-3.1/src/emacs.c b/src/thirdparty/libedit-3.1/src/emacs.c new file mode 100644 index 000000000..0636c28b2 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/emacs.c @@ -0,0 +1,512 @@ +/* $NetBSD: emacs.c,v 1.36 2016/05/09 21:46:56 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)emacs.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: emacs.c,v 1.36 2016/05/09 21:46:56 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * emacs.c: Emacs functions + */ +#include <ctype.h> + +#include "el.h" +#include "emacs.h" +#include "fcns.h" + +/* em_delete_or_list(): + * Delete character under cursor or list completions if at end of line + * [^D] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_delete_or_list(EditLine *el, wint_t c) +{ + + if (el->el_line.cursor == el->el_line.lastchar) { + /* if I'm at the end */ + if (el->el_line.cursor == el->el_line.buffer) { + /* and the beginning */ + terminal_writec(el, c); /* then do an EOF */ + return CC_EOF; + } else { + /* + * Here we could list completions, but it is an + * error right now + */ + terminal_beep(el); + return CC_ERROR; + } + } else { + if (el->el_state.doingarg) + c_delafter(el, el->el_state.argument); + else + c_delafter1(el); + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; + /* bounds check */ + return CC_REFRESH; + } +} + + +/* em_delete_next_word(): + * Cut from cursor to end of current word + * [M-d] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_delete_next_word(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *cp, *p, *kp; + + if (el->el_line.cursor == el->el_line.lastchar) + return CC_ERROR; + + cp = c__next_word(el->el_line.cursor, el->el_line.lastchar, + el->el_state.argument, ce__isword); + + for (p = el->el_line.cursor, kp = el->el_chared.c_kill.buf; p < cp; p++) + /* save the text */ + *kp++ = *p; + el->el_chared.c_kill.last = kp; + + c_delafter(el, (int)(cp - el->el_line.cursor)); /* delete after dot */ + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; + /* bounds check */ + return CC_REFRESH; +} + + +/* em_yank(): + * Paste cut buffer at cursor position + * [^Y] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_yank(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *kp, *cp; + + if (el->el_chared.c_kill.last == el->el_chared.c_kill.buf) + return CC_NORM; + + if (el->el_line.lastchar + + (el->el_chared.c_kill.last - el->el_chared.c_kill.buf) >= + el->el_line.limit) + return CC_ERROR; + + el->el_chared.c_kill.mark = el->el_line.cursor; + cp = el->el_line.cursor; + + /* open the space, */ + c_insert(el, + (int)(el->el_chared.c_kill.last - el->el_chared.c_kill.buf)); + /* copy the chars */ + for (kp = el->el_chared.c_kill.buf; kp < el->el_chared.c_kill.last; kp++) + *cp++ = *kp; + + /* if an arg, cursor at beginning else cursor at end */ + if (el->el_state.argument == 1) + el->el_line.cursor = cp; + + return CC_REFRESH; +} + + +/* em_kill_line(): + * Cut the entire line and save in cut buffer + * [^U] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_kill_line(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *kp, *cp; + + cp = el->el_line.buffer; + kp = el->el_chared.c_kill.buf; + while (cp < el->el_line.lastchar) + *kp++ = *cp++; /* copy it */ + el->el_chared.c_kill.last = kp; + /* zap! -- delete all of it */ + el->el_line.lastchar = el->el_line.buffer; + el->el_line.cursor = el->el_line.buffer; + return CC_REFRESH; +} + + +/* em_kill_region(): + * Cut area between mark and cursor and save in cut buffer + * [^W] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_kill_region(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *kp, *cp; + + if (!el->el_chared.c_kill.mark) + return CC_ERROR; + + if (el->el_chared.c_kill.mark > el->el_line.cursor) { + cp = el->el_line.cursor; + kp = el->el_chared.c_kill.buf; + while (cp < el->el_chared.c_kill.mark) + *kp++ = *cp++; /* copy it */ + el->el_chared.c_kill.last = kp; + c_delafter(el, (int)(cp - el->el_line.cursor)); + } else { /* mark is before cursor */ + cp = el->el_chared.c_kill.mark; + kp = el->el_chared.c_kill.buf; + while (cp < el->el_line.cursor) + *kp++ = *cp++; /* copy it */ + el->el_chared.c_kill.last = kp; + c_delbefore(el, (int)(cp - el->el_chared.c_kill.mark)); + el->el_line.cursor = el->el_chared.c_kill.mark; + } + return CC_REFRESH; +} + + +/* em_copy_region(): + * Copy area between mark and cursor to cut buffer + * [M-W] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_copy_region(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *kp, *cp; + + if (!el->el_chared.c_kill.mark) + return CC_ERROR; + + if (el->el_chared.c_kill.mark > el->el_line.cursor) { + cp = el->el_line.cursor; + kp = el->el_chared.c_kill.buf; + while (cp < el->el_chared.c_kill.mark) + *kp++ = *cp++; /* copy it */ + el->el_chared.c_kill.last = kp; + } else { + cp = el->el_chared.c_kill.mark; + kp = el->el_chared.c_kill.buf; + while (cp < el->el_line.cursor) + *kp++ = *cp++; /* copy it */ + el->el_chared.c_kill.last = kp; + } + return CC_NORM; +} + + +/* em_gosmacs_transpose(): + * Exchange the two characters before the cursor + * Gosling emacs transpose chars [^T] + */ +libedit_private el_action_t +em_gosmacs_transpose(EditLine *el, wint_t c) +{ + + if (el->el_line.cursor > &el->el_line.buffer[1]) { + /* must have at least two chars entered */ + c = el->el_line.cursor[-2]; + el->el_line.cursor[-2] = el->el_line.cursor[-1]; + el->el_line.cursor[-1] = c; + return CC_REFRESH; + } else + return CC_ERROR; +} + + +/* em_next_word(): + * Move next to end of current word + * [M-f] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_next_word(EditLine *el, wint_t c __attribute__((__unused__))) +{ + if (el->el_line.cursor == el->el_line.lastchar) + return CC_ERROR; + + el->el_line.cursor = c__next_word(el->el_line.cursor, + el->el_line.lastchar, + el->el_state.argument, + ce__isword); + + if (el->el_map.type == MAP_VI) + if (el->el_chared.c_vcmd.action != NOP) { + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; +} + + +/* em_upper_case(): + * Uppercase the characters from cursor to end of current word + * [M-u] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_upper_case(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *cp, *ep; + + ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, + el->el_state.argument, ce__isword); + + for (cp = el->el_line.cursor; cp < ep; cp++) + if (iswlower(*cp)) + *cp = towupper(*cp); + + el->el_line.cursor = ep; + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; + return CC_REFRESH; +} + + +/* em_capitol_case(): + * Capitalize the characters from cursor to end of current word + * [M-c] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_capitol_case(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *cp, *ep; + + ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, + el->el_state.argument, ce__isword); + + for (cp = el->el_line.cursor; cp < ep; cp++) { + if (iswalpha(*cp)) { + if (iswlower(*cp)) + *cp = towupper(*cp); + cp++; + break; + } + } + for (; cp < ep; cp++) + if (iswupper(*cp)) + *cp = towlower(*cp); + + el->el_line.cursor = ep; + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; + return CC_REFRESH; +} + + +/* em_lower_case(): + * Lowercase the characters from cursor to end of current word + * [M-l] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_lower_case(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *cp, *ep; + + ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, + el->el_state.argument, ce__isword); + + for (cp = el->el_line.cursor; cp < ep; cp++) + if (iswupper(*cp)) + *cp = towlower(*cp); + + el->el_line.cursor = ep; + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; + return CC_REFRESH; +} + + +/* em_set_mark(): + * Set the mark at cursor + * [^@] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_set_mark(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_chared.c_kill.mark = el->el_line.cursor; + return CC_NORM; +} + + +/* em_exchange_mark(): + * Exchange the cursor and mark + * [^X^X] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_exchange_mark(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *cp; + + cp = el->el_line.cursor; + el->el_line.cursor = el->el_chared.c_kill.mark; + el->el_chared.c_kill.mark = cp; + return CC_CURSOR; +} + + +/* em_universal_argument(): + * Universal argument (argument times 4) + * [^U] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_universal_argument(EditLine *el, wint_t c __attribute__((__unused__))) +{ /* multiply current argument by 4 */ + + if (el->el_state.argument > 1000000) + return CC_ERROR; + el->el_state.doingarg = 1; + el->el_state.argument *= 4; + return CC_ARGHACK; +} + + +/* em_meta_next(): + * Add 8th bit to next character typed + * [<ESC>] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_meta_next(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_state.metanext = 1; + return CC_ARGHACK; +} + + +/* em_toggle_overwrite(): + * Switch from insert to overwrite mode or vice versa + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_toggle_overwrite(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_state.inputmode = (el->el_state.inputmode == MODE_INSERT) ? + MODE_REPLACE : MODE_INSERT; + return CC_NORM; +} + + +/* em_copy_prev_word(): + * Copy current word to cursor + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_copy_prev_word(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *cp, *oldc, *dp; + + if (el->el_line.cursor == el->el_line.buffer) + return CC_ERROR; + + oldc = el->el_line.cursor; + /* does a bounds check */ + cp = c__prev_word(el->el_line.cursor, el->el_line.buffer, + el->el_state.argument, ce__isword); + + c_insert(el, (int)(oldc - cp)); + for (dp = oldc; cp < oldc && dp < el->el_line.lastchar; cp++) + *dp++ = *cp; + + el->el_line.cursor = dp;/* put cursor at end */ + + return CC_REFRESH; +} + + +/* em_inc_search_next(): + * Emacs incremental next search + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_inc_search_next(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_search.patlen = 0; + return ce_inc_search(el, ED_SEARCH_NEXT_HISTORY); +} + + +/* em_inc_search_prev(): + * Emacs incremental reverse search + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_inc_search_prev(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_search.patlen = 0; + return ce_inc_search(el, ED_SEARCH_PREV_HISTORY); +} + + +/* em_delete_prev_char(): + * Delete the character to the left of the cursor + * [^?] + */ +libedit_private el_action_t +/*ARGSUSED*/ +em_delete_prev_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_line.cursor <= el->el_line.buffer) + return CC_ERROR; + + if (el->el_state.doingarg) + c_delbefore(el, el->el_state.argument); + else + c_delbefore1(el); + el->el_line.cursor -= el->el_state.argument; + if (el->el_line.cursor < el->el_line.buffer) + el->el_line.cursor = el->el_line.buffer; + return CC_REFRESH; +} diff --git a/src/thirdparty/libedit-3.1/src/filecomplete.c b/src/thirdparty/libedit-3.1/src/filecomplete.c new file mode 100644 index 000000000..f3f50c50d --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/filecomplete.c @@ -0,0 +1,846 @@ +/* $NetBSD: filecomplete.c,v 1.70 2022/03/12 15:29:17 christos Exp $ */ + +/*- + * Copyright (c) 1997 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jaromir Dolecek. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" + +#if !defined(lint) && !defined(SCCSID) +__RCSID("$NetBSD: filecomplete.c,v 1.70 2022/03/12 15:29:17 christos Exp $"); +#endif /* not lint && not SCCSID */ + +#include <sys/types.h> +#include <sys/stat.h> +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <limits.h> +#include <pwd.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "el.h" +#include "filecomplete.h" + +static const wchar_t break_chars[] = L" \t\n\"\\'`@$><=;|&{("; + +/********************************/ +/* completion functions */ + +/* + * does tilde expansion of strings of type ``~user/foo'' + * if ``user'' isn't valid user name or ``txt'' doesn't start + * w/ '~', returns pointer to strdup()ed copy of ``txt'' + * + * it's the caller's responsibility to free() the returned string + */ +char * +fn_tilde_expand(const char *txt) +{ +#if defined(HAVE_GETPW_R_POSIX) || defined(HAVE_GETPW_R_DRAFT) + struct passwd pwres; + char pwbuf[1024]; +#endif + struct passwd *pass; + const char *pos; + char *temp; + size_t len = 0; + + if (txt[0] != '~') + return strdup(txt); + + pos = strchr(txt + 1, '/'); + if (pos == NULL) { + temp = strdup(txt + 1); + if (temp == NULL) + return NULL; + } else { + /* text until string after slash */ + len = (size_t)(pos - txt + 1); + temp = el_calloc(len, sizeof(*temp)); + if (temp == NULL) + return NULL; + (void)strlcpy(temp, txt + 1, len - 1); + } + if (temp[0] == 0) { +#ifdef HAVE_GETPW_R_POSIX + if (getpwuid_r(getuid(), &pwres, pwbuf, sizeof(pwbuf), + &pass) != 0) + pass = NULL; +#elif HAVE_GETPW_R_DRAFT + pass = getpwuid_r(getuid(), &pwres, pwbuf, sizeof(pwbuf)); +#else + pass = getpwuid(getuid()); +#endif + } else { +#ifdef HAVE_GETPW_R_POSIX + if (getpwnam_r(temp, &pwres, pwbuf, sizeof(pwbuf), &pass) != 0) + pass = NULL; +#elif HAVE_GETPW_R_DRAFT + pass = getpwnam_r(temp, &pwres, pwbuf, sizeof(pwbuf)); +#else + pass = getpwnam(temp); +#endif + } + el_free(temp); /* value no more needed */ + if (pass == NULL) + return strdup(txt); + + /* update pointer txt to point at string immedially following */ + /* first slash */ + txt += len; + + len = strlen(pass->pw_dir) + 1 + strlen(txt) + 1; + temp = el_calloc(len, sizeof(*temp)); + if (temp == NULL) + return NULL; + (void)snprintf(temp, len, "%s/%s", pass->pw_dir, txt); + + return temp; +} + +static int +needs_escaping(wchar_t c) +{ + switch (c) { + case '\'': + case '"': + case '(': + case ')': + case '\\': + case '<': + case '>': + case '$': + case '#': + case ' ': + case '\n': + case '\t': + case '?': + case ';': + case '`': + case '@': + case '=': + case '|': + case '{': + case '}': + case '&': + case '*': + case '[': + return 1; + default: + return 0; + } +} + +static int +needs_dquote_escaping(char c) +{ + switch (c) { + case '"': + case '\\': + case '`': + case '$': + return 1; + default: + return 0; + } +} + + +static wchar_t * +unescape_string(const wchar_t *string, size_t length) +{ + size_t i; + size_t j = 0; + wchar_t *unescaped = el_calloc(length + 1, sizeof(*string)); + if (unescaped == NULL) + return NULL; + for (i = 0; i < length ; i++) { + if (string[i] == '\\') + continue; + unescaped[j++] = string[i]; + } + unescaped[j] = 0; + return unescaped; +} + +static char * +escape_filename(EditLine * el, const char *filename, int single_match, + const char *(*app_func)(const char *)) +{ + size_t original_len = 0; + size_t escaped_character_count = 0; + size_t offset = 0; + size_t newlen; + const char *s; + char c; + size_t s_quoted = 0; /* does the input contain a single quote */ + size_t d_quoted = 0; /* does the input contain a double quote */ + char *escaped_str; + wchar_t *temp = el->el_line.buffer; + const char *append_char = NULL; + + if (filename == NULL) + return NULL; + + while (temp != el->el_line.cursor) { + /* + * If we see a single quote but have not seen a double quote + * so far set/unset s_quote, unless it is already quoted + */ + if (temp[0] == '\'' && !d_quoted && + (temp == el->el_line.buffer || temp[-1] != '\\')) + s_quoted = !s_quoted; + /* + * vice versa to the above condition + */ + else if (temp[0] == '"' && !s_quoted) + d_quoted = !d_quoted; + temp++; + } + + /* Count number of special characters so that we can calculate + * number of extra bytes needed in the new string + */ + for (s = filename; *s; s++, original_len++) { + c = *s; + /* Inside a single quote only single quotes need escaping */ + if (s_quoted && c == '\'') { + escaped_character_count += 3; + continue; + } + /* Inside double quotes only ", \, ` and $ need escaping */ + if (d_quoted && needs_dquote_escaping(c)) { + escaped_character_count++; + continue; + } + if (!s_quoted && !d_quoted && needs_escaping(c)) + escaped_character_count++; + } + + newlen = original_len + escaped_character_count + 1; + if (s_quoted || d_quoted) + newlen++; + + if (single_match && app_func) + newlen++; + + if ((escaped_str = el_malloc(newlen)) == NULL) + return NULL; + + for (s = filename; *s; s++) { + c = *s; + if (!needs_escaping(c)) { + /* no escaping is required continue as usual */ + escaped_str[offset++] = c; + continue; + } + + /* single quotes inside single quotes require special handling */ + if (c == '\'' && s_quoted) { + escaped_str[offset++] = '\''; + escaped_str[offset++] = '\\'; + escaped_str[offset++] = '\''; + escaped_str[offset++] = '\''; + continue; + } + + /* Otherwise no escaping needed inside single quotes */ + if (s_quoted) { + escaped_str[offset++] = c; + continue; + } + + /* No escaping needed inside a double quoted string either + * unless we see a '$', '\', '`', or '"' (itself) + */ + if (d_quoted && !needs_dquote_escaping(c)) { + escaped_str[offset++] = c; + continue; + } + + /* If we reach here that means escaping is actually needed */ + escaped_str[offset++] = '\\'; + escaped_str[offset++] = c; + } + + if (single_match && app_func) { + escaped_str[offset] = 0; + append_char = app_func(filename); + /* we want to append space only if we are not inside quotes */ + if (append_char[0] == ' ') { + if (!s_quoted && !d_quoted) + escaped_str[offset++] = append_char[0]; + } else + escaped_str[offset++] = append_char[0]; + } + + /* close the quotes if single match and the match is not a directory */ + if (single_match && (append_char && append_char[0] == ' ')) { + if (s_quoted) + escaped_str[offset++] = '\''; + else if (d_quoted) + escaped_str[offset++] = '"'; + } + + escaped_str[offset] = 0; + return escaped_str; +} + +/* + * return first found file name starting by the ``text'' or NULL if no + * such file can be found + * value of ``state'' is ignored + * + * it's the caller's responsibility to free the returned string + */ +char * +fn_filename_completion_function(const char *text, int state) +{ + static DIR *dir = NULL; + static char *filename = NULL, *dirname = NULL, *dirpath = NULL; + static size_t filename_len = 0; + struct dirent *entry; + char *temp; + const char *pos; + size_t len; + + if (state == 0 || dir == NULL) { + pos = strrchr(text, '/'); + if (pos) { + char *nptr; + pos++; + nptr = el_realloc(filename, (strlen(pos) + 1) * + sizeof(*nptr)); + if (nptr == NULL) { + el_free(filename); + filename = NULL; + return NULL; + } + filename = nptr; + (void)strcpy(filename, pos); + len = (size_t)(pos - text); /* including last slash */ + + nptr = el_realloc(dirname, (len + 1) * + sizeof(*nptr)); + if (nptr == NULL) { + el_free(dirname); + dirname = NULL; + return NULL; + } + dirname = nptr; + (void)strlcpy(dirname, text, len + 1); + } else { + el_free(filename); + if (*text == 0) + filename = NULL; + else { + filename = strdup(text); + if (filename == NULL) + return NULL; + } + el_free(dirname); + dirname = NULL; + } + + if (dir != NULL) { + (void)closedir(dir); + dir = NULL; + } + + /* support for ``~user'' syntax */ + + el_free(dirpath); + dirpath = NULL; + if (dirname == NULL) { + if ((dirname = strdup("")) == NULL) + return NULL; + dirpath = strdup("./"); + } else if (*dirname == '~') + dirpath = fn_tilde_expand(dirname); + else + dirpath = strdup(dirname); + + if (dirpath == NULL) + return NULL; + + dir = opendir(dirpath); + if (!dir) + return NULL; /* cannot open the directory */ + + /* will be used in cycle */ + filename_len = filename ? strlen(filename) : 0; + } + + /* find the match */ + while ((entry = readdir(dir)) != NULL) { + /* skip . and .. */ + if (entry->d_name[0] == '.' && (!entry->d_name[1] + || (entry->d_name[1] == '.' && !entry->d_name[2]))) + continue; + if (filename_len == 0) + break; + /* otherwise, get first entry where first */ + /* filename_len characters are equal */ + if (entry->d_name[0] == filename[0] + /* Some dirents have d_namlen, but it is not portable. */ + && strlen(entry->d_name) >= filename_len + && strncmp(entry->d_name, filename, + filename_len) == 0) + break; + } + + if (entry) { /* match found */ + + /* Some dirents have d_namlen, but it is not portable. */ + len = strlen(entry->d_name); + + len = strlen(dirname) + len + 1; + temp = el_calloc(len, sizeof(*temp)); + if (temp == NULL) + return NULL; + (void)snprintf(temp, len, "%s%s", dirname, entry->d_name); + } else { + (void)closedir(dir); + dir = NULL; + temp = NULL; + } + + return temp; +} + + +static const char * +append_char_function(const char *name) +{ + struct stat stbuf; + char *expname = *name == '~' ? fn_tilde_expand(name) : NULL; + const char *rs = " "; + + if (stat(expname ? expname : name, &stbuf) == -1) + goto out; + if (S_ISDIR(stbuf.st_mode)) + rs = "/"; +out: + if (expname) + el_free(expname); + return rs; +} +/* + * returns list of completions for text given + * non-static for readline. + */ +char ** completion_matches(const char *, char *(*)(const char *, int)); +char ** +completion_matches(const char *text, char *(*genfunc)(const char *, int)) +{ + char **match_list = NULL, *retstr, *prevstr; + size_t match_list_len, max_equal, which, i; + size_t matches; + + matches = 0; + match_list_len = 1; + while ((retstr = (*genfunc) (text, (int)matches)) != NULL) { + /* allow for list terminator here */ + if (matches + 3 >= match_list_len) { + char **nmatch_list; + while (matches + 3 >= match_list_len) + match_list_len <<= 1; + nmatch_list = el_realloc(match_list, + match_list_len * sizeof(*nmatch_list)); + if (nmatch_list == NULL) { + el_free(match_list); + return NULL; + } + match_list = nmatch_list; + + } + match_list[++matches] = retstr; + } + + if (!match_list) + return NULL; /* nothing found */ + + /* find least denominator and insert it to match_list[0] */ + which = 2; + prevstr = match_list[1]; + max_equal = strlen(prevstr); + for (; which <= matches; which++) { + for (i = 0; i < max_equal && + prevstr[i] == match_list[which][i]; i++) + continue; + max_equal = i; + } + + retstr = el_calloc(max_equal + 1, sizeof(*retstr)); + if (retstr == NULL) { + el_free(match_list); + return NULL; + } + (void)strlcpy(retstr, match_list[1], max_equal + 1); + match_list[0] = retstr; + + /* add NULL as last pointer to the array */ + match_list[matches + 1] = NULL; + + return match_list; +} + +/* + * Sort function for qsort(). Just wrapper around strcasecmp(). + */ +static int +_fn_qsort_string_compare(const void *i1, const void *i2) +{ + const char *s1 = ((const char * const *)i1)[0]; + const char *s2 = ((const char * const *)i2)[0]; + + return strcasecmp(s1, s2); +} + +/* + * Display list of strings in columnar format on readline's output stream. + * 'matches' is list of strings, 'num' is number of strings in 'matches', + * 'width' is maximum length of string in 'matches'. + * + * matches[0] is not one of the match strings, but it is counted in + * num, so the strings are matches[1] *through* matches[num-1]. + */ +void +fn_display_match_list(EditLine * el, char **matches, size_t num, size_t width, + const char *(*app_func) (const char *)) +{ + size_t line, lines, col, cols, thisguy; + int screenwidth = el->el_terminal.t_size.h; + if (app_func == NULL) + app_func = append_char_function; + + /* Ignore matches[0]. Avoid 1-based array logic below. */ + matches++; + num--; + + /* + * Find out how many entries can be put on one line; count + * with one space between strings the same way it's printed. + */ + cols = (size_t)screenwidth / (width + 2); + if (cols == 0) + cols = 1; + + /* how many lines of output, rounded up */ + lines = (num + cols - 1) / cols; + + /* Sort the items. */ + qsort(matches, num, sizeof(char *), _fn_qsort_string_compare); + + /* + * On the ith line print elements i, i+lines, i+lines*2, etc. + */ + for (line = 0; line < lines; line++) { + for (col = 0; col < cols; col++) { + thisguy = line + col * lines; + if (thisguy >= num) + break; + (void)fprintf(el->el_outfile, "%s%s%s", + col == 0 ? "" : " ", matches[thisguy], + (*app_func)(matches[thisguy])); + (void)fprintf(el->el_outfile, "%-*s", + (int) (width - strlen(matches[thisguy])), ""); + } + (void)fprintf(el->el_outfile, "\n"); + } +} + +static wchar_t * +find_word_to_complete(const wchar_t * cursor, const wchar_t * buffer, + const wchar_t * word_break, const wchar_t * special_prefixes, size_t * length, + int do_unescape) +{ + /* We now look backwards for the start of a filename/variable word */ + const wchar_t *ctemp = cursor; + wchar_t *temp; + size_t len; + + /* if the cursor is placed at a slash or a quote, we need to find the + * word before it + */ + if (ctemp > buffer) { + switch (ctemp[-1]) { + case '\\': + case '\'': + case '"': + ctemp--; + break; + default: + break; + } + } + + for (;;) { + if (ctemp <= buffer) + break; + if (ctemp - buffer >= 2 && ctemp[-2] == '\\' && + needs_escaping(ctemp[-1])) { + ctemp -= 2; + continue; + } + if (wcschr(word_break, ctemp[-1])) + break; + if (special_prefixes && wcschr(special_prefixes, ctemp[-1])) + break; + ctemp--; + } + + len = (size_t) (cursor - ctemp); + if (len == 1 && (ctemp[0] == '\'' || ctemp[0] == '"')) { + len = 0; + ctemp++; + } + *length = len; + if (do_unescape) { + wchar_t *unescaped_word = unescape_string(ctemp, len); + if (unescaped_word == NULL) + return NULL; + return unescaped_word; + } + temp = el_malloc((len + 1) * sizeof(*temp)); + (void) wcsncpy(temp, ctemp, len); + temp[len] = '\0'; + return temp; +} + +/* + * Complete the word at or before point, + * 'what_to_do' says what to do with the completion. + * \t means do standard completion. + * `?' means list the possible completions. + * `*' means insert all of the possible completions. + * `!' means to do standard completion, and list all possible completions if + * there is more than one. + * + * Note: '*' support is not implemented + * '!' could never be invoked + */ +int +fn_complete2(EditLine *el, + char *(*complete_func)(const char *, int), + char **(*attempted_completion_function)(const char *, int, int), + const wchar_t *word_break, const wchar_t *special_prefixes, + const char *(*app_func)(const char *), size_t query_items, + int *completion_type, int *over, int *point, int *end, + unsigned int flags) +{ + const LineInfoW *li; + wchar_t *temp; + char **matches; + char *completion; + size_t len; + int what_to_do = '\t'; + int retval = CC_NORM; + int do_unescape = flags & FN_QUOTE_MATCH; + + if (el->el_state.lastcmd == el->el_state.thiscmd) + what_to_do = '?'; + + /* readline's rl_complete() has to be told what we did... */ + if (completion_type != NULL) + *completion_type = what_to_do; + + if (!complete_func) + complete_func = fn_filename_completion_function; + if (!app_func) + app_func = append_char_function; + + li = el_wline(el); + temp = find_word_to_complete(li->cursor, + li->buffer, word_break, special_prefixes, &len, do_unescape); + if (temp == NULL) + goto out; + + /* these can be used by function called in completion_matches() */ + /* or (*attempted_completion_function)() */ + if (point != NULL) + *point = (int)(li->cursor - li->buffer); + if (end != NULL) + *end = (int)(li->lastchar - li->buffer); + + if (attempted_completion_function) { + int cur_off = (int)(li->cursor - li->buffer); + matches = (*attempted_completion_function)( + ct_encode_string(temp, &el->el_scratch), + cur_off - (int)len, cur_off); + } else + matches = NULL; + if (!attempted_completion_function || + (over != NULL && !*over && !matches)) + matches = completion_matches( + ct_encode_string(temp, &el->el_scratch), complete_func); + + if (over != NULL) + *over = 0; + + if (matches == NULL) { + goto out; + } + int i; + size_t matches_num, maxlen, match_len, match_display=1; + int single_match = matches[2] == NULL && + (matches[1] == NULL || strcmp(matches[0], matches[1]) == 0); + + retval = CC_REFRESH; + + if (matches[0][0] != '\0') { + el_deletestr(el, (int)len); + if (flags & FN_QUOTE_MATCH) + completion = escape_filename(el, matches[0], + single_match, app_func); + else + completion = strdup(matches[0]); + if (completion == NULL) + goto out2; + + /* + * Replace the completed string with the common part of + * all possible matches if there is a possible completion. + */ + el_winsertstr(el, + ct_decode_string(completion, &el->el_scratch)); + + if (single_match && attempted_completion_function && + !(flags & FN_QUOTE_MATCH)) + { + /* + * We found an exact match. Add a space after + * it, unless we do filename completion and the + * object is a directory. Also do necessary + * escape quoting + */ + el_winsertstr(el, ct_decode_string( + (*app_func)(completion), &el->el_scratch)); + } + free(completion); + } + + + if (!single_match && (what_to_do == '!' || what_to_do == '?')) { + /* + * More than one match and requested to list possible + * matches. + */ + + for(i = 1, maxlen = 0; matches[i]; i++) { + match_len = strlen(matches[i]); + if (match_len > maxlen) + maxlen = match_len; + } + /* matches[1] through matches[i-1] are available */ + matches_num = (size_t)(i - 1); + + /* newline to get on next line from command line */ + (void)fprintf(el->el_outfile, "\n"); + + /* + * If there are too many items, ask user for display + * confirmation. + */ + if (matches_num > query_items) { + (void)fprintf(el->el_outfile, + "Display all %zu possibilities? (y or n) ", + matches_num); + (void)fflush(el->el_outfile); + if (getc(stdin) != 'y') + match_display = 0; + (void)fprintf(el->el_outfile, "\n"); + } + + if (match_display) { + /* + * Interface of this function requires the + * strings be matches[1..num-1] for compat. + * We have matches_num strings not counting + * the prefix in matches[0], so we need to + * add 1 to matches_num for the call. + */ + fn_display_match_list(el, matches, + matches_num+1, maxlen, app_func); + } + retval = CC_REDISPLAY; + } else if (matches[0][0]) { + /* + * There was some common match, but the name was + * not complete enough. Next tab will print possible + * completions. + */ + el_beep(el); + } else { + /* lcd is not a valid object - further specification */ + /* is needed */ + el_beep(el); + retval = CC_NORM; + } + + /* free elements of array and the array itself */ +out2: + for (i = 0; matches[i]; i++) + el_free(matches[i]); + el_free(matches); + matches = NULL; + +out: + el_free(temp); + return retval; +} + +int +fn_complete(EditLine *el, + char *(*complete_func)(const char *, int), + char **(*attempted_completion_function)(const char *, int, int), + const wchar_t *word_break, const wchar_t *special_prefixes, + const char *(*app_func)(const char *), size_t query_items, + int *completion_type, int *over, int *point, int *end) +{ + return fn_complete2(el, complete_func, attempted_completion_function, + word_break, special_prefixes, app_func, query_items, + completion_type, over, point, end, + attempted_completion_function ? 0 : FN_QUOTE_MATCH); +} + +/* + * el-compatible wrapper around rl_complete; needed for key binding + */ +/* ARGSUSED */ +unsigned char +_el_fn_complete(EditLine *el, int ch __attribute__((__unused__))) +{ + return (unsigned char)fn_complete(el, NULL, NULL, + break_chars, NULL, NULL, (size_t)100, + NULL, NULL, NULL, NULL); +} diff --git a/src/thirdparty/libedit-3.1/src/filecomplete.h b/src/thirdparty/libedit-3.1/src/filecomplete.h new file mode 100644 index 000000000..796ae7ab3 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/filecomplete.h @@ -0,0 +1,51 @@ +/* $NetBSD: filecomplete.h,v 1.14 2021/09/26 13:45:54 christos Exp $ */ + +/*- + * Copyright (c) 1997 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jaromir Dolecek. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FILECOMPLETE_H_ +#define _FILECOMPLETE_H_ + +int fn_complete(EditLine *, + char *(*)(const char *, int), + char **(*)(const char *, int, int), + const wchar_t *, const wchar_t *, const char *(*)(const char *), size_t, + int *, int *, int *, int *); +int fn_complete2(EditLine *, + char *(*)(const char *, int), + char **(*)(const char *, int, int), + const wchar_t *, const wchar_t *, const char *(*)(const char *), size_t, + int *, int *, int *, int *, unsigned int); +#define FN_QUOTE_MATCH 1U /* Quote the returned match */ + +void fn_display_match_list(EditLine *, char **, size_t, size_t, + const char *(*)(const char *)); +char *fn_tilde_expand(const char *); +char *fn_filename_completion_function(const char *, int); + +#endif diff --git a/src/thirdparty/libedit-3.1/src/getline.c b/src/thirdparty/libedit-3.1/src/getline.c new file mode 100644 index 000000000..1861533df --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/getline.c @@ -0,0 +1,111 @@ +/* $NetBSD: getline.c,v 1.2 2014/09/16 17:23:50 christos Exp $ */ + +/*- + * Copyright (c) 2011 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Christos Zoulas. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_NBTOOL_CONFIG_H +#include "nbtool_config.h" +#endif + +#if !HAVE_GETLINE +#include <stdlib.h> + +#ifndef HAVE_NBTOOL_CONFIG_H +/* These headers are required, but included from nbtool_config.h */ +#include <stdio.h> +#include <unistd.h> +#include <errno.h> +#include <string.h> +#endif + +ssize_t +getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp) +{ + char *ptr, *eptr; + + + if (*buf == NULL || *bufsiz == 0) { + *bufsiz = BUFSIZ; + if ((*buf = malloc(*bufsiz)) == NULL) + return -1; + } + + for (ptr = *buf, eptr = *buf + *bufsiz;;) { + int c = fgetc(fp); + if (c == -1) { + if (feof(fp)) { + ssize_t diff = (ssize_t)(ptr - *buf); + if (diff != 0) { + *ptr = '\0'; + return diff; + } + } + return -1; + } + *ptr++ = c; + if (c == delimiter) { + *ptr = '\0'; + return ptr - *buf; + } + if (ptr + 2 >= eptr) { + char *nbuf; + size_t nbufsiz = *bufsiz * 2; + ssize_t d = ptr - *buf; + if ((nbuf = realloc(*buf, nbufsiz)) == NULL) + return -1; + *buf = nbuf; + *bufsiz = nbufsiz; + eptr = nbuf + nbufsiz; + ptr = nbuf + d; + } + } +} + +ssize_t +getline(char **buf, size_t *bufsiz, FILE *fp) +{ + return getdelim(buf, bufsiz, '\n', fp); +} + +#endif + +#ifdef TEST +int +main(int argc, char *argv[]) +{ + char *p = NULL; + ssize_t len; + size_t n = 0; + + while ((len = getline(&p, &n, stdin)) != -1) + (void)printf("%zd %s", len, p); + free(p); + return 0; +} +#endif diff --git a/src/thirdparty/libedit-3.1/src/hist.c b/src/thirdparty/libedit-3.1/src/hist.c new file mode 100644 index 000000000..19ce1c161 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/hist.c @@ -0,0 +1,252 @@ +/* $NetBSD: hist.c,v 1.34 2019/07/23 10:19:35 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)hist.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: hist.c,v 1.34 2019/07/23 10:19:35 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * hist.c: History access functions + */ +#include <stdlib.h> +#include <string.h> +#include <vis.h> + +#include "el.h" + +/* hist_init(): + * Initialization function. + */ +libedit_private int +hist_init(EditLine *el) +{ + + el->el_history.fun = NULL; + el->el_history.ref = NULL; + el->el_history.buf = el_calloc(EL_BUFSIZ, sizeof(*el->el_history.buf)); + if (el->el_history.buf == NULL) + return -1; + el->el_history.sz = EL_BUFSIZ; + el->el_history.last = el->el_history.buf; + return 0; +} + + +/* hist_end(): + * clean up history; + */ +libedit_private void +hist_end(EditLine *el) +{ + + el_free(el->el_history.buf); + el->el_history.buf = NULL; +} + + +/* hist_set(): + * Set new history interface + */ +libedit_private int +hist_set(EditLine *el, hist_fun_t fun, void *ptr) +{ + + el->el_history.ref = ptr; + el->el_history.fun = fun; + return 0; +} + + +/* hist_get(): + * Get a history line and update it in the buffer. + * eventno tells us the event to get. + */ +libedit_private el_action_t +hist_get(EditLine *el) +{ + const wchar_t *hp; + int h; + size_t blen, hlen; + + if (el->el_history.eventno == 0) { /* if really the current line */ + (void) wcsncpy(el->el_line.buffer, el->el_history.buf, + el->el_history.sz); + el->el_line.lastchar = el->el_line.buffer + + (el->el_history.last - el->el_history.buf); + +#ifdef KSHVI + if (el->el_map.type == MAP_VI) + el->el_line.cursor = el->el_line.buffer; + else +#endif /* KSHVI */ + el->el_line.cursor = el->el_line.lastchar; + + return CC_REFRESH; + } + if (el->el_history.ref == NULL) + return CC_ERROR; + + hp = HIST_FIRST(el); + + if (hp == NULL) + return CC_ERROR; + + for (h = 1; h < el->el_history.eventno; h++) + if ((hp = HIST_NEXT(el)) == NULL) + goto out; + + hlen = wcslen(hp) + 1; + blen = (size_t)(el->el_line.limit - el->el_line.buffer); + if (hlen > blen && !ch_enlargebufs(el, hlen)) + goto out; + + memcpy(el->el_line.buffer, hp, hlen * sizeof(*hp)); + el->el_line.lastchar = el->el_line.buffer + hlen - 1; + + if (el->el_line.lastchar > el->el_line.buffer + && el->el_line.lastchar[-1] == '\n') + el->el_line.lastchar--; + if (el->el_line.lastchar > el->el_line.buffer + && el->el_line.lastchar[-1] == ' ') + el->el_line.lastchar--; +#ifdef KSHVI + if (el->el_map.type == MAP_VI) + el->el_line.cursor = el->el_line.buffer; + else +#endif /* KSHVI */ + el->el_line.cursor = el->el_line.lastchar; + + return CC_REFRESH; +out: + el->el_history.eventno = h; + return CC_ERROR; + +} + + +/* hist_command() + * process a history command + */ +libedit_private int +hist_command(EditLine *el, int argc, const wchar_t **argv) +{ + const wchar_t *str; + int num; + HistEventW ev; + + if (el->el_history.ref == NULL) + return -1; + + if (argc == 1 || wcscmp(argv[1], L"list") == 0) { + size_t maxlen = 0; + char *buf = NULL; + int hno = 1; + /* List history entries */ + + for (str = HIST_LAST(el); str != NULL; str = HIST_PREV(el)) { + char *ptr = + ct_encode_string(str, &el->el_scratch); + size_t len = strlen(ptr); + if (len > 0 && ptr[len - 1] == '\n') + ptr[--len] = '\0'; + len = len * 4 + 1; + if (len >= maxlen) { + maxlen = len + 1024; + char *nbuf = el_realloc(buf, maxlen); + if (nbuf == NULL) { + el_free(buf); + return -1; + } + buf = nbuf; + } + strvis(buf, ptr, VIS_NL); + (void) fprintf(el->el_outfile, "%d\t%s\n", + hno++, buf); + } + el_free(buf); + return 0; + } + + if (argc != 3) + return -1; + + num = (int)wcstol(argv[2], NULL, 0); + + if (wcscmp(argv[1], L"size") == 0) + return history_w(el->el_history.ref, &ev, H_SETSIZE, num); + + if (wcscmp(argv[1], L"unique") == 0) + return history_w(el->el_history.ref, &ev, H_SETUNIQUE, num); + + return -1; +} + +/* hist_enlargebuf() + * Enlarge history buffer to specified value. Called from el_enlargebufs(). + * Return 0 for failure, 1 for success. + */ +libedit_private int +/*ARGSUSED*/ +hist_enlargebuf(EditLine *el, size_t oldsz, size_t newsz) +{ + wchar_t *newbuf; + + newbuf = el_realloc(el->el_history.buf, newsz * sizeof(*newbuf)); + if (!newbuf) + return 0; + + (void) memset(&newbuf[oldsz], '\0', (newsz - oldsz) * sizeof(*newbuf)); + + el->el_history.last = newbuf + + (el->el_history.last - el->el_history.buf); + el->el_history.buf = newbuf; + el->el_history.sz = newsz; + + return 1; +} + +libedit_private wchar_t * +hist_convert(EditLine *el, int fn, void *arg) +{ + HistEventW ev; + if ((*(el)->el_history.fun)((el)->el_history.ref, &ev, fn, arg) == -1) + return NULL; + return ct_decode_string((const char *)(const void *)ev.str, + &el->el_scratch); +} diff --git a/src/thirdparty/libedit-3.1/src/hist.h b/src/thirdparty/libedit-3.1/src/hist.h new file mode 100644 index 000000000..8f5ab0839 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/hist.h @@ -0,0 +1,80 @@ +/* $NetBSD: hist.h,v 1.23 2017/09/01 10:19:10 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)hist.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * el.hist.c: History functions + */ +#ifndef _h_el_hist +#define _h_el_hist + +typedef int (*hist_fun_t)(void *, HistEventW *, int, ...); + +typedef struct el_history_t { + wchar_t *buf; /* The history buffer */ + size_t sz; /* Size of history buffer */ + wchar_t *last; /* The last character */ + int eventno; /* Event we are looking for */ + void *ref; /* Argument for history fcns */ + hist_fun_t fun; /* Event access */ + HistEventW ev; /* Event cookie */ +} el_history_t; + +#define HIST_FUN_INTERNAL(el, fn, arg) \ + ((((*(el)->el_history.fun) ((el)->el_history.ref, &(el)->el_history.ev, \ + fn, arg)) == -1) ? NULL : (el)->el_history.ev.str) +#define HIST_FUN(el, fn, arg) \ + (((el)->el_flags & NARROW_HISTORY) ? hist_convert(el, fn, arg) : \ + HIST_FUN_INTERNAL(el, fn, arg)) + +#define HIST_NEXT(el) HIST_FUN(el, H_NEXT, NULL) +#define HIST_FIRST(el) HIST_FUN(el, H_FIRST, NULL) +#define HIST_LAST(el) HIST_FUN(el, H_LAST, NULL) +#define HIST_PREV(el) HIST_FUN(el, H_PREV, NULL) +#define HIST_SET(el, num) HIST_FUN(el, H_SET, num) +#define HIST_LOAD(el, fname) HIST_FUN(el, H_LOAD fname) +#define HIST_SAVE(el, fname) HIST_FUN(el, H_SAVE fname) +#define HIST_SAVE_FP(el, fp) HIST_FUN(el, H_SAVE_FP, fp) +#define HIST_NSAVE_FP(el, n, fp) HIST_FUN(el, H_NSAVE_FP, n, fp) + +libedit_private int hist_init(EditLine *); +libedit_private void hist_end(EditLine *); +libedit_private el_action_t hist_get(EditLine *); +libedit_private int hist_set(EditLine *, hist_fun_t, void *); +libedit_private int hist_command(EditLine *, int, const wchar_t **); +libedit_private int hist_enlargebuf(EditLine *, size_t, size_t); +libedit_private wchar_t *hist_convert(EditLine *, int, void *); + +#endif /* _h_el_hist */ diff --git a/src/thirdparty/libedit-3.1/src/histedit.h b/src/thirdparty/libedit-3.1/src/histedit.h new file mode 100644 index 000000000..1e215fc88 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/histedit.h @@ -0,0 +1,321 @@ +/* $NetBSD: histedit.h,v 1.61 2022/02/08 21:13:22 rillig Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)histedit.h 8.2 (Berkeley) 1/3/94 + */ + +/* + * histedit.h: Line editor and history interface. + */ +#ifndef _HISTEDIT_H_ +#define _HISTEDIT_H_ + +#define LIBEDIT_MAJOR 2 +#define LIBEDIT_MINOR 11 + +#include <sys/types.h> +#include <stdio.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * ==== Editing ==== + */ + +typedef struct editline EditLine; + +/* + * For user-defined function interface + */ +typedef struct lineinfo { + const char *buffer; + const char *cursor; + const char *lastchar; +} LineInfo; + +/* + * EditLine editor function return codes. + * For user-defined function interface + */ +#define CC_NORM 0 +#define CC_NEWLINE 1 +#define CC_EOF 2 +#define CC_ARGHACK 3 +#define CC_REFRESH 4 +#define CC_CURSOR 5 +#define CC_ERROR 6 +#define CC_FATAL 7 +#define CC_REDISPLAY 8 +#define CC_REFRESH_BEEP 9 + +/* + * Initialization, cleanup, and resetting + */ +EditLine *el_init(const char *, FILE *, FILE *, FILE *); +EditLine *el_init_fd(const char *, FILE *, FILE *, FILE *, + int, int, int); +void el_end(EditLine *); +void el_reset(EditLine *); + +/* + * Get a line, a character or push a string back in the input queue + */ +const char *el_gets(EditLine *, int *); +int el_getc(EditLine *, char *); +void el_push(EditLine *, const char *); + +/* + * Beep! + */ +void el_beep(EditLine *); + +/* + * High level function internals control + * Parses argc, argv array and executes builtin editline commands + */ +int el_parse(EditLine *, int, const char **); + +/* + * Low level editline access functions + */ +int el_set(EditLine *, int, ...); +int el_get(EditLine *, int, ...); +unsigned char _el_fn_complete(EditLine *, int); + +/* + * el_set/el_get parameters + * + * When using el_wset/el_wget (as opposed to el_set/el_get): + * Char is wchar_t, otherwise it is char. + * prompt_func is el_wpfunc_t, otherwise it is el_pfunc_t . + + * Prompt function prototypes are: + * typedef char *(*el_pfunct_t) (EditLine *); + * typedef wchar_t *(*el_wpfunct_t) (EditLine *); + * + * For operations that support set or set/get, the argument types listed are for + * the "set" operation. For "get", each listed type must be a pointer. + * E.g. EL_EDITMODE takes an int when set, but an int* when get. + * + * Operations that only support "get" have the correct argument types listed. + */ +#define EL_PROMPT 0 /* , prompt_func); set/get */ +#define EL_TERMINAL 1 /* , const char *); set/get */ +#define EL_EDITOR 2 /* , const Char *); set/get */ +#define EL_SIGNAL 3 /* , int); set/get */ +#define EL_BIND 4 /* , const Char *, ..., NULL); set */ +#define EL_TELLTC 5 /* , const Char *, ..., NULL); set */ +#define EL_SETTC 6 /* , const Char *, ..., NULL); set */ +#define EL_ECHOTC 7 /* , const Char *, ..., NULL); set */ +#define EL_SETTY 8 /* , const Char *, ..., NULL); set */ +#define EL_ADDFN 9 /* , const Char *, const Char, set */ + /* el_func_t); */ +#define EL_HIST 10 /* , hist_fun_t, const void *); set */ +#define EL_EDITMODE 11 /* , int); set/get */ +#define EL_RPROMPT 12 /* , prompt_func); set/get */ +#define EL_GETCFN 13 /* , el_rfunc_t); set/get */ +#define EL_CLIENTDATA 14 /* , void *); set/get */ +#define EL_UNBUFFERED 15 /* , int); set/get */ +#define EL_PREP_TERM 16 /* , int); set */ +#define EL_GETTC 17 /* , const Char *, ..., NULL); get */ +#define EL_GETFP 18 /* , int, FILE **); get */ +#define EL_SETFP 19 /* , int, FILE *); set */ +#define EL_REFRESH 20 /* , void); set */ +#define EL_PROMPT_ESC 21 /* , prompt_func, Char); set/get */ +#define EL_RPROMPT_ESC 22 /* , prompt_func, Char); set/get */ +#define EL_RESIZE 23 /* , el_zfunc_t, void *); set */ +#define EL_ALIAS_TEXT 24 /* , el_afunc_t, void *); set */ +#define EL_SAFEREAD 25 /* , int); set/get */ + +#define EL_BUILTIN_GETCFN (NULL) + +/* + * Source named file or $PWD/.editrc or $HOME/.editrc + */ +int el_source(EditLine *, const char *); + +/* + * Must be called when the terminal changes size; If EL_SIGNAL + * is set this is done automatically otherwise it is the responsibility + * of the application + */ +void el_resize(EditLine *); + +/* + * User-defined function interface. + */ +const LineInfo *el_line(EditLine *); +int el_insertstr(EditLine *, const char *); +void el_deletestr(EditLine *, int); +int el_replacestr(EditLine *, const char *); +int el_deletestr1(EditLine *, int, int); + +/* + * ==== History ==== + */ + +typedef struct history History; + +typedef struct HistEvent { + int num; + const char *str; +} HistEvent; + +/* + * History access functions. + */ +History * history_init(void); +void history_end(History *); + +int history(History *, HistEvent *, int, ...); + +#define H_FUNC 0 /* , UTSL */ +#define H_SETSIZE 1 /* , const int); */ +#define H_GETSIZE 2 /* , void); */ +#define H_FIRST 3 /* , void); */ +#define H_LAST 4 /* , void); */ +#define H_PREV 5 /* , void); */ +#define H_NEXT 6 /* , void); */ +#define H_CURR 8 /* , const int); */ +#define H_SET 7 /* , int); */ +#define H_ADD 9 /* , const wchar_t *); */ +#define H_ENTER 10 /* , const wchar_t *); */ +#define H_APPEND 11 /* , const wchar_t *); */ +#define H_END 12 /* , void); */ +#define H_NEXT_STR 13 /* , const wchar_t *); */ +#define H_PREV_STR 14 /* , const wchar_t *); */ +#define H_NEXT_EVENT 15 /* , const int); */ +#define H_PREV_EVENT 16 /* , const int); */ +#define H_LOAD 17 /* , const char *); */ +#define H_SAVE 18 /* , const char *); */ +#define H_CLEAR 19 /* , void); */ +#define H_SETUNIQUE 20 /* , int); */ +#define H_GETUNIQUE 21 /* , void); */ +#define H_DEL 22 /* , int); */ +#define H_NEXT_EVDATA 23 /* , const int, histdata_t *); */ +#define H_DELDATA 24 /* , int, histdata_t *);*/ +#define H_REPLACE 25 /* , const char *, histdata_t); */ +#define H_SAVE_FP 26 /* , FILE *); */ +#define H_NSAVE_FP 27 /* , size_t, FILE *); */ + + + +/* + * ==== Tokenization ==== + */ + +typedef struct tokenizer Tokenizer; + +/* + * String tokenization functions, using simplified sh(1) quoting rules + */ +Tokenizer *tok_init(const char *); +void tok_end(Tokenizer *); +void tok_reset(Tokenizer *); +int tok_line(Tokenizer *, const LineInfo *, + int *, const char ***, int *, int *); +int tok_str(Tokenizer *, const char *, + int *, const char ***); + +/* + * Begin Wide Character Support + */ +#include <wchar.h> +#include <wctype.h> + +#ifndef HAVE_WCSDUP +wchar_t * wcsdup(const wchar_t *str); +#endif + +/* + * ==== Editing ==== + */ +typedef struct lineinfow { + const wchar_t *buffer; + const wchar_t *cursor; + const wchar_t *lastchar; +} LineInfoW; + +typedef int (*el_rfunc_t)(EditLine *, wchar_t *); + +const wchar_t *el_wgets(EditLine *, int *); +int el_wgetc(EditLine *, wchar_t *); +void el_wpush(EditLine *, const wchar_t *); + +int el_wparse(EditLine *, int, const wchar_t **); + +int el_wset(EditLine *, int, ...); +int el_wget(EditLine *, int, ...); + +int el_cursor(EditLine *, int); +const LineInfoW *el_wline(EditLine *); +int el_winsertstr(EditLine *, const wchar_t *); +#define el_wdeletestr el_deletestr +int el_wreplacestr(EditLine *, const wchar_t *); + +/* + * ==== History ==== + */ +typedef struct histeventW { + int num; + const wchar_t *str; +} HistEventW; + +typedef struct historyW HistoryW; + +HistoryW * history_winit(void); +void history_wend(HistoryW *); + +int history_w(HistoryW *, HistEventW *, int, ...); + +/* + * ==== Tokenization ==== + */ +typedef struct tokenizerW TokenizerW; + +/* Wide character tokenizer support */ +TokenizerW *tok_winit(const wchar_t *); +void tok_wend(TokenizerW *); +void tok_wreset(TokenizerW *); +int tok_wline(TokenizerW *, const LineInfoW *, + int *, const wchar_t ***, int *, int *); +int tok_wstr(TokenizerW *, const wchar_t *, + int *, const wchar_t ***); + +#ifdef __cplusplus +} +#endif + +#endif /* _HISTEDIT_H_ */ diff --git a/src/thirdparty/libedit-3.1/src/history.c b/src/thirdparty/libedit-3.1/src/history.c new file mode 100644 index 000000000..2a8ca1aa2 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/history.c @@ -0,0 +1,1183 @@ +/* $NetBSD: history.c,v 1.63 2019/10/08 19:17:57 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef NARROWCHAR +#include "config.h" +#endif + +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)history.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: history.c,v 1.63 2019/10/08 19:17:57 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * hist.c: TYPE(History) access functions + */ +#include <sys/stat.h> +#include <stdarg.h> +#include <stdlib.h> +#include <string.h> +#include <vis.h> + +static const char hist_cookie[] = "_HiStOrY_V2_\n"; + +#include "histedit.h" + + +#ifdef NARROWCHAR + +#define Char char +#define FUN(prefix, rest) prefix ## _ ## rest +#define FUNW(type) type +#define TYPE(type) type +#define STR(x) x + +#define Strlen(s) strlen(s) +#define Strdup(s) strdup(s) +#define Strcmp(d, s) strcmp(d, s) +#define Strncmp(d, s, n) strncmp(d, s, n) +#define Strncpy(d, s, n) strncpy(d, s, n) +#define Strncat(d, s, n) strncat(d, s, n) +#define ct_decode_string(s, b) (s) +#define ct_encode_string(s, b) (s) + +#else +#include "chartype.h" + +#define Char wchar_t +#define FUN(prefix, rest) prefix ## _w ## rest +#define FUNW(type) type ## _w +#define TYPE(type) type ## W +#define STR(x) L ## x + +#define Strlen(s) wcslen(s) +#define Strdup(s) wcsdup(s) +#define Strcmp(d, s) wcscmp(d, s) +#define Strncmp(d, s, n) wcsncmp(d, s, n) +#define Strncpy(d, s, n) wcsncpy(d, s, n) +#define Strncat(d, s, n) wcsncat(d, s, n) + +#endif + + +typedef int (*history_gfun_t)(void *, TYPE(HistEvent) *); +typedef int (*history_efun_t)(void *, TYPE(HistEvent) *, const Char *); +typedef void (*history_vfun_t)(void *, TYPE(HistEvent) *); +typedef int (*history_sfun_t)(void *, TYPE(HistEvent) *, const int); + +struct TYPE(history) { + void *h_ref; /* Argument for history fcns */ + int h_ent; /* Last entry point for history */ + history_gfun_t h_first; /* Get the first element */ + history_gfun_t h_next; /* Get the next element */ + history_gfun_t h_last; /* Get the last element */ + history_gfun_t h_prev; /* Get the previous element */ + history_gfun_t h_curr; /* Get the current element */ + history_sfun_t h_set; /* Set the current element */ + history_sfun_t h_del; /* Set the given element */ + history_vfun_t h_clear; /* Clear the history list */ + history_efun_t h_enter; /* Add an element */ + history_efun_t h_add; /* Append to an element */ +}; + +#define HNEXT(h, ev) (*(h)->h_next)((h)->h_ref, ev) +#define HFIRST(h, ev) (*(h)->h_first)((h)->h_ref, ev) +#define HPREV(h, ev) (*(h)->h_prev)((h)->h_ref, ev) +#define HLAST(h, ev) (*(h)->h_last)((h)->h_ref, ev) +#define HCURR(h, ev) (*(h)->h_curr)((h)->h_ref, ev) +#define HSET(h, ev, n) (*(h)->h_set)((h)->h_ref, ev, n) +#define HCLEAR(h, ev) (*(h)->h_clear)((h)->h_ref, ev) +#define HENTER(h, ev, str) (*(h)->h_enter)((h)->h_ref, ev, str) +#define HADD(h, ev, str) (*(h)->h_add)((h)->h_ref, ev, str) +#define HDEL(h, ev, n) (*(h)->h_del)((h)->h_ref, ev, n) + +#define h_strdup(a) Strdup(a) +#define h_malloc(a) malloc(a) +#define h_realloc(a, b) realloc((a), (b)) +#define h_free(a) free(a) + +typedef struct { + int num; + Char *str; +} HistEventPrivate; + + +static int history_setsize(TYPE(History) *, TYPE(HistEvent) *, int); +static int history_getsize(TYPE(History) *, TYPE(HistEvent) *); +static int history_setunique(TYPE(History) *, TYPE(HistEvent) *, int); +static int history_getunique(TYPE(History) *, TYPE(HistEvent) *); +static int history_set_fun(TYPE(History) *, TYPE(History) *); +static int history_load(TYPE(History) *, const char *); +static int history_save(TYPE(History) *, const char *); +static int history_save_fp(TYPE(History) *, size_t, FILE *); +static int history_prev_event(TYPE(History) *, TYPE(HistEvent) *, int); +static int history_next_event(TYPE(History) *, TYPE(HistEvent) *, int); +static int history_next_string(TYPE(History) *, TYPE(HistEvent) *, + const Char *); +static int history_prev_string(TYPE(History) *, TYPE(HistEvent) *, + const Char *); + + +/***********************************************************************/ + +/* + * Builtin- history implementation + */ +typedef struct hentry_t { + TYPE(HistEvent) ev; /* What we return */ + void *data; /* data */ + struct hentry_t *next; /* Next entry */ + struct hentry_t *prev; /* Previous entry */ +} hentry_t; + +typedef struct history_t { + hentry_t list; /* Fake list header element */ + hentry_t *cursor; /* Current element in the list */ + int max; /* Maximum number of events */ + int cur; /* Current number of events */ + int eventid; /* For generation of unique event id */ + int flags; /* TYPE(History) flags */ +#define H_UNIQUE 1 /* Store only unique elements */ +} history_t; + +static int history_def_next(void *, TYPE(HistEvent) *); +static int history_def_first(void *, TYPE(HistEvent) *); +static int history_def_prev(void *, TYPE(HistEvent) *); +static int history_def_last(void *, TYPE(HistEvent) *); +static int history_def_curr(void *, TYPE(HistEvent) *); +static int history_def_set(void *, TYPE(HistEvent) *, const int); +static void history_def_clear(void *, TYPE(HistEvent) *); +static int history_def_enter(void *, TYPE(HistEvent) *, const Char *); +static int history_def_add(void *, TYPE(HistEvent) *, const Char *); +static int history_def_del(void *, TYPE(HistEvent) *, const int); + +static int history_def_init(void **, TYPE(HistEvent) *, int); +static int history_def_insert(history_t *, TYPE(HistEvent) *, const Char *); +static void history_def_delete(history_t *, TYPE(HistEvent) *, hentry_t *); + +static int history_deldata_nth(history_t *, TYPE(HistEvent) *, int, void **); +static int history_set_nth(void *, TYPE(HistEvent) *, int); + +#define history_def_setsize(p, num)(void) (((history_t *)p)->max = (num)) +#define history_def_getsize(p) (((history_t *)p)->cur) +#define history_def_getunique(p) (((((history_t *)p)->flags) & H_UNIQUE) != 0) +#define history_def_setunique(p, uni) \ + if (uni) \ + (((history_t *)p)->flags) |= H_UNIQUE; \ + else \ + (((history_t *)p)->flags) &= ~H_UNIQUE + +#define he_strerror(code) he_errlist[code] +#define he_seterrev(evp, code) {\ + evp->num = code;\ + evp->str = he_strerror(code);\ + } + +/* error messages */ +static const Char *const he_errlist[] = { + STR("OK"), + STR("unknown error"), + STR("malloc() failed"), + STR("first event not found"), + STR("last event not found"), + STR("empty list"), + STR("no next event"), + STR("no previous event"), + STR("current event is invalid"), + STR("event not found"), + STR("can't read history from file"), + STR("can't write history"), + STR("required parameter(s) not supplied"), + STR("history size negative"), + STR("function not allowed with other history-functions-set the default"), + STR("bad parameters") +}; +/* error codes */ +#define _HE_OK 0 +#define _HE_UNKNOWN 1 +#define _HE_MALLOC_FAILED 2 +#define _HE_FIRST_NOTFOUND 3 +#define _HE_LAST_NOTFOUND 4 +#define _HE_EMPTY_LIST 5 +#define _HE_END_REACHED 6 +#define _HE_START_REACHED 7 +#define _HE_CURR_INVALID 8 +#define _HE_NOT_FOUND 9 +#define _HE_HIST_READ 10 +#define _HE_HIST_WRITE 11 +#define _HE_PARAM_MISSING 12 +#define _HE_SIZE_NEGATIVE 13 +#define _HE_NOT_ALLOWED 14 +#define _HE_BAD_PARAM 15 + +/* history_def_first(): + * Default function to return the first event in the history. + */ +static int +history_def_first(void *p, TYPE(HistEvent) *ev) +{ + history_t *h = (history_t *) p; + + h->cursor = h->list.next; + if (h->cursor != &h->list) + *ev = h->cursor->ev; + else { + he_seterrev(ev, _HE_FIRST_NOTFOUND); + return -1; + } + + return 0; +} + + +/* history_def_last(): + * Default function to return the last event in the history. + */ +static int +history_def_last(void *p, TYPE(HistEvent) *ev) +{ + history_t *h = (history_t *) p; + + h->cursor = h->list.prev; + if (h->cursor != &h->list) + *ev = h->cursor->ev; + else { + he_seterrev(ev, _HE_LAST_NOTFOUND); + return -1; + } + + return 0; +} + + +/* history_def_next(): + * Default function to return the next event in the history. + */ +static int +history_def_next(void *p, TYPE(HistEvent) *ev) +{ + history_t *h = (history_t *) p; + + if (h->cursor == &h->list) { + he_seterrev(ev, _HE_EMPTY_LIST); + return -1; + } + + if (h->cursor->next == &h->list) { + he_seterrev(ev, _HE_END_REACHED); + return -1; + } + + h->cursor = h->cursor->next; + *ev = h->cursor->ev; + + return 0; +} + + +/* history_def_prev(): + * Default function to return the previous event in the history. + */ +static int +history_def_prev(void *p, TYPE(HistEvent) *ev) +{ + history_t *h = (history_t *) p; + + if (h->cursor == &h->list) { + he_seterrev(ev, + (h->cur > 0) ? _HE_END_REACHED : _HE_EMPTY_LIST); + return -1; + } + + if (h->cursor->prev == &h->list) { + he_seterrev(ev, _HE_START_REACHED); + return -1; + } + + h->cursor = h->cursor->prev; + *ev = h->cursor->ev; + + return 0; +} + + +/* history_def_curr(): + * Default function to return the current event in the history. + */ +static int +history_def_curr(void *p, TYPE(HistEvent) *ev) +{ + history_t *h = (history_t *) p; + + if (h->cursor != &h->list) + *ev = h->cursor->ev; + else { + he_seterrev(ev, + (h->cur > 0) ? _HE_CURR_INVALID : _HE_EMPTY_LIST); + return -1; + } + + return 0; +} + + +/* history_def_set(): + * Default function to set the current event in the history to the + * given one. + */ +static int +history_def_set(void *p, TYPE(HistEvent) *ev, const int n) +{ + history_t *h = (history_t *) p; + + if (h->cur == 0) { + he_seterrev(ev, _HE_EMPTY_LIST); + return -1; + } + if (h->cursor == &h->list || h->cursor->ev.num != n) { + for (h->cursor = h->list.next; h->cursor != &h->list; + h->cursor = h->cursor->next) + if (h->cursor->ev.num == n) + break; + } + if (h->cursor == &h->list) { + he_seterrev(ev, _HE_NOT_FOUND); + return -1; + } + return 0; +} + + +/* history_set_nth(): + * Default function to set the current event in the history to the + * n-th one. + */ +static int +history_set_nth(void *p, TYPE(HistEvent) *ev, int n) +{ + history_t *h = (history_t *) p; + + if (h->cur == 0) { + he_seterrev(ev, _HE_EMPTY_LIST); + return -1; + } + for (h->cursor = h->list.prev; h->cursor != &h->list; + h->cursor = h->cursor->prev) + if (n-- <= 0) + break; + if (h->cursor == &h->list) { + he_seterrev(ev, _HE_NOT_FOUND); + return -1; + } + return 0; +} + + +/* history_def_add(): + * Append string to element + */ +static int +history_def_add(void *p, TYPE(HistEvent) *ev, const Char *str) +{ + history_t *h = (history_t *) p; + size_t len, elen, slen; + Char *s; + HistEventPrivate *evp = (void *)&h->cursor->ev; + + if (h->cursor == &h->list) + return history_def_enter(p, ev, str); + elen = Strlen(evp->str); + slen = Strlen(str); + len = elen + slen + 1; + s = h_malloc(len * sizeof(*s)); + if (s == NULL) { + he_seterrev(ev, _HE_MALLOC_FAILED); + return -1; + } + memcpy(s, evp->str, elen * sizeof(*s)); + memcpy(s + elen, str, slen * sizeof(*s)); + s[len - 1] = '\0'; + h_free(evp->str); + evp->str = s; + *ev = h->cursor->ev; + return 0; +} + + +static int +history_deldata_nth(history_t *h, TYPE(HistEvent) *ev, + int num, void **data) +{ + if (history_set_nth(h, ev, num) != 0) + return -1; + /* magic value to skip delete (just set to n-th history) */ + if (data == (void **)-1) + return 0; + ev->str = Strdup(h->cursor->ev.str); + ev->num = h->cursor->ev.num; + if (data) + *data = h->cursor->data; + history_def_delete(h, ev, h->cursor); + return 0; +} + + +/* history_def_del(): + * Delete element hp of the h list + */ +/* ARGSUSED */ +static int +history_def_del(void *p, TYPE(HistEvent) *ev __attribute__((__unused__)), + const int num) +{ + history_t *h = (history_t *) p; + if (history_def_set(h, ev, num) != 0) + return -1; + ev->str = Strdup(h->cursor->ev.str); + ev->num = h->cursor->ev.num; + history_def_delete(h, ev, h->cursor); + return 0; +} + + +/* history_def_delete(): + * Delete element hp of the h list + */ +/* ARGSUSED */ +static void +history_def_delete(history_t *h, + TYPE(HistEvent) *ev __attribute__((__unused__)), hentry_t *hp) +{ + HistEventPrivate *evp = (void *)&hp->ev; + if (hp == &h->list) + abort(); + if (h->cursor == hp) { + h->cursor = hp->prev; + if (h->cursor == &h->list) + h->cursor = hp->next; + } + hp->prev->next = hp->next; + hp->next->prev = hp->prev; + h_free(evp->str); + h_free(hp); + h->cur--; +} + + +/* history_def_insert(): + * Insert element with string str in the h list + */ +static int +history_def_insert(history_t *h, TYPE(HistEvent) *ev, const Char *str) +{ + hentry_t *c; + + c = h_malloc(sizeof(*c)); + if (c == NULL) + goto oomem; + if ((c->ev.str = h_strdup(str)) == NULL) { + h_free(c); + goto oomem; + } + c->data = NULL; + c->ev.num = ++h->eventid; + c->next = h->list.next; + c->prev = &h->list; + h->list.next->prev = c; + h->list.next = c; + h->cur++; + h->cursor = c; + + *ev = c->ev; + return 0; +oomem: + he_seterrev(ev, _HE_MALLOC_FAILED); + return -1; +} + + +/* history_def_enter(): + * Default function to enter an item in the history + */ +static int +history_def_enter(void *p, TYPE(HistEvent) *ev, const Char *str) +{ + history_t *h = (history_t *) p; + + if ((h->flags & H_UNIQUE) != 0 && h->list.next != &h->list && + Strcmp(h->list.next->ev.str, str) == 0) + return 0; + + if (history_def_insert(h, ev, str) == -1) + return -1; /* error, keep error message */ + + /* + * Always keep at least one entry. + * This way we don't have to check for the empty list. + */ + while (h->cur > h->max && h->cur > 0) + history_def_delete(h, ev, h->list.prev); + + return 1; +} + + +/* history_def_init(): + * Default history initialization function + */ +/* ARGSUSED */ +static int +history_def_init(void **p, TYPE(HistEvent) *ev __attribute__((__unused__)), int n) +{ + history_t *h = (history_t *) h_malloc(sizeof(*h)); + if (h == NULL) + return -1; + + if (n <= 0) + n = 0; + h->eventid = 0; + h->cur = 0; + h->max = n; + h->list.next = h->list.prev = &h->list; + h->list.ev.str = NULL; + h->list.ev.num = 0; + h->cursor = &h->list; + h->flags = 0; + *p = h; + return 0; +} + + +/* history_def_clear(): + * Default history cleanup function + */ +static void +history_def_clear(void *p, TYPE(HistEvent) *ev) +{ + history_t *h = (history_t *) p; + + while (h->list.prev != &h->list) + history_def_delete(h, ev, h->list.prev); + h->cursor = &h->list; + h->eventid = 0; + h->cur = 0; +} + + + + +/************************************************************************/ + +/* history_init(): + * Initialization function. + */ +TYPE(History) * +FUN(history,init)(void) +{ + TYPE(HistEvent) ev; + TYPE(History) *h = (TYPE(History) *) h_malloc(sizeof(*h)); + if (h == NULL) + return NULL; + + if (history_def_init(&h->h_ref, &ev, 0) == -1) { + h_free(h); + return NULL; + } + h->h_ent = -1; + h->h_next = history_def_next; + h->h_first = history_def_first; + h->h_last = history_def_last; + h->h_prev = history_def_prev; + h->h_curr = history_def_curr; + h->h_set = history_def_set; + h->h_clear = history_def_clear; + h->h_enter = history_def_enter; + h->h_add = history_def_add; + h->h_del = history_def_del; + + return h; +} + + +/* history_end(): + * clean up history; + */ +void +FUN(history,end)(TYPE(History) *h) +{ + TYPE(HistEvent) ev; + + if (h->h_next == history_def_next) + history_def_clear(h->h_ref, &ev); + h_free(h->h_ref); + h_free(h); +} + + + +/* history_setsize(): + * Set history number of events + */ +static int +history_setsize(TYPE(History) *h, TYPE(HistEvent) *ev, int num) +{ + + if (h->h_next != history_def_next) { + he_seterrev(ev, _HE_NOT_ALLOWED); + return -1; + } + if (num < 0) { + he_seterrev(ev, _HE_BAD_PARAM); + return -1; + } + history_def_setsize(h->h_ref, num); + return 0; +} + + +/* history_getsize(): + * Get number of events currently in history + */ +static int +history_getsize(TYPE(History) *h, TYPE(HistEvent) *ev) +{ + if (h->h_next != history_def_next) { + he_seterrev(ev, _HE_NOT_ALLOWED); + return -1; + } + ev->num = history_def_getsize(h->h_ref); + if (ev->num < -1) { + he_seterrev(ev, _HE_SIZE_NEGATIVE); + return -1; + } + return 0; +} + + +/* history_setunique(): + * Set if adjacent equal events should not be entered in history. + */ +static int +history_setunique(TYPE(History) *h, TYPE(HistEvent) *ev, int uni) +{ + + if (h->h_next != history_def_next) { + he_seterrev(ev, _HE_NOT_ALLOWED); + return -1; + } + history_def_setunique(h->h_ref, uni); + return 0; +} + + +/* history_getunique(): + * Get if adjacent equal events should not be entered in history. + */ +static int +history_getunique(TYPE(History) *h, TYPE(HistEvent) *ev) +{ + if (h->h_next != history_def_next) { + he_seterrev(ev, _HE_NOT_ALLOWED); + return -1; + } + ev->num = history_def_getunique(h->h_ref); + return 0; +} + + +/* history_set_fun(): + * Set history functions + */ +static int +history_set_fun(TYPE(History) *h, TYPE(History) *nh) +{ + TYPE(HistEvent) ev; + + if (nh->h_first == NULL || nh->h_next == NULL || nh->h_last == NULL || + nh->h_prev == NULL || nh->h_curr == NULL || nh->h_set == NULL || + nh->h_enter == NULL || nh->h_add == NULL || nh->h_clear == NULL || + nh->h_del == NULL || nh->h_ref == NULL) { + if (h->h_next != history_def_next) { + if (history_def_init(&h->h_ref, &ev, 0) == -1) + return -1; + h->h_first = history_def_first; + h->h_next = history_def_next; + h->h_last = history_def_last; + h->h_prev = history_def_prev; + h->h_curr = history_def_curr; + h->h_set = history_def_set; + h->h_clear = history_def_clear; + h->h_enter = history_def_enter; + h->h_add = history_def_add; + h->h_del = history_def_del; + } + return -1; + } + if (h->h_next == history_def_next) + history_def_clear(h->h_ref, &ev); + + h->h_ent = -1; + h->h_first = nh->h_first; + h->h_next = nh->h_next; + h->h_last = nh->h_last; + h->h_prev = nh->h_prev; + h->h_curr = nh->h_curr; + h->h_set = nh->h_set; + h->h_clear = nh->h_clear; + h->h_enter = nh->h_enter; + h->h_add = nh->h_add; + h->h_del = nh->h_del; + + return 0; +} + + +/* history_load(): + * TYPE(History) load function + */ +static int +history_load(TYPE(History) *h, const char *fname) +{ + FILE *fp; + char *line; + size_t llen; + ssize_t sz; + size_t max_size; + char *ptr; + int i = -1; + TYPE(HistEvent) ev; + Char *decode_result; +#ifndef NARROWCHAR + static ct_buffer_t conv; +#endif + + if ((fp = fopen(fname, "r")) == NULL) + return i; + + line = NULL; + llen = 0; + if ((sz = getline(&line, &llen, fp)) == -1) + goto done; + + if (strncmp(line, hist_cookie, (size_t)sz) != 0) + goto done; + + ptr = h_malloc((max_size = 1024) * sizeof(*ptr)); + if (ptr == NULL) + goto done; + for (i = 0; (sz = getline(&line, &llen, fp)) != -1; i++) { + if (sz > 0 && line[sz - 1] == '\n') + line[--sz] = '\0'; + if (max_size < (size_t)sz) { + char *nptr; + max_size = ((size_t)sz + 1024) & (size_t)~1023; + nptr = h_realloc(ptr, max_size * sizeof(*ptr)); + if (nptr == NULL) { + i = -1; + goto oomem; + } + ptr = nptr; + } + (void) strunvis(ptr, line); + decode_result = ct_decode_string(ptr, &conv); + if (decode_result == NULL) + continue; + if (HENTER(h, &ev, decode_result) == -1) { + i = -1; + goto oomem; + } + } +oomem: + h_free(ptr); +done: + free(line); + (void) fclose(fp); + return i; +} + + +/* history_save_fp(): + * TYPE(History) save function + */ +static int +history_save_fp(TYPE(History) *h, size_t nelem, FILE *fp) +{ + TYPE(HistEvent) ev; + int i = -1, retval; + size_t len, max_size; + char *ptr; + const char *str; +#ifndef NARROWCHAR + static ct_buffer_t conv; +#endif + + if (fchmod(fileno(fp), S_IRUSR|S_IWUSR) == -1) + goto done; + if (ftell(fp) == 0 && fputs(hist_cookie, fp) == EOF) + goto done; + ptr = h_malloc((max_size = 1024) * sizeof(*ptr)); + if (ptr == NULL) + goto done; + if (nelem != (size_t)-1) { + for (retval = HFIRST(h, &ev); retval != -1 && nelem-- > 0; + retval = HNEXT(h, &ev)) + continue; + } else + retval = -1; + + if (retval == -1) + retval = HLAST(h, &ev); + + for (i = 0; retval != -1; retval = HPREV(h, &ev), i++) { + str = ct_encode_string(ev.str, &conv); + len = strlen(str) * 4 + 1; + if (len > max_size) { + char *nptr; + max_size = (len + 1024) & (size_t)~1023; + nptr = h_realloc(ptr, max_size * sizeof(*ptr)); + if (nptr == NULL) { + i = -1; + goto oomem; + } + ptr = nptr; + } + (void) strvis(ptr, str, VIS_WHITE); + (void) fprintf(fp, "%s\n", ptr); + } +oomem: + h_free(ptr); +done: + return i; +} + + +/* history_save(): + * History save function + */ +static int +history_save(TYPE(History) *h, const char *fname) +{ + FILE *fp; + int i; + + if ((fp = fopen(fname, "w")) == NULL) + return -1; + + i = history_save_fp(h, (size_t)-1, fp); + + (void) fclose(fp); + return i; +} + + +/* history_prev_event(): + * Find the previous event, with number given + */ +static int +history_prev_event(TYPE(History) *h, TYPE(HistEvent) *ev, int num) +{ + int retval; + + for (retval = HCURR(h, ev); retval != -1; retval = HPREV(h, ev)) + if (ev->num == num) + return 0; + + he_seterrev(ev, _HE_NOT_FOUND); + return -1; +} + + +static int +history_next_evdata(TYPE(History) *h, TYPE(HistEvent) *ev, int num, void **d) +{ + int retval; + + for (retval = HCURR(h, ev); retval != -1; retval = HPREV(h, ev)) + if (ev->num == num) { + if (d) + *d = ((history_t *)h->h_ref)->cursor->data; + return 0; + } + + he_seterrev(ev, _HE_NOT_FOUND); + return -1; +} + + +/* history_next_event(): + * Find the next event, with number given + */ +static int +history_next_event(TYPE(History) *h, TYPE(HistEvent) *ev, int num) +{ + int retval; + + for (retval = HCURR(h, ev); retval != -1; retval = HNEXT(h, ev)) + if (ev->num == num) + return 0; + + he_seterrev(ev, _HE_NOT_FOUND); + return -1; +} + + +/* history_prev_string(): + * Find the previous event beginning with string + */ +static int +history_prev_string(TYPE(History) *h, TYPE(HistEvent) *ev, const Char *str) +{ + size_t len = Strlen(str); + int retval; + + for (retval = HCURR(h, ev); retval != -1; retval = HNEXT(h, ev)) + if (Strncmp(str, ev->str, len) == 0) + return 0; + + he_seterrev(ev, _HE_NOT_FOUND); + return -1; +} + + +/* history_next_string(): + * Find the next event beginning with string + */ +static int +history_next_string(TYPE(History) *h, TYPE(HistEvent) *ev, const Char *str) +{ + size_t len = Strlen(str); + int retval; + + for (retval = HCURR(h, ev); retval != -1; retval = HPREV(h, ev)) + if (Strncmp(str, ev->str, len) == 0) + return 0; + + he_seterrev(ev, _HE_NOT_FOUND); + return -1; +} + + +/* history(): + * User interface to history functions. + */ +int +FUNW(history)(TYPE(History) *h, TYPE(HistEvent) *ev, int fun, ...) +{ + va_list va; + const Char *str; + int retval; + + va_start(va, fun); + + he_seterrev(ev, _HE_OK); + + switch (fun) { + case H_GETSIZE: + retval = history_getsize(h, ev); + break; + + case H_SETSIZE: + retval = history_setsize(h, ev, va_arg(va, int)); + break; + + case H_GETUNIQUE: + retval = history_getunique(h, ev); + break; + + case H_SETUNIQUE: + retval = history_setunique(h, ev, va_arg(va, int)); + break; + + case H_ADD: + str = va_arg(va, const Char *); + retval = HADD(h, ev, str); + break; + + case H_DEL: + retval = HDEL(h, ev, va_arg(va, const int)); + break; + + case H_ENTER: + str = va_arg(va, const Char *); + if ((retval = HENTER(h, ev, str)) != -1) + h->h_ent = ev->num; + break; + + case H_APPEND: + str = va_arg(va, const Char *); + if ((retval = HSET(h, ev, h->h_ent)) != -1) + retval = HADD(h, ev, str); + break; + + case H_FIRST: + retval = HFIRST(h, ev); + break; + + case H_NEXT: + retval = HNEXT(h, ev); + break; + + case H_LAST: + retval = HLAST(h, ev); + break; + + case H_PREV: + retval = HPREV(h, ev); + break; + + case H_CURR: + retval = HCURR(h, ev); + break; + + case H_SET: + retval = HSET(h, ev, va_arg(va, const int)); + break; + + case H_CLEAR: + HCLEAR(h, ev); + retval = 0; + break; + + case H_LOAD: + retval = history_load(h, va_arg(va, const char *)); + if (retval == -1) + he_seterrev(ev, _HE_HIST_READ); + break; + + case H_SAVE: + retval = history_save(h, va_arg(va, const char *)); + if (retval == -1) + he_seterrev(ev, _HE_HIST_WRITE); + break; + + case H_SAVE_FP: + retval = history_save_fp(h, (size_t)-1, va_arg(va, FILE *)); + if (retval == -1) + he_seterrev(ev, _HE_HIST_WRITE); + break; + + case H_NSAVE_FP: + { + size_t sz = va_arg(va, size_t); + retval = history_save_fp(h, sz, va_arg(va, FILE *)); + if (retval == -1) + he_seterrev(ev, _HE_HIST_WRITE); + break; + } + + case H_PREV_EVENT: + retval = history_prev_event(h, ev, va_arg(va, int)); + break; + + case H_NEXT_EVENT: + retval = history_next_event(h, ev, va_arg(va, int)); + break; + + case H_PREV_STR: + retval = history_prev_string(h, ev, va_arg(va, const Char *)); + break; + + case H_NEXT_STR: + retval = history_next_string(h, ev, va_arg(va, const Char *)); + break; + + case H_FUNC: + { + TYPE(History) hf; + + hf.h_ref = va_arg(va, void *); + h->h_ent = -1; + hf.h_first = va_arg(va, history_gfun_t); + hf.h_next = va_arg(va, history_gfun_t); + hf.h_last = va_arg(va, history_gfun_t); + hf.h_prev = va_arg(va, history_gfun_t); + hf.h_curr = va_arg(va, history_gfun_t); + hf.h_set = va_arg(va, history_sfun_t); + hf.h_clear = va_arg(va, history_vfun_t); + hf.h_enter = va_arg(va, history_efun_t); + hf.h_add = va_arg(va, history_efun_t); + hf.h_del = va_arg(va, history_sfun_t); + + if ((retval = history_set_fun(h, &hf)) == -1) + he_seterrev(ev, _HE_PARAM_MISSING); + break; + } + + case H_END: + FUN(history,end)(h); + retval = 0; + break; + + case H_NEXT_EVDATA: + { + int num = va_arg(va, int); + void **d = va_arg(va, void **); + retval = history_next_evdata(h, ev, num, d); + break; + } + + case H_DELDATA: + { + int num = va_arg(va, int); + void **d = va_arg(va, void **); + retval = history_deldata_nth((history_t *)h->h_ref, ev, num, d); + break; + } + + case H_REPLACE: /* only use after H_NEXT_EVDATA */ + { + const Char *line = va_arg(va, const Char *); + void *d = va_arg(va, void *); + const Char *s; + if(!line || !(s = Strdup(line))) { + retval = -1; + break; + } + ((history_t *)h->h_ref)->cursor->ev.str = s; + ((history_t *)h->h_ref)->cursor->data = d; + retval = 0; + break; + } + + default: + retval = -1; + he_seterrev(ev, _HE_UNKNOWN); + break; + } + va_end(va); + return retval; +} diff --git a/src/thirdparty/libedit-3.1/src/historyn.c b/src/thirdparty/libedit-3.1/src/historyn.c new file mode 100644 index 000000000..59130dea3 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/historyn.c @@ -0,0 +1,3 @@ +#include "config.h" +#define NARROWCHAR +#include "history.c" diff --git a/src/thirdparty/libedit-3.1/src/keymacro.c b/src/thirdparty/libedit-3.1/src/keymacro.c new file mode 100644 index 000000000..cef24a175 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/keymacro.c @@ -0,0 +1,669 @@ +/* $NetBSD: keymacro.c,v 1.24 2019/07/23 10:18:52 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)key.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: keymacro.c,v 1.24 2019/07/23 10:18:52 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * keymacro.c: This module contains the procedures for maintaining + * the extended-key map. + * + * An extended-key (key) is a sequence of keystrokes introduced + * with a sequence introducer and consisting of an arbitrary + * number of characters. This module maintains a map (the + * el->el_keymacro.map) + * to convert these extended-key sequences into input strs + * (XK_STR) or editor functions (XK_CMD). + * + * Warning: + * If key is a substr of some other keys, then the longer + * keys are lost!! That is, if the keys "abcd" and "abcef" + * are in el->el_keymacro.map, adding the key "abc" will cause + * the first two definitions to be lost. + * + * Restrictions: + * ------------- + * 1) It is not possible to have one key that is a + * substr of another. + */ +#include <stdlib.h> +#include <string.h> + +#include "el.h" +#include "fcns.h" + +/* + * The Nodes of the el->el_keymacro.map. The el->el_keymacro.map is a + * linked list of these node elements + */ +struct keymacro_node_t { + wchar_t ch; /* single character of key */ + int type; /* node type */ + keymacro_value_t val; /* command code or pointer to str, */ + /* if this is a leaf */ + struct keymacro_node_t *next; /* ptr to next char of this key */ + struct keymacro_node_t *sibling;/* ptr to another key with same prefix*/ +}; + +static int node_trav(EditLine *, keymacro_node_t *, wchar_t *, + keymacro_value_t *); +static int node__try(EditLine *, keymacro_node_t *, + const wchar_t *, keymacro_value_t *, int); +static keymacro_node_t *node__get(wint_t); +static void node__free(keymacro_node_t *); +static void node__put(EditLine *, keymacro_node_t *); +static int node__delete(EditLine *, keymacro_node_t **, + const wchar_t *); +static int node_lookup(EditLine *, const wchar_t *, + keymacro_node_t *, size_t); +static int node_enum(EditLine *, keymacro_node_t *, size_t); + +#define KEY_BUFSIZ EL_BUFSIZ + + +/* keymacro_init(): + * Initialize the key maps + */ +libedit_private int +keymacro_init(EditLine *el) +{ + + el->el_keymacro.buf = el_calloc(KEY_BUFSIZ, + sizeof(*el->el_keymacro.buf)); + if (el->el_keymacro.buf == NULL) + return -1; + el->el_keymacro.map = NULL; + keymacro_reset(el); + return 0; +} + +/* keymacro_end(): + * Free the key maps + */ +libedit_private void +keymacro_end(EditLine *el) +{ + + el_free(el->el_keymacro.buf); + el->el_keymacro.buf = NULL; + node__free(el->el_keymacro.map); +} + + +/* keymacro_map_cmd(): + * Associate cmd with a key value + */ +libedit_private keymacro_value_t * +keymacro_map_cmd(EditLine *el, int cmd) +{ + + el->el_keymacro.val.cmd = (el_action_t) cmd; + return &el->el_keymacro.val; +} + + +/* keymacro_map_str(): + * Associate str with a key value + */ +libedit_private keymacro_value_t * +keymacro_map_str(EditLine *el, wchar_t *str) +{ + + el->el_keymacro.val.str = str; + return &el->el_keymacro.val; +} + + +/* keymacro_reset(): + * Takes all nodes on el->el_keymacro.map and puts them on free list. + * Then initializes el->el_keymacro.map with arrow keys + * [Always bind the ansi arrow keys?] + */ +libedit_private void +keymacro_reset(EditLine *el) +{ + + node__put(el, el->el_keymacro.map); + el->el_keymacro.map = NULL; + return; +} + + +/* keymacro_get(): + * Calls the recursive function with entry point el->el_keymacro.map + * Looks up *ch in map and then reads characters until a + * complete match is found or a mismatch occurs. Returns the + * type of the match found (XK_STR or XK_CMD). + * Returns NULL in val.str and XK_STR for no match. + * Returns XK_NOD for end of file or read error. + * The last character read is returned in *ch. + */ +libedit_private int +keymacro_get(EditLine *el, wchar_t *ch, keymacro_value_t *val) +{ + + return node_trav(el, el->el_keymacro.map, ch, val); +} + + +/* keymacro_add(): + * Adds key to the el->el_keymacro.map and associates the value in + * val with it. If key is already is in el->el_keymacro.map, the new + * code is applied to the existing key. Ntype specifies if code is a + * command, an out str or a unix command. + */ +libedit_private void +keymacro_add(EditLine *el, const wchar_t *key, keymacro_value_t *val, + int ntype) +{ + + if (key[0] == '\0') { + (void) fprintf(el->el_errfile, + "keymacro_add: Null extended-key not allowed.\n"); + return; + } + if (ntype == XK_CMD && val->cmd == ED_SEQUENCE_LEAD_IN) { + (void) fprintf(el->el_errfile, + "keymacro_add: sequence-lead-in command not allowed\n"); + return; + } + if (el->el_keymacro.map == NULL) + /* tree is initially empty. Set up new node to match key[0] */ + el->el_keymacro.map = node__get(key[0]); + /* it is properly initialized */ + + /* Now recurse through el->el_keymacro.map */ + (void) node__try(el, el->el_keymacro.map, key, val, ntype); + return; +} + + +/* keymacro_clear(): + * + */ +libedit_private void +keymacro_clear(EditLine *el, el_action_t *map, const wchar_t *in) +{ + if (*in > N_KEYS) /* can't be in the map */ + return; + if ((map[(unsigned char)*in] == ED_SEQUENCE_LEAD_IN) && + ((map == el->el_map.key && + el->el_map.alt[(unsigned char)*in] != ED_SEQUENCE_LEAD_IN) || + (map == el->el_map.alt && + el->el_map.key[(unsigned char)*in] != ED_SEQUENCE_LEAD_IN))) + (void) keymacro_delete(el, in); +} + + +/* keymacro_delete(): + * Delete the key and all longer keys staring with key, if + * they exists. + */ +libedit_private int +keymacro_delete(EditLine *el, const wchar_t *key) +{ + + if (key[0] == '\0') { + (void) fprintf(el->el_errfile, + "keymacro_delete: Null extended-key not allowed.\n"); + return -1; + } + if (el->el_keymacro.map == NULL) + return 0; + + (void) node__delete(el, &el->el_keymacro.map, key); + return 0; +} + + +/* keymacro_print(): + * Print the binding associated with key key. + * Print entire el->el_keymacro.map if null + */ +libedit_private void +keymacro_print(EditLine *el, const wchar_t *key) +{ + + /* do nothing if el->el_keymacro.map is empty and null key specified */ + if (el->el_keymacro.map == NULL && *key == 0) + return; + + el->el_keymacro.buf[0] = '"'; + if (node_lookup(el, key, el->el_keymacro.map, (size_t)1) <= -1) + /* key is not bound */ + (void) fprintf(el->el_errfile, "Unbound extended key \"%ls" + "\"\n", key); + return; +} + + +/* node_trav(): + * recursively traverses node in tree until match or mismatch is + * found. May read in more characters. + */ +static int +node_trav(EditLine *el, keymacro_node_t *ptr, wchar_t *ch, + keymacro_value_t *val) +{ + + if (ptr->ch == *ch) { + /* match found */ + if (ptr->next) { + /* key not complete so get next char */ + if (el_wgetc(el, ch) != 1) + return XK_NOD; + return node_trav(el, ptr->next, ch, val); + } else { + *val = ptr->val; + if (ptr->type != XK_CMD) + *ch = '\0'; + return ptr->type; + } + } else { + /* no match found here */ + if (ptr->sibling) { + /* try next sibling */ + return node_trav(el, ptr->sibling, ch, val); + } else { + /* no next sibling -- mismatch */ + val->str = NULL; + return XK_STR; + } + } +} + + +/* node__try(): + * Find a node that matches *str or allocate a new one + */ +static int +node__try(EditLine *el, keymacro_node_t *ptr, const wchar_t *str, + keymacro_value_t *val, int ntype) +{ + + if (ptr->ch != *str) { + keymacro_node_t *xm; + + for (xm = ptr; xm->sibling != NULL; xm = xm->sibling) + if (xm->sibling->ch == *str) + break; + if (xm->sibling == NULL) + xm->sibling = node__get(*str); /* setup new node */ + ptr = xm->sibling; + } + if (*++str == '\0') { + /* we're there */ + if (ptr->next != NULL) { + node__put(el, ptr->next); + /* lose longer keys with this prefix */ + ptr->next = NULL; + } + switch (ptr->type) { + case XK_CMD: + case XK_NOD: + break; + case XK_STR: + if (ptr->val.str) + el_free(ptr->val.str); + break; + default: + EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", + ptr->type)); + break; + } + + switch (ptr->type = ntype) { + case XK_CMD: + ptr->val = *val; + break; + case XK_STR: + if ((ptr->val.str = wcsdup(val->str)) == NULL) + return -1; + break; + default: + EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype)); + break; + } + } else { + /* still more chars to go */ + if (ptr->next == NULL) + ptr->next = node__get(*str); /* setup new node */ + (void) node__try(el, ptr->next, str, val, ntype); + } + return 0; +} + + +/* node__delete(): + * Delete node that matches str + */ +static int +node__delete(EditLine *el, keymacro_node_t **inptr, const wchar_t *str) +{ + keymacro_node_t *ptr; + keymacro_node_t *prev_ptr = NULL; + + ptr = *inptr; + + if (ptr->ch != *str) { + keymacro_node_t *xm; + + for (xm = ptr; xm->sibling != NULL; xm = xm->sibling) + if (xm->sibling->ch == *str) + break; + if (xm->sibling == NULL) + return 0; + prev_ptr = xm; + ptr = xm->sibling; + } + if (*++str == '\0') { + /* we're there */ + if (prev_ptr == NULL) + *inptr = ptr->sibling; + else + prev_ptr->sibling = ptr->sibling; + ptr->sibling = NULL; + node__put(el, ptr); + return 1; + } else if (ptr->next != NULL && + node__delete(el, &ptr->next, str) == 1) { + if (ptr->next != NULL) + return 0; + if (prev_ptr == NULL) + *inptr = ptr->sibling; + else + prev_ptr->sibling = ptr->sibling; + ptr->sibling = NULL; + node__put(el, ptr); + return 1; + } else { + return 0; + } +} + + +/* node__put(): + * Puts a tree of nodes onto free list using free(3). + */ +static void +node__put(EditLine *el, keymacro_node_t *ptr) +{ + if (ptr == NULL) + return; + + if (ptr->next != NULL) { + node__put(el, ptr->next); + ptr->next = NULL; + } + node__put(el, ptr->sibling); + + switch (ptr->type) { + case XK_CMD: + case XK_NOD: + break; + case XK_STR: + if (ptr->val.str != NULL) + el_free(ptr->val.str); + break; + default: + EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ptr->type)); + break; + } + el_free(ptr); +} + + +/* node__get(): + * Returns pointer to a keymacro_node_t for ch. + */ +static keymacro_node_t * +node__get(wint_t ch) +{ + keymacro_node_t *ptr; + + ptr = el_malloc(sizeof(*ptr)); + if (ptr == NULL) + return NULL; + ptr->ch = ch; + ptr->type = XK_NOD; + ptr->val.str = NULL; + ptr->next = NULL; + ptr->sibling = NULL; + return ptr; +} + +static void +node__free(keymacro_node_t *k) +{ + if (k == NULL) + return; + node__free(k->sibling); + node__free(k->next); + el_free(k); +} + +/* node_lookup(): + * look for the str starting at node ptr. + * Print if last node + */ +static int +node_lookup(EditLine *el, const wchar_t *str, keymacro_node_t *ptr, + size_t cnt) +{ + ssize_t used; + + if (ptr == NULL) + return -1; /* cannot have null ptr */ + + if (!str || *str == 0) { + /* no more chars in str. node_enum from here. */ + (void) node_enum(el, ptr, cnt); + return 0; + } else { + /* If match put this char into el->el_keymacro.buf. Recurse */ + if (ptr->ch == *str) { + /* match found */ + used = ct_visual_char(el->el_keymacro.buf + cnt, + KEY_BUFSIZ - cnt, ptr->ch); + if (used == -1) + return -1; /* ran out of buffer space */ + if (ptr->next != NULL) + /* not yet at leaf */ + return (node_lookup(el, str + 1, ptr->next, + (size_t)used + cnt)); + else { + /* next node is null so key should be complete */ + if (str[1] == 0) { + size_t px = cnt + (size_t)used; + el->el_keymacro.buf[px] = '"'; + el->el_keymacro.buf[px + 1] = '\0'; + keymacro_kprint(el, el->el_keymacro.buf, + &ptr->val, ptr->type); + return 0; + } else + return -1; + /* mismatch -- str still has chars */ + } + } else { + /* no match found try sibling */ + if (ptr->sibling) + return (node_lookup(el, str, ptr->sibling, + cnt)); + else + return -1; + } + } +} + + +/* node_enum(): + * Traverse the node printing the characters it is bound in buffer + */ +static int +node_enum(EditLine *el, keymacro_node_t *ptr, size_t cnt) +{ + ssize_t used; + + if (cnt >= KEY_BUFSIZ - 5) { /* buffer too small */ + el->el_keymacro.buf[++cnt] = '"'; + el->el_keymacro.buf[++cnt] = '\0'; + (void) fprintf(el->el_errfile, + "Some extended keys too long for internal print buffer"); + (void) fprintf(el->el_errfile, " \"%ls...\"\n", + el->el_keymacro.buf); + return 0; + } + if (ptr == NULL) { +#ifdef DEBUG_EDIT + (void) fprintf(el->el_errfile, + "node_enum: BUG!! Null ptr passed\n!"); +#endif + return -1; + } + /* put this char at end of str */ + used = ct_visual_char(el->el_keymacro.buf + cnt, KEY_BUFSIZ - cnt, + ptr->ch); + if (ptr->next == NULL) { + /* print this key and function */ + el->el_keymacro.buf[cnt + (size_t)used ] = '"'; + el->el_keymacro.buf[cnt + (size_t)used + 1] = '\0'; + keymacro_kprint(el, el->el_keymacro.buf, &ptr->val, ptr->type); + } else + (void) node_enum(el, ptr->next, cnt + (size_t)used); + + /* go to sibling if there is one */ + if (ptr->sibling) + (void) node_enum(el, ptr->sibling, cnt); + return 0; +} + + +/* keymacro_kprint(): + * Print the specified key and its associated + * function specified by val + */ +libedit_private void +keymacro_kprint(EditLine *el, const wchar_t *key, keymacro_value_t *val, + int ntype) +{ + el_bindings_t *fp; + char unparsbuf[EL_BUFSIZ]; + static const char fmt[] = "%-15s-> %s\n"; + + if (val != NULL) + switch (ntype) { + case XK_STR: + (void) keymacro__decode_str(val->str, unparsbuf, + sizeof(unparsbuf), + ntype == XK_STR ? "\"\"" : "[]"); + (void) fprintf(el->el_outfile, fmt, + ct_encode_string(key, &el->el_scratch), unparsbuf); + break; + case XK_CMD: + for (fp = el->el_map.help; fp->name; fp++) + if (val->cmd == fp->func) { + wcstombs(unparsbuf, fp->name, sizeof(unparsbuf)); + unparsbuf[sizeof(unparsbuf) -1] = '\0'; + (void) fprintf(el->el_outfile, fmt, + ct_encode_string(key, &el->el_scratch), unparsbuf); + break; + } +#ifdef DEBUG_KEY + if (fp->name == NULL) + (void) fprintf(el->el_outfile, + "BUG! Command not found.\n"); +#endif + + break; + default: + EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype)); + break; + } + else + (void) fprintf(el->el_outfile, fmt, ct_encode_string(key, + &el->el_scratch), "no input"); +} + + +#define ADDC(c) \ + if (b < eb) \ + *b++ = c; \ + else \ + b++ +/* keymacro__decode_str(): + * Make a printable version of the ey + */ +libedit_private size_t +keymacro__decode_str(const wchar_t *str, char *buf, size_t len, + const char *sep) +{ + char *b = buf, *eb = b + len; + const wchar_t *p; + + b = buf; + if (sep[0] != '\0') { + ADDC(sep[0]); + } + if (*str == '\0') { + ADDC('^'); + ADDC('@'); + goto add_endsep; + } + for (p = str; *p != 0; p++) { + wchar_t dbuf[VISUAL_WIDTH_MAX]; + wchar_t *p2 = dbuf; + ssize_t l = ct_visual_char(dbuf, VISUAL_WIDTH_MAX, *p); + while (l-- > 0) { + ssize_t n = ct_encode_char(b, (size_t)(eb - b), *p2++); + if (n == -1) /* ran out of space */ + goto add_endsep; + else + b += n; + } + } +add_endsep: + if (sep[0] != '\0' && sep[1] != '\0') { + ADDC(sep[1]); + } + ADDC('\0'); + if ((size_t)(b - buf) >= len) + buf[len - 1] = '\0'; + return (size_t)(b - buf); +} diff --git a/src/thirdparty/libedit-3.1/src/keymacro.h b/src/thirdparty/libedit-3.1/src/keymacro.h new file mode 100644 index 000000000..0653bbe3f --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/keymacro.h @@ -0,0 +1,76 @@ +/* $NetBSD: keymacro.h,v 1.6 2016/05/09 21:46:56 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)key.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * el.keymacro.h: Key macro header + */ +#ifndef _h_el_keymacro +#define _h_el_keymacro + +typedef union keymacro_value_t { + el_action_t cmd; /* If it is a command the # */ + wchar_t *str; /* If it is a string... */ +} keymacro_value_t; + +typedef struct keymacro_node_t keymacro_node_t; + +typedef struct el_keymacro_t { + wchar_t *buf; /* Key print buffer */ + keymacro_node_t *map; /* Key map */ + keymacro_value_t val; /* Local conversion buffer */ +} el_keymacro_t; + +#define XK_CMD 0 +#define XK_STR 1 +#define XK_NOD 2 + +libedit_private int keymacro_init(EditLine *); +libedit_private void keymacro_end(EditLine *); +libedit_private keymacro_value_t *keymacro_map_cmd(EditLine *, int); +libedit_private keymacro_value_t *keymacro_map_str(EditLine *, wchar_t *); +libedit_private void keymacro_reset(EditLine *); +libedit_private int keymacro_get(EditLine *, wchar_t *, keymacro_value_t *); +libedit_private void keymacro_add(EditLine *, const wchar_t *, + keymacro_value_t *, int); +libedit_private void keymacro_clear(EditLine *, el_action_t *, const wchar_t *); +libedit_private int keymacro_delete(EditLine *, const wchar_t *); +libedit_private void keymacro_print(EditLine *, const wchar_t *); +libedit_private void keymacro_kprint(EditLine *, const wchar_t *, + keymacro_value_t *, int); +libedit_private size_t keymacro__decode_str(const wchar_t *, char *, size_t, + const char *); + +#endif /* _h_el_keymacro */ diff --git a/src/thirdparty/libedit-3.1/src/literal.c b/src/thirdparty/libedit-3.1/src/literal.c new file mode 100644 index 000000000..3c5681648 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/literal.c @@ -0,0 +1,138 @@ +/* $NetBSD: literal.c,v 1.5 2019/07/23 13:10:11 christos Exp $ */ + +/*- + * Copyright (c) 2017 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Christos Zoulas. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +__RCSID("$NetBSD: literal.c,v 1.5 2019/07/23 13:10:11 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * literal.c: Literal sequences handling. + */ +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "el.h" + +libedit_private void +literal_init(EditLine *el) +{ + el_literal_t *l = &el->el_literal; + + memset(l, 0, sizeof(*l)); +} + +libedit_private void +literal_end(EditLine *el) +{ + literal_clear(el); +} + +libedit_private void +literal_clear(EditLine *el) +{ + el_literal_t *l = &el->el_literal; + size_t i; + + if (l->l_len == 0) + return; + + for (i = 0; i < l->l_idx; i++) + el_free(l->l_buf[i]); + el_free(l->l_buf); + l->l_buf = NULL; + l->l_len = 0; + l->l_idx = 0; +} + +libedit_private wint_t +literal_add(EditLine *el, const wchar_t *buf, const wchar_t *end, int *wp) +{ + el_literal_t *l = &el->el_literal; + size_t i, len; + ssize_t w, n; + char *b; + + w = wcwidth(end[1]); /* column width of the visible char */ + *wp = (int)w; + + if (w <= 0) /* we require something to be printed */ + return 0; + + len = (size_t)(end - buf); + for (w = 0, i = 0; i < len; i++) + w += ct_enc_width(buf[i]); + w += ct_enc_width(end[1]); + + b = el_malloc((size_t)(w + 1)); + if (b == NULL) + return 0; + + for (n = 0, i = 0; i < len; i++) + n += ct_encode_char(b + n, (size_t)(w - n), buf[i]); + n += ct_encode_char(b + n, (size_t)(w - n), end[1]); + b[n] = '\0'; + + /* + * Then save this literal string in the list of such strings, + * and return a "magic character" to put into the terminal buffer. + * When that magic char is 'printed' the saved string (which includes + * the char that belongs in that position) gets sent instead. + */ + if (l->l_idx == l->l_len) { + char **bp; + + l->l_len += 4; + bp = el_realloc(l->l_buf, sizeof(*l->l_buf) * l->l_len); + if (bp == NULL) { + free(b); + l->l_len -= 4; + return 0; + } + l->l_buf = bp; + } + l->l_buf[l->l_idx++] = b; + return EL_LITERAL | (wint_t)(l->l_idx - 1); +} + +libedit_private const char * +literal_get(EditLine *el, wint_t idx) +{ + el_literal_t *l = &el->el_literal; + + assert(idx & EL_LITERAL); + idx &= ~EL_LITERAL; + assert(l->l_idx > (size_t)idx); + return l->l_buf[idx]; +} diff --git a/src/thirdparty/libedit-3.1/src/literal.h b/src/thirdparty/libedit-3.1/src/literal.h new file mode 100644 index 000000000..a8e0a4168 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/literal.h @@ -0,0 +1,53 @@ +/* $NetBSD: literal.h,v 1.2 2017/06/30 20:26:52 kre Exp $ */ + +/*- + * Copyright (c) 2017 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Christos Zoulas. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * el.literal.h: Literal character + */ +#ifndef _h_el_literal +#define _h_el_literal + +#define EL_LITERAL ((wint_t)0x80000000) + +typedef struct el_literal_t { + char **l_buf; /* array of buffers */ + size_t l_idx; /* max in use */ + size_t l_len; /* max allocated */ +} el_literal_t; + +libedit_private void literal_init(EditLine *); +libedit_private void literal_end(EditLine *); +libedit_private void literal_clear(EditLine *); +libedit_private wint_t literal_add(EditLine *, const wchar_t *, + const wchar_t *, int *); +libedit_private const char *literal_get(EditLine *, wint_t); + +#endif /* _h_el_literal */ diff --git a/src/thirdparty/libedit-3.1/src/makelist b/src/thirdparty/libedit-3.1/src/makelist new file mode 100644 index 000000000..01104524f --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/makelist @@ -0,0 +1,182 @@ +#!/bin/sh - +# $NetBSD: makelist,v 1.29 2016/05/09 21:46:56 christos Exp $ +# +# Copyright (c) 1992, 1993 +# The Regents of the University of California. All rights reserved. +# +# This code is derived from software contributed to Berkeley by +# Christos Zoulas of Cornell University. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# @(#)makelist 5.3 (Berkeley) 6/4/93 + +# makelist.sh: Automatically generate header files... + +LC_ALL=C +LANG=C +export LC_ALL LANG + +if [ "x$AWK" = "x" ] +then + AWK=awk +fi + +USAGE="Usage: $0 -h|-fc|-fh|-bh <filenames>" + +if [ "x$1" = "x" ] +then + echo $USAGE 1>&2 + exit 1 +fi + +FLAG="$1" +shift + +FILES="$@" + +case $FLAG in + +-h) + set - `echo $FILES | sed -e 's/\\./_/g'` + hdr="_h_`basename $1`" + cat $FILES | $AWK ' + BEGIN { + printf("/* Automatically generated file, do not edit */\n"); + printf("#ifndef %s\n#define %s\n", "'$hdr'", "'$hdr'"); + } + /\(\):/ { + pr = substr($2, 1, 2); + if (pr == "vi" || pr == "em" || pr == "ed") { + name = substr($2, 1, length($2) - 3); +# +# XXX: need a space between name and prototype so that -fc and -fh +# parsing is much easier +# + printf("libedit_private el_action_t\t%s (EditLine *, wint_t);\n", + name); + } + } + END { + printf("#endif /* %s */\n", "'$hdr'"); + }' + ;; + +# generate help.h from various .c files +# +-bh) + cat $FILES | $AWK ' + BEGIN { + printf("/* Automatically generated file, do not edit */\n"); + printf("static const struct el_bindings_t el_func_help[] = {\n"); + low = "abcdefghijklmnopqrstuvwxyz_"; + high = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_"; + for (i = 1; i <= length(low); i++) + tr[substr(low, i, 1)] = substr(high, i, 1); + } + /\(\):/ { + pr = substr($2, 1, 2); + if (pr == "vi" || pr == "em" || pr == "ed") { + name = substr($2, 1, length($2) - 3); + uname = ""; + fname = ""; + for (i = 1; i <= length(name); i++) { + s = substr(name, i, 1); + uname = uname tr[s]; + if (s == "_") + s = "-"; + fname = fname s; + } + + printf(" { %-30.30s %-30.30s\n","L\"" fname "\",", uname ","); + ok = 1; + } + } + /^ \*/ { + if (ok) { + printf(" L\""); + for (i = 2; i < NF; i++) + printf("%s ", $i); + printf("%s\" },\n", $i); + ok = 0; + } + } + END { + printf("};\n"); + }' + ;; + +# generate fcns.h from various .h files +# +-fh) + cat $FILES | $AWK '/el_action_t/ { print $3 }' | \ + sort | tr '[:lower:]' '[:upper:]' | $AWK ' + BEGIN { + printf("/* Automatically generated file, do not edit */\n"); + count = 0; + } + { + printf("#define\t%-30.30s\t%3d\n", $1, count++); + } + END { + printf("#define\t%-30.30s\t%3d\n", "EL_NUM_FCNS", count); + }' + ;; + +# generate func.h from various .h files +# +-fc) + cat $FILES | $AWK '/el_action_t/ { print $3 }' | sort | $AWK ' + BEGIN { + printf("/* Automatically generated file, do not edit */\n"); + printf("static const el_func_t el_func[] = {"); + maxlen = 80; + needn = 1; + len = 0; + } + { + clen = 25 + 2; + len += clen; + if (len >= maxlen) + needn = 1; + if (needn) { + printf("\n "); + needn = 0; + len = 4 + clen; + } + s = $1 ","; + printf("%-26.26s ", s); + } + END { + printf("\n};\n"); + }' + ;; + +*) + echo $USAGE 1>&2 + exit 1 + ;; + +esac diff --git a/src/thirdparty/libedit-3.1/src/map.c b/src/thirdparty/libedit-3.1/src/map.c new file mode 100644 index 000000000..321bb3539 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/map.c @@ -0,0 +1,1427 @@ +/* $NetBSD: map.c,v 1.54 2021/08/29 09:41:59 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)map.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: map.c,v 1.54 2021/08/29 09:41:59 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * map.c: Editor function definitions + */ +#include <ctype.h> +#include <stdlib.h> +#include <string.h> + +#include "el.h" +#include "common.h" +#include "emacs.h" +#include "vi.h" +#include "fcns.h" +#include "func.h" +#include "help.h" +#include "parse.h" + +static void map_print_key(EditLine *, el_action_t *, const wchar_t *); +static void map_print_some_keys(EditLine *, el_action_t *, wint_t, wint_t); +static void map_print_all_keys(EditLine *); +static void map_init_nls(EditLine *); +static void map_init_meta(EditLine *); + +/* keymap tables ; should be N_KEYS*sizeof(KEYCMD) bytes long */ + + +static const el_action_t el_map_emacs[] = { + /* 0 */ EM_SET_MARK, /* ^@ */ + /* 1 */ ED_MOVE_TO_BEG, /* ^A */ + /* 2 */ ED_PREV_CHAR, /* ^B */ + /* 3 */ ED_IGNORE, /* ^C */ + /* 4 */ EM_DELETE_OR_LIST, /* ^D */ + /* 5 */ ED_MOVE_TO_END, /* ^E */ + /* 6 */ ED_NEXT_CHAR, /* ^F */ + /* 7 */ ED_UNASSIGNED, /* ^G */ + /* 8 */ EM_DELETE_PREV_CHAR, /* ^H */ + /* 9 */ ED_UNASSIGNED, /* ^I */ + /* 10 */ ED_NEWLINE, /* ^J */ + /* 11 */ ED_KILL_LINE, /* ^K */ + /* 12 */ ED_CLEAR_SCREEN, /* ^L */ + /* 13 */ ED_NEWLINE, /* ^M */ + /* 14 */ ED_NEXT_HISTORY, /* ^N */ + /* 15 */ ED_IGNORE, /* ^O */ + /* 16 */ ED_PREV_HISTORY, /* ^P */ + /* 17 */ ED_IGNORE, /* ^Q */ + /* 18 */ EM_INC_SEARCH_PREV, /* ^R */ + /* 19 */ ED_IGNORE, /* ^S */ + /* 20 */ ED_TRANSPOSE_CHARS, /* ^T */ + /* 21 */ EM_KILL_LINE, /* ^U */ + /* 22 */ ED_QUOTED_INSERT, /* ^V */ + /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ + /* 24 */ ED_SEQUENCE_LEAD_IN, /* ^X */ + /* 25 */ EM_YANK, /* ^Y */ + /* 26 */ ED_IGNORE, /* ^Z */ + /* 27 */ EM_META_NEXT, /* ^[ */ + /* 28 */ ED_IGNORE, /* ^\ */ + /* 29 */ ED_IGNORE, /* ^] */ + /* 30 */ ED_UNASSIGNED, /* ^^ */ + /* 31 */ ED_UNASSIGNED, /* ^_ */ + /* 32 */ ED_INSERT, /* SPACE */ + /* 33 */ ED_INSERT, /* ! */ + /* 34 */ ED_INSERT, /* " */ + /* 35 */ ED_INSERT, /* # */ + /* 36 */ ED_INSERT, /* $ */ + /* 37 */ ED_INSERT, /* % */ + /* 38 */ ED_INSERT, /* & */ + /* 39 */ ED_INSERT, /* ' */ + /* 40 */ ED_INSERT, /* ( */ + /* 41 */ ED_INSERT, /* ) */ + /* 42 */ ED_INSERT, /* * */ + /* 43 */ ED_INSERT, /* + */ + /* 44 */ ED_INSERT, /* , */ + /* 45 */ ED_INSERT, /* - */ + /* 46 */ ED_INSERT, /* . */ + /* 47 */ ED_INSERT, /* / */ + /* 48 */ ED_DIGIT, /* 0 */ + /* 49 */ ED_DIGIT, /* 1 */ + /* 50 */ ED_DIGIT, /* 2 */ + /* 51 */ ED_DIGIT, /* 3 */ + /* 52 */ ED_DIGIT, /* 4 */ + /* 53 */ ED_DIGIT, /* 5 */ + /* 54 */ ED_DIGIT, /* 6 */ + /* 55 */ ED_DIGIT, /* 7 */ + /* 56 */ ED_DIGIT, /* 8 */ + /* 57 */ ED_DIGIT, /* 9 */ + /* 58 */ ED_INSERT, /* : */ + /* 59 */ ED_INSERT, /* ; */ + /* 60 */ ED_INSERT, /* < */ + /* 61 */ ED_INSERT, /* = */ + /* 62 */ ED_INSERT, /* > */ + /* 63 */ ED_INSERT, /* ? */ + /* 64 */ ED_INSERT, /* @ */ + /* 65 */ ED_INSERT, /* A */ + /* 66 */ ED_INSERT, /* B */ + /* 67 */ ED_INSERT, /* C */ + /* 68 */ ED_INSERT, /* D */ + /* 69 */ ED_INSERT, /* E */ + /* 70 */ ED_INSERT, /* F */ + /* 71 */ ED_INSERT, /* G */ + /* 72 */ ED_INSERT, /* H */ + /* 73 */ ED_INSERT, /* I */ + /* 74 */ ED_INSERT, /* J */ + /* 75 */ ED_INSERT, /* K */ + /* 76 */ ED_INSERT, /* L */ + /* 77 */ ED_INSERT, /* M */ + /* 78 */ ED_INSERT, /* N */ + /* 79 */ ED_INSERT, /* O */ + /* 80 */ ED_INSERT, /* P */ + /* 81 */ ED_INSERT, /* Q */ + /* 82 */ ED_INSERT, /* R */ + /* 83 */ ED_INSERT, /* S */ + /* 84 */ ED_INSERT, /* T */ + /* 85 */ ED_INSERT, /* U */ + /* 86 */ ED_INSERT, /* V */ + /* 87 */ ED_INSERT, /* W */ + /* 88 */ ED_INSERT, /* X */ + /* 89 */ ED_INSERT, /* Y */ + /* 90 */ ED_INSERT, /* Z */ + /* 91 */ ED_INSERT, /* [ */ + /* 92 */ ED_INSERT, /* \ */ + /* 93 */ ED_INSERT, /* ] */ + /* 94 */ ED_INSERT, /* ^ */ + /* 95 */ ED_INSERT, /* _ */ + /* 96 */ ED_INSERT, /* ` */ + /* 97 */ ED_INSERT, /* a */ + /* 98 */ ED_INSERT, /* b */ + /* 99 */ ED_INSERT, /* c */ + /* 100 */ ED_INSERT, /* d */ + /* 101 */ ED_INSERT, /* e */ + /* 102 */ ED_INSERT, /* f */ + /* 103 */ ED_INSERT, /* g */ + /* 104 */ ED_INSERT, /* h */ + /* 105 */ ED_INSERT, /* i */ + /* 106 */ ED_INSERT, /* j */ + /* 107 */ ED_INSERT, /* k */ + /* 108 */ ED_INSERT, /* l */ + /* 109 */ ED_INSERT, /* m */ + /* 110 */ ED_INSERT, /* n */ + /* 111 */ ED_INSERT, /* o */ + /* 112 */ ED_INSERT, /* p */ + /* 113 */ ED_INSERT, /* q */ + /* 114 */ ED_INSERT, /* r */ + /* 115 */ ED_INSERT, /* s */ + /* 116 */ ED_INSERT, /* t */ + /* 117 */ ED_INSERT, /* u */ + /* 118 */ ED_INSERT, /* v */ + /* 119 */ ED_INSERT, /* w */ + /* 120 */ ED_INSERT, /* x */ + /* 121 */ ED_INSERT, /* y */ + /* 122 */ ED_INSERT, /* z */ + /* 123 */ ED_INSERT, /* { */ + /* 124 */ ED_INSERT, /* | */ + /* 125 */ ED_INSERT, /* } */ + /* 126 */ ED_INSERT, /* ~ */ + /* 127 */ EM_DELETE_PREV_CHAR, /* ^? */ + /* 128 */ ED_UNASSIGNED, /* M-^@ */ + /* 129 */ ED_UNASSIGNED, /* M-^A */ + /* 130 */ ED_UNASSIGNED, /* M-^B */ + /* 131 */ ED_UNASSIGNED, /* M-^C */ + /* 132 */ ED_UNASSIGNED, /* M-^D */ + /* 133 */ ED_UNASSIGNED, /* M-^E */ + /* 134 */ ED_UNASSIGNED, /* M-^F */ + /* 135 */ ED_UNASSIGNED, /* M-^G */ + /* 136 */ ED_DELETE_PREV_WORD, /* M-^H */ + /* 137 */ ED_UNASSIGNED, /* M-^I */ + /* 138 */ ED_UNASSIGNED, /* M-^J */ + /* 139 */ ED_UNASSIGNED, /* M-^K */ + /* 140 */ ED_CLEAR_SCREEN, /* M-^L */ + /* 141 */ ED_UNASSIGNED, /* M-^M */ + /* 142 */ ED_UNASSIGNED, /* M-^N */ + /* 143 */ ED_UNASSIGNED, /* M-^O */ + /* 144 */ ED_UNASSIGNED, /* M-^P */ + /* 145 */ ED_UNASSIGNED, /* M-^Q */ + /* 146 */ ED_UNASSIGNED, /* M-^R */ + /* 147 */ ED_UNASSIGNED, /* M-^S */ + /* 148 */ ED_UNASSIGNED, /* M-^T */ + /* 149 */ ED_UNASSIGNED, /* M-^U */ + /* 150 */ ED_UNASSIGNED, /* M-^V */ + /* 151 */ ED_UNASSIGNED, /* M-^W */ + /* 152 */ ED_UNASSIGNED, /* M-^X */ + /* 153 */ ED_UNASSIGNED, /* M-^Y */ + /* 154 */ ED_UNASSIGNED, /* M-^Z */ + /* 155 */ ED_UNASSIGNED, /* M-^[ */ + /* 156 */ ED_UNASSIGNED, /* M-^\ */ + /* 157 */ ED_UNASSIGNED, /* M-^] */ + /* 158 */ ED_UNASSIGNED, /* M-^^ */ + /* 159 */ EM_COPY_PREV_WORD, /* M-^_ */ + /* 160 */ ED_UNASSIGNED, /* M-SPACE */ + /* 161 */ ED_UNASSIGNED, /* M-! */ + /* 162 */ ED_UNASSIGNED, /* M-" */ + /* 163 */ ED_UNASSIGNED, /* M-# */ + /* 164 */ ED_UNASSIGNED, /* M-$ */ + /* 165 */ ED_UNASSIGNED, /* M-% */ + /* 166 */ ED_UNASSIGNED, /* M-& */ + /* 167 */ ED_UNASSIGNED, /* M-' */ + /* 168 */ ED_UNASSIGNED, /* M-( */ + /* 169 */ ED_UNASSIGNED, /* M-) */ + /* 170 */ ED_UNASSIGNED, /* M-* */ + /* 171 */ ED_UNASSIGNED, /* M-+ */ + /* 172 */ ED_UNASSIGNED, /* M-, */ + /* 173 */ ED_UNASSIGNED, /* M-- */ + /* 174 */ ED_UNASSIGNED, /* M-. */ + /* 175 */ ED_UNASSIGNED, /* M-/ */ + /* 176 */ ED_ARGUMENT_DIGIT, /* M-0 */ + /* 177 */ ED_ARGUMENT_DIGIT, /* M-1 */ + /* 178 */ ED_ARGUMENT_DIGIT, /* M-2 */ + /* 179 */ ED_ARGUMENT_DIGIT, /* M-3 */ + /* 180 */ ED_ARGUMENT_DIGIT, /* M-4 */ + /* 181 */ ED_ARGUMENT_DIGIT, /* M-5 */ + /* 182 */ ED_ARGUMENT_DIGIT, /* M-6 */ + /* 183 */ ED_ARGUMENT_DIGIT, /* M-7 */ + /* 184 */ ED_ARGUMENT_DIGIT, /* M-8 */ + /* 185 */ ED_ARGUMENT_DIGIT, /* M-9 */ + /* 186 */ ED_UNASSIGNED, /* M-: */ + /* 187 */ ED_UNASSIGNED, /* M-; */ + /* 188 */ ED_UNASSIGNED, /* M-< */ + /* 189 */ ED_UNASSIGNED, /* M-= */ + /* 190 */ ED_UNASSIGNED, /* M-> */ + /* 191 */ ED_UNASSIGNED, /* M-? */ + /* 192 */ ED_UNASSIGNED, /* M-@ */ + /* 193 */ ED_UNASSIGNED, /* M-A */ + /* 194 */ ED_PREV_WORD, /* M-B */ + /* 195 */ EM_CAPITOL_CASE, /* M-C */ + /* 196 */ EM_DELETE_NEXT_WORD, /* M-D */ + /* 197 */ ED_UNASSIGNED, /* M-E */ + /* 198 */ EM_NEXT_WORD, /* M-F */ + /* 199 */ ED_UNASSIGNED, /* M-G */ + /* 200 */ ED_UNASSIGNED, /* M-H */ + /* 201 */ ED_UNASSIGNED, /* M-I */ + /* 202 */ ED_UNASSIGNED, /* M-J */ + /* 203 */ ED_UNASSIGNED, /* M-K */ + /* 204 */ EM_LOWER_CASE, /* M-L */ + /* 205 */ ED_UNASSIGNED, /* M-M */ + /* 206 */ ED_SEARCH_NEXT_HISTORY, /* M-N */ + /* 207 */ ED_SEQUENCE_LEAD_IN, /* M-O */ + /* 208 */ ED_SEARCH_PREV_HISTORY, /* M-P */ + /* 209 */ ED_UNASSIGNED, /* M-Q */ + /* 210 */ ED_UNASSIGNED, /* M-R */ + /* 211 */ ED_UNASSIGNED, /* M-S */ + /* 212 */ ED_UNASSIGNED, /* M-T */ + /* 213 */ EM_UPPER_CASE, /* M-U */ + /* 214 */ ED_UNASSIGNED, /* M-V */ + /* 215 */ EM_COPY_REGION, /* M-W */ + /* 216 */ ED_COMMAND, /* M-X */ + /* 217 */ ED_UNASSIGNED, /* M-Y */ + /* 218 */ ED_UNASSIGNED, /* M-Z */ + /* 219 */ ED_SEQUENCE_LEAD_IN, /* M-[ */ + /* 220 */ ED_UNASSIGNED, /* M-\ */ + /* 221 */ ED_UNASSIGNED, /* M-] */ + /* 222 */ ED_UNASSIGNED, /* M-^ */ + /* 223 */ ED_UNASSIGNED, /* M-_ */ + /* 223 */ ED_UNASSIGNED, /* M-` */ + /* 224 */ ED_UNASSIGNED, /* M-a */ + /* 225 */ ED_PREV_WORD, /* M-b */ + /* 226 */ EM_CAPITOL_CASE, /* M-c */ + /* 227 */ EM_DELETE_NEXT_WORD, /* M-d */ + /* 228 */ ED_UNASSIGNED, /* M-e */ + /* 229 */ EM_NEXT_WORD, /* M-f */ + /* 230 */ ED_UNASSIGNED, /* M-g */ + /* 231 */ ED_UNASSIGNED, /* M-h */ + /* 232 */ ED_UNASSIGNED, /* M-i */ + /* 233 */ ED_UNASSIGNED, /* M-j */ + /* 234 */ ED_UNASSIGNED, /* M-k */ + /* 235 */ EM_LOWER_CASE, /* M-l */ + /* 236 */ ED_UNASSIGNED, /* M-m */ + /* 237 */ ED_SEARCH_NEXT_HISTORY, /* M-n */ + /* 238 */ ED_UNASSIGNED, /* M-o */ + /* 239 */ ED_SEARCH_PREV_HISTORY, /* M-p */ + /* 240 */ ED_UNASSIGNED, /* M-q */ + /* 241 */ ED_UNASSIGNED, /* M-r */ + /* 242 */ ED_UNASSIGNED, /* M-s */ + /* 243 */ ED_UNASSIGNED, /* M-t */ + /* 244 */ EM_UPPER_CASE, /* M-u */ + /* 245 */ ED_UNASSIGNED, /* M-v */ + /* 246 */ EM_COPY_REGION, /* M-w */ + /* 247 */ ED_COMMAND, /* M-x */ + /* 248 */ ED_UNASSIGNED, /* M-y */ + /* 249 */ ED_UNASSIGNED, /* M-z */ + /* 250 */ ED_UNASSIGNED, /* M-{ */ + /* 251 */ ED_UNASSIGNED, /* M-| */ + /* 252 */ ED_UNASSIGNED, /* M-} */ + /* 253 */ ED_UNASSIGNED, /* M-~ */ + /* 254 */ ED_DELETE_PREV_WORD /* M-^? */ + /* 255 */ +}; + + +/* + * keymap table for vi. Each index into above tbl; should be + * N_KEYS entries long. Vi mode uses a sticky-extend to do command mode: + * insert mode characters are in the normal keymap, and command mode + * in the extended keymap. + */ +static const el_action_t el_map_vi_insert[] = { +#ifdef KSHVI + /* 0 */ ED_UNASSIGNED, /* ^@ */ + /* 1 */ ED_INSERT, /* ^A */ + /* 2 */ ED_INSERT, /* ^B */ + /* 3 */ ED_INSERT, /* ^C */ + /* 4 */ VI_LIST_OR_EOF, /* ^D */ + /* 5 */ ED_INSERT, /* ^E */ + /* 6 */ ED_INSERT, /* ^F */ + /* 7 */ ED_INSERT, /* ^G */ + /* 8 */ VI_DELETE_PREV_CHAR, /* ^H */ /* BackSpace key */ + /* 9 */ ED_INSERT, /* ^I */ /* Tab Key */ + /* 10 */ ED_NEWLINE, /* ^J */ + /* 11 */ ED_INSERT, /* ^K */ + /* 12 */ ED_INSERT, /* ^L */ + /* 13 */ ED_NEWLINE, /* ^M */ + /* 14 */ ED_INSERT, /* ^N */ + /* 15 */ ED_INSERT, /* ^O */ + /* 16 */ ED_INSERT, /* ^P */ + /* 17 */ ED_IGNORE, /* ^Q */ + /* 18 */ ED_INSERT, /* ^R */ + /* 19 */ ED_IGNORE, /* ^S */ + /* 20 */ ED_INSERT, /* ^T */ + /* 21 */ VI_KILL_LINE_PREV, /* ^U */ + /* 22 */ ED_QUOTED_INSERT, /* ^V */ + /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ + /* ED_DELETE_PREV_WORD: Only until strt edit pos */ + /* 24 */ ED_INSERT, /* ^X */ + /* 25 */ ED_INSERT, /* ^Y */ + /* 26 */ ED_INSERT, /* ^Z */ + /* 27 */ VI_COMMAND_MODE, /* ^[ */ /* [ Esc ] key */ + /* 28 */ ED_IGNORE, /* ^\ */ + /* 29 */ ED_INSERT, /* ^] */ + /* 30 */ ED_INSERT, /* ^^ */ + /* 31 */ ED_INSERT, /* ^_ */ +#else /* !KSHVI */ + /* + * NOTE: These mappings do NOT Correspond well + * to the KSH VI editing assignments. + * On the other and they are convenient and + * many people have have gotten used to them. + */ + /* 0 */ ED_UNASSIGNED, /* ^@ */ + /* 1 */ ED_MOVE_TO_BEG, /* ^A */ + /* 2 */ ED_PREV_CHAR, /* ^B */ + /* 3 */ ED_IGNORE, /* ^C */ + /* 4 */ VI_LIST_OR_EOF, /* ^D */ + /* 5 */ ED_MOVE_TO_END, /* ^E */ + /* 6 */ ED_NEXT_CHAR, /* ^F */ + /* 7 */ ED_UNASSIGNED, /* ^G */ + /* 8 */ VI_DELETE_PREV_CHAR, /* ^H */ /* BackSpace key */ + /* 9 */ ED_UNASSIGNED, /* ^I */ /* Tab Key */ + /* 10 */ ED_NEWLINE, /* ^J */ + /* 11 */ ED_KILL_LINE, /* ^K */ + /* 12 */ ED_CLEAR_SCREEN, /* ^L */ + /* 13 */ ED_NEWLINE, /* ^M */ + /* 14 */ ED_NEXT_HISTORY, /* ^N */ + /* 15 */ ED_IGNORE, /* ^O */ + /* 16 */ ED_PREV_HISTORY, /* ^P */ + /* 17 */ ED_IGNORE, /* ^Q */ + /* 18 */ ED_REDISPLAY, /* ^R */ + /* 19 */ ED_IGNORE, /* ^S */ + /* 20 */ ED_TRANSPOSE_CHARS, /* ^T */ + /* 21 */ VI_KILL_LINE_PREV, /* ^U */ + /* 22 */ ED_QUOTED_INSERT, /* ^V */ + /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ + /* 24 */ ED_UNASSIGNED, /* ^X */ + /* 25 */ ED_IGNORE, /* ^Y */ + /* 26 */ ED_IGNORE, /* ^Z */ + /* 27 */ VI_COMMAND_MODE, /* ^[ */ + /* 28 */ ED_IGNORE, /* ^\ */ + /* 29 */ ED_UNASSIGNED, /* ^] */ + /* 30 */ ED_UNASSIGNED, /* ^^ */ + /* 31 */ ED_UNASSIGNED, /* ^_ */ +#endif /* KSHVI */ + /* 32 */ ED_INSERT, /* SPACE */ + /* 33 */ ED_INSERT, /* ! */ + /* 34 */ ED_INSERT, /* " */ + /* 35 */ ED_INSERT, /* # */ + /* 36 */ ED_INSERT, /* $ */ + /* 37 */ ED_INSERT, /* % */ + /* 38 */ ED_INSERT, /* & */ + /* 39 */ ED_INSERT, /* ' */ + /* 40 */ ED_INSERT, /* ( */ + /* 41 */ ED_INSERT, /* ) */ + /* 42 */ ED_INSERT, /* * */ + /* 43 */ ED_INSERT, /* + */ + /* 44 */ ED_INSERT, /* , */ + /* 45 */ ED_INSERT, /* - */ + /* 46 */ ED_INSERT, /* . */ + /* 47 */ ED_INSERT, /* / */ + /* 48 */ ED_INSERT, /* 0 */ + /* 49 */ ED_INSERT, /* 1 */ + /* 50 */ ED_INSERT, /* 2 */ + /* 51 */ ED_INSERT, /* 3 */ + /* 52 */ ED_INSERT, /* 4 */ + /* 53 */ ED_INSERT, /* 5 */ + /* 54 */ ED_INSERT, /* 6 */ + /* 55 */ ED_INSERT, /* 7 */ + /* 56 */ ED_INSERT, /* 8 */ + /* 57 */ ED_INSERT, /* 9 */ + /* 58 */ ED_INSERT, /* : */ + /* 59 */ ED_INSERT, /* ; */ + /* 60 */ ED_INSERT, /* < */ + /* 61 */ ED_INSERT, /* = */ + /* 62 */ ED_INSERT, /* > */ + /* 63 */ ED_INSERT, /* ? */ + /* 64 */ ED_INSERT, /* @ */ + /* 65 */ ED_INSERT, /* A */ + /* 66 */ ED_INSERT, /* B */ + /* 67 */ ED_INSERT, /* C */ + /* 68 */ ED_INSERT, /* D */ + /* 69 */ ED_INSERT, /* E */ + /* 70 */ ED_INSERT, /* F */ + /* 71 */ ED_INSERT, /* G */ + /* 72 */ ED_INSERT, /* H */ + /* 73 */ ED_INSERT, /* I */ + /* 74 */ ED_INSERT, /* J */ + /* 75 */ ED_INSERT, /* K */ + /* 76 */ ED_INSERT, /* L */ + /* 77 */ ED_INSERT, /* M */ + /* 78 */ ED_INSERT, /* N */ + /* 79 */ ED_INSERT, /* O */ + /* 80 */ ED_INSERT, /* P */ + /* 81 */ ED_INSERT, /* Q */ + /* 82 */ ED_INSERT, /* R */ + /* 83 */ ED_INSERT, /* S */ + /* 84 */ ED_INSERT, /* T */ + /* 85 */ ED_INSERT, /* U */ + /* 86 */ ED_INSERT, /* V */ + /* 87 */ ED_INSERT, /* W */ + /* 88 */ ED_INSERT, /* X */ + /* 89 */ ED_INSERT, /* Y */ + /* 90 */ ED_INSERT, /* Z */ + /* 91 */ ED_INSERT, /* [ */ + /* 92 */ ED_INSERT, /* \ */ + /* 93 */ ED_INSERT, /* ] */ + /* 94 */ ED_INSERT, /* ^ */ + /* 95 */ ED_INSERT, /* _ */ + /* 96 */ ED_INSERT, /* ` */ + /* 97 */ ED_INSERT, /* a */ + /* 98 */ ED_INSERT, /* b */ + /* 99 */ ED_INSERT, /* c */ + /* 100 */ ED_INSERT, /* d */ + /* 101 */ ED_INSERT, /* e */ + /* 102 */ ED_INSERT, /* f */ + /* 103 */ ED_INSERT, /* g */ + /* 104 */ ED_INSERT, /* h */ + /* 105 */ ED_INSERT, /* i */ + /* 106 */ ED_INSERT, /* j */ + /* 107 */ ED_INSERT, /* k */ + /* 108 */ ED_INSERT, /* l */ + /* 109 */ ED_INSERT, /* m */ + /* 110 */ ED_INSERT, /* n */ + /* 111 */ ED_INSERT, /* o */ + /* 112 */ ED_INSERT, /* p */ + /* 113 */ ED_INSERT, /* q */ + /* 114 */ ED_INSERT, /* r */ + /* 115 */ ED_INSERT, /* s */ + /* 116 */ ED_INSERT, /* t */ + /* 117 */ ED_INSERT, /* u */ + /* 118 */ ED_INSERT, /* v */ + /* 119 */ ED_INSERT, /* w */ + /* 120 */ ED_INSERT, /* x */ + /* 121 */ ED_INSERT, /* y */ + /* 122 */ ED_INSERT, /* z */ + /* 123 */ ED_INSERT, /* { */ + /* 124 */ ED_INSERT, /* | */ + /* 125 */ ED_INSERT, /* } */ + /* 126 */ ED_INSERT, /* ~ */ + /* 127 */ VI_DELETE_PREV_CHAR, /* ^? */ + /* 128 */ ED_INSERT, /* M-^@ */ + /* 129 */ ED_INSERT, /* M-^A */ + /* 130 */ ED_INSERT, /* M-^B */ + /* 131 */ ED_INSERT, /* M-^C */ + /* 132 */ ED_INSERT, /* M-^D */ + /* 133 */ ED_INSERT, /* M-^E */ + /* 134 */ ED_INSERT, /* M-^F */ + /* 135 */ ED_INSERT, /* M-^G */ + /* 136 */ ED_INSERT, /* M-^H */ + /* 137 */ ED_INSERT, /* M-^I */ + /* 138 */ ED_INSERT, /* M-^J */ + /* 139 */ ED_INSERT, /* M-^K */ + /* 140 */ ED_INSERT, /* M-^L */ + /* 141 */ ED_INSERT, /* M-^M */ + /* 142 */ ED_INSERT, /* M-^N */ + /* 143 */ ED_INSERT, /* M-^O */ + /* 144 */ ED_INSERT, /* M-^P */ + /* 145 */ ED_INSERT, /* M-^Q */ + /* 146 */ ED_INSERT, /* M-^R */ + /* 147 */ ED_INSERT, /* M-^S */ + /* 148 */ ED_INSERT, /* M-^T */ + /* 149 */ ED_INSERT, /* M-^U */ + /* 150 */ ED_INSERT, /* M-^V */ + /* 151 */ ED_INSERT, /* M-^W */ + /* 152 */ ED_INSERT, /* M-^X */ + /* 153 */ ED_INSERT, /* M-^Y */ + /* 154 */ ED_INSERT, /* M-^Z */ + /* 155 */ ED_INSERT, /* M-^[ */ + /* 156 */ ED_INSERT, /* M-^\ */ + /* 157 */ ED_INSERT, /* M-^] */ + /* 158 */ ED_INSERT, /* M-^^ */ + /* 159 */ ED_INSERT, /* M-^_ */ + /* 160 */ ED_INSERT, /* M-SPACE */ + /* 161 */ ED_INSERT, /* M-! */ + /* 162 */ ED_INSERT, /* M-" */ + /* 163 */ ED_INSERT, /* M-# */ + /* 164 */ ED_INSERT, /* M-$ */ + /* 165 */ ED_INSERT, /* M-% */ + /* 166 */ ED_INSERT, /* M-& */ + /* 167 */ ED_INSERT, /* M-' */ + /* 168 */ ED_INSERT, /* M-( */ + /* 169 */ ED_INSERT, /* M-) */ + /* 170 */ ED_INSERT, /* M-* */ + /* 171 */ ED_INSERT, /* M-+ */ + /* 172 */ ED_INSERT, /* M-, */ + /* 173 */ ED_INSERT, /* M-- */ + /* 174 */ ED_INSERT, /* M-. */ + /* 175 */ ED_INSERT, /* M-/ */ + /* 176 */ ED_INSERT, /* M-0 */ + /* 177 */ ED_INSERT, /* M-1 */ + /* 178 */ ED_INSERT, /* M-2 */ + /* 179 */ ED_INSERT, /* M-3 */ + /* 180 */ ED_INSERT, /* M-4 */ + /* 181 */ ED_INSERT, /* M-5 */ + /* 182 */ ED_INSERT, /* M-6 */ + /* 183 */ ED_INSERT, /* M-7 */ + /* 184 */ ED_INSERT, /* M-8 */ + /* 185 */ ED_INSERT, /* M-9 */ + /* 186 */ ED_INSERT, /* M-: */ + /* 187 */ ED_INSERT, /* M-; */ + /* 188 */ ED_INSERT, /* M-< */ + /* 189 */ ED_INSERT, /* M-= */ + /* 190 */ ED_INSERT, /* M-> */ + /* 191 */ ED_INSERT, /* M-? */ + /* 192 */ ED_INSERT, /* M-@ */ + /* 193 */ ED_INSERT, /* M-A */ + /* 194 */ ED_INSERT, /* M-B */ + /* 195 */ ED_INSERT, /* M-C */ + /* 196 */ ED_INSERT, /* M-D */ + /* 197 */ ED_INSERT, /* M-E */ + /* 198 */ ED_INSERT, /* M-F */ + /* 199 */ ED_INSERT, /* M-G */ + /* 200 */ ED_INSERT, /* M-H */ + /* 201 */ ED_INSERT, /* M-I */ + /* 202 */ ED_INSERT, /* M-J */ + /* 203 */ ED_INSERT, /* M-K */ + /* 204 */ ED_INSERT, /* M-L */ + /* 205 */ ED_INSERT, /* M-M */ + /* 206 */ ED_INSERT, /* M-N */ + /* 207 */ ED_INSERT, /* M-O */ + /* 208 */ ED_INSERT, /* M-P */ + /* 209 */ ED_INSERT, /* M-Q */ + /* 210 */ ED_INSERT, /* M-R */ + /* 211 */ ED_INSERT, /* M-S */ + /* 212 */ ED_INSERT, /* M-T */ + /* 213 */ ED_INSERT, /* M-U */ + /* 214 */ ED_INSERT, /* M-V */ + /* 215 */ ED_INSERT, /* M-W */ + /* 216 */ ED_INSERT, /* M-X */ + /* 217 */ ED_INSERT, /* M-Y */ + /* 218 */ ED_INSERT, /* M-Z */ + /* 219 */ ED_INSERT, /* M-[ */ + /* 220 */ ED_INSERT, /* M-\ */ + /* 221 */ ED_INSERT, /* M-] */ + /* 222 */ ED_INSERT, /* M-^ */ + /* 223 */ ED_INSERT, /* M-_ */ + /* 224 */ ED_INSERT, /* M-` */ + /* 225 */ ED_INSERT, /* M-a */ + /* 226 */ ED_INSERT, /* M-b */ + /* 227 */ ED_INSERT, /* M-c */ + /* 228 */ ED_INSERT, /* M-d */ + /* 229 */ ED_INSERT, /* M-e */ + /* 230 */ ED_INSERT, /* M-f */ + /* 231 */ ED_INSERT, /* M-g */ + /* 232 */ ED_INSERT, /* M-h */ + /* 233 */ ED_INSERT, /* M-i */ + /* 234 */ ED_INSERT, /* M-j */ + /* 235 */ ED_INSERT, /* M-k */ + /* 236 */ ED_INSERT, /* M-l */ + /* 237 */ ED_INSERT, /* M-m */ + /* 238 */ ED_INSERT, /* M-n */ + /* 239 */ ED_INSERT, /* M-o */ + /* 240 */ ED_INSERT, /* M-p */ + /* 241 */ ED_INSERT, /* M-q */ + /* 242 */ ED_INSERT, /* M-r */ + /* 243 */ ED_INSERT, /* M-s */ + /* 244 */ ED_INSERT, /* M-t */ + /* 245 */ ED_INSERT, /* M-u */ + /* 246 */ ED_INSERT, /* M-v */ + /* 247 */ ED_INSERT, /* M-w */ + /* 248 */ ED_INSERT, /* M-x */ + /* 249 */ ED_INSERT, /* M-y */ + /* 250 */ ED_INSERT, /* M-z */ + /* 251 */ ED_INSERT, /* M-{ */ + /* 252 */ ED_INSERT, /* M-| */ + /* 253 */ ED_INSERT, /* M-} */ + /* 254 */ ED_INSERT, /* M-~ */ + /* 255 */ ED_INSERT /* M-^? */ +}; + +static const el_action_t el_map_vi_command[] = { + /* 0 */ ED_UNASSIGNED, /* ^@ */ + /* 1 */ ED_MOVE_TO_BEG, /* ^A */ + /* 2 */ ED_UNASSIGNED, /* ^B */ + /* 3 */ ED_IGNORE, /* ^C */ + /* 4 */ ED_UNASSIGNED, /* ^D */ + /* 5 */ ED_MOVE_TO_END, /* ^E */ + /* 6 */ ED_UNASSIGNED, /* ^F */ + /* 7 */ ED_UNASSIGNED, /* ^G */ + /* 8 */ ED_DELETE_PREV_CHAR, /* ^H */ + /* 9 */ ED_UNASSIGNED, /* ^I */ + /* 10 */ ED_NEWLINE, /* ^J */ + /* 11 */ ED_KILL_LINE, /* ^K */ + /* 12 */ ED_CLEAR_SCREEN, /* ^L */ + /* 13 */ ED_NEWLINE, /* ^M */ + /* 14 */ ED_NEXT_HISTORY, /* ^N */ + /* 15 */ ED_IGNORE, /* ^O */ + /* 16 */ ED_PREV_HISTORY, /* ^P */ + /* 17 */ ED_IGNORE, /* ^Q */ + /* 18 */ ED_REDISPLAY, /* ^R */ + /* 19 */ ED_IGNORE, /* ^S */ + /* 20 */ ED_UNASSIGNED, /* ^T */ + /* 21 */ VI_KILL_LINE_PREV, /* ^U */ + /* 22 */ ED_UNASSIGNED, /* ^V */ + /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ + /* 24 */ ED_UNASSIGNED, /* ^X */ + /* 25 */ ED_UNASSIGNED, /* ^Y */ + /* 26 */ ED_UNASSIGNED, /* ^Z */ + /* 27 */ EM_META_NEXT, /* ^[ */ + /* 28 */ ED_IGNORE, /* ^\ */ + /* 29 */ ED_UNASSIGNED, /* ^] */ + /* 30 */ ED_UNASSIGNED, /* ^^ */ + /* 31 */ ED_UNASSIGNED, /* ^_ */ + /* 32 */ ED_NEXT_CHAR, /* SPACE */ + /* 33 */ ED_UNASSIGNED, /* ! */ + /* 34 */ ED_UNASSIGNED, /* " */ + /* 35 */ VI_COMMENT_OUT, /* # */ + /* 36 */ ED_MOVE_TO_END, /* $ */ + /* 37 */ VI_MATCH, /* % */ + /* 38 */ ED_UNASSIGNED, /* & */ + /* 39 */ ED_UNASSIGNED, /* ' */ + /* 40 */ ED_UNASSIGNED, /* ( */ + /* 41 */ ED_UNASSIGNED, /* ) */ + /* 42 */ ED_UNASSIGNED, /* * */ + /* 43 */ ED_NEXT_HISTORY, /* + */ + /* 44 */ VI_REPEAT_PREV_CHAR, /* , */ + /* 45 */ ED_PREV_HISTORY, /* - */ + /* 46 */ VI_REDO, /* . */ + /* 47 */ VI_SEARCH_PREV, /* / */ + /* 48 */ VI_ZERO, /* 0 */ + /* 49 */ ED_ARGUMENT_DIGIT, /* 1 */ + /* 50 */ ED_ARGUMENT_DIGIT, /* 2 */ + /* 51 */ ED_ARGUMENT_DIGIT, /* 3 */ + /* 52 */ ED_ARGUMENT_DIGIT, /* 4 */ + /* 53 */ ED_ARGUMENT_DIGIT, /* 5 */ + /* 54 */ ED_ARGUMENT_DIGIT, /* 6 */ + /* 55 */ ED_ARGUMENT_DIGIT, /* 7 */ + /* 56 */ ED_ARGUMENT_DIGIT, /* 8 */ + /* 57 */ ED_ARGUMENT_DIGIT, /* 9 */ + /* 58 */ ED_COMMAND, /* : */ + /* 59 */ VI_REPEAT_NEXT_CHAR, /* ; */ + /* 60 */ ED_UNASSIGNED, /* < */ + /* 61 */ ED_UNASSIGNED, /* = */ + /* 62 */ ED_UNASSIGNED, /* > */ + /* 63 */ VI_SEARCH_NEXT, /* ? */ + /* 64 */ VI_ALIAS, /* @ */ + /* 65 */ VI_ADD_AT_EOL, /* A */ + /* 66 */ VI_PREV_BIG_WORD, /* B */ + /* 67 */ VI_CHANGE_TO_EOL, /* C */ + /* 68 */ ED_KILL_LINE, /* D */ + /* 69 */ VI_END_BIG_WORD, /* E */ + /* 70 */ VI_PREV_CHAR, /* F */ + /* 71 */ VI_TO_HISTORY_LINE, /* G */ + /* 72 */ ED_UNASSIGNED, /* H */ + /* 73 */ VI_INSERT_AT_BOL, /* I */ + /* 74 */ ED_SEARCH_NEXT_HISTORY, /* J */ + /* 75 */ ED_SEARCH_PREV_HISTORY, /* K */ + /* 76 */ ED_UNASSIGNED, /* L */ + /* 77 */ ED_UNASSIGNED, /* M */ + /* 78 */ VI_REPEAT_SEARCH_PREV, /* N */ + /* 79 */ ED_SEQUENCE_LEAD_IN, /* O */ + /* 80 */ VI_PASTE_PREV, /* P */ + /* 81 */ ED_UNASSIGNED, /* Q */ + /* 82 */ VI_REPLACE_MODE, /* R */ + /* 83 */ VI_SUBSTITUTE_LINE, /* S */ + /* 84 */ VI_TO_PREV_CHAR, /* T */ + /* 85 */ VI_UNDO_LINE, /* U */ + /* 86 */ ED_UNASSIGNED, /* V */ + /* 87 */ VI_NEXT_BIG_WORD, /* W */ + /* 88 */ ED_DELETE_PREV_CHAR, /* X */ + /* 89 */ VI_YANK_END, /* Y */ + /* 90 */ ED_UNASSIGNED, /* Z */ + /* 91 */ ED_SEQUENCE_LEAD_IN, /* [ */ + /* 92 */ ED_UNASSIGNED, /* \ */ + /* 93 */ ED_UNASSIGNED, /* ] */ + /* 94 */ ED_MOVE_TO_BEG, /* ^ */ + /* 95 */ VI_HISTORY_WORD, /* _ */ + /* 96 */ ED_UNASSIGNED, /* ` */ + /* 97 */ VI_ADD, /* a */ + /* 98 */ VI_PREV_WORD, /* b */ + /* 99 */ VI_CHANGE_META, /* c */ + /* 100 */ VI_DELETE_META, /* d */ + /* 101 */ VI_END_WORD, /* e */ + /* 102 */ VI_NEXT_CHAR, /* f */ + /* 103 */ ED_UNASSIGNED, /* g */ + /* 104 */ ED_PREV_CHAR, /* h */ + /* 105 */ VI_INSERT, /* i */ + /* 106 */ ED_NEXT_HISTORY, /* j */ + /* 107 */ ED_PREV_HISTORY, /* k */ + /* 108 */ ED_NEXT_CHAR, /* l */ + /* 109 */ ED_UNASSIGNED, /* m */ + /* 110 */ VI_REPEAT_SEARCH_NEXT, /* n */ + /* 111 */ ED_UNASSIGNED, /* o */ + /* 112 */ VI_PASTE_NEXT, /* p */ + /* 113 */ ED_UNASSIGNED, /* q */ + /* 114 */ VI_REPLACE_CHAR, /* r */ + /* 115 */ VI_SUBSTITUTE_CHAR, /* s */ + /* 116 */ VI_TO_NEXT_CHAR, /* t */ + /* 117 */ VI_UNDO, /* u */ + /* 118 */ VI_HISTEDIT, /* v */ + /* 119 */ VI_NEXT_WORD, /* w */ + /* 120 */ ED_DELETE_NEXT_CHAR, /* x */ + /* 121 */ VI_YANK, /* y */ + /* 122 */ ED_UNASSIGNED, /* z */ + /* 123 */ ED_UNASSIGNED, /* { */ + /* 124 */ VI_TO_COLUMN, /* | */ + /* 125 */ ED_UNASSIGNED, /* } */ + /* 126 */ VI_CHANGE_CASE, /* ~ */ + /* 127 */ ED_DELETE_PREV_CHAR, /* ^? */ + /* 128 */ ED_UNASSIGNED, /* M-^@ */ + /* 129 */ ED_UNASSIGNED, /* M-^A */ + /* 130 */ ED_UNASSIGNED, /* M-^B */ + /* 131 */ ED_UNASSIGNED, /* M-^C */ + /* 132 */ ED_UNASSIGNED, /* M-^D */ + /* 133 */ ED_UNASSIGNED, /* M-^E */ + /* 134 */ ED_UNASSIGNED, /* M-^F */ + /* 135 */ ED_UNASSIGNED, /* M-^G */ + /* 136 */ ED_UNASSIGNED, /* M-^H */ + /* 137 */ ED_UNASSIGNED, /* M-^I */ + /* 138 */ ED_UNASSIGNED, /* M-^J */ + /* 139 */ ED_UNASSIGNED, /* M-^K */ + /* 140 */ ED_UNASSIGNED, /* M-^L */ + /* 141 */ ED_UNASSIGNED, /* M-^M */ + /* 142 */ ED_UNASSIGNED, /* M-^N */ + /* 143 */ ED_UNASSIGNED, /* M-^O */ + /* 144 */ ED_UNASSIGNED, /* M-^P */ + /* 145 */ ED_UNASSIGNED, /* M-^Q */ + /* 146 */ ED_UNASSIGNED, /* M-^R */ + /* 147 */ ED_UNASSIGNED, /* M-^S */ + /* 148 */ ED_UNASSIGNED, /* M-^T */ + /* 149 */ ED_UNASSIGNED, /* M-^U */ + /* 150 */ ED_UNASSIGNED, /* M-^V */ + /* 151 */ ED_UNASSIGNED, /* M-^W */ + /* 152 */ ED_UNASSIGNED, /* M-^X */ + /* 153 */ ED_UNASSIGNED, /* M-^Y */ + /* 154 */ ED_UNASSIGNED, /* M-^Z */ + /* 155 */ ED_UNASSIGNED, /* M-^[ */ + /* 156 */ ED_UNASSIGNED, /* M-^\ */ + /* 157 */ ED_UNASSIGNED, /* M-^] */ + /* 158 */ ED_UNASSIGNED, /* M-^^ */ + /* 159 */ ED_UNASSIGNED, /* M-^_ */ + /* 160 */ ED_UNASSIGNED, /* M-SPACE */ + /* 161 */ ED_UNASSIGNED, /* M-! */ + /* 162 */ ED_UNASSIGNED, /* M-" */ + /* 163 */ ED_UNASSIGNED, /* M-# */ + /* 164 */ ED_UNASSIGNED, /* M-$ */ + /* 165 */ ED_UNASSIGNED, /* M-% */ + /* 166 */ ED_UNASSIGNED, /* M-& */ + /* 167 */ ED_UNASSIGNED, /* M-' */ + /* 168 */ ED_UNASSIGNED, /* M-( */ + /* 169 */ ED_UNASSIGNED, /* M-) */ + /* 170 */ ED_UNASSIGNED, /* M-* */ + /* 171 */ ED_UNASSIGNED, /* M-+ */ + /* 172 */ ED_UNASSIGNED, /* M-, */ + /* 173 */ ED_UNASSIGNED, /* M-- */ + /* 174 */ ED_UNASSIGNED, /* M-. */ + /* 175 */ ED_UNASSIGNED, /* M-/ */ + /* 176 */ ED_UNASSIGNED, /* M-0 */ + /* 177 */ ED_UNASSIGNED, /* M-1 */ + /* 178 */ ED_UNASSIGNED, /* M-2 */ + /* 179 */ ED_UNASSIGNED, /* M-3 */ + /* 180 */ ED_UNASSIGNED, /* M-4 */ + /* 181 */ ED_UNASSIGNED, /* M-5 */ + /* 182 */ ED_UNASSIGNED, /* M-6 */ + /* 183 */ ED_UNASSIGNED, /* M-7 */ + /* 184 */ ED_UNASSIGNED, /* M-8 */ + /* 185 */ ED_UNASSIGNED, /* M-9 */ + /* 186 */ ED_UNASSIGNED, /* M-: */ + /* 187 */ ED_UNASSIGNED, /* M-; */ + /* 188 */ ED_UNASSIGNED, /* M-< */ + /* 189 */ ED_UNASSIGNED, /* M-= */ + /* 190 */ ED_UNASSIGNED, /* M-> */ + /* 191 */ ED_UNASSIGNED, /* M-? */ + /* 192 */ ED_UNASSIGNED, /* M-@ */ + /* 193 */ ED_UNASSIGNED, /* M-A */ + /* 194 */ ED_UNASSIGNED, /* M-B */ + /* 195 */ ED_UNASSIGNED, /* M-C */ + /* 196 */ ED_UNASSIGNED, /* M-D */ + /* 197 */ ED_UNASSIGNED, /* M-E */ + /* 198 */ ED_UNASSIGNED, /* M-F */ + /* 199 */ ED_UNASSIGNED, /* M-G */ + /* 200 */ ED_UNASSIGNED, /* M-H */ + /* 201 */ ED_UNASSIGNED, /* M-I */ + /* 202 */ ED_UNASSIGNED, /* M-J */ + /* 203 */ ED_UNASSIGNED, /* M-K */ + /* 204 */ ED_UNASSIGNED, /* M-L */ + /* 205 */ ED_UNASSIGNED, /* M-M */ + /* 206 */ ED_UNASSIGNED, /* M-N */ + /* 207 */ ED_SEQUENCE_LEAD_IN, /* M-O */ + /* 208 */ ED_UNASSIGNED, /* M-P */ + /* 209 */ ED_UNASSIGNED, /* M-Q */ + /* 210 */ ED_UNASSIGNED, /* M-R */ + /* 211 */ ED_UNASSIGNED, /* M-S */ + /* 212 */ ED_UNASSIGNED, /* M-T */ + /* 213 */ ED_UNASSIGNED, /* M-U */ + /* 214 */ ED_UNASSIGNED, /* M-V */ + /* 215 */ ED_UNASSIGNED, /* M-W */ + /* 216 */ ED_UNASSIGNED, /* M-X */ + /* 217 */ ED_UNASSIGNED, /* M-Y */ + /* 218 */ ED_UNASSIGNED, /* M-Z */ + /* 219 */ ED_SEQUENCE_LEAD_IN, /* M-[ */ + /* 220 */ ED_UNASSIGNED, /* M-\ */ + /* 221 */ ED_UNASSIGNED, /* M-] */ + /* 222 */ ED_UNASSIGNED, /* M-^ */ + /* 223 */ ED_UNASSIGNED, /* M-_ */ + /* 224 */ ED_UNASSIGNED, /* M-` */ + /* 225 */ ED_UNASSIGNED, /* M-a */ + /* 226 */ ED_UNASSIGNED, /* M-b */ + /* 227 */ ED_UNASSIGNED, /* M-c */ + /* 228 */ ED_UNASSIGNED, /* M-d */ + /* 229 */ ED_UNASSIGNED, /* M-e */ + /* 230 */ ED_UNASSIGNED, /* M-f */ + /* 231 */ ED_UNASSIGNED, /* M-g */ + /* 232 */ ED_UNASSIGNED, /* M-h */ + /* 233 */ ED_UNASSIGNED, /* M-i */ + /* 234 */ ED_UNASSIGNED, /* M-j */ + /* 235 */ ED_UNASSIGNED, /* M-k */ + /* 236 */ ED_UNASSIGNED, /* M-l */ + /* 237 */ ED_UNASSIGNED, /* M-m */ + /* 238 */ ED_UNASSIGNED, /* M-n */ + /* 239 */ ED_UNASSIGNED, /* M-o */ + /* 240 */ ED_UNASSIGNED, /* M-p */ + /* 241 */ ED_UNASSIGNED, /* M-q */ + /* 242 */ ED_UNASSIGNED, /* M-r */ + /* 243 */ ED_UNASSIGNED, /* M-s */ + /* 244 */ ED_UNASSIGNED, /* M-t */ + /* 245 */ ED_UNASSIGNED, /* M-u */ + /* 246 */ ED_UNASSIGNED, /* M-v */ + /* 247 */ ED_UNASSIGNED, /* M-w */ + /* 248 */ ED_UNASSIGNED, /* M-x */ + /* 249 */ ED_UNASSIGNED, /* M-y */ + /* 250 */ ED_UNASSIGNED, /* M-z */ + /* 251 */ ED_UNASSIGNED, /* M-{ */ + /* 252 */ ED_UNASSIGNED, /* M-| */ + /* 253 */ ED_UNASSIGNED, /* M-} */ + /* 254 */ ED_UNASSIGNED, /* M-~ */ + /* 255 */ ED_UNASSIGNED /* M-^? */ +}; + + +/* map_init(): + * Initialize and allocate the maps + */ +libedit_private int +map_init(EditLine *el) +{ + + /* + * Make sure those are correct before starting. + */ +#ifdef MAP_DEBUG + if (sizeof(el_map_emacs) != N_KEYS * sizeof(el_action_t)) + EL_ABORT((el->el_errfile, "Emacs map incorrect\n")); + if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t)) + EL_ABORT((el->el_errfile, "Vi command map incorrect\n")); + if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(el_action_t)) + EL_ABORT((el->el_errfile, "Vi insert map incorrect\n")); +#endif + + el->el_map.alt = el_calloc(N_KEYS, sizeof(*el->el_map.alt)); + if (el->el_map.alt == NULL) + return -1; + el->el_map.key = el_calloc(N_KEYS, sizeof(*el->el_map.key)); + if (el->el_map.key == NULL) + return -1; + el->el_map.emacs = el_map_emacs; + el->el_map.vic = el_map_vi_command; + el->el_map.vii = el_map_vi_insert; + el->el_map.help = el_calloc(EL_NUM_FCNS, sizeof(*el->el_map.help)); + if (el->el_map.help == NULL) + return -1; + (void) memcpy(el->el_map.help, el_func_help, + sizeof(*el->el_map.help) * EL_NUM_FCNS); + el->el_map.func = el_calloc(EL_NUM_FCNS, sizeof(*el->el_map.func)); + if (el->el_map.func == NULL) + return -1; + memcpy(el->el_map.func, el_func, sizeof(*el->el_map.func) + * EL_NUM_FCNS); + el->el_map.nfunc = EL_NUM_FCNS; + +#ifdef VIDEFAULT + map_init_vi(el); +#else + map_init_emacs(el); +#endif /* VIDEFAULT */ + return 0; +} + + +/* map_end(): + * Free the space taken by the editor maps + */ +libedit_private void +map_end(EditLine *el) +{ + + el_free(el->el_map.alt); + el->el_map.alt = NULL; + el_free(el->el_map.key); + el->el_map.key = NULL; + el->el_map.emacs = NULL; + el->el_map.vic = NULL; + el->el_map.vii = NULL; + el_free(el->el_map.help); + el->el_map.help = NULL; + el_free(el->el_map.func); + el->el_map.func = NULL; +} + + +/* map_init_nls(): + * Find all the printable keys and bind them to self insert + */ +static void +map_init_nls(EditLine *el) +{ + int i; + + el_action_t *map = el->el_map.key; + + for (i = 0200; i <= 0377; i++) + if (iswprint(i)) + map[i] = ED_INSERT; +} + + +/* map_init_meta(): + * Bind all the meta keys to the appropriate ESC-<key> sequence + */ +static void +map_init_meta(EditLine *el) +{ + wchar_t buf[3]; + int i; + el_action_t *map = el->el_map.key; + el_action_t *alt = el->el_map.alt; + + for (i = 0; i <= 0377 && map[i] != EM_META_NEXT; i++) + continue; + + if (i > 0377) { + for (i = 0; i <= 0377 && alt[i] != EM_META_NEXT; i++) + continue; + if (i > 0377) { + i = 033; + if (el->el_map.type == MAP_VI) + map = alt; + } else + map = alt; + } + buf[0] = (wchar_t)i; + buf[2] = 0; + for (i = 0200; i <= 0377; i++) + switch (map[i]) { + case ED_INSERT: + case ED_UNASSIGNED: + case ED_SEQUENCE_LEAD_IN: + break; + default: + buf[1] = i & 0177; + keymacro_add(el, buf, keymacro_map_cmd(el, (int) map[i]), XK_CMD); + break; + } + map[(int) buf[0]] = ED_SEQUENCE_LEAD_IN; +} + + +/* map_init_vi(): + * Initialize the vi bindings + */ +libedit_private void +map_init_vi(EditLine *el) +{ + int i; + el_action_t *key = el->el_map.key; + el_action_t *alt = el->el_map.alt; + const el_action_t *vii = el->el_map.vii; + const el_action_t *vic = el->el_map.vic; + + el->el_map.type = MAP_VI; + el->el_map.current = el->el_map.key; + + keymacro_reset(el); + + for (i = 0; i < N_KEYS; i++) { + key[i] = vii[i]; + alt[i] = vic[i]; + } + + map_init_meta(el); + map_init_nls(el); + + tty_bind_char(el, 1); + terminal_bind_arrow(el); +} + + +/* map_init_emacs(): + * Initialize the emacs bindings + */ +libedit_private void +map_init_emacs(EditLine *el) +{ + int i; + wchar_t buf[3]; + el_action_t *key = el->el_map.key; + el_action_t *alt = el->el_map.alt; + const el_action_t *emacs = el->el_map.emacs; + + el->el_map.type = MAP_EMACS; + el->el_map.current = el->el_map.key; + keymacro_reset(el); + + for (i = 0; i < N_KEYS; i++) { + key[i] = emacs[i]; + alt[i] = ED_UNASSIGNED; + } + + map_init_meta(el); + map_init_nls(el); + + buf[0] = CONTROL('X'); + buf[1] = CONTROL('X'); + buf[2] = 0; + keymacro_add(el, buf, keymacro_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD); + + tty_bind_char(el, 1); + terminal_bind_arrow(el); +} + + +/* map_set_editor(): + * Set the editor + */ +libedit_private int +map_set_editor(EditLine *el, wchar_t *editor) +{ + + if (wcscmp(editor, L"emacs") == 0) { + map_init_emacs(el); + return 0; + } + if (wcscmp(editor, L"vi") == 0) { + map_init_vi(el); + return 0; + } + return -1; +} + + +/* map_get_editor(): + * Retrieve the editor + */ +libedit_private int +map_get_editor(EditLine *el, const wchar_t **editor) +{ + + if (editor == NULL) + return -1; + switch (el->el_map.type) { + case MAP_EMACS: + *editor = L"emacs"; + return 0; + case MAP_VI: + *editor = L"vi"; + return 0; + } + return -1; +} + + +/* map_print_key(): + * Print the function description for 1 key + */ +static void +map_print_key(EditLine *el, el_action_t *map, const wchar_t *in) +{ + char outbuf[EL_BUFSIZ]; + el_bindings_t *bp, *ep; + + if (in[0] == '\0' || in[1] == '\0') { + (void) keymacro__decode_str(in, outbuf, sizeof(outbuf), ""); + ep = &el->el_map.help[el->el_map.nfunc]; + for (bp = el->el_map.help; bp < ep; bp++) + if (bp->func == map[(unsigned char) *in]) { + (void) fprintf(el->el_outfile, + "%s\t->\t%ls\n", outbuf, bp->name); + return; + } + } else + keymacro_print(el, in); +} + + +/* map_print_some_keys(): + * Print keys from first to last + */ +static void +map_print_some_keys(EditLine *el, el_action_t *map, wint_t first, wint_t last) +{ + el_bindings_t *bp, *ep; + wchar_t firstbuf[2], lastbuf[2]; + char unparsbuf[EL_BUFSIZ], extrabuf[EL_BUFSIZ]; + + firstbuf[0] = first; + firstbuf[1] = 0; + lastbuf[0] = last; + lastbuf[1] = 0; + if (map[first] == ED_UNASSIGNED) { + if (first == last) { + (void) keymacro__decode_str(firstbuf, unparsbuf, + sizeof(unparsbuf), STRQQ); + (void) fprintf(el->el_outfile, + "%-15s-> is undefined\n", unparsbuf); + } + return; + } + ep = &el->el_map.help[el->el_map.nfunc]; + for (bp = el->el_map.help; bp < ep; bp++) { + if (bp->func == map[first]) { + if (first == last) { + (void) keymacro__decode_str(firstbuf, unparsbuf, + sizeof(unparsbuf), STRQQ); + (void) fprintf(el->el_outfile, "%-15s-> %ls\n", + unparsbuf, bp->name); + } else { + (void) keymacro__decode_str(firstbuf, unparsbuf, + sizeof(unparsbuf), STRQQ); + (void) keymacro__decode_str(lastbuf, extrabuf, + sizeof(extrabuf), STRQQ); + (void) fprintf(el->el_outfile, + "%-4s to %-7s-> %ls\n", + unparsbuf, extrabuf, bp->name); + } + return; + } + } +#ifdef MAP_DEBUG + if (map == el->el_map.key) { + (void) keymacro__decode_str(firstbuf, unparsbuf, + sizeof(unparsbuf), STRQQ); + (void) fprintf(el->el_outfile, + "BUG!!! %s isn't bound to anything.\n", unparsbuf); + (void) fprintf(el->el_outfile, "el->el_map.key[%d] == %d\n", + first, el->el_map.key[first]); + } else { + (void) keymacro__decode_str(firstbuf, unparsbuf, + sizeof(unparsbuf), STRQQ); + (void) fprintf(el->el_outfile, + "BUG!!! %s isn't bound to anything.\n", unparsbuf); + (void) fprintf(el->el_outfile, "el->el_map.alt[%d] == %d\n", + first, el->el_map.alt[first]); + } +#endif + EL_ABORT((el->el_errfile, "Error printing keys\n")); +} + + +/* map_print_all_keys(): + * Print the function description for all keys. + */ +static void +map_print_all_keys(EditLine *el) +{ + int prev, i; + + (void) fprintf(el->el_outfile, "Standard key bindings\n"); + prev = 0; + for (i = 0; i < N_KEYS; i++) { + if (el->el_map.key[prev] == el->el_map.key[i]) + continue; + map_print_some_keys(el, el->el_map.key, prev, i - 1); + prev = i; + } + map_print_some_keys(el, el->el_map.key, prev, i - 1); + + (void) fprintf(el->el_outfile, "Alternative key bindings\n"); + prev = 0; + for (i = 0; i < N_KEYS; i++) { + if (el->el_map.alt[prev] == el->el_map.alt[i]) + continue; + map_print_some_keys(el, el->el_map.alt, prev, i - 1); + prev = i; + } + map_print_some_keys(el, el->el_map.alt, prev, i - 1); + + (void) fprintf(el->el_outfile, "Multi-character bindings\n"); + keymacro_print(el, L""); + (void) fprintf(el->el_outfile, "Arrow key bindings\n"); + terminal_print_arrow(el, L""); +} + + +/* map_bind(): + * Add/remove/change bindings + */ +libedit_private int +map_bind(EditLine *el, int argc, const wchar_t **argv) +{ + el_action_t *map; + int ntype, rem; + const wchar_t *p; + wchar_t inbuf[EL_BUFSIZ]; + wchar_t outbuf[EL_BUFSIZ]; + const wchar_t *in = NULL; + wchar_t *out; + el_bindings_t *bp, *ep; + int cmd; + int key; + + if (argv == NULL) + return -1; + + map = el->el_map.key; + ntype = XK_CMD; + key = rem = 0; + for (argc = 1; (p = argv[argc]) != NULL; argc++) + if (p[0] == '-') + switch (p[1]) { + case 'a': + map = el->el_map.alt; + break; + + case 's': + ntype = XK_STR; + break; + case 'k': + key = 1; + break; + + case 'r': + rem = 1; + break; + + case 'v': + map_init_vi(el); + return 0; + + case 'e': + map_init_emacs(el); + return 0; + + case 'l': + ep = &el->el_map.help[el->el_map.nfunc]; + for (bp = el->el_map.help; bp < ep; bp++) + (void) fprintf(el->el_outfile, + "%ls\n\t%ls\n", + bp->name, bp->description); + return 0; + default: + (void) fprintf(el->el_errfile, + "%ls: Invalid switch `%lc'.\n", + argv[0], (wint_t)p[1]); + } + else + break; + + if (argv[argc] == NULL) { + map_print_all_keys(el); + return 0; + } + if (key) + in = argv[argc++]; + else if ((in = parse__string(inbuf, argv[argc++])) == NULL) { + (void) fprintf(el->el_errfile, + "%ls: Invalid \\ or ^ in instring.\n", + argv[0]); + return -1; + } + if (rem) { + if (key) { + (void) terminal_clear_arrow(el, in); + return -1; + } + if (in[1]) + (void) keymacro_delete(el, in); + else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN) + (void) keymacro_delete(el, in); + else + map[(unsigned char) *in] = ED_UNASSIGNED; + return 0; + } + if (argv[argc] == NULL) { + if (key) + terminal_print_arrow(el, in); + else + map_print_key(el, map, in); + return 0; + } +#ifdef notyet + if (argv[argc + 1] != NULL) { + bindkeymacro_usage(); + return -1; + } +#endif + + switch (ntype) { + case XK_STR: + if ((out = parse__string(outbuf, argv[argc])) == NULL) { + (void) fprintf(el->el_errfile, + "%ls: Invalid \\ or ^ in outstring.\n", argv[0]); + return -1; + } + if (key) + terminal_set_arrow(el, in, keymacro_map_str(el, out), ntype); + else + keymacro_add(el, in, keymacro_map_str(el, out), ntype); + map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN; + break; + + case XK_CMD: + if ((cmd = parse_cmd(el, argv[argc])) == -1) { + (void) fprintf(el->el_errfile, + "%ls: Invalid command `%ls'.\n", + argv[0], argv[argc]); + return -1; + } + if (key) + terminal_set_arrow(el, in, keymacro_map_cmd(el, cmd), ntype); + else { + if (in[1]) { + keymacro_add(el, in, keymacro_map_cmd(el, cmd), ntype); + map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN; + } else { + keymacro_clear(el, map, in); + map[(unsigned char) *in] = (el_action_t)cmd; + } + } + break; + + /* coverity[dead_error_begin] */ + default: + EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype)); + break; + } + return 0; +} + + +/* map_addfunc(): + * add a user defined function + */ +libedit_private int +map_addfunc(EditLine *el, const wchar_t *name, const wchar_t *help, + el_func_t func) +{ + void *p; + size_t nf = el->el_map.nfunc + 1; + + if (name == NULL || help == NULL || func == NULL) + return -1; + + if ((p = el_realloc(el->el_map.func, nf * + sizeof(*el->el_map.func))) == NULL) + return -1; + el->el_map.func = p; + if ((p = el_realloc(el->el_map.help, nf * sizeof(*el->el_map.help))) + == NULL) + return -1; + el->el_map.help = p; + + nf = (size_t)el->el_map.nfunc; + el->el_map.func[nf] = func; + + el->el_map.help[nf].name = name; + el->el_map.help[nf].func = (int)nf; + el->el_map.help[nf].description = help; + el->el_map.nfunc++; + + return 0; +} diff --git a/src/thirdparty/libedit-3.1/src/map.h b/src/thirdparty/libedit-3.1/src/map.h new file mode 100644 index 000000000..b4e4e2899 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/map.h @@ -0,0 +1,79 @@ +/* $NetBSD: map.h,v 1.13 2016/05/09 21:46:56 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)map.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * el.map.h: Editor maps + */ +#ifndef _h_el_map +#define _h_el_map + +typedef el_action_t (*el_func_t)(EditLine *, wint_t); + +typedef struct el_bindings_t { /* for the "bind" shell command */ + const wchar_t *name; /* function name for bind command */ + int func; /* function numeric value */ + const wchar_t *description; /* description of function */ +} el_bindings_t; + +typedef struct el_map_t { + el_action_t *alt; /* The current alternate key map */ + el_action_t *key; /* The current normal key map */ + el_action_t *current; /* The keymap we are using */ + const el_action_t *emacs; /* The default emacs key map */ + const el_action_t *vic; /* The vi command mode key map */ + const el_action_t *vii; /* The vi insert mode key map */ + int type; /* Emacs or vi */ + el_bindings_t *help; /* The help for the editor functions */ + el_func_t *func; /* List of available functions */ + size_t nfunc; /* The number of functions/help items */ +} el_map_t; + +#define MAP_EMACS 0 +#define MAP_VI 1 + +#define N_KEYS 256 + +libedit_private int map_bind(EditLine *, int, const wchar_t **); +libedit_private int map_init(EditLine *); +libedit_private void map_end(EditLine *); +libedit_private void map_init_vi(EditLine *); +libedit_private void map_init_emacs(EditLine *); +libedit_private int map_set_editor(EditLine *, wchar_t *); +libedit_private int map_get_editor(EditLine *, const wchar_t **); +libedit_private int map_addfunc(EditLine *, const wchar_t *, const wchar_t *, + el_func_t); + +#endif /* _h_el_map */ diff --git a/src/thirdparty/libedit-3.1/src/parse.c b/src/thirdparty/libedit-3.1/src/parse.c new file mode 100644 index 000000000..2620f41eb --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/parse.c @@ -0,0 +1,289 @@ +/* $NetBSD: parse.c,v 1.42 2019/07/23 10:18:52 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)parse.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: parse.c,v 1.42 2019/07/23 10:18:52 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * parse.c: parse an editline extended command + * + * commands are: + * + * bind + * echotc + * edit + * gettc + * history + * settc + * setty + */ +#include <stdlib.h> +#include <string.h> + +#include "el.h" +#include "parse.h" + +static const struct { + const wchar_t *name; + int (*func)(EditLine *, int, const wchar_t **); +} cmds[] = { + { L"bind", map_bind }, + { L"echotc", terminal_echotc }, + { L"edit", el_editmode }, + { L"history", hist_command }, + { L"telltc", terminal_telltc }, + { L"settc", terminal_settc }, + { L"setty", tty_stty }, + { NULL, NULL } +}; + + +/* parse_line(): + * Parse a line and dispatch it + */ +libedit_private int +parse_line(EditLine *el, const wchar_t *line) +{ + const wchar_t **argv; + int argc; + TokenizerW *tok; + + tok = tok_winit(NULL); + tok_wstr(tok, line, &argc, &argv); + argc = el_wparse(el, argc, argv); + tok_wend(tok); + return argc; +} + + +/* el_parse(): + * Command dispatcher + */ +int +el_wparse(EditLine *el, int argc, const wchar_t *argv[]) +{ + const wchar_t *ptr; + int i; + + if (argc < 1) + return -1; + ptr = wcschr(argv[0], L':'); + if (ptr != NULL) { + wchar_t *tprog; + size_t l; + + if (ptr == argv[0]) + return 0; + l = (size_t)(ptr - argv[0]); + tprog = el_calloc(l + 1, sizeof(*tprog)); + if (tprog == NULL) + return 0; + (void) wcsncpy(tprog, argv[0], l); + tprog[l] = '\0'; + ptr++; + l = (size_t)el_match(el->el_prog, tprog); + el_free(tprog); + if (!l) + return 0; + } else + ptr = argv[0]; + + for (i = 0; cmds[i].name != NULL; i++) + if (wcscmp(cmds[i].name, ptr) == 0) { + i = (*cmds[i].func) (el, argc, argv); + return -i; + } + return -1; +} + + +/* parse__escape(): + * Parse a string of the form ^<char> \<odigit> \<char> \U+xxxx and return + * the appropriate character or -1 if the escape is not valid + */ +libedit_private int +parse__escape(const wchar_t **ptr) +{ + const wchar_t *p; + wint_t c; + + p = *ptr; + + if (p[1] == 0) + return -1; + + if (*p == '\\') { + p++; + switch (*p) { + case 'a': + c = '\007'; /* Bell */ + break; + case 'b': + c = '\010'; /* Backspace */ + break; + case 't': + c = '\011'; /* Horizontal Tab */ + break; + case 'n': + c = '\012'; /* New Line */ + break; + case 'v': + c = '\013'; /* Vertical Tab */ + break; + case 'f': + c = '\014'; /* Form Feed */ + break; + case 'r': + c = '\015'; /* Carriage Return */ + break; + case 'e': + c = '\033'; /* Escape */ + break; + case 'U': /* Unicode \U+xxxx or \U+xxxxx format */ + { + int i; + const wchar_t hex[] = L"0123456789ABCDEF"; + const wchar_t *h; + ++p; + if (*p++ != '+') + return -1; + c = 0; + for (i = 0; i < 5; ++i) { + h = wcschr(hex, *p++); + if (!h && i < 4) + return -1; + else if (h) + c = (c << 4) | ((int)(h - hex)); + else + --p; + } + if (c > 0x10FFFF) /* outside valid character range */ + return -1; + break; + } + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + { + int cnt, ch; + + for (cnt = 0, c = 0; cnt < 3; cnt++) { + ch = *p++; + if (ch < '0' || ch > '7') { + p--; + break; + } + c = (c << 3) | (ch - '0'); + } + if ((c & (wint_t)0xffffff00) != (wint_t)0) + return -1; + --p; + break; + } + default: + c = *p; + break; + } + } else if (*p == '^') { + p++; + c = (*p == '?') ? '\177' : (*p & 0237); + } else + c = *p; + *ptr = ++p; + return c; +} + +/* parse__string(): + * Parse the escapes from in and put the raw string out + */ +libedit_private wchar_t * +parse__string(wchar_t *out, const wchar_t *in) +{ + wchar_t *rv = out; + int n; + + for (;;) + switch (*in) { + case '\0': + *out = '\0'; + return rv; + + case '\\': + case '^': + if ((n = parse__escape(&in)) == -1) + return NULL; + *out++ = (wchar_t)n; + break; + + case 'M': + if (in[1] == '-' && in[2] != '\0') { + *out++ = '\033'; + in += 2; + break; + } + /*FALLTHROUGH*/ + + default: + *out++ = *in++; + break; + } +} + + +/* parse_cmd(): + * Return the command number for the command string given + * or -1 if one is not found + */ +libedit_private int +parse_cmd(EditLine *el, const wchar_t *cmd) +{ + el_bindings_t *b = el->el_map.help; + size_t i; + + for (i = 0; i < el->el_map.nfunc; i++) + if (wcscmp(b[i].name, cmd) == 0) + return b[i].func; + return -1; +} diff --git a/src/thirdparty/libedit-3.1/src/parse.h b/src/thirdparty/libedit-3.1/src/parse.h new file mode 100644 index 000000000..fe8eb4733 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/parse.h @@ -0,0 +1,48 @@ +/* $NetBSD: parse.h,v 1.9 2016/05/09 21:46:56 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)parse.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * el.parse.h: Parser functions + */ +#ifndef _h_el_parse +#define _h_el_parse + +libedit_private int parse_line(EditLine *, const wchar_t *); +libedit_private int parse__escape(const wchar_t **); +libedit_private wchar_t *parse__string(wchar_t *, const wchar_t *); +libedit_private int parse_cmd(EditLine *, const wchar_t *); + +#endif /* _h_el_parse */ diff --git a/src/thirdparty/libedit-3.1/src/prompt.c b/src/thirdparty/libedit-3.1/src/prompt.c new file mode 100644 index 000000000..026a746af --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/prompt.c @@ -0,0 +1,202 @@ +/* $NetBSD: prompt.c,v 1.27 2017/06/27 23:25:13 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)prompt.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: prompt.c,v 1.27 2017/06/27 23:25:13 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * prompt.c: Prompt printing functions + */ +#include <stdio.h> +#include "el.h" + +static wchar_t *prompt_default(EditLine *); +static wchar_t *prompt_default_r(EditLine *); + +/* prompt_default(): + * Just a default prompt, in case the user did not provide one + */ +static wchar_t * +/*ARGSUSED*/ +prompt_default(EditLine *el __attribute__((__unused__))) +{ + static wchar_t a[3] = L"? "; + + return a; +} + + +/* prompt_default_r(): + * Just a default rprompt, in case the user did not provide one + */ +static wchar_t * +/*ARGSUSED*/ +prompt_default_r(EditLine *el __attribute__((__unused__))) +{ + static wchar_t a[1] = L""; + + return a; +} + + +/* prompt_print(): + * Print the prompt and update the prompt position. + */ +libedit_private void +prompt_print(EditLine *el, int op) +{ + el_prompt_t *elp; + wchar_t *p; + + if (op == EL_PROMPT) + elp = &el->el_prompt; + else + elp = &el->el_rprompt; + + if (elp->p_wide) + p = (*elp->p_func)(el); + else + p = ct_decode_string((char *)(void *)(*elp->p_func)(el), + &el->el_scratch); + + for (; *p; p++) { + if (elp->p_ignore == *p) { + wchar_t *litstart = ++p; + while (*p && *p != elp->p_ignore) + p++; + if (!*p || !p[1]) { + // XXX: We lose the last literal + break; + } + re_putliteral(el, litstart, p++); + continue; + } + re_putc(el, *p, 1); + } + + elp->p_pos.v = el->el_refresh.r_cursor.v; + elp->p_pos.h = el->el_refresh.r_cursor.h; +} + + +/* prompt_init(): + * Initialize the prompt stuff + */ +libedit_private int +prompt_init(EditLine *el) +{ + + el->el_prompt.p_func = prompt_default; + el->el_prompt.p_pos.v = 0; + el->el_prompt.p_pos.h = 0; + el->el_prompt.p_ignore = '\0'; + el->el_rprompt.p_func = prompt_default_r; + el->el_rprompt.p_pos.v = 0; + el->el_rprompt.p_pos.h = 0; + el->el_rprompt.p_ignore = '\0'; + return 0; +} + + +/* prompt_end(): + * Clean up the prompt stuff + */ +libedit_private void +/*ARGSUSED*/ +prompt_end(EditLine *el __attribute__((__unused__))) +{ +} + + +/* prompt_set(): + * Install a prompt printing function + */ +libedit_private int +prompt_set(EditLine *el, el_pfunc_t prf, wchar_t c, int op, int wide) +{ + el_prompt_t *p; + + if (op == EL_PROMPT || op == EL_PROMPT_ESC) + p = &el->el_prompt; + else + p = &el->el_rprompt; + + if (prf == NULL) { + if (op == EL_PROMPT || op == EL_PROMPT_ESC) + p->p_func = prompt_default; + else + p->p_func = prompt_default_r; + } else { + p->p_func = prf; + } + + p->p_ignore = c; + + p->p_pos.v = 0; + p->p_pos.h = 0; + p->p_wide = wide; + + return 0; +} + + +/* prompt_get(): + * Retrieve the prompt printing function + */ +libedit_private int +prompt_get(EditLine *el, el_pfunc_t *prf, wchar_t *c, int op) +{ + el_prompt_t *p; + + if (prf == NULL) + return -1; + + if (op == EL_PROMPT) + p = &el->el_prompt; + else + p = &el->el_rprompt; + + if (prf) + *prf = p->p_func; + if (c) + *c = p->p_ignore; + + return 0; +} diff --git a/src/thirdparty/libedit-3.1/src/prompt.h b/src/thirdparty/libedit-3.1/src/prompt.h new file mode 100644 index 000000000..2931428db --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/prompt.h @@ -0,0 +1,58 @@ +/* $NetBSD: prompt.h,v 1.15 2016/05/09 21:46:56 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)prompt.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * el.prompt.h: Prompt printing stuff + */ +#ifndef _h_el_prompt +#define _h_el_prompt + +typedef wchar_t *(*el_pfunc_t)(EditLine *); + +typedef struct el_prompt_t { + el_pfunc_t p_func; /* Function to return the prompt */ + coord_t p_pos; /* position in the line after prompt */ + wchar_t p_ignore; /* character to start/end literal */ + int p_wide; +} el_prompt_t; + +libedit_private void prompt_print(EditLine *, int); +libedit_private int prompt_set(EditLine *, el_pfunc_t, wchar_t, int, int); +libedit_private int prompt_get(EditLine *, el_pfunc_t *, wchar_t *, int); +libedit_private int prompt_init(EditLine *); +libedit_private void prompt_end(EditLine *); + +#endif /* _h_el_prompt */ diff --git a/src/thirdparty/libedit-3.1/src/read.c b/src/thirdparty/libedit-3.1/src/read.c new file mode 100644 index 000000000..a49a304de --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/read.c @@ -0,0 +1,621 @@ +/* $NetBSD: read.c,v 1.107 2021/08/15 10:08:41 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)read.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: read.c,v 1.107 2021/08/15 10:08:41 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * read.c: Terminal read functions + */ +#include <ctype.h> +#include <errno.h> +#include <fcntl.h> +#include <limits.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "el.h" +#include "fcns.h" +#include "read.h" + +#define EL_MAXMACRO 10 + +struct macros { + wchar_t **macro; + int level; + int offset; +}; + +struct el_read_t { + struct macros macros; + el_rfunc_t read_char; /* Function to read a character. */ + int read_errno; +}; + +static int read__fixio(int, int); +static int read_char(EditLine *, wchar_t *); +static int read_getcmd(EditLine *, el_action_t *, wchar_t *); +static void read_clearmacros(struct macros *); +static void read_pop(struct macros *); +static const wchar_t *noedit_wgets(EditLine *, int *); + +/* read_init(): + * Initialize the read stuff + */ +libedit_private int +read_init(EditLine *el) +{ + struct macros *ma; + + if ((el->el_read = el_malloc(sizeof(*el->el_read))) == NULL) + return -1; + + ma = &el->el_read->macros; + if ((ma->macro = el_calloc(EL_MAXMACRO, sizeof(*ma->macro))) == NULL) { + free(el->el_read); + return -1; + } + ma->level = -1; + ma->offset = 0; + + /* builtin read_char */ + el->el_read->read_char = read_char; + return 0; +} + +/* el_read_end(): + * Free the data structures used by the read stuff. + */ +libedit_private void +read_end(struct el_read_t *el_read) +{ + read_clearmacros(&el_read->macros); + el_free(el_read->macros.macro); + el_read->macros.macro = NULL; + el_free(el_read); +} + +/* el_read_setfn(): + * Set the read char function to the one provided. + * If it is set to EL_BUILTIN_GETCFN, then reset to the builtin one. + */ +libedit_private int +el_read_setfn(struct el_read_t *el_read, el_rfunc_t rc) +{ + el_read->read_char = (rc == EL_BUILTIN_GETCFN) ? read_char : rc; + return 0; +} + + +/* el_read_getfn(): + * return the current read char function, or EL_BUILTIN_GETCFN + * if it is the default one + */ +libedit_private el_rfunc_t +el_read_getfn(struct el_read_t *el_read) +{ + return el_read->read_char == read_char ? + EL_BUILTIN_GETCFN : el_read->read_char; +} + + +/* read__fixio(): + * Try to recover from a read error + */ +/* ARGSUSED */ +static int +read__fixio(int fd __attribute__((__unused__)), int e) +{ + + switch (e) { + case -1: /* Make sure that the code is reachable */ + +#ifdef EWOULDBLOCK + case EWOULDBLOCK: +#ifndef TRY_AGAIN +#define TRY_AGAIN +#endif +#endif /* EWOULDBLOCK */ + +#if defined(POSIX) && defined(EAGAIN) +#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN + case EAGAIN: +#ifndef TRY_AGAIN +#define TRY_AGAIN +#endif +#endif /* EWOULDBLOCK && EWOULDBLOCK != EAGAIN */ +#endif /* POSIX && EAGAIN */ + + e = 0; +#ifdef TRY_AGAIN +#if defined(F_SETFL) && defined(O_NDELAY) + if ((e = fcntl(fd, F_GETFL, 0)) == -1) + return -1; + + if (fcntl(fd, F_SETFL, e & ~O_NDELAY) == -1) + return -1; + else + e = 1; +#endif /* F_SETFL && O_NDELAY */ + +#ifdef FIONBIO + { + int zero = 0; + + if (ioctl(fd, FIONBIO, &zero) == -1) + return -1; + else + e = 1; + } +#endif /* FIONBIO */ + +#endif /* TRY_AGAIN */ + return e ? 0 : -1; + + case EINTR: + return 0; + + default: + return -1; + } +} + + +/* el_push(): + * Push a macro + */ +void +el_wpush(EditLine *el, const wchar_t *str) +{ + struct macros *ma = &el->el_read->macros; + + if (str != NULL && ma->level + 1 < EL_MAXMACRO) { + ma->level++; + if ((ma->macro[ma->level] = wcsdup(str)) != NULL) + return; + ma->level--; + } + terminal_beep(el); + terminal__flush(el); +} + + +/* read_getcmd(): + * Get next command from the input stream, + * return 0 on success or -1 on EOF or error. + * Character values > 255 are not looked up in the map, but inserted. + */ +static int +read_getcmd(EditLine *el, el_action_t *cmdnum, wchar_t *ch) +{ + static const wchar_t meta = (wchar_t)0x80; + el_action_t cmd; + + do { + if (el_wgetc(el, ch) != 1) + return -1; + +#ifdef KANJI + if ((*ch & meta)) { + el->el_state.metanext = 0; + cmd = CcViMap[' ']; + break; + } else +#endif /* KANJI */ + + if (el->el_state.metanext) { + el->el_state.metanext = 0; + *ch |= meta; + } + if (*ch >= N_KEYS) + cmd = ED_INSERT; + else + cmd = el->el_map.current[(unsigned char) *ch]; + if (cmd == ED_SEQUENCE_LEAD_IN) { + keymacro_value_t val; + switch (keymacro_get(el, ch, &val)) { + case XK_CMD: + cmd = val.cmd; + break; + case XK_STR: + el_wpush(el, val.str); + break; + case XK_NOD: + return -1; + default: + EL_ABORT((el->el_errfile, "Bad XK_ type \n")); + break; + } + } + } while (cmd == ED_SEQUENCE_LEAD_IN); + *cmdnum = cmd; + return 0; +} + +/* read_char(): + * Read a character from the tty. + */ +static int +read_char(EditLine *el, wchar_t *cp) +{ + ssize_t num_read; + int tried = (el->el_flags & FIXIO) == 0; + char cbuf[MB_LEN_MAX]; + size_t cbp = 0; + int save_errno = errno; + + again: + el->el_signal->sig_no = 0; + while ((num_read = read(el->el_infd, cbuf + cbp, (size_t)1)) == -1) { + int e = errno; + switch (el->el_signal->sig_no) { + case SIGCONT: + el_wset(el, EL_REFRESH); + /*FALLTHROUGH*/ + case SIGWINCH: + sig_set(el); + goto again; + default: + break; + } + if (!tried && read__fixio(el->el_infd, e) == 0) { + errno = save_errno; + tried = 1; + } else { + errno = e; + *cp = L'\0'; + return -1; + } + } + + /* Test for EOF */ + if (num_read == 0) { + *cp = L'\0'; + return 0; + } + + for (;;) { + mbstate_t mbs; + + ++cbp; + /* This only works because UTF8 is stateless. */ + memset(&mbs, 0, sizeof(mbs)); + switch (mbrtowc(cp, cbuf, cbp, &mbs)) { + case (size_t)-1: + if (cbp > 1) { + /* + * Invalid sequence, discard all bytes + * except the last one. + */ + cbuf[0] = cbuf[cbp - 1]; + cbp = 0; + break; + } else { + /* Invalid byte, discard it. */ + cbp = 0; + goto again; + } + case (size_t)-2: + if (cbp >= MB_LEN_MAX) { + errno = EILSEQ; + *cp = L'\0'; + return -1; + } + /* Incomplete sequence, read another byte. */ + goto again; + default: + /* Valid character, process it. */ + return 1; + } + } +} + +/* read_pop(): + * Pop a macro from the stack + */ +static void +read_pop(struct macros *ma) +{ + int i; + + el_free(ma->macro[0]); + for (i = 0; i < ma->level; i++) + ma->macro[i] = ma->macro[i + 1]; + ma->level--; + ma->offset = 0; +} + +static void +read_clearmacros(struct macros *ma) +{ + while (ma->level >= 0) + el_free(ma->macro[ma->level--]); + ma->offset = 0; +} + +/* el_wgetc(): + * Read a wide character + */ +int +el_wgetc(EditLine *el, wchar_t *cp) +{ + struct macros *ma = &el->el_read->macros; + int num_read; + + terminal__flush(el); + for (;;) { + if (ma->level < 0) + break; + + if (ma->macro[0][ma->offset] == '\0') { + read_pop(ma); + continue; + } + + *cp = ma->macro[0][ma->offset++]; + + if (ma->macro[0][ma->offset] == '\0') { + /* Needed for QuoteMode On */ + read_pop(ma); + } + + return 1; + } + + if (tty_rawmode(el) < 0)/* make sure the tty is set up correctly */ + return 0; + + num_read = (*el->el_read->read_char)(el, cp); + + /* + * Remember the original reason of a read failure + * such that el_wgets() can restore it after doing + * various cleanup operation that might change errno. + */ + if (num_read < 0) + el->el_read->read_errno = errno; + + return num_read; +} + +libedit_private void +read_prepare(EditLine *el) +{ + if (el->el_flags & HANDLE_SIGNALS) + sig_set(el); + if (el->el_flags & NO_TTY) + return; + if ((el->el_flags & (UNBUFFERED|EDIT_DISABLED)) == UNBUFFERED) + tty_rawmode(el); + + /* This is relatively cheap, and things go terribly wrong if + we have the wrong size. */ + el_resize(el); + re_clear_display(el); /* reset the display stuff */ + ch_reset(el); + re_refresh(el); /* print the prompt */ + + if (el->el_flags & UNBUFFERED) + terminal__flush(el); +} + +libedit_private void +read_finish(EditLine *el) +{ + if ((el->el_flags & UNBUFFERED) == 0) + (void) tty_cookedmode(el); + if (el->el_flags & HANDLE_SIGNALS) + sig_clr(el); +} + +static const wchar_t * +noedit_wgets(EditLine *el, int *nread) +{ + el_line_t *lp = &el->el_line; + int num; + + while ((num = (*el->el_read->read_char)(el, lp->lastchar)) == 1) { + if (lp->lastchar + 1 >= lp->limit && + !ch_enlargebufs(el, (size_t)2)) + break; + lp->lastchar++; + if (el->el_flags & UNBUFFERED || + lp->lastchar[-1] == '\r' || + lp->lastchar[-1] == '\n') + break; + } + if (num == -1 && errno == EINTR) + lp->lastchar = lp->buffer; + lp->cursor = lp->lastchar; + *lp->lastchar = '\0'; + *nread = (int)(lp->lastchar - lp->buffer); + return *nread ? lp->buffer : NULL; +} + +const wchar_t * +el_wgets(EditLine *el, int *nread) +{ + int retval; + el_action_t cmdnum = 0; + int num; /* how many chars we have read at NL */ + wchar_t ch; + int nrb; + + if (nread == NULL) + nread = &nrb; + *nread = 0; + el->el_read->read_errno = 0; + + if (el->el_flags & NO_TTY) { + el->el_line.lastchar = el->el_line.buffer; + return noedit_wgets(el, nread); + } + +#ifdef FIONREAD + if (el->el_tty.t_mode == EX_IO && el->el_read->macros.level < 0) { + int chrs = 0; + + (void) ioctl(el->el_infd, FIONREAD, &chrs); + if (chrs == 0) { + if (tty_rawmode(el) < 0) { + errno = 0; + *nread = 0; + return NULL; + } + } + } +#endif /* FIONREAD */ + + if ((el->el_flags & UNBUFFERED) == 0) + read_prepare(el); + + if (el->el_flags & EDIT_DISABLED) { + if ((el->el_flags & UNBUFFERED) == 0) + el->el_line.lastchar = el->el_line.buffer; + terminal__flush(el); + return noedit_wgets(el, nread); + } + + for (num = -1; num == -1;) { /* while still editing this line */ + /* if EOF or error */ + if (read_getcmd(el, &cmdnum, &ch) == -1) + break; + if ((size_t)cmdnum >= el->el_map.nfunc) /* BUG CHECK command */ + continue; /* try again */ + /* now do the real command */ + /* vi redo needs these way down the levels... */ + el->el_state.thiscmd = cmdnum; + el->el_state.thisch = ch; + if (el->el_map.type == MAP_VI && + el->el_map.current == el->el_map.key && + el->el_chared.c_redo.pos < el->el_chared.c_redo.lim) { + if (cmdnum == VI_DELETE_PREV_CHAR && + el->el_chared.c_redo.pos != el->el_chared.c_redo.buf + && iswprint(el->el_chared.c_redo.pos[-1])) + el->el_chared.c_redo.pos--; + else + *el->el_chared.c_redo.pos++ = ch; + } + retval = (*el->el_map.func[cmdnum]) (el, ch); + + /* save the last command here */ + el->el_state.lastcmd = cmdnum; + + /* use any return value */ + switch (retval) { + case CC_CURSOR: + re_refresh_cursor(el); + break; + + case CC_REDISPLAY: + re_clear_lines(el); + re_clear_display(el); + /* FALLTHROUGH */ + + case CC_REFRESH: + re_refresh(el); + break; + + case CC_REFRESH_BEEP: + re_refresh(el); + terminal_beep(el); + break; + + case CC_NORM: /* normal char */ + break; + + case CC_ARGHACK: /* Suggested by Rich Salz */ + /* <rsalz@pineapple.bbn.com> */ + continue; /* keep going... */ + + case CC_EOF: /* end of file typed */ + if ((el->el_flags & UNBUFFERED) == 0) + num = 0; + else if (num == -1) { + *el->el_line.lastchar++ = CONTROL('d'); + el->el_line.cursor = el->el_line.lastchar; + num = 1; + } + break; + + case CC_NEWLINE: /* normal end of line */ + num = (int)(el->el_line.lastchar - el->el_line.buffer); + break; + + case CC_FATAL: /* fatal error, reset to known state */ + /* put (real) cursor in a known place */ + re_clear_display(el); /* reset the display stuff */ + ch_reset(el); /* reset the input pointers */ + read_clearmacros(&el->el_read->macros); + re_refresh(el); /* print the prompt again */ + break; + + case CC_ERROR: + default: /* functions we don't know about */ + terminal_beep(el); + terminal__flush(el); + break; + } + el->el_state.argument = 1; + el->el_state.doingarg = 0; + el->el_chared.c_vcmd.action = NOP; + if (el->el_flags & UNBUFFERED) + break; + } + + terminal__flush(el); /* flush any buffered output */ + /* make sure the tty is set up correctly */ + if ((el->el_flags & UNBUFFERED) == 0) { + read_finish(el); + *nread = num != -1 ? num : 0; + } else + *nread = (int)(el->el_line.lastchar - el->el_line.buffer); + + if (*nread == 0) { + if (num == -1) { + *nread = -1; + if (el->el_read->read_errno) + errno = el->el_read->read_errno; + } + return NULL; + } else + return el->el_line.buffer; +} diff --git a/src/thirdparty/libedit-3.1/src/read.h b/src/thirdparty/libedit-3.1/src/read.h new file mode 100644 index 000000000..1acf5d676 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/read.h @@ -0,0 +1,45 @@ +/* $NetBSD: read.h,v 1.12 2016/05/22 19:44:26 christos Exp $ */ + +/*- + * Copyright (c) 2001 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Anthony Mallet. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * el.read.h: Character reading functions + */ +#ifndef _h_el_read +#define _h_el_read + +libedit_private int read_init(EditLine *); +libedit_private void read_end(struct el_read_t *); +libedit_private void read_prepare(EditLine *); +libedit_private void read_finish(EditLine *); +libedit_private int el_read_setfn(struct el_read_t *, el_rfunc_t); +libedit_private el_rfunc_t el_read_getfn(struct el_read_t *); + +#endif /* _h_el_read */ diff --git a/src/thirdparty/libedit-3.1/src/readline.c b/src/thirdparty/libedit-3.1/src/readline.c new file mode 100644 index 000000000..8fdd13c5f --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/readline.c @@ -0,0 +1,2617 @@ +/* $NetBSD: readline.c,v 1.176 2022/09/21 01:33:53 christos Exp $ */ + +/*- + * Copyright (c) 1997 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jaromir Dolecek. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +__RCSID("$NetBSD: readline.c,v 1.176 2022/09/21 01:33:53 christos Exp $"); +#endif /* not lint && not SCCSID */ + +#include <sys/types.h> +#include <sys/stat.h> +#include <ctype.h> +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <limits.h> +#include <pwd.h> +#include <setjmp.h> +#include <stdarg.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <vis.h> + +#include "editline/readline.h" +#include "el.h" +#include "fcns.h" +#include "filecomplete.h" + +#if !defined(SIZE_T_MAX) +# define SIZE_T_MAX (size_t)(-1) +#endif + +void rl_prep_terminal(int); +void rl_deprep_terminal(void); + +/* for rl_complete() */ +#define TAB '\r' + +/* see comment at the #ifdef for sense of this */ +/* #define GDB_411_HACK */ + +/* readline compatibility stuff - look at readline sources/documentation */ +/* to see what these variables mean */ +const char *rl_library_version = "EditLine wrapper"; +int rl_readline_version = RL_READLINE_VERSION; +static char empty[] = { '\0' }; +static char expand_chars[] = { ' ', '\t', '\n', '=', '(', '\0' }; +static char break_chars[] = { ' ', '\t', '\n', '"', '\\', '\'', '`', '@', '$', + '>', '<', '=', ';', '|', '&', '{', '(', '\0' }; +const char *rl_readline_name = empty; +FILE *rl_instream = NULL; +FILE *rl_outstream = NULL; +int rl_point = 0; +int rl_end = 0; +char *rl_line_buffer = NULL; +rl_vcpfunc_t *rl_linefunc = NULL; +int rl_done = 0; +rl_hook_func_t *rl_event_hook = NULL; +KEYMAP_ENTRY_ARRAY emacs_standard_keymap, + emacs_meta_keymap, + emacs_ctlx_keymap; +/* + * The following is not implemented; we always catch signals in the + * libedit fashion: set handlers on entry to el_gets() and clear them + * on the way out. This simplistic approach works for most cases; if + * it does not work for your application, please let us know. + */ +int rl_catch_signals = 1; +int rl_catch_sigwinch = 1; + +int history_base = 1; /* probably never subject to change */ +int history_length = 0; +int history_offset = 0; +int max_input_history = 0; +char history_expansion_char = '!'; +char history_subst_char = '^'; +char *history_no_expand_chars = expand_chars; +Function *history_inhibit_expansion_function = NULL; +char *history_arg_extract(int start, int end, const char *str); + +int rl_inhibit_completion = 0; +int rl_attempted_completion_over = 0; +const char *rl_basic_word_break_characters = break_chars; +char *rl_completer_word_break_characters = NULL; +const char *rl_completer_quote_characters = NULL; +const char *rl_basic_quote_characters = "\"'"; +rl_compentry_func_t *rl_completion_entry_function = NULL; +char *(*rl_completion_word_break_hook)(void) = NULL; +rl_completion_func_t *rl_attempted_completion_function = NULL; +rl_hook_func_t *rl_pre_input_hook = NULL; +rl_hook_func_t *rl_startup1_hook = NULL; +int (*rl_getc_function)(FILE *) = NULL; +char *rl_terminal_name = NULL; +int rl_already_prompted = 0; +int rl_filename_completion_desired = 0; +int rl_ignore_completion_duplicates = 0; +int readline_echoing_p = 1; +int _rl_print_completions_horizontally = 0; +VFunction *rl_redisplay_function = NULL; +rl_hook_func_t *rl_startup_hook = NULL; +VFunction *rl_completion_display_matches_hook = NULL; +VFunction *rl_prep_term_function = (VFunction *)rl_prep_terminal; +VFunction *rl_deprep_term_function = (VFunction *)rl_deprep_terminal; +KEYMAP_ENTRY_ARRAY emacs_meta_keymap; +unsigned long rl_readline_state = RL_STATE_NONE; +int _rl_complete_mark_directories; +rl_icppfunc_t *rl_directory_completion_hook; +int rl_completion_suppress_append; +int rl_sort_completion_matches; +int _rl_completion_prefix_display_length; +int _rl_echoing_p; +int history_max_entries; +char *rl_display_prompt; +int rl_erase_empty_line; + +/* + * The current prompt string. + */ +char *rl_prompt = NULL; +char *rl_prompt_saved = NULL; +/* + * This is set to character indicating type of completion being done by + * rl_complete_internal(); this is available for application completion + * functions. + */ +int rl_completion_type = 0; + +/* + * If more than this number of items results from query for possible + * completions, we ask user if they are sure to really display the list. + */ +int rl_completion_query_items = 100; + +/* + * List of characters which are word break characters, but should be left + * in the parsed text when it is passed to the completion function. + * Shell uses this to help determine what kind of completing to do. + */ +const char *rl_special_prefixes = NULL; + +/* + * This is the character appended to the completed words if at the end of + * the line. Default is ' ' (a space). + */ +int rl_completion_append_character = ' '; + +/* stuff below is used internally by libedit for readline emulation */ + +static History *h = NULL; +static EditLine *e = NULL; +static rl_command_func_t *map[256]; +static jmp_buf topbuf; + +/* internal functions */ +static unsigned char _el_rl_complete(EditLine *, int); +static unsigned char _el_rl_tstp(EditLine *, int); +static char *_get_prompt(EditLine *); +static int _getc_function(EditLine *, wchar_t *); +static int _history_expand_command(const char *, size_t, size_t, + char **); +static char *_rl_compat_sub(const char *, const char *, + const char *, int); +static int _rl_event_read_char(EditLine *, wchar_t *); +static void _rl_update_pos(void); + +static HIST_ENTRY rl_he; + +/* ARGSUSED */ +static char * +_get_prompt(EditLine *el __attribute__((__unused__))) +{ + rl_already_prompted = 1; + return rl_prompt; +} + + +/* + * read one key from user defined input function + */ +static int +/*ARGSUSED*/ +_getc_function(EditLine *el __attribute__((__unused__)), wchar_t *c) +{ + int i; + + i = (*rl_getc_function)(rl_instream); + if (i == -1) + return 0; + *c = (wchar_t)i; + return 1; +} + +static void +_resize_fun(EditLine *el, void *a) +{ + const LineInfo *li; + const char **ap = a; + + li = el_line(el); + *ap = li->buffer; +} + +static const char * +_default_history_file(void) +{ + struct passwd *p; + static char *path; + size_t len; + + if (path) + return path; + + if ((p = getpwuid(getuid())) == NULL) + return NULL; + + len = strlen(p->pw_dir) + sizeof("/.history"); + if ((path = malloc(len)) == NULL) + return NULL; + + (void)snprintf(path, len, "%s/.history", p->pw_dir); + return path; +} + +/* + * READLINE compatibility stuff + */ + +/* + * Set the prompt + */ +int +rl_set_prompt(const char *prompt) +{ + char *p; + + if (!prompt) + prompt = ""; + if (rl_prompt != NULL && strcmp(rl_prompt, prompt) == 0) + return 0; + if (rl_prompt) + el_free(rl_prompt); + rl_prompt = strdup(prompt); + if (rl_prompt == NULL) + return -1; + + while ((p = strchr(rl_prompt, RL_PROMPT_END_IGNORE)) != NULL) { + /* Remove adjacent end/start markers to avoid double-escapes. */ + if (p[1] == RL_PROMPT_START_IGNORE) { + memmove(p, p + 2, 1 + strlen(p + 2)); + } else { + *p = RL_PROMPT_START_IGNORE; + } + } + + return 0; +} + +void +rl_save_prompt(void) +{ + rl_prompt_saved = strdup(rl_prompt); +} + +void +rl_restore_prompt(void) +{ + if (!rl_prompt_saved) + return; + rl_prompt = rl_prompt_saved; + rl_prompt_saved = NULL; +} + +/* + * initialize rl compat stuff + */ +int +rl_initialize(void) +{ + HistEvent ev; + int editmode = 1; + struct termios t; + + if (e != NULL) + el_end(e); + if (h != NULL) + history_end(h); + + RL_UNSETSTATE(RL_STATE_DONE); + + if (!rl_instream) + rl_instream = stdin; + if (!rl_outstream) + rl_outstream = stdout; + + /* + * See if we don't really want to run the editor + */ + if (tcgetattr(fileno(rl_instream), &t) != -1 && (t.c_lflag & ECHO) == 0) + editmode = 0; + + e = el_init_internal(rl_readline_name, rl_instream, rl_outstream, + stderr, fileno(rl_instream), fileno(rl_outstream), fileno(stderr), + NO_RESET); + + if (!editmode) + el_set(e, EL_EDITMODE, 0); + + h = history_init(); + if (!e || !h) + return -1; + + history(h, &ev, H_SETSIZE, INT_MAX); /* unlimited */ + history_length = 0; + max_input_history = INT_MAX; + el_set(e, EL_HIST, history, h); + + /* Setup resize function */ + el_set(e, EL_RESIZE, _resize_fun, &rl_line_buffer); + + /* setup getc function if valid */ + if (rl_getc_function) + el_set(e, EL_GETCFN, _getc_function); + + /* for proper prompt printing in readline() */ + if (rl_set_prompt("") == -1) { + history_end(h); + el_end(e); + return -1; + } + el_set(e, EL_PROMPT_ESC, _get_prompt, RL_PROMPT_START_IGNORE); + el_set(e, EL_SIGNAL, rl_catch_signals); + + /* set default mode to "emacs"-style and read setting afterwards */ + /* so this can be overridden */ + el_set(e, EL_EDITOR, "emacs"); + if (rl_terminal_name != NULL) + el_set(e, EL_TERMINAL, rl_terminal_name); + else + el_get(e, EL_TERMINAL, &rl_terminal_name); + + /* + * Word completion - this has to go AFTER rebinding keys + * to emacs-style. + */ + el_set(e, EL_ADDFN, "rl_complete", + "ReadLine compatible completion function", + _el_rl_complete); + el_set(e, EL_BIND, "^I", "rl_complete", NULL); + + /* + * Send TSTP when ^Z is pressed. + */ + el_set(e, EL_ADDFN, "rl_tstp", + "ReadLine compatible suspend function", + _el_rl_tstp); + el_set(e, EL_BIND, "^Z", "rl_tstp", NULL); + + /* + * Set some readline compatible key-bindings. + */ + el_set(e, EL_BIND, "^R", "em-inc-search-prev", NULL); + + /* + * Allow the use of Home/End keys. + */ + el_set(e, EL_BIND, "\\e[1~", "ed-move-to-beg", NULL); + el_set(e, EL_BIND, "\\e[4~", "ed-move-to-end", NULL); + el_set(e, EL_BIND, "\\e[7~", "ed-move-to-beg", NULL); + el_set(e, EL_BIND, "\\e[8~", "ed-move-to-end", NULL); + el_set(e, EL_BIND, "\\e[H", "ed-move-to-beg", NULL); + el_set(e, EL_BIND, "\\e[F", "ed-move-to-end", NULL); + + /* + * Allow the use of the Delete/Insert keys. + */ + el_set(e, EL_BIND, "\\e[3~", "ed-delete-next-char", NULL); + el_set(e, EL_BIND, "\\e[2~", "ed-quoted-insert", NULL); + + /* + * Ctrl-left-arrow and Ctrl-right-arrow for word moving. + */ + el_set(e, EL_BIND, "\\e[1;5C", "em-next-word", NULL); + el_set(e, EL_BIND, "\\e[1;5D", "ed-prev-word", NULL); + el_set(e, EL_BIND, "\\e[5C", "em-next-word", NULL); + el_set(e, EL_BIND, "\\e[5D", "ed-prev-word", NULL); + el_set(e, EL_BIND, "\\e\\e[C", "em-next-word", NULL); + el_set(e, EL_BIND, "\\e\\e[D", "ed-prev-word", NULL); + + /* read settings from configuration file */ + el_source(e, NULL); + + /* + * Unfortunately, some applications really do use rl_point + * and rl_line_buffer directly. + */ + _resize_fun(e, &rl_line_buffer); + _rl_update_pos(); + + tty_end(e, TCSADRAIN); + + return 0; +} + + +/* + * read one line from input stream and return it, chomping + * trailing newline (if there is any) + */ +char * +readline(const char *p) +{ + HistEvent ev; + const char * volatile prompt = p; + int count; + const char *ret; + char *buf; + static int used_event_hook; + + if (e == NULL || h == NULL) + rl_initialize(); + if (rl_startup_hook) { + (*rl_startup_hook)(); + } + tty_init(e); + + + rl_done = 0; + + (void)setjmp(topbuf); + buf = NULL; + + /* update prompt accordingly to what has been passed */ + if (rl_set_prompt(prompt) == -1) + goto out; + + if (rl_pre_input_hook) + (*rl_pre_input_hook)(); + + if (rl_event_hook && !(e->el_flags & NO_TTY)) { + el_set(e, EL_GETCFN, _rl_event_read_char); + used_event_hook = 1; + } + + if (!rl_event_hook && used_event_hook) { + el_set(e, EL_GETCFN, EL_BUILTIN_GETCFN); + used_event_hook = 0; + } + + rl_already_prompted = 0; + + /* get one line from input stream */ + ret = el_gets(e, &count); + + if (ret && count > 0) { + int lastidx; + + buf = strdup(ret); + if (buf == NULL) + goto out; + lastidx = count - 1; + if (buf[lastidx] == '\n') + buf[lastidx] = '\0'; + } else + buf = NULL; + + history(h, &ev, H_GETSIZE); + history_length = ev.num; + +out: + tty_end(e, TCSADRAIN); + return buf; +} + +/* + * history functions + */ + +/* + * is normally called before application starts to use + * history expansion functions + */ +void +using_history(void) +{ + if (h == NULL || e == NULL) + rl_initialize(); + history_offset = history_length; +} + + +/* + * substitute ``what'' with ``with'', returning resulting string; if + * globally == 1, substitutes all occurrences of what, otherwise only the + * first one + */ +static char * +_rl_compat_sub(const char *str, const char *what, const char *with, + int globally) +{ + const char *s; + char *r, *result; + size_t len, with_len, what_len; + + len = strlen(str); + with_len = strlen(with); + what_len = strlen(what); + + /* calculate length we need for result */ + s = str; + while (*s) { + if (*s == *what && !strncmp(s, what, what_len)) { + len += with_len - what_len; + if (!globally) + break; + s += what_len; + } else + s++; + } + r = result = el_calloc(len + 1, sizeof(*r)); + if (result == NULL) + return NULL; + s = str; + while (*s) { + if (*s == *what && !strncmp(s, what, what_len)) { + memcpy(r, with, with_len); + r += with_len; + s += what_len; + if (!globally) { + (void)strcpy(r, s); + return result; + } + } else + *r++ = *s++; + } + *r = '\0'; + return result; +} + +static char *last_search_pat; /* last !?pat[?] search pattern */ +static char *last_search_match; /* last !?pat[?] that matched */ + +const char * +get_history_event(const char *cmd, int *cindex, int qchar) +{ + int idx, sign, sub, num, begin, ret; + size_t len; + char *pat; + const char *rptr; + HistEvent ev; + + idx = *cindex; + if (cmd[idx++] != history_expansion_char) + return NULL; + + /* find out which event to take */ + if (cmd[idx] == history_expansion_char || cmd[idx] == '\0') { + if (history(h, &ev, H_FIRST) != 0) + return NULL; + *cindex = cmd[idx]? (idx + 1):idx; + return ev.str; + } + sign = 0; + if (cmd[idx] == '-') { + sign = 1; + idx++; + } + + if ('0' <= cmd[idx] && cmd[idx] <= '9') { + HIST_ENTRY *he; + + num = 0; + while (cmd[idx] && '0' <= cmd[idx] && cmd[idx] <= '9') { + num = num * 10 + cmd[idx] - '0'; + idx++; + } + if (sign) + num = history_length - num + history_base; + + if (!(he = history_get(num))) + return NULL; + + *cindex = idx; + return he->line; + } + sub = 0; + if (cmd[idx] == '?') { + sub = 1; + idx++; + } + begin = idx; + while (cmd[idx]) { + if (cmd[idx] == '\n') + break; + if (sub && cmd[idx] == '?') + break; + if (!sub && (cmd[idx] == ':' || cmd[idx] == ' ' + || cmd[idx] == '\t' || cmd[idx] == qchar)) + break; + idx++; + } + len = (size_t)idx - (size_t)begin; + if (sub && cmd[idx] == '?') + idx++; + if (sub && len == 0 && last_search_pat && *last_search_pat) + pat = last_search_pat; + else if (len == 0) + return NULL; + else { + if ((pat = el_calloc(len + 1, sizeof(*pat))) == NULL) + return NULL; + (void)strlcpy(pat, cmd + begin, len + 1); + } + + if (history(h, &ev, H_CURR) != 0) { + if (pat != last_search_pat) + el_free(pat); + return NULL; + } + num = ev.num; + + if (sub) { + if (pat != last_search_pat) { + el_free(last_search_pat); + last_search_pat = pat; + } + ret = history_search(pat, -1); + } else + ret = history_search_prefix(pat, -1); + + if (ret == -1) { + /* restore to end of list on failed search */ + history(h, &ev, H_FIRST); + (void)fprintf(rl_outstream, "%s: Event not found\n", pat); + if (pat != last_search_pat) + el_free(pat); + return NULL; + } + + if (sub && len) { + el_free(last_search_match); + last_search_match = strdup(pat); + } + + if (pat != last_search_pat) + el_free(pat); + + if (history(h, &ev, H_CURR) != 0) + return NULL; + *cindex = idx; + rptr = ev.str; + + /* roll back to original position */ + (void)history(h, &ev, H_SET, num); + + return rptr; +} + +static int +getfrom(const char **cmdp, char **fromp, const char *search, int delim) +{ + size_t size = 16; + size_t len = 0; + const char *cmd = *cmdp; + char *what = el_realloc(*fromp, size * sizeof(*what)); + if (what == NULL){ + el_free(*fromp); + *fromp = NULL; + return 0; + } + for (; *cmd && *cmd != delim; cmd++) { + if (*cmd == '\\' && cmd[1] == delim) + cmd++; + if (len - 1 >= size) { + char *nwhat; + nwhat = el_realloc(what, (size <<= 1) * sizeof(*nwhat)); + if (nwhat == NULL) { + el_free(what); + el_free(*fromp); + *cmdp = cmd; + *fromp = NULL; + return 0; + } + what = nwhat; + } + what[len++] = *cmd; + } + what[len] = '\0'; + *fromp = what; + *cmdp = cmd; + if (*what == '\0') { + el_free(what); + if (search) { + *fromp = strdup(search); + if (*fromp == NULL) { + return 0; + } + } else { + *fromp = NULL; + return -1; + } + } + if (!*cmd) { + el_free(what); + *fromp = NULL; + return -1; + } + + cmd++; /* shift after delim */ + *cmdp = cmd; + + if (!*cmd) { + el_free(what); + *fromp = NULL; + return -1; + } + return 1; +} + +static int +getto(const char **cmdp, char **top, const char *from, int delim) +{ + size_t size = 16; + size_t len = 0; + size_t from_len = strlen(from); + const char *cmd = *cmdp; + char *with = el_realloc(*top, size * sizeof(*with)); + *top = NULL; + if (with == NULL) + goto out; + + for (; *cmd && *cmd != delim; cmd++) { + if (len + from_len + 1 >= size) { + char *nwith; + size += from_len + 1; + nwith = el_realloc(with, size * sizeof(*nwith)); + if (nwith == NULL) + goto out; + with = nwith; + } + if (*cmd == '&') { + /* safe */ + strcpy(&with[len], from); + len += from_len; + continue; + } + if (*cmd == '\\' && (*(cmd + 1) == delim || *(cmd + 1) == '&')) + cmd++; + with[len++] = *cmd; + } + if (!*cmd) + goto out; + with[len] = '\0'; + *top = with; + *cmdp = cmd; + return 1; +out: + el_free(with); + el_free(*top); + *top = NULL; + *cmdp = cmd; + return -1; +} + +static void +replace(char **tmp, int c) +{ + char *aptr; + if ((aptr = strrchr(*tmp, c)) == NULL) + return; + aptr = strdup(aptr + 1); // XXX: check + el_free(*tmp); + *tmp = aptr; +} + +/* + * the real function doing history expansion - takes as argument command + * to do and data upon which the command should be executed + * does expansion the way I've understood readline documentation + * + * returns 0 if data was not modified, 1 if it was and 2 if the string + * should be only printed and not executed; in case of error, + * returns -1 and *result points to NULL + * it's the caller's responsibility to free() the string returned in *result + */ +static int +_history_expand_command(const char *command, size_t offs, size_t cmdlen, + char **result) +{ + char *tmp, *search = NULL, *aptr, delim; + const char *ptr, *cmd; + static char *from = NULL, *to = NULL; + int start, end, idx, has_mods = 0; + int p_on = 0, g_on = 0, ev; + + *result = NULL; + aptr = NULL; + ptr = NULL; + + /* First get event specifier */ + idx = 0; + + if (strchr(":^*$", command[offs + 1])) { + char str[4]; + /* + * "!:" is shorthand for "!!:". + * "!^", "!*" and "!$" are shorthand for + * "!!:^", "!!:*" and "!!:$" respectively. + */ + str[0] = str[1] = '!'; + str[2] = '0'; + ptr = get_history_event(str, &idx, 0); + idx = (command[offs + 1] == ':')? 1:0; + has_mods = 1; + } else { + if (command[offs + 1] == '#') { + /* use command so far */ + if ((aptr = el_calloc(offs + 1, sizeof(*aptr))) + == NULL) + return -1; + (void)strlcpy(aptr, command, offs + 1); + idx = 1; + } else { + int qchar; + + qchar = (offs > 0 && command[offs - 1] == '"') + ? '"' : '\0'; + ptr = get_history_event(command + offs, &idx, qchar); + } + has_mods = command[offs + (size_t)idx] == ':'; + } + + if (ptr == NULL && aptr == NULL) + return -1; + + if (!has_mods) { + *result = strdup(aptr ? aptr : ptr); + if (aptr) + el_free(aptr); + if (*result == NULL) + return -1; + return 1; + } + + cmd = command + offs + idx + 1; + + /* Now parse any word designators */ + + if (*cmd == '%') /* last word matched by ?pat? */ + tmp = strdup(last_search_match ? last_search_match : ""); + else if (strchr("^*$-0123456789", *cmd)) { + start = end = -1; + if (*cmd == '^') + start = end = 1, cmd++; + else if (*cmd == '$') + start = -1, cmd++; + else if (*cmd == '*') + start = 1, cmd++; + else if (*cmd == '-' || isdigit((unsigned char) *cmd)) { + start = 0; + while (*cmd && '0' <= *cmd && *cmd <= '9') + start = start * 10 + *cmd++ - '0'; + + if (*cmd == '-') { + if (isdigit((unsigned char) cmd[1])) { + cmd++; + end = 0; + while (*cmd && '0' <= *cmd && *cmd <= '9') + end = end * 10 + *cmd++ - '0'; + } else if (cmd[1] == '$') { + cmd += 2; + end = -1; + } else { + cmd++; + end = -2; + } + } else if (*cmd == '*') + end = -1, cmd++; + else + end = start; + } + tmp = history_arg_extract(start, end, aptr? aptr:ptr); + if (tmp == NULL) { + (void)fprintf(rl_outstream, "%s: Bad word specifier", + command + offs + idx); + if (aptr) + el_free(aptr); + return -1; + } + } else + tmp = strdup(aptr? aptr:ptr); + + if (aptr) + el_free(aptr); + + if (*cmd == '\0' || ((size_t)(cmd - (command + offs)) >= cmdlen)) { + *result = tmp; + return 1; + } + + for (; *cmd; cmd++) { + switch (*cmd) { + case ':': + continue; + case 'h': /* remove trailing path */ + if ((aptr = strrchr(tmp, '/')) != NULL) + *aptr = '\0'; + continue; + case 't': /* remove leading path */ + replace(&tmp, '/'); + continue; + case 'r': /* remove trailing suffix */ + if ((aptr = strrchr(tmp, '.')) != NULL) + *aptr = '\0'; + continue; + case 'e': /* remove all but suffix */ + replace(&tmp, '.'); + continue; + case 'p': /* print only */ + p_on = 1; + continue; + case 'g': + g_on = 2; + continue; + case '&': + if (from == NULL || to == NULL) + continue; + /*FALLTHROUGH*/ + case 's': + ev = -1; + delim = *++cmd; + if (delim == '\0' || *++cmd == '\0') + goto out; + if ((ev = getfrom(&cmd, &from, search, delim)) != 1) + goto out; + if ((ev = getto(&cmd, &to, from, delim)) != 1) + goto out; + aptr = _rl_compat_sub(tmp, from, to, g_on); + if (aptr) { + el_free(tmp); + tmp = aptr; + } + g_on = 0; + cmd--; + continue; + } + } + *result = tmp; + return p_on ? 2 : 1; +out: + el_free(tmp); + return ev; + +} + + +/* + * csh-style history expansion + */ +int +history_expand(char *str, char **output) +{ + int ret = 0; + size_t idx, i, size; + char *tmp, *result; + + if (h == NULL || e == NULL) + rl_initialize(); + + if (history_expansion_char == 0) { + *output = strdup(str); + return 0; + } + + *output = NULL; + if (str[0] == history_subst_char) { + /* ^foo^foo2^ is equivalent to !!:s^foo^foo2^ */ + *output = el_calloc(strlen(str) + 4 + 1, sizeof(**output)); + if (*output == NULL) + return 0; + (*output)[0] = (*output)[1] = history_expansion_char; + (*output)[2] = ':'; + (*output)[3] = 's'; + (void)strcpy((*output) + 4, str); + str = *output; + } else { + *output = strdup(str); + if (*output == NULL) + return 0; + } + +#define ADD_STRING(what, len, fr) \ + { \ + if (idx + len + 1 > size) { \ + char *nresult = el_realloc(result, \ + (size += len + 1) * sizeof(*nresult)); \ + if (nresult == NULL) { \ + el_free(*output); \ + el_free(fr); \ + return 0; \ + } \ + result = nresult; \ + } \ + (void)strlcpy(&result[idx], what, len + 1); \ + idx += len; \ + } + + result = NULL; + size = idx = 0; + tmp = NULL; + for (i = 0; str[i];) { + int qchar, loop_again; + size_t len, start, j; + + qchar = 0; + loop_again = 1; + start = j = i; +loop: + for (; str[j]; j++) { + if (str[j] == '\\' && + str[j + 1] == history_expansion_char) { + len = strlen(&str[j + 1]) + 1; + memmove(&str[j], &str[j + 1], len); + continue; + } + if (!loop_again) { + if (isspace((unsigned char) str[j]) + || str[j] == qchar) + break; + } + if (str[j] == history_expansion_char + && !strchr(history_no_expand_chars, str[j + 1]) + && (!history_inhibit_expansion_function || + (*history_inhibit_expansion_function)(str, + (int)j) == 0)) + break; + } + + if (str[j] && loop_again) { + i = j; + qchar = (j > 0 && str[j - 1] == '"' )? '"':0; + j++; + if (str[j] == history_expansion_char) + j++; + loop_again = 0; + goto loop; + } + len = i - start; + ADD_STRING(&str[start], len, NULL); + + if (str[i] == '\0' || str[i] != history_expansion_char) { + len = j - i; + ADD_STRING(&str[i], len, NULL); + if (start == 0) + ret = 0; + else + ret = 1; + break; + } + ret = _history_expand_command (str, i, (j - i), &tmp); + if (ret > 0 && tmp) { + len = strlen(tmp); + ADD_STRING(tmp, len, tmp); + } + if (tmp) { + el_free(tmp); + tmp = NULL; + } + i = j; + } + + /* ret is 2 for "print only" option */ + if (ret == 2) { + add_history(result); +#ifdef GDB_411_HACK + /* gdb 4.11 has been shipped with readline, where */ + /* history_expand() returned -1 when the line */ + /* should not be executed; in readline 2.1+ */ + /* it should return 2 in such a case */ + ret = -1; +#endif + } + el_free(*output); + *output = result; + + return ret; +} + +/* +* Return a string consisting of arguments of "str" from "start" to "end". +*/ +char * +history_arg_extract(int start, int end, const char *str) +{ + size_t i, len, max; + char **arr, *result = NULL; + + arr = history_tokenize(str); + if (!arr) + return NULL; + if (arr && *arr == NULL) + goto out; + + for (max = 0; arr[max]; max++) + continue; + max--; + + if (start == '$') + start = (int)max; + if (end == '$') + end = (int)max; + if (end < 0) + end = (int)max + end + 1; + if (start < 0) + start = end; + + if (start < 0 || end < 0 || (size_t)start > max || + (size_t)end > max || start > end) + goto out; + + for (i = (size_t)start, len = 0; i <= (size_t)end; i++) + len += strlen(arr[i]) + 1; + len++; + result = el_calloc(len, sizeof(*result)); + if (result == NULL) + goto out; + + for (i = (size_t)start, len = 0; i <= (size_t)end; i++) { + (void)strcpy(result + len, arr[i]); + len += strlen(arr[i]); + if (i < (size_t)end) + result[len++] = ' '; + } + result[len] = '\0'; + +out: + for (i = 0; arr[i]; i++) + el_free(arr[i]); + el_free(arr); + + return result; +} + +/* + * Parse the string into individual tokens, + * similar to how shell would do it. + */ +char ** +history_tokenize(const char *str) +{ + int size = 1, idx = 0, i, start; + size_t len; + char **result = NULL, *temp, delim = '\0'; + + for (i = 0; str[i];) { + while (isspace((unsigned char) str[i])) + i++; + start = i; + for (; str[i];) { + if (str[i] == '\\') { + if (str[i+1] != '\0') + i++; + } else if (str[i] == delim) + delim = '\0'; + else if (!delim && + (isspace((unsigned char) str[i]) || + strchr("()<>;&|$", str[i]))) + break; + else if (!delim && strchr("'`\"", str[i])) + delim = str[i]; + if (str[i]) + i++; + } + + if (idx + 2 >= size) { + char **nresult; + size <<= 1; + nresult = el_realloc(result, (size_t)size * sizeof(*nresult)); + if (nresult == NULL) { + el_free(result); + return NULL; + } + result = nresult; + } + len = (size_t)i - (size_t)start; + temp = el_calloc(len + 1, sizeof(*temp)); + if (temp == NULL) { + for (i = 0; i < idx; i++) + el_free(result[i]); + el_free(result); + return NULL; + } + (void)strlcpy(temp, &str[start], len + 1); + result[idx++] = temp; + result[idx] = NULL; + if (str[i]) + i++; + } + return result; +} + + +/* + * limit size of history record to ``max'' events + */ +void +stifle_history(int max) +{ + HistEvent ev; + HIST_ENTRY *he; + + if (h == NULL || e == NULL) + rl_initialize(); + + if (history(h, &ev, H_SETSIZE, max) == 0) { + max_input_history = max; + if (history_length > max) + history_base = history_length - max; + while (history_length > max) { + he = remove_history(0); + el_free(he->data); + el_free((void *)(unsigned long)he->line); + el_free(he); + } + } +} + + +/* + * "unlimit" size of history - set the limit to maximum allowed int value + */ +int +unstifle_history(void) +{ + HistEvent ev; + int omax; + + history(h, &ev, H_SETSIZE, INT_MAX); + omax = max_input_history; + max_input_history = INT_MAX; + return omax; /* some value _must_ be returned */ +} + + +int +history_is_stifled(void) +{ + + /* cannot return true answer */ + return max_input_history != INT_MAX; +} + +static const char _history_tmp_template[] = "/tmp/.historyXXXXXX"; + +int +history_truncate_file (const char *filename, int nlines) +{ + int ret = 0; + FILE *fp, *tp; + char template[sizeof(_history_tmp_template)]; + char buf[4096]; + int fd; + char *cp; + off_t off; + int count = 0; + ssize_t left = 0; + + if (filename == NULL && (filename = _default_history_file()) == NULL) + return errno; + if ((fp = fopen(filename, "r+")) == NULL) + return errno; + strcpy(template, _history_tmp_template); + if ((fd = mkstemp(template)) == -1) { + ret = errno; + goto out1; + } + + if ((tp = fdopen(fd, "r+")) == NULL) { + close(fd); + ret = errno; + goto out2; + } + + for(;;) { + if (fread(buf, sizeof(buf), (size_t)1, fp) != 1) { + if (ferror(fp)) { + ret = errno; + break; + } + if (fseeko(fp, (off_t)sizeof(buf) * count, SEEK_SET) == + (off_t)-1) { + ret = errno; + break; + } + left = (ssize_t)fread(buf, (size_t)1, sizeof(buf), fp); + if (ferror(fp)) { + ret = errno; + break; + } + if (left == 0) { + count--; + left = sizeof(buf); + } else if (fwrite(buf, (size_t)left, (size_t)1, tp) + != 1) { + ret = errno; + break; + } + fflush(tp); + break; + } + if (fwrite(buf, sizeof(buf), (size_t)1, tp) != 1) { + ret = errno; + break; + } + count++; + } + if (ret) + goto out3; + cp = buf + left - 1; + if(*cp != '\n') + cp++; + for(;;) { + while (--cp >= buf) { + if (*cp == '\n') { + if (--nlines == 0) { + if (++cp >= buf + sizeof(buf)) { + count++; + cp = buf; + } + break; + } + } + } + if (nlines <= 0 || count == 0) + break; + count--; + if (fseeko(tp, (off_t)sizeof(buf) * count, SEEK_SET) < 0) { + ret = errno; + break; + } + if (fread(buf, sizeof(buf), (size_t)1, tp) != 1) { + if (ferror(tp)) { + ret = errno; + break; + } + ret = EAGAIN; + break; + } + cp = buf + sizeof(buf); + } + + if (ret || nlines > 0) + goto out3; + + if (fseeko(fp, (off_t)0, SEEK_SET) == (off_t)-1) { + ret = errno; + goto out3; + } + + if (fseeko(tp, (off_t)sizeof(buf) * count + (cp - buf), SEEK_SET) == + (off_t)-1) { + ret = errno; + goto out3; + } + + for(;;) { + if ((left = (ssize_t)fread(buf, (size_t)1, sizeof(buf), tp)) == 0) { + if (ferror(fp)) + ret = errno; + break; + } + if (fwrite(buf, (size_t)left, (size_t)1, fp) != 1) { + ret = errno; + break; + } + } + fflush(fp); + if((off = ftello(fp)) > 0) + (void)ftruncate(fileno(fp), off); +out3: + fclose(tp); +out2: + unlink(template); +out1: + fclose(fp); + + return ret; +} + + +/* + * read history from a file given + */ +int +read_history(const char *filename) +{ + HistEvent ev; + + if (h == NULL || e == NULL) + rl_initialize(); + if (filename == NULL && (filename = _default_history_file()) == NULL) + return errno; + errno = 0; + if (history(h, &ev, H_LOAD, filename) == -1) + return errno ? errno : EINVAL; + if (history(h, &ev, H_GETSIZE) == 0) + history_length = ev.num; + if (history_length < 0) + return EINVAL; + return 0; +} + + +/* + * write history to a file given + */ +int +write_history(const char *filename) +{ + HistEvent ev; + + if (h == NULL || e == NULL) + rl_initialize(); + if (filename == NULL && (filename = _default_history_file()) == NULL) + return errno; + return history(h, &ev, H_SAVE, filename) == -1 ? + (errno ? errno : EINVAL) : 0; +} + +int +append_history(int n, const char *filename) +{ + HistEvent ev; + FILE *fp; + + if (h == NULL || e == NULL) + rl_initialize(); + if (filename == NULL && (filename = _default_history_file()) == NULL) + return errno; + + if ((fp = fopen(filename, "a")) == NULL) + return errno; + + if (history(h, &ev, H_NSAVE_FP, (size_t)n, fp) == -1) { + int serrno = errno ? errno : EINVAL; + fclose(fp); + return serrno; + } + fclose(fp); + return 0; +} + +/* + * returns history ``num''th event + * + * returned pointer points to static variable + */ +HIST_ENTRY * +history_get(int num) +{ + static HIST_ENTRY she; + HistEvent ev; + int curr_num; + + if (h == NULL || e == NULL) + rl_initialize(); + + if (num < history_base) + return NULL; + + /* save current position */ + if (history(h, &ev, H_CURR) != 0) + return NULL; + curr_num = ev.num; + + /* + * use H_DELDATA to set to nth history (without delete) by passing + * (void **)-1 -- as in history_set_pos + */ + if (history(h, &ev, H_DELDATA, num - history_base, (void **)-1) != 0) + goto out; + + /* get current entry */ + if (history(h, &ev, H_CURR) != 0) + goto out; + if (history(h, &ev, H_NEXT_EVDATA, ev.num, &she.data) != 0) + goto out; + she.line = ev.str; + + /* restore pointer to where it was */ + (void)history(h, &ev, H_SET, curr_num); + + return &she; + +out: + /* restore pointer to where it was */ + (void)history(h, &ev, H_SET, curr_num); + return NULL; +} + + +/* + * add the line to history table + */ +int +add_history(const char *line) +{ + HistEvent ev; + + if (h == NULL || e == NULL) + rl_initialize(); + + if (history(h, &ev, H_ENTER, line) == -1) + return 0; + + (void)history(h, &ev, H_GETSIZE); + if (ev.num == history_length) + history_base++; + else { + history_offset++; + history_length = ev.num; + } + return 0; +} + + +/* + * remove the specified entry from the history list and return it. + */ +HIST_ENTRY * +remove_history(int num) +{ + HIST_ENTRY *he; + HistEvent ev; + + if (h == NULL || e == NULL) + rl_initialize(); + + if ((he = el_malloc(sizeof(*he))) == NULL) + return NULL; + + if (history(h, &ev, H_DELDATA, num, &he->data) != 0) { + el_free(he); + return NULL; + } + + he->line = ev.str; + if (history(h, &ev, H_GETSIZE) == 0) + history_length = ev.num; + + return he; +} + + +/* + * replace the line and data of the num-th entry + */ +HIST_ENTRY * +replace_history_entry(int num, const char *line, histdata_t data) +{ + HIST_ENTRY *he; + HistEvent ev; + int curr_num; + + if (h == NULL || e == NULL) + rl_initialize(); + + /* save current position */ + if (history(h, &ev, H_CURR) != 0) + return NULL; + curr_num = ev.num; + + /* start from the oldest */ + if (history(h, &ev, H_LAST) != 0) + return NULL; /* error */ + + if ((he = el_malloc(sizeof(*he))) == NULL) + return NULL; + + /* look forwards for event matching specified offset */ + if (history(h, &ev, H_NEXT_EVDATA, num, &he->data)) + goto out; + + he->line = strdup(ev.str); + if (he->line == NULL) + goto out; + + if (history(h, &ev, H_REPLACE, line, data)) + goto out; + + /* restore pointer to where it was */ + if (history(h, &ev, H_SET, curr_num)) + goto out; + + return he; +out: + el_free(he); + return NULL; +} + +/* + * clear the history list - delete all entries + */ +void +clear_history(void) +{ + HistEvent ev; + + if (h == NULL || e == NULL) + rl_initialize(); + + (void)history(h, &ev, H_CLEAR); + history_offset = history_length = 0; +} + + +/* + * returns offset of the current history event + */ +int +where_history(void) +{ + return history_offset; +} + +static HIST_ENTRY **_history_listp; +static HIST_ENTRY *_history_list; + +HIST_ENTRY ** +history_list(void) +{ + HistEvent ev; + HIST_ENTRY **nlp, *nl; + int i; + + if (history(h, &ev, H_LAST) != 0) + return NULL; + + if ((nlp = el_realloc(_history_listp, + ((size_t)history_length + 1) * sizeof(*nlp))) == NULL) + return NULL; + _history_listp = nlp; + + if ((nl = el_realloc(_history_list, + (size_t)history_length * sizeof(*nl))) == NULL) + return NULL; + _history_list = nl; + + i = 0; + do { + _history_listp[i] = &_history_list[i]; + _history_list[i].line = ev.str; + _history_list[i].data = NULL; + if (i++ == history_length) + abort(); + } while (history(h, &ev, H_PREV) == 0); + _history_listp[i] = NULL; + return _history_listp; +} + +/* + * returns current history event or NULL if there is no such event + */ +HIST_ENTRY * +current_history(void) +{ + HistEvent ev; + + if (history(h, &ev, H_PREV_EVENT, history_offset + 1) != 0) + return NULL; + + rl_he.line = ev.str; + rl_he.data = NULL; + return &rl_he; +} + + +/* + * returns total number of bytes history events' data are using + */ +int +history_total_bytes(void) +{ + HistEvent ev; + int curr_num; + size_t size; + + if (history(h, &ev, H_CURR) != 0) + return -1; + curr_num = ev.num; + + (void)history(h, &ev, H_FIRST); + size = 0; + do + size += strlen(ev.str) * sizeof(*ev.str); + while (history(h, &ev, H_NEXT) == 0); + + /* get to the same position as before */ + history(h, &ev, H_PREV_EVENT, curr_num); + + return (int)size; +} + + +/* + * sets the position in the history list to ``pos'' + */ +int +history_set_pos(int pos) +{ + if (pos >= history_length || pos < 0) + return 0; + + history_offset = pos; + return 1; +} + + +/* + * returns previous event in history and shifts pointer accordingly + * Note that readline and editline define directions in opposite ways. + */ +HIST_ENTRY * +previous_history(void) +{ + HistEvent ev; + + if (history_offset == 0) + return NULL; + + if (history(h, &ev, H_LAST) != 0) + return NULL; + + history_offset--; + return current_history(); +} + + +/* + * returns next event in history and shifts pointer accordingly + */ +HIST_ENTRY * +next_history(void) +{ + HistEvent ev; + + if (history_offset >= history_length) + return NULL; + + if (history(h, &ev, H_LAST) != 0) + return NULL; + + history_offset++; + return current_history(); +} + + +/* + * searches for first history event containing the str + */ +int +history_search(const char *str, int direction) +{ + HistEvent ev; + const char *strp; + int curr_num; + + if (history(h, &ev, H_CURR) != 0) + return -1; + curr_num = ev.num; + + for (;;) { + if ((strp = strstr(ev.str, str)) != NULL) + return (int)(strp - ev.str); + if (history(h, &ev, direction < 0 ? H_NEXT:H_PREV) != 0) + break; + } + (void)history(h, &ev, H_SET, curr_num); + return -1; +} + + +/* + * searches for first history event beginning with str + */ +int +history_search_prefix(const char *str, int direction) +{ + HistEvent ev; + + return (history(h, &ev, direction < 0 ? + H_PREV_STR : H_NEXT_STR, str)); +} + + +/* + * search for event in history containing str, starting at offset + * abs(pos); continue backward, if pos<0, forward otherwise + */ +/* ARGSUSED */ +int +history_search_pos(const char *str, + int direction __attribute__((__unused__)), int pos) +{ + HistEvent ev; + int curr_num, off; + + off = (pos > 0) ? pos : -pos; + pos = (pos > 0) ? 1 : -1; + + if (history(h, &ev, H_CURR) != 0) + return -1; + curr_num = ev.num; + + if (!history_set_pos(off) || history(h, &ev, H_CURR) != 0) + return -1; + + for (;;) { + if (strstr(ev.str, str)) + return off; + if (history(h, &ev, (pos < 0) ? H_PREV : H_NEXT) != 0) + break; + } + + /* set "current" pointer back to previous state */ + (void)history(h, &ev, + pos < 0 ? H_NEXT_EVENT : H_PREV_EVENT, curr_num); + + return -1; +} + + +/********************************/ +/* completion functions */ + +char * +tilde_expand(char *name) +{ + return fn_tilde_expand(name); +} + +char * +filename_completion_function(const char *name, int state) +{ + return fn_filename_completion_function(name, state); +} + +/* + * a completion generator for usernames; returns _first_ username + * which starts with supplied text + * text contains a partial username preceded by random character + * (usually '~'); state resets search from start (??? should we do that anyway) + * it's the caller's responsibility to free the returned value + */ +char * +username_completion_function(const char *text, int state) +{ + struct passwd *pass = NULL; + + if (text[0] == '\0') + return NULL; + + if (*text == '~') + text++; + + if (state == 0) + setpwent(); + + while ( + (pass = getpwent()) != NULL + && text[0] == pass->pw_name[0] + && strcmp(text, pass->pw_name) == 0) + continue; + + if (pass == NULL) { + endpwent(); + return NULL; + } + return strdup(pass->pw_name); +} + + +/* + * el-compatible wrapper to send TSTP on ^Z + */ +/* ARGSUSED */ +static unsigned char +_el_rl_tstp(EditLine *el __attribute__((__unused__)), int ch __attribute__((__unused__))) +{ + (void)kill(0, SIGTSTP); + return CC_NORM; +} + +static const char * +/*ARGSUSED*/ +_rl_completion_append_character_function(const char *dummy + __attribute__((__unused__))) +{ + static char buf[2]; + buf[0] = (char)rl_completion_append_character; + buf[1] = '\0'; + return buf; +} + + +/* + * Display list of strings in columnar format on readline's output stream. + * 'matches' is list of strings, 'len' is number of strings in 'matches', + * 'max' is maximum length of string in 'matches'. + */ +void +rl_display_match_list(char **matches, int len, int max) +{ + + fn_display_match_list(e, matches, (size_t)len, (size_t)max, + _rl_completion_append_character_function); +} + +/* + * complete word at current point + */ +/* ARGSUSED */ +int +rl_complete(int ignore __attribute__((__unused__)), int invoking_key) +{ + static ct_buffer_t wbreak_conv, sprefix_conv; + const char *breakchars; + + if (h == NULL || e == NULL) + rl_initialize(); + + if (rl_inhibit_completion) { + char arr[2]; + arr[0] = (char)invoking_key; + arr[1] = '\0'; + el_insertstr(e, arr); + return CC_REFRESH; + } + + if (rl_completion_word_break_hook != NULL) + breakchars = (*rl_completion_word_break_hook)(); + else + breakchars = rl_basic_word_break_characters; + + _rl_update_pos(); + + /* Just look at how many global variables modify this operation! */ + return fn_complete(e, + (rl_compentry_func_t *)rl_completion_entry_function, + rl_attempted_completion_function, + ct_decode_string(rl_basic_word_break_characters, &wbreak_conv), + ct_decode_string(breakchars, &sprefix_conv), + _rl_completion_append_character_function, + (size_t)rl_completion_query_items, + &rl_completion_type, &rl_attempted_completion_over, + &rl_point, &rl_end); + + +} + + +/* ARGSUSED */ +static unsigned char +_el_rl_complete(EditLine *el __attribute__((__unused__)), int ch) +{ + return (unsigned char)rl_complete(0, ch); +} + +/* + * misc other functions + */ + +/* + * bind key c to readline-type function func + */ +int +rl_bind_key(int c, rl_command_func_t *func) +{ + int retval = -1; + + if (h == NULL || e == NULL) + rl_initialize(); + + if (func == rl_insert) { + /* XXX notice there is no range checking of ``c'' */ + e->el_map.key[c] = ED_INSERT; + retval = 0; + } + return retval; +} + + +/* + * read one key from input - handles chars pushed back + * to input stream also + */ +int +rl_read_key(void) +{ + char fooarr[2 * sizeof(int)]; + + if (e == NULL || h == NULL) + rl_initialize(); + + return el_getc(e, fooarr); +} + + +/* + * reset the terminal + */ +/* ARGSUSED */ +int +rl_reset_terminal(const char *p __attribute__((__unused__))) +{ + + if (h == NULL || e == NULL) + rl_initialize(); + el_reset(e); + return 0; +} + + +/* + * insert character ``c'' back into input stream, ``count'' times + */ +int +rl_insert(int count, int c) +{ + char arr[2]; + + if (h == NULL || e == NULL) + rl_initialize(); + + /* XXX - int -> char conversion can lose on multichars */ + arr[0] = (char)c; + arr[1] = '\0'; + + for (; count > 0; count--) + el_push(e, arr); + + return 0; +} + +int +rl_insert_text(const char *text) +{ + if (!text || *text == 0) + return 0; + + if (h == NULL || e == NULL) + rl_initialize(); + + if (el_insertstr(e, text) < 0) + return 0; + return (int)strlen(text); +} + +/*ARGSUSED*/ +int +rl_newline(int count __attribute__((__unused__)), + int c __attribute__((__unused__))) +{ + /* + * Readline-4.0 appears to ignore the args. + */ + return rl_insert(1, '\n'); +} + +/*ARGSUSED*/ +static unsigned char +rl_bind_wrapper(EditLine *el __attribute__((__unused__)), unsigned char c) +{ + if (map[c] == NULL) + return CC_ERROR; + + _rl_update_pos(); + + (*map[c])(1, c); + + /* If rl_done was set by the above call, deal with it here */ + if (rl_done) + return CC_EOF; + + return CC_NORM; +} + +int +rl_add_defun(const char *name, rl_command_func_t *fun, int c) +{ + char dest[8]; + if ((size_t)c >= sizeof(map) / sizeof(map[0]) || c < 0) + return -1; + map[(unsigned char)c] = fun; + el_set(e, EL_ADDFN, name, name, rl_bind_wrapper); + vis(dest, c, VIS_WHITE|VIS_NOSLASH, 0); + el_set(e, EL_BIND, dest, name, NULL); + return 0; +} + +void +rl_callback_read_char(void) +{ + int count = 0, done = 0; + const char *buf = el_gets(e, &count); + char *wbuf; + + el_set(e, EL_UNBUFFERED, 1); + if (buf == NULL || count-- <= 0) + return; + if (count == 0 && buf[0] == e->el_tty.t_c[TS_IO][C_EOF]) + done = 1; + if (buf[count] == '\n' || buf[count] == '\r') + done = 2; + + if (done && rl_linefunc != NULL) { + el_set(e, EL_UNBUFFERED, 0); + if (done == 2) { + if ((wbuf = strdup(buf)) != NULL) + wbuf[count] = '\0'; + RL_SETSTATE(RL_STATE_DONE); + } else + wbuf = NULL; + (*(void (*)(const char *))rl_linefunc)(wbuf); + } + _rl_update_pos(); +} + +void +rl_callback_handler_install(const char *prompt, rl_vcpfunc_t *linefunc) +{ + if (e == NULL) { + rl_initialize(); + } + (void)rl_set_prompt(prompt); + rl_linefunc = linefunc; + el_set(e, EL_UNBUFFERED, 1); +} + +void +rl_callback_handler_remove(void) +{ + el_set(e, EL_UNBUFFERED, 0); + rl_linefunc = NULL; +} + +void +rl_redisplay(void) +{ + char a[2]; + a[0] = (char)e->el_tty.t_c[TS_IO][C_REPRINT]; + a[1] = '\0'; + el_push(e, a); + rl_forced_update_display(); +} + +int +rl_get_previous_history(int count, int key) +{ + char a[2]; + a[0] = (char)key; + a[1] = '\0'; + while (count--) + el_push(e, a); + return 0; +} + +void +/*ARGSUSED*/ +rl_prep_terminal(int meta_flag __attribute__((__unused__))) +{ + el_set(e, EL_PREP_TERM, 1); +} + +void +rl_deprep_terminal(void) +{ + el_set(e, EL_PREP_TERM, 0); +} + +int +rl_read_init_file(const char *s) +{ + return el_source(e, s); +} + +int +rl_parse_and_bind(const char *line) +{ + const char **argv; + int argc; + Tokenizer *tok; + + tok = tok_init(NULL); + tok_str(tok, line, &argc, &argv); + argc = el_parse(e, argc, argv); + tok_end(tok); + return argc ? 1 : 0; +} + +int +rl_variable_bind(const char *var, const char *value) +{ + /* + * The proper return value is undocument, but this is what the + * readline source seems to do. + */ + return el_set(e, EL_BIND, "", var, value, NULL) == -1 ? 1 : 0; +} + +int +rl_stuff_char(int c) +{ + char buf[2]; + + buf[0] = (char)c; + buf[1] = '\0'; + el_insertstr(e, buf); + return 1; +} + +static int +_rl_event_read_char(EditLine *el, wchar_t *wc) +{ + char ch; + int n; + ssize_t num_read = 0; + + ch = '\0'; + *wc = L'\0'; + while (rl_event_hook) { + + (*rl_event_hook)(); + +#if defined(FIONREAD) + if (ioctl(el->el_infd, FIONREAD, &n) < 0) + return -1; + if (n) + num_read = read(el->el_infd, &ch, (size_t)1); + else + num_read = 0; +#elif defined(F_SETFL) && defined(O_NDELAY) + if ((n = fcntl(el->el_infd, F_GETFL, 0)) < 0) + return -1; + if (fcntl(el->el_infd, F_SETFL, n|O_NDELAY) < 0) + return -1; + num_read = read(el->el_infd, &ch, 1); + if (fcntl(el->el_infd, F_SETFL, n)) + return -1; +#else + /* not non-blocking, but what you gonna do? */ + num_read = read(el->el_infd, &ch, 1); + return -1; +#endif + + if (num_read < 0 && errno == EAGAIN) + continue; + if (num_read == 0) + continue; + break; + } + if (!rl_event_hook) + el_set(el, EL_GETCFN, EL_BUILTIN_GETCFN); + *wc = (wchar_t)ch; + return (int)num_read; +} + +static void +_rl_update_pos(void) +{ + const LineInfo *li = el_line(e); + + rl_point = (int)(li->cursor - li->buffer); + rl_end = (int)(li->lastchar - li->buffer); + rl_line_buffer[rl_end] = '\0'; +} + +char * +rl_copy_text(int from, int to) +{ + const LineInfo *li; + size_t len; + char * out; + + if (h == NULL || e == NULL) + rl_initialize(); + + li = el_line(e); + + if (from > to) + return NULL; + + if (li->buffer + from > li->lastchar) + from = (int)(li->lastchar - li->buffer); + + if (li->buffer + to > li->lastchar) + to = (int)(li->lastchar - li->buffer); + + len = (size_t)(to - from); + out = el_malloc((size_t)len + 1); + (void)strlcpy(out, li->buffer + from , len); + + return out; +} + +void +rl_replace_line(const char * text, int clear_undo __attribute__((__unused__))) +{ + if (!text || *text == 0) + return; + + if (h == NULL || e == NULL) + rl_initialize(); + + el_replacestr(e, text); +} + +int +rl_delete_text(int start, int end) +{ + + if (h == NULL || e == NULL) + rl_initialize(); + + return el_deletestr1(e, start, end); +} + +void +rl_get_screen_size(int *rows, int *cols) +{ + if (rows) + el_get(e, EL_GETTC, "li", rows); + if (cols) + el_get(e, EL_GETTC, "co", cols); +} + +#define MAX_MESSAGE 160 +void +rl_message(const char *format, ...) +{ + char msg[MAX_MESSAGE]; + va_list args; + + va_start(args, format); + vsnprintf(msg, sizeof(msg), format, args); + va_end(args); + + rl_set_prompt(msg); + rl_forced_update_display(); +} + +void +rl_set_screen_size(int rows, int cols) +{ + char buf[64]; + (void)snprintf(buf, sizeof(buf), "%d", rows); + el_set(e, EL_SETTC, "li", buf, NULL); + (void)snprintf(buf, sizeof(buf), "%d", cols); + el_set(e, EL_SETTC, "co", buf, NULL); +} + +char ** +rl_completion_matches(const char *str, rl_compentry_func_t *fun) +{ + size_t len, max, i, j, min; + char **list, *match, *a, *b; + + len = 1; + max = 10; + if ((list = el_calloc(max, sizeof(*list))) == NULL) + return NULL; + + while ((match = (*fun)(str, (int)(len - 1))) != NULL) { + list[len++] = match; + if (len == max) { + char **nl; + max += 10; + if ((nl = el_realloc(list, max * sizeof(*nl))) == NULL) + goto out; + list = nl; + } + } + if (len == 1) + goto out; + list[len] = NULL; + if (len == 2) { + if ((list[0] = strdup(list[1])) == NULL) + goto out; + return list; + } + qsort(&list[1], len - 1, sizeof(*list), + (int (*)(const void *, const void *)) strcmp); + min = SIZE_MAX; + for (i = 1, a = list[i]; i < len - 1; i++, a = b) { + b = list[i + 1]; + for (j = 0; a[j] && a[j] == b[j]; j++) + continue; + if (min > j) + min = j; + } + if (min == 0 && *str) { + if ((list[0] = strdup(str)) == NULL) + goto out; + } else { + if ((list[0] = el_calloc(min + 1, sizeof(*list[0]))) == NULL) + goto out; + (void)memcpy(list[0], list[1], min); + list[0][min] = '\0'; + } + return list; + +out: + el_free(list); + return NULL; +} + +char * +rl_filename_completion_function (const char *text, int state) +{ + return fn_filename_completion_function(text, state); +} + +void +rl_forced_update_display(void) +{ + el_set(e, EL_REFRESH); +} + +int +_rl_abort_internal(void) +{ + el_beep(e); + longjmp(topbuf, 1); + /*NOTREACHED*/ +} + +int +_rl_qsort_string_compare(char **s1, char **s2) +{ + return strcoll(*s1, *s2); +} + +HISTORY_STATE * +history_get_history_state(void) +{ + HISTORY_STATE *hs; + + if ((hs = el_malloc(sizeof(*hs))) == NULL) + return NULL; + hs->length = history_length; + return hs; +} + +int +/*ARGSUSED*/ +rl_kill_text(int from __attribute__((__unused__)), + int to __attribute__((__unused__))) +{ + return 0; +} + +Keymap +rl_make_bare_keymap(void) +{ + return NULL; +} + +Keymap +rl_get_keymap(void) +{ + return NULL; +} + +void +/*ARGSUSED*/ +rl_set_keymap(Keymap k __attribute__((__unused__))) +{ +} + +int +/*ARGSUSED*/ +rl_generic_bind(int type __attribute__((__unused__)), + const char * keyseq __attribute__((__unused__)), + const char * data __attribute__((__unused__)), + Keymap k __attribute__((__unused__))) +{ + return 0; +} + +int +/*ARGSUSED*/ +rl_bind_key_in_map(int key __attribute__((__unused__)), + rl_command_func_t *fun __attribute__((__unused__)), + Keymap k __attribute__((__unused__))) +{ + return 0; +} + +int +rl_set_key(const char *keyseq __attribute__((__unused__)), + rl_command_func_t *function __attribute__((__unused__)), + Keymap k __attribute__((__unused__))) +{ + return 0; +} + +/* unsupported, but needed by python */ +void +rl_cleanup_after_signal(void) +{ +} + +int +rl_on_new_line(void) +{ + return 0; +} + +void +rl_free_line_state(void) +{ +} + +int +/*ARGSUSED*/ +rl_set_keyboard_input_timeout(int u __attribute__((__unused__))) +{ + return 0; +} + +void +rl_resize_terminal(void) +{ + el_resize(e); +} + +void +rl_reset_after_signal(void) +{ + if (rl_prep_term_function) + (*rl_prep_term_function)(); +} + +void +rl_echo_signal_char(int sig) +{ + int c = tty_get_signal_character(e, sig); + if (c == -1) + return; + re_putc(e, c, 0); +} + +int +rl_crlf(void) +{ + re_putc(e, '\n', 0); + return 0; +} + +int +rl_ding(void) +{ + re_putc(e, '\a', 0); + return 0; +} + +int +rl_abort(int count, int key) +{ + return count && key ? 0 : 0; +} + +int +rl_set_keymap_name(const char *name, Keymap k) +{ + return name && k ? 0 : 0; +} + +histdata_t +free_history_entry(HIST_ENTRY *he) +{ + return he ? NULL : NULL; +} + +void +_rl_erase_entire_line(void) +{ +} diff --git a/src/thirdparty/libedit-3.1/src/reallocarr.c b/src/thirdparty/libedit-3.1/src/reallocarr.c new file mode 100644 index 000000000..549573af8 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/reallocarr.c @@ -0,0 +1,96 @@ +/* $NetBSD: reallocarr.c,v 1.5 2015/08/20 22:27:49 kamil Exp $ */ + +/*- + * Copyright (c) 2015 Joerg Sonnenberger <joerg@NetBSD.org>. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if !HAVE_REALLOCARR + +#include "config.h" + +#if HAVE_NBTOOL_CONFIG_H +#include "nbtool_config.h" +#endif + +__RCSID("$NetBSD: reallocarr.c,v 1.5 2015/08/20 22:27:49 kamil Exp $"); + +#include <errno.h> +/* Old POSIX has SIZE_MAX in limits.h */ +#include <limits.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> + +#ifdef _LIBC +#ifdef __weak_alias +__weak_alias(reallocarr, _reallocarr) +#endif +#endif + +#define SQRT_SIZE_MAX (((size_t)1) << (sizeof(size_t) * CHAR_BIT / 2)) + +int +reallocarr(void *ptr, size_t number, size_t size) +{ + int saved_errno, result; + void *optr; + void *nptr; + + saved_errno = errno; + memcpy(&optr, ptr, sizeof(ptr)); + if (number == 0 || size == 0) { + free(optr); + nptr = NULL; + memcpy(ptr, &nptr, sizeof(ptr)); + errno = saved_errno; + return 0; + } + + /* + * Try to avoid division here. + * + * It isn't possible to overflow during multiplication if neither + * operand uses any of the most significant half of the bits. + */ + if ((number|size) >= SQRT_SIZE_MAX && + number > SIZE_MAX / size) { + errno = saved_errno; + return EOVERFLOW; + } + + nptr = realloc(optr, number * size); + if (nptr == NULL) { + result = errno; + } else { + result = 0; + memcpy(ptr, &nptr, sizeof(ptr)); + } + errno = saved_errno; + return result; +} +#endif diff --git a/src/thirdparty/libedit-3.1/src/refresh.c b/src/thirdparty/libedit-3.1/src/refresh.c new file mode 100644 index 000000000..26a49fe75 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/refresh.c @@ -0,0 +1,1228 @@ +/* $NetBSD: refresh.c,v 1.58 2021/09/09 20:24:07 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)refresh.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: refresh.c,v 1.58 2021/09/09 20:24:07 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * refresh.c: Lower level screen refreshing functions + */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "el.h" + +static void re_nextline(EditLine *); +static void re_addc(EditLine *, wint_t); +static void re_update_line(EditLine *, wchar_t *, wchar_t *, int); +static void re_insert (EditLine *, wchar_t *, int, int, wchar_t *, int); +static void re_delete(EditLine *, wchar_t *, int, int, int); +static void re_fastputc(EditLine *, wint_t); +static void re_clear_eol(EditLine *, int, int, int); +static void re__strncopy(wchar_t *, wchar_t *, size_t); +static void re__copy_and_pad(wchar_t *, const wchar_t *, size_t); + +#ifdef DEBUG_REFRESH +static void re_printstr(EditLine *, const char *, wchar_t *, wchar_t *); +#define __F el->el_errfile +#define ELRE_ASSERT(a, b, c) do \ + if (/*CONSTCOND*/ a) { \ + (void) fprintf b; \ + c; \ + } \ + while (/*CONSTCOND*/0) +#define ELRE_DEBUG(a, b) ELRE_ASSERT(a,b,;) + +/* re_printstr(): + * Print a string on the debugging pty + */ +static void +re_printstr(EditLine *el, const char *str, wchar_t *f, wchar_t *t) +{ + + ELRE_DEBUG(1, (__F, "%s:\"", str)); + while (f < t) + ELRE_DEBUG(1, (__F, "%c", *f++ & 0177)); + ELRE_DEBUG(1, (__F, "\"\r\n")); +} +#else +#define ELRE_ASSERT(a, b, c) +#define ELRE_DEBUG(a, b) +#endif + +/* re_nextline(): + * Move to the next line or scroll + */ +static void +re_nextline(EditLine *el) +{ + el->el_refresh.r_cursor.h = 0; /* reset it. */ + + /* + * If we would overflow (input is longer than terminal size), + * emulate scroll by dropping first line and shuffling the rest. + * We do this via pointer shuffling - it's safe in this case + * and we avoid memcpy(). + */ + if (el->el_refresh.r_cursor.v + 1 >= el->el_terminal.t_size.v) { + int i, lins = el->el_terminal.t_size.v; + wint_t *firstline = el->el_vdisplay[0]; + + for(i = 1; i < lins; i++) + el->el_vdisplay[i - 1] = el->el_vdisplay[i]; + + firstline[0] = '\0'; /* empty the string */ + el->el_vdisplay[i - 1] = firstline; + } else + el->el_refresh.r_cursor.v++; + + ELRE_ASSERT(el->el_refresh.r_cursor.v >= el->el_terminal.t_size.v, + (__F, "\r\nre_putc: overflow! r_cursor.v == %d > %d\r\n", + el->el_refresh.r_cursor.v, el->el_terminal.t_size.v), + abort()); +} + +/* re_addc(): + * Draw c, expanding tabs, control chars etc. + */ +static void +re_addc(EditLine *el, wint_t c) +{ + switch (ct_chr_class(c)) { + case CHTYPE_TAB: /* expand the tab */ + for (;;) { + re_putc(el, ' ', 1); + if ((el->el_refresh.r_cursor.h & 07) == 0) + break; /* go until tab stop */ + } + break; + case CHTYPE_NL: { + int oldv = el->el_refresh.r_cursor.v; + re_putc(el, '\0', 0); /* assure end of line */ + if (oldv == el->el_refresh.r_cursor.v) /* XXX */ + re_nextline(el); + break; + } + case CHTYPE_PRINT: + re_putc(el, c, 1); + break; + default: { + wchar_t visbuf[VISUAL_WIDTH_MAX]; + ssize_t i, n = + ct_visual_char(visbuf, VISUAL_WIDTH_MAX, c); + for (i = 0; n-- > 0; ++i) + re_putc(el, visbuf[i], 1); + break; + } + } +} + +/* re_putliteral(): + * Place the literal string given + */ +libedit_private void +re_putliteral(EditLine *el, const wchar_t *begin, const wchar_t *end) +{ + coord_t *cur = &el->el_refresh.r_cursor; + wint_t c; + int sizeh = el->el_terminal.t_size.h; + int i, w; + + c = literal_add(el, begin, end, &w); + if (c == 0 || w <= 0) + return; + el->el_vdisplay[cur->v][cur->h] = c; + + i = w; + if (i > sizeh - cur->h) /* avoid overflow */ + i = sizeh - cur->h; + while (--i > 0) + el->el_vdisplay[cur->v][cur->h + i] = MB_FILL_CHAR; + + cur->h += w; + if (cur->h >= sizeh) { + /* assure end of line */ + el->el_vdisplay[cur->v][sizeh] = '\0'; + re_nextline(el); + } +} + +/* re_putc(): + * Draw the character given + */ +libedit_private void +re_putc(EditLine *el, wint_t c, int shift) +{ + coord_t *cur = &el->el_refresh.r_cursor; + int i, w = wcwidth(c); + int sizeh = el->el_terminal.t_size.h; + + ELRE_DEBUG(1, (__F, "printing %5x '%lc'\r\n", c, c)); + if (w == -1) + w = 0; + + while (shift && (cur->h + w > sizeh)) + re_putc(el, ' ', 1); + + el->el_vdisplay[cur->v][cur->h] = c; + /* assumes !shift is only used for single-column chars */ + i = w; + while (--i > 0) + el->el_vdisplay[cur->v][cur->h + i] = MB_FILL_CHAR; + + if (!shift) + return; + + cur->h += w; /* advance to next place */ + if (cur->h >= sizeh) { + /* assure end of line */ + el->el_vdisplay[cur->v][sizeh] = '\0'; + re_nextline(el); + } +} + + +/* re_refresh(): + * draws the new virtual screen image from the current input + * line, then goes line-by-line changing the real image to the new + * virtual image. The routine to re-draw a line can be replaced + * easily in hopes of a smarter one being placed there. + */ +libedit_private void +re_refresh(EditLine *el) +{ + int i, rhdiff; + wchar_t *cp, *st; + coord_t cur; +#ifdef notyet + size_t termsz; +#endif + + ELRE_DEBUG(1, (__F, "el->el_line.buffer = :%ls:\r\n", + el->el_line.buffer)); + + literal_clear(el); + /* reset the Drawing cursor */ + el->el_refresh.r_cursor.h = 0; + el->el_refresh.r_cursor.v = 0; + + terminal_move_to_char(el, 0); + + /* temporarily draw rprompt to calculate its size */ + prompt_print(el, EL_RPROMPT); + + /* reset the Drawing cursor */ + el->el_refresh.r_cursor.h = 0; + el->el_refresh.r_cursor.v = 0; + + if (el->el_line.cursor >= el->el_line.lastchar) { + if (el->el_map.current == el->el_map.alt + && el->el_line.lastchar != el->el_line.buffer) + el->el_line.cursor = el->el_line.lastchar - 1; + else + el->el_line.cursor = el->el_line.lastchar; + } + + cur.h = -1; /* set flag in case I'm not set */ + cur.v = 0; + + prompt_print(el, EL_PROMPT); + + /* draw the current input buffer */ +#if notyet + termsz = el->el_terminal.t_size.h * el->el_terminal.t_size.v; + if (el->el_line.lastchar - el->el_line.buffer > termsz) { + /* + * If line is longer than terminal, process only part + * of line which would influence display. + */ + size_t rem = (el->el_line.lastchar-el->el_line.buffer)%termsz; + + st = el->el_line.lastchar - rem + - (termsz - (((rem / el->el_terminal.t_size.v) - 1) + * el->el_terminal.t_size.v)); + } else +#endif + st = el->el_line.buffer; + + for (cp = st; cp < el->el_line.lastchar; cp++) { + if (cp == el->el_line.cursor) { + int w = wcwidth(*cp); + /* save for later */ + cur.h = el->el_refresh.r_cursor.h; + cur.v = el->el_refresh.r_cursor.v; + /* handle being at a linebroken doublewidth char */ + if (w > 1 && el->el_refresh.r_cursor.h + w > + el->el_terminal.t_size.h) { + cur.h = 0; + cur.v++; + } + } + re_addc(el, *cp); + } + + if (cur.h == -1) { /* if I haven't been set yet, I'm at the end */ + cur.h = el->el_refresh.r_cursor.h; + cur.v = el->el_refresh.r_cursor.v; + } + rhdiff = el->el_terminal.t_size.h - el->el_refresh.r_cursor.h - + el->el_rprompt.p_pos.h; + if (el->el_rprompt.p_pos.h && !el->el_rprompt.p_pos.v && + !el->el_refresh.r_cursor.v && rhdiff > 1) { + /* + * have a right-hand side prompt that will fit + * on the end of the first line with at least + * one character gap to the input buffer. + */ + while (--rhdiff > 0) /* pad out with spaces */ + re_putc(el, ' ', 1); + prompt_print(el, EL_RPROMPT); + } else { + el->el_rprompt.p_pos.h = 0; /* flag "not using rprompt" */ + el->el_rprompt.p_pos.v = 0; + } + + re_putc(el, '\0', 0); /* make line ended with NUL, no cursor shift */ + + el->el_refresh.r_newcv = el->el_refresh.r_cursor.v; + + ELRE_DEBUG(1, (__F, + "term.h=%d vcur.h=%d vcur.v=%d vdisplay[0]=\r\n:%80.80s:\r\n", + el->el_terminal.t_size.h, el->el_refresh.r_cursor.h, + el->el_refresh.r_cursor.v, ct_encode_string(el->el_vdisplay[0], + &el->el_scratch))); + + ELRE_DEBUG(1, (__F, "updating %d lines.\r\n", el->el_refresh.r_newcv)); + for (i = 0; i <= el->el_refresh.r_newcv; i++) { + /* NOTE THAT re_update_line MAY CHANGE el_display[i] */ + re_update_line(el, (wchar_t *)el->el_display[i], + (wchar_t *)el->el_vdisplay[i], i); + + /* + * Copy the new line to be the current one, and pad out with + * spaces to the full width of the terminal so that if we try + * moving the cursor by writing the character that is at the + * end of the screen line, it won't be a NUL or some old + * leftover stuff. + */ + re__copy_and_pad((wchar_t *)el->el_display[i], + (wchar_t *)el->el_vdisplay[i], + (size_t) el->el_terminal.t_size.h); + } + ELRE_DEBUG(1, (__F, + "\r\nel->el_refresh.r_cursor.v=%d,el->el_refresh.r_oldcv=%d i=%d\r\n", + el->el_refresh.r_cursor.v, el->el_refresh.r_oldcv, i)); + + if (el->el_refresh.r_oldcv > el->el_refresh.r_newcv) + for (; i <= el->el_refresh.r_oldcv; i++) { + terminal_move_to_line(el, i); + terminal_move_to_char(el, 0); + /* This wcslen should be safe even with MB_FILL_CHARs */ + terminal_clear_EOL(el, + (int) wcslen((const wchar_t *)el->el_display[i])); +#ifdef DEBUG_REFRESH + terminal_overwrite(el, L"C\b", 2); +#endif /* DEBUG_REFRESH */ + el->el_display[i][0] = '\0'; + } + + el->el_refresh.r_oldcv = el->el_refresh.r_newcv; /* set for next time */ + ELRE_DEBUG(1, (__F, + "\r\ncursor.h = %d, cursor.v = %d, cur.h = %d, cur.v = %d\r\n", + el->el_refresh.r_cursor.h, el->el_refresh.r_cursor.v, + cur.h, cur.v)); + terminal_move_to_line(el, cur.v); /* go to where the cursor is */ + terminal_move_to_char(el, cur.h); +} + + +/* re_goto_bottom(): + * used to go to last used screen line + */ +libedit_private void +re_goto_bottom(EditLine *el) +{ + + terminal_move_to_line(el, el->el_refresh.r_oldcv); + terminal__putc(el, '\n'); + re_clear_display(el); + terminal__flush(el); +} + + +/* re_insert(): + * insert num characters of s into d (in front of the character) + * at dat, maximum length of d is dlen + */ +static void +/*ARGSUSED*/ +re_insert(EditLine *el __attribute__((__unused__)), + wchar_t *d, int dat, int dlen, wchar_t *s, int num) +{ + wchar_t *a, *b; + + if (num <= 0) + return; + if (num > dlen - dat) + num = dlen - dat; + + ELRE_DEBUG(1, + (__F, "re_insert() starting: %d at %d max %d, d == \"%s\"\n", + num, dat, dlen, ct_encode_string(d, &el->el_scratch))); + ELRE_DEBUG(1, (__F, "s == \"%s\"\n", ct_encode_string(s, + &el->el_scratch))); + + /* open up the space for num chars */ + if (num > 0) { + b = d + dlen - 1; + a = b - num; + while (a >= &d[dat]) + *b-- = *a--; + d[dlen] = '\0'; /* just in case */ + } + + ELRE_DEBUG(1, (__F, + "re_insert() after insert: %d at %d max %d, d == \"%s\"\n", + num, dat, dlen, ct_encode_string(d, &el->el_scratch))); + ELRE_DEBUG(1, (__F, "s == \"%s\"\n", ct_encode_string(s, + &el->el_scratch))); + + /* copy the characters */ + for (a = d + dat; (a < d + dlen) && (num > 0); num--) + *a++ = *s++; + +#ifdef notyet + /* ct_encode_string() uses a static buffer, so we can't conveniently + * encode both d & s here */ + ELRE_DEBUG(1, + (__F, "re_insert() after copy: %d at %d max %d, %s == \"%s\"\n", + num, dat, dlen, d, s)); + ELRE_DEBUG(1, (__F, "s == \"%s\"\n", s)); +#endif +} + + +/* re_delete(): + * delete num characters d at dat, maximum length of d is dlen + */ +static void +/*ARGSUSED*/ +re_delete(EditLine *el __attribute__((__unused__)), + wchar_t *d, int dat, int dlen, int num) +{ + wchar_t *a, *b; + + if (num <= 0) + return; + if (dat + num >= dlen) { + d[dat] = '\0'; + return; + } + ELRE_DEBUG(1, + (__F, "re_delete() starting: %d at %d max %d, d == \"%s\"\n", + num, dat, dlen, ct_encode_string(d, &el->el_scratch))); + + /* open up the space for num chars */ + if (num > 0) { + b = d + dat; + a = b + num; + while (a < &d[dlen]) + *b++ = *a++; + d[dlen] = '\0'; /* just in case */ + } + ELRE_DEBUG(1, + (__F, "re_delete() after delete: %d at %d max %d, d == \"%s\"\n", + num, dat, dlen, ct_encode_string(d, &el->el_scratch))); +} + + +/* re__strncopy(): + * Like strncpy without padding. + */ +static void +re__strncopy(wchar_t *a, wchar_t *b, size_t n) +{ + + while (n-- && *b) + *a++ = *b++; +} + +/* re_clear_eol(): + * Find the number of characters we need to clear till the end of line + * in order to make sure that we have cleared the previous contents of + * the line. fx and sx is the number of characters inserted or deleted + * in the first or second diff, diff is the difference between the + * number of characters between the new and old line. + */ +static void +re_clear_eol(EditLine *el, int fx, int sx, int diff) +{ + + ELRE_DEBUG(1, (__F, "re_clear_eol sx %d, fx %d, diff %d\n", + sx, fx, diff)); + + if (fx < 0) + fx = -fx; + if (sx < 0) + sx = -sx; + if (fx > diff) + diff = fx; + if (sx > diff) + diff = sx; + + ELRE_DEBUG(1, (__F, "re_clear_eol %d\n", diff)); + terminal_clear_EOL(el, diff); +} + +/***************************************************************** + re_update_line() is based on finding the middle difference of each line + on the screen; vis: + + /old first difference + /beginning of line | /old last same /old EOL + v v v v +old: eddie> Oh, my little gruntle-buggy is to me, as lurgid as +new: eddie> Oh, my little buggy says to me, as lurgid as + ^ ^ ^ ^ + \beginning of line | \new last same \new end of line + \new first difference + + all are character pointers for the sake of speed. Special cases for + no differences, as well as for end of line additions must be handled. +**************************************************************** */ + +/* Minimum at which doing an insert it "worth it". This should be about + * half the "cost" of going into insert mode, inserting a character, and + * going back out. This should really be calculated from the termcap + * data... For the moment, a good number for ANSI terminals. + */ +#define MIN_END_KEEP 4 + +static void +re_update_line(EditLine *el, wchar_t *old, wchar_t *new, int i) +{ + wchar_t *o, *n, *p, c; + wchar_t *ofd, *ols, *oe, *nfd, *nls, *ne; + wchar_t *osb, *ose, *nsb, *nse; + int fx, sx; + size_t len; + + /* + * find first diff + */ + for (o = old, n = new; *o && (*o == *n); o++, n++) + continue; + ofd = o; + nfd = n; + + /* + * Find the end of both old and new + */ + while (*o) + o++; + /* + * Remove any trailing blanks off of the end, being careful not to + * back up past the beginning. + */ + while (ofd < o) { + if (o[-1] != ' ') + break; + o--; + } + oe = o; + *oe = '\0'; + + while (*n) + n++; + + /* remove blanks from end of new */ + while (nfd < n) { + if (n[-1] != ' ') + break; + n--; + } + ne = n; + *ne = '\0'; + + /* + * if no diff, continue to next line of redraw + */ + if (*ofd == '\0' && *nfd == '\0') { + ELRE_DEBUG(1, (__F, "no difference.\r\n")); + return; + } + /* + * find last same pointer + */ + while ((o > ofd) && (n > nfd) && (*--o == *--n)) + continue; + ols = ++o; + nls = ++n; + + /* + * find same beginning and same end + */ + osb = ols; + nsb = nls; + ose = ols; + nse = nls; + + /* + * case 1: insert: scan from nfd to nls looking for *ofd + */ + if (*ofd) { + for (c = *ofd, n = nfd; n < nls; n++) { + if (c == *n) { + for (o = ofd, p = n; + p < nls && o < ols && *o == *p; + o++, p++) + continue; + /* + * if the new match is longer and it's worth + * keeping, then we take it + */ + if (((nse - nsb) < (p - n)) && + (2 * (p - n) > n - nfd)) { + nsb = n; + nse = p; + osb = ofd; + ose = o; + } + } + } + } + /* + * case 2: delete: scan from ofd to ols looking for *nfd + */ + if (*nfd) { + for (c = *nfd, o = ofd; o < ols; o++) { + if (c == *o) { + for (n = nfd, p = o; + p < ols && n < nls && *p == *n; + p++, n++) + continue; + /* + * if the new match is longer and it's worth + * keeping, then we take it + */ + if (((ose - osb) < (p - o)) && + (2 * (p - o) > o - ofd)) { + nsb = nfd; + nse = n; + osb = o; + ose = p; + } + } + } + } + /* + * Pragmatics I: If old trailing whitespace or not enough characters to + * save to be worth it, then don't save the last same info. + */ + if ((oe - ols) < MIN_END_KEEP) { + ols = oe; + nls = ne; + } + /* + * Pragmatics II: if the terminal isn't smart enough, make the data + * dumber so the smart update doesn't try anything fancy + */ + + /* + * fx is the number of characters we need to insert/delete: in the + * beginning to bring the two same begins together + */ + fx = (int)((nsb - nfd) - (osb - ofd)); + /* + * sx is the number of characters we need to insert/delete: in the + * end to bring the two same last parts together + */ + sx = (int)((nls - nse) - (ols - ose)); + + if (!EL_CAN_INSERT) { + if (fx > 0) { + osb = ols; + ose = ols; + nsb = nls; + nse = nls; + } + if (sx > 0) { + ols = oe; + nls = ne; + } + if ((ols - ofd) < (nls - nfd)) { + ols = oe; + nls = ne; + } + } + if (!EL_CAN_DELETE) { + if (fx < 0) { + osb = ols; + ose = ols; + nsb = nls; + nse = nls; + } + if (sx < 0) { + ols = oe; + nls = ne; + } + if ((ols - ofd) > (nls - nfd)) { + ols = oe; + nls = ne; + } + } + /* + * Pragmatics III: make sure the middle shifted pointers are correct if + * they don't point to anything (we may have moved ols or nls). + */ + /* if the change isn't worth it, don't bother */ + /* was: if (osb == ose) */ + if ((ose - osb) < MIN_END_KEEP) { + osb = ols; + ose = ols; + nsb = nls; + nse = nls; + } + /* + * Now that we are done with pragmatics we recompute fx, sx + */ + fx = (int)((nsb - nfd) - (osb - ofd)); + sx = (int)((nls - nse) - (ols - ose)); + + ELRE_DEBUG(1, (__F, "fx %d, sx %d\n", fx, sx)); + ELRE_DEBUG(1, (__F, "ofd %td, osb %td, ose %td, ols %td, oe %td\n", + ofd - old, osb - old, ose - old, ols - old, oe - old)); + ELRE_DEBUG(1, (__F, "nfd %td, nsb %td, nse %td, nls %td, ne %td\n", + nfd - new, nsb - new, nse - new, nls - new, ne - new)); + ELRE_DEBUG(1, (__F, + "xxx-xxx:\"00000000001111111111222222222233333333334\"\r\n")); + ELRE_DEBUG(1, (__F, + "xxx-xxx:\"01234567890123456789012345678901234567890\"\r\n")); +#ifdef DEBUG_REFRESH + re_printstr(el, "old- oe", old, oe); + re_printstr(el, "new- ne", new, ne); + re_printstr(el, "old-ofd", old, ofd); + re_printstr(el, "new-nfd", new, nfd); + re_printstr(el, "ofd-osb", ofd, osb); + re_printstr(el, "nfd-nsb", nfd, nsb); + re_printstr(el, "osb-ose", osb, ose); + re_printstr(el, "nsb-nse", nsb, nse); + re_printstr(el, "ose-ols", ose, ols); + re_printstr(el, "nse-nls", nse, nls); + re_printstr(el, "ols- oe", ols, oe); + re_printstr(el, "nls- ne", nls, ne); +#endif /* DEBUG_REFRESH */ + + /* + * el_cursor.v to this line i MUST be in this routine so that if we + * don't have to change the line, we don't move to it. el_cursor.h to + * first diff char + */ + terminal_move_to_line(el, i); + + /* + * at this point we have something like this: + * + * /old /ofd /osb /ose /ols /oe + * v.....................v v..................v v........v + * eddie> Oh, my fredded gruntle-buggy is to me, as foo var lurgid as + * eddie> Oh, my fredded quiux buggy is to me, as gruntle-lurgid as + * ^.....................^ ^..................^ ^........^ + * \new \nfd \nsb \nse \nls \ne + * + * fx is the difference in length between the chars between nfd and + * nsb, and the chars between ofd and osb, and is thus the number of + * characters to delete if < 0 (new is shorter than old, as above), + * or insert (new is longer than short). + * + * sx is the same for the second differences. + */ + + /* + * if we have a net insert on the first difference, AND inserting the + * net amount ((nsb-nfd) - (osb-ofd)) won't push the last useful + * character (which is ne if nls != ne, otherwise is nse) off the edge + * of the screen (el->el_terminal.t_size.h) else we do the deletes first + * so that we keep everything we need to. + */ + + /* + * if the last same is the same like the end, there is no last same + * part, otherwise we want to keep the last same part set p to the + * last useful old character + */ + p = (ols != oe) ? oe : ose; + + /* + * if (There is a diffence in the beginning) && (we need to insert + * characters) && (the number of characters to insert is less than + * the term width) + * We need to do an insert! + * else if (we need to delete characters) + * We need to delete characters! + * else + * No insert or delete + */ + if ((nsb != nfd) && fx > 0 && + ((p - old) + fx <= el->el_terminal.t_size.h)) { + ELRE_DEBUG(1, + (__F, "first diff insert at %td...\r\n", nfd - new)); + /* + * Move to the first char to insert, where the first diff is. + */ + terminal_move_to_char(el, (int)(nfd - new)); + /* + * Check if we have stuff to keep at end + */ + if (nsb != ne) { + ELRE_DEBUG(1, (__F, "with stuff to keep at end\r\n")); + /* + * insert fx chars of new starting at nfd + */ + if (fx > 0) { + ELRE_DEBUG(!EL_CAN_INSERT, (__F, + "ERROR: cannot insert in early first diff\n")); + terminal_insertwrite(el, nfd, fx); + re_insert(el, old, (int)(ofd - old), + el->el_terminal.t_size.h, nfd, fx); + } + /* + * write (nsb-nfd) - fx chars of new starting at + * (nfd + fx) + */ + len = (size_t) ((nsb - nfd) - fx); + terminal_overwrite(el, (nfd + fx), len); + re__strncopy(ofd + fx, nfd + fx, len); + } else { + ELRE_DEBUG(1, (__F, "without anything to save\r\n")); + len = (size_t)(nsb - nfd); + terminal_overwrite(el, nfd, len); + re__strncopy(ofd, nfd, len); + /* + * Done + */ + return; + } + } else if (fx < 0) { + ELRE_DEBUG(1, + (__F, "first diff delete at %td...\r\n", ofd - old)); + /* + * move to the first char to delete where the first diff is + */ + terminal_move_to_char(el, (int)(ofd - old)); + /* + * Check if we have stuff to save + */ + if (osb != oe) { + ELRE_DEBUG(1, (__F, "with stuff to save at end\r\n")); + /* + * fx is less than zero *always* here but we check + * for code symmetry + */ + if (fx < 0) { + ELRE_DEBUG(!EL_CAN_DELETE, (__F, + "ERROR: cannot delete in first diff\n")); + terminal_deletechars(el, -fx); + re_delete(el, old, (int)(ofd - old), + el->el_terminal.t_size.h, -fx); + } + /* + * write (nsb-nfd) chars of new starting at nfd + */ + len = (size_t) (nsb - nfd); + terminal_overwrite(el, nfd, len); + re__strncopy(ofd, nfd, len); + + } else { + ELRE_DEBUG(1, (__F, + "but with nothing left to save\r\n")); + /* + * write (nsb-nfd) chars of new starting at nfd + */ + terminal_overwrite(el, nfd, (size_t)(nsb - nfd)); + re_clear_eol(el, fx, sx, + (int)((oe - old) - (ne - new))); + /* + * Done + */ + return; + } + } else + fx = 0; + + if (sx < 0 && (ose - old) + fx < el->el_terminal.t_size.h) { + ELRE_DEBUG(1, (__F, + "second diff delete at %td...\r\n", (ose - old) + fx)); + /* + * Check if we have stuff to delete + */ + /* + * fx is the number of characters inserted (+) or deleted (-) + */ + + terminal_move_to_char(el, (int)((ose - old) + fx)); + /* + * Check if we have stuff to save + */ + if (ols != oe) { + ELRE_DEBUG(1, (__F, "with stuff to save at end\r\n")); + /* + * Again a duplicate test. + */ + if (sx < 0) { + ELRE_DEBUG(!EL_CAN_DELETE, (__F, + "ERROR: cannot delete in second diff\n")); + terminal_deletechars(el, -sx); + } + /* + * write (nls-nse) chars of new starting at nse + */ + terminal_overwrite(el, nse, (size_t)(nls - nse)); + } else { + ELRE_DEBUG(1, (__F, + "but with nothing left to save\r\n")); + terminal_overwrite(el, nse, (size_t)(nls - nse)); + re_clear_eol(el, fx, sx, + (int)((oe - old) - (ne - new))); + } + } + /* + * if we have a first insert AND WE HAVEN'T ALREADY DONE IT... + */ + if ((nsb != nfd) && (osb - ofd) <= (nsb - nfd) && (fx == 0)) { + ELRE_DEBUG(1, (__F, "late first diff insert at %td...\r\n", + nfd - new)); + + terminal_move_to_char(el, (int)(nfd - new)); + /* + * Check if we have stuff to keep at the end + */ + if (nsb != ne) { + ELRE_DEBUG(1, (__F, "with stuff to keep at end\r\n")); + /* + * We have to recalculate fx here because we set it + * to zero above as a flag saying that we hadn't done + * an early first insert. + */ + fx = (int)((nsb - nfd) - (osb - ofd)); + if (fx > 0) { + /* + * insert fx chars of new starting at nfd + */ + ELRE_DEBUG(!EL_CAN_INSERT, (__F, + "ERROR: cannot insert in late first diff\n")); + terminal_insertwrite(el, nfd, fx); + re_insert(el, old, (int)(ofd - old), + el->el_terminal.t_size.h, nfd, fx); + } + /* + * write (nsb-nfd) - fx chars of new starting at + * (nfd + fx) + */ + len = (size_t) ((nsb - nfd) - fx); + terminal_overwrite(el, (nfd + fx), len); + re__strncopy(ofd + fx, nfd + fx, len); + } else { + ELRE_DEBUG(1, (__F, "without anything to save\r\n")); + len = (size_t) (nsb - nfd); + terminal_overwrite(el, nfd, len); + re__strncopy(ofd, nfd, len); + } + } + /* + * line is now NEW up to nse + */ + if (sx >= 0) { + ELRE_DEBUG(1, (__F, + "second diff insert at %d...\r\n", (int)(nse - new))); + terminal_move_to_char(el, (int)(nse - new)); + if (ols != oe) { + ELRE_DEBUG(1, (__F, "with stuff to keep at end\r\n")); + if (sx > 0) { + /* insert sx chars of new starting at nse */ + ELRE_DEBUG(!EL_CAN_INSERT, (__F, + "ERROR: cannot insert in second diff\n")); + terminal_insertwrite(el, nse, sx); + } + /* + * write (nls-nse) - sx chars of new starting at + * (nse + sx) + */ + terminal_overwrite(el, (nse + sx), + (size_t)((nls - nse) - sx)); + } else { + ELRE_DEBUG(1, (__F, "without anything to save\r\n")); + terminal_overwrite(el, nse, (size_t)(nls - nse)); + + /* + * No need to do a clear-to-end here because we were + * doing a second insert, so we will have over + * written all of the old string. + */ + } + } + ELRE_DEBUG(1, (__F, "done.\r\n")); +} + + +/* re__copy_and_pad(): + * Copy string and pad with spaces + */ +static void +re__copy_and_pad(wchar_t *dst, const wchar_t *src, size_t width) +{ + size_t i; + + for (i = 0; i < width; i++) { + if (*src == '\0') + break; + *dst++ = *src++; + } + + for (; i < width; i++) + *dst++ = ' '; + + *dst = '\0'; +} + + +/* re_refresh_cursor(): + * Move to the new cursor position + */ +libedit_private void +re_refresh_cursor(EditLine *el) +{ + wchar_t *cp; + int h, v, th, w; + + if (el->el_line.cursor >= el->el_line.lastchar) { + if (el->el_map.current == el->el_map.alt + && el->el_line.lastchar != el->el_line.buffer) + el->el_line.cursor = el->el_line.lastchar - 1; + else + el->el_line.cursor = el->el_line.lastchar; + } + + /* first we must find where the cursor is... */ + h = el->el_prompt.p_pos.h; + v = el->el_prompt.p_pos.v; + th = el->el_terminal.t_size.h; /* optimize for speed */ + + /* do input buffer to el->el_line.cursor */ + for (cp = el->el_line.buffer; cp < el->el_line.cursor; cp++) { + switch (ct_chr_class(*cp)) { + case CHTYPE_NL: /* handle newline in data part too */ + h = 0; + v++; + break; + case CHTYPE_TAB: /* if a tab, to next tab stop */ + while (++h & 07) + continue; + break; + default: + w = wcwidth(*cp); + if (w > 1 && h + w > th) { /* won't fit on line */ + h = 0; + v++; + } + h += ct_visual_width(*cp); + break; + } + + if (h >= th) { /* check, extra long tabs picked up here also */ + h -= th; + v++; + } + } + /* if we have a next character, and it's a doublewidth one, we need to + * check whether we need to linebreak for it to fit */ + if (cp < el->el_line.lastchar && (w = wcwidth(*cp)) > 1) + if (h + w > th) { + h = 0; + v++; + } + + /* now go there */ + terminal_move_to_line(el, v); + terminal_move_to_char(el, h); + terminal__flush(el); +} + + +/* re_fastputc(): + * Add a character fast. + */ +static void +re_fastputc(EditLine *el, wint_t c) +{ + wint_t *lastline; + int w; + + w = wcwidth(c); + while (w > 1 && el->el_cursor.h + w > el->el_terminal.t_size.h) + re_fastputc(el, ' '); + + terminal__putc(el, c); + el->el_display[el->el_cursor.v][el->el_cursor.h++] = c; + while (--w > 0) + el->el_display[el->el_cursor.v][el->el_cursor.h++] + = MB_FILL_CHAR; + + if (el->el_cursor.h >= el->el_terminal.t_size.h) { + /* if we must overflow */ + el->el_cursor.h = 0; + + /* + * If we would overflow (input is longer than terminal size), + * emulate scroll by dropping first line and shuffling the rest. + * We do this via pointer shuffling - it's safe in this case + * and we avoid memcpy(). + */ + if (el->el_cursor.v + 1 >= el->el_terminal.t_size.v) { + int i, lins = el->el_terminal.t_size.v; + + lastline = el->el_display[0]; + for(i = 1; i < lins; i++) + el->el_display[i - 1] = el->el_display[i]; + + el->el_display[i - 1] = lastline; + } else { + el->el_cursor.v++; + lastline = el->el_display[++el->el_refresh.r_oldcv]; + } + re__copy_and_pad((wchar_t *)lastline, L"", + (size_t)el->el_terminal.t_size.h); + + if (EL_HAS_AUTO_MARGINS) { + if (EL_HAS_MAGIC_MARGINS) { + terminal__putc(el, ' '); + terminal__putc(el, '\b'); + } + } else { + terminal__putc(el, '\r'); + terminal__putc(el, '\n'); + } + } +} + + +/* re_fastaddc(): + * we added just one char, handle it fast. + * Assumes that screen cursor == real cursor + */ +libedit_private void +re_fastaddc(EditLine *el) +{ + wchar_t c; + int rhdiff; + + c = el->el_line.cursor[-1]; + + if (c == '\t' || el->el_line.cursor != el->el_line.lastchar) { + re_refresh(el); /* too hard to handle */ + return; + } + rhdiff = el->el_terminal.t_size.h - el->el_cursor.h - + el->el_rprompt.p_pos.h; + if (el->el_rprompt.p_pos.h && rhdiff < 3) { + re_refresh(el); /* clear out rprompt if less than 1 char gap */ + return; + } /* else (only do at end of line, no TAB) */ + switch (ct_chr_class(c)) { + case CHTYPE_TAB: /* already handled, should never happen here */ + break; + case CHTYPE_NL: + case CHTYPE_PRINT: + re_fastputc(el, c); + break; + case CHTYPE_ASCIICTL: + case CHTYPE_NONPRINT: { + wchar_t visbuf[VISUAL_WIDTH_MAX]; + ssize_t i, n = + ct_visual_char(visbuf, VISUAL_WIDTH_MAX, c); + for (i = 0; n-- > 0; ++i) + re_fastputc(el, visbuf[i]); + break; + } + } + terminal__flush(el); +} + + +/* re_clear_display(): + * clear the screen buffers so that new new prompt starts fresh. + */ +libedit_private void +re_clear_display(EditLine *el) +{ + int i; + + el->el_cursor.v = 0; + el->el_cursor.h = 0; + for (i = 0; i < el->el_terminal.t_size.v; i++) + el->el_display[i][0] = '\0'; + el->el_refresh.r_oldcv = 0; +} + + +/* re_clear_lines(): + * Make sure all lines are *really* blank + */ +libedit_private void +re_clear_lines(EditLine *el) +{ + + if (EL_CAN_CEOL) { + int i; + for (i = el->el_refresh.r_oldcv; i >= 0; i--) { + /* for each line on the screen */ + terminal_move_to_line(el, i); + terminal_move_to_char(el, 0); + terminal_clear_EOL(el, el->el_terminal.t_size.h); + } + } else { + terminal_move_to_line(el, el->el_refresh.r_oldcv); + /* go to last line */ + terminal__putc(el, '\r'); /* go to BOL */ + terminal__putc(el, '\n'); /* go to new line */ + } +} diff --git a/src/thirdparty/libedit-3.1/src/refresh.h b/src/thirdparty/libedit-3.1/src/refresh.h new file mode 100644 index 000000000..22e4ccb9d --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/refresh.h @@ -0,0 +1,59 @@ +/* $NetBSD: refresh.h,v 1.11 2017/06/27 23:23:48 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)refresh.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * el.refresh.h: Screen refresh functions + */ +#ifndef _h_el_refresh +#define _h_el_refresh + +typedef struct { + coord_t r_cursor; /* Refresh cursor position */ + int r_oldcv; /* Vertical locations */ + int r_newcv; +} el_refresh_t; + +libedit_private void re_putc(EditLine *, wint_t, int); +libedit_private void re_putliteral(EditLine *, const wchar_t *, + const wchar_t *); +libedit_private void re_clear_lines(EditLine *); +libedit_private void re_clear_display(EditLine *); +libedit_private void re_refresh(EditLine *); +libedit_private void re_refresh_cursor(EditLine *); +libedit_private void re_fastaddc(EditLine *); +libedit_private void re_goto_bottom(EditLine *); + +#endif /* _h_el_refresh */ diff --git a/src/thirdparty/libedit-3.1/src/search.c b/src/thirdparty/libedit-3.1/src/search.c new file mode 100644 index 000000000..b8b70b6f0 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/search.c @@ -0,0 +1,642 @@ +/* $NetBSD: search.c,v 1.51 2020/03/30 06:56:38 ryo Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)search.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: search.c,v 1.51 2020/03/30 06:56:38 ryo Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * search.c: History and character search functions + */ +#include <stdlib.h> +#include <sys/types.h> +#include <string.h> +#if defined(REGEX) +#include <regex.h> +#elif defined(REGEXP) +#include <regexp.h> +#endif + +#include "el.h" +#include "common.h" +#include "fcns.h" + +/* + * Adjust cursor in vi mode to include the character under it + */ +#define EL_CURSOR(el) \ + ((el)->el_line.cursor + (((el)->el_map.type == MAP_VI) && \ + ((el)->el_map.current == (el)->el_map.alt))) + +/* search_init(): + * Initialize the search stuff + */ +libedit_private int +search_init(EditLine *el) +{ + + el->el_search.patbuf = el_calloc(EL_BUFSIZ, + sizeof(*el->el_search.patbuf)); + if (el->el_search.patbuf == NULL) + return -1; + el->el_search.patbuf[0] = L'\0'; + el->el_search.patlen = 0; + el->el_search.patdir = -1; + el->el_search.chacha = L'\0'; + el->el_search.chadir = CHAR_FWD; + el->el_search.chatflg = 0; + return 0; +} + + +/* search_end(): + * Initialize the search stuff + */ +libedit_private void +search_end(EditLine *el) +{ + + el_free(el->el_search.patbuf); + el->el_search.patbuf = NULL; +} + + +#ifdef REGEXP +/* regerror(): + * Handle regular expression errors + */ +void +/*ARGSUSED*/ +regerror(const char *msg) +{ +} +#endif + + +/* el_match(): + * Return if string matches pattern + */ +libedit_private int +el_match(const wchar_t *str, const wchar_t *pat) +{ + static ct_buffer_t conv; +#if defined (REGEX) + regex_t re; + int rv; +#elif defined (REGEXP) + regexp *rp; + int rv; +#else + extern char *re_comp(const char *); + extern int re_exec(const char *); +#endif + + if (wcsstr(str, pat) != 0) + return 1; + +#if defined(REGEX) + if (regcomp(&re, ct_encode_string(pat, &conv), 0) == 0) { + rv = regexec(&re, ct_encode_string(str, &conv), (size_t)0, NULL, + 0) == 0; + regfree(&re); + } else { + rv = 0; + } + return rv; +#elif defined(REGEXP) + if ((re = regcomp(ct_encode_string(pat, &conv))) != NULL) { + rv = regexec(re, ct_encode_string(str, &conv)); + el_free(re); + } else { + rv = 0; + } + return rv; +#else + if (re_comp(ct_encode_string(pat, &conv)) != NULL) + return 0; + else + return re_exec(ct_encode_string(str, &conv)) == 1; +#endif +} + + +/* c_hmatch(): + * return True if the pattern matches the prefix + */ +libedit_private int +c_hmatch(EditLine *el, const wchar_t *str) +{ +#ifdef SDEBUG + (void) fprintf(el->el_errfile, "match `%ls' with `%ls'\n", + el->el_search.patbuf, str); +#endif /* SDEBUG */ + + return el_match(str, el->el_search.patbuf); +} + + +/* c_setpat(): + * Set the history seatch pattern + */ +libedit_private void +c_setpat(EditLine *el) +{ + if (el->el_state.lastcmd != ED_SEARCH_PREV_HISTORY && + el->el_state.lastcmd != ED_SEARCH_NEXT_HISTORY) { + el->el_search.patlen = + (size_t)(EL_CURSOR(el) - el->el_line.buffer); + if (el->el_search.patlen >= EL_BUFSIZ) + el->el_search.patlen = EL_BUFSIZ - 1; + (void) wcsncpy(el->el_search.patbuf, el->el_line.buffer, + el->el_search.patlen); + el->el_search.patbuf[el->el_search.patlen] = '\0'; + } +#ifdef SDEBUG + (void) fprintf(el->el_errfile, "\neventno = %d\n", + el->el_history.eventno); + (void) fprintf(el->el_errfile, "patlen = %ld\n", el->el_search.patlen); + (void) fprintf(el->el_errfile, "patbuf = \"%ls\"\n", + el->el_search.patbuf); + (void) fprintf(el->el_errfile, "cursor %ld lastchar %ld\n", + EL_CURSOR(el) - el->el_line.buffer, + el->el_line.lastchar - el->el_line.buffer); +#endif +} + + +/* ce_inc_search(): + * Emacs incremental search + */ +libedit_private el_action_t +ce_inc_search(EditLine *el, int dir) +{ + static const wchar_t STRfwd[] = L"fwd", STRbck[] = L"bck"; + static wchar_t pchar = L':'; /* ':' = normal, '?' = failed */ + static wchar_t endcmd[2] = {'\0', '\0'}; + wchar_t *ocursor = el->el_line.cursor, oldpchar = pchar, ch; + const wchar_t *cp; + + el_action_t ret = CC_NORM; + + int ohisteventno = el->el_history.eventno; + size_t oldpatlen = el->el_search.patlen; + int newdir = dir; + int done, redo; + + if (el->el_line.lastchar + sizeof(STRfwd) / + sizeof(*el->el_line.lastchar) + 2 + + el->el_search.patlen >= el->el_line.limit) + return CC_ERROR; + + for (;;) { + + if (el->el_search.patlen == 0) { /* first round */ + pchar = ':'; +#ifdef ANCHOR +#define LEN 2 + el->el_search.patbuf[el->el_search.patlen++] = '.'; + el->el_search.patbuf[el->el_search.patlen++] = '*'; +#else +#define LEN 0 +#endif + } + done = redo = 0; + *el->el_line.lastchar++ = '\n'; + for (cp = (newdir == ED_SEARCH_PREV_HISTORY) ? STRbck : STRfwd; + *cp; *el->el_line.lastchar++ = *cp++) + continue; + *el->el_line.lastchar++ = pchar; + for (cp = &el->el_search.patbuf[LEN]; + cp < &el->el_search.patbuf[el->el_search.patlen]; + *el->el_line.lastchar++ = *cp++) + continue; + *el->el_line.lastchar = '\0'; + re_refresh(el); + + if (el_wgetc(el, &ch) != 1) + return ed_end_of_file(el, 0); + + switch (el->el_map.current[(unsigned char) ch]) { + case ED_INSERT: + case ED_DIGIT: + if (el->el_search.patlen >= EL_BUFSIZ - LEN) + terminal_beep(el); + else { + el->el_search.patbuf[el->el_search.patlen++] = + ch; + *el->el_line.lastchar++ = ch; + *el->el_line.lastchar = '\0'; + re_refresh(el); + } + break; + + case EM_INC_SEARCH_NEXT: + newdir = ED_SEARCH_NEXT_HISTORY; + redo++; + break; + + case EM_INC_SEARCH_PREV: + newdir = ED_SEARCH_PREV_HISTORY; + redo++; + break; + + case EM_DELETE_PREV_CHAR: + case ED_DELETE_PREV_CHAR: + if (el->el_search.patlen > LEN) + done++; + else + terminal_beep(el); + break; + + default: + switch (ch) { + case 0007: /* ^G: Abort */ + ret = CC_ERROR; + done++; + break; + + case 0027: /* ^W: Append word */ + /* No can do if globbing characters in pattern */ + for (cp = &el->el_search.patbuf[LEN];; cp++) + if (cp >= &el->el_search.patbuf[ + el->el_search.patlen]) { + el->el_line.cursor += + el->el_search.patlen - LEN - 1; + cp = c__next_word(el->el_line.cursor, + el->el_line.lastchar, 1, + ce__isword); + while (el->el_line.cursor < cp && + *el->el_line.cursor != '\n') { + if (el->el_search.patlen >= + EL_BUFSIZ - LEN) { + terminal_beep(el); + break; + } + el->el_search.patbuf[el->el_search.patlen++] = + *el->el_line.cursor; + *el->el_line.lastchar++ = + *el->el_line.cursor++; + } + el->el_line.cursor = ocursor; + *el->el_line.lastchar = '\0'; + re_refresh(el); + break; + } else if (isglob(*cp)) { + terminal_beep(el); + break; + } + break; + + default: /* Terminate and execute cmd */ + endcmd[0] = ch; + el_wpush(el, endcmd); + /* FALLTHROUGH */ + + case 0033: /* ESC: Terminate */ + ret = CC_REFRESH; + done++; + break; + } + break; + } + + while (el->el_line.lastchar > el->el_line.buffer && + *el->el_line.lastchar != '\n') + *el->el_line.lastchar-- = '\0'; + *el->el_line.lastchar = '\0'; + + if (!done) { + + /* Can't search if unmatched '[' */ + for (cp = &el->el_search.patbuf[el->el_search.patlen-1], + ch = L']'; + cp >= &el->el_search.patbuf[LEN]; + cp--) + if (*cp == '[' || *cp == ']') { + ch = *cp; + break; + } + if (el->el_search.patlen > LEN && ch != L'[') { + if (redo && newdir == dir) { + if (pchar == '?') { /* wrap around */ + el->el_history.eventno = + newdir == ED_SEARCH_PREV_HISTORY ? 0 : 0x7fffffff; + if (hist_get(el) == CC_ERROR) + /* el->el_history.event + * no was fixed by + * first call */ + (void) hist_get(el); + el->el_line.cursor = newdir == + ED_SEARCH_PREV_HISTORY ? + el->el_line.lastchar : + el->el_line.buffer; + } else + el->el_line.cursor += + newdir == + ED_SEARCH_PREV_HISTORY ? + -1 : 1; + } +#ifdef ANCHOR + el->el_search.patbuf[el->el_search.patlen++] = + '.'; + el->el_search.patbuf[el->el_search.patlen++] = + '*'; +#endif + el->el_search.patbuf[el->el_search.patlen] = + '\0'; + if (el->el_line.cursor < el->el_line.buffer || + el->el_line.cursor > el->el_line.lastchar || + (ret = ce_search_line(el, newdir)) + == CC_ERROR) { + /* avoid c_setpat */ + el->el_state.lastcmd = + (el_action_t) newdir; + ret = (el_action_t) + (newdir == ED_SEARCH_PREV_HISTORY ? + ed_search_prev_history(el, 0) : + ed_search_next_history(el, 0)); + if (ret != CC_ERROR) { + el->el_line.cursor = newdir == + ED_SEARCH_PREV_HISTORY ? + el->el_line.lastchar : + el->el_line.buffer; + (void) ce_search_line(el, + newdir); + } + } + el->el_search.patlen -= LEN; + el->el_search.patbuf[el->el_search.patlen] = + '\0'; + if (ret == CC_ERROR) { + terminal_beep(el); + if (el->el_history.eventno != + ohisteventno) { + el->el_history.eventno = + ohisteventno; + if (hist_get(el) == CC_ERROR) + return CC_ERROR; + } + el->el_line.cursor = ocursor; + pchar = '?'; + } else { + pchar = ':'; + } + } + ret = ce_inc_search(el, newdir); + + if (ret == CC_ERROR && pchar == '?' && oldpchar == ':') + /* + * break abort of failed search at last + * non-failed + */ + ret = CC_NORM; + + } + if (ret == CC_NORM || (ret == CC_ERROR && oldpatlen == 0)) { + /* restore on normal return or error exit */ + pchar = oldpchar; + el->el_search.patlen = oldpatlen; + if (el->el_history.eventno != ohisteventno) { + el->el_history.eventno = ohisteventno; + if (hist_get(el) == CC_ERROR) + return CC_ERROR; + } + el->el_line.cursor = ocursor; + if (ret == CC_ERROR) + re_refresh(el); + } + if (done || ret != CC_NORM) + return ret; + } +} + + +/* cv_search(): + * Vi search. + */ +libedit_private el_action_t +cv_search(EditLine *el, int dir) +{ + wchar_t ch; + wchar_t tmpbuf[EL_BUFSIZ]; + ssize_t tmplen; + +#ifdef ANCHOR + tmpbuf[0] = '.'; + tmpbuf[1] = '*'; +#endif + tmplen = LEN; + + el->el_search.patdir = dir; + + tmplen = c_gets(el, &tmpbuf[LEN], + dir == ED_SEARCH_PREV_HISTORY ? L"\n/" : L"\n?" ); + if (tmplen == -1) + return CC_REFRESH; + + tmplen += LEN; + ch = tmpbuf[tmplen]; + tmpbuf[tmplen] = '\0'; + + if (tmplen == LEN) { + /* + * Use the old pattern, but wild-card it. + */ + if (el->el_search.patlen == 0) { + re_refresh(el); + return CC_ERROR; + } +#ifdef ANCHOR + if (el->el_search.patbuf[0] != '.' && + el->el_search.patbuf[0] != '*') { + (void) wcsncpy(tmpbuf, el->el_search.patbuf, + sizeof(tmpbuf) / sizeof(*tmpbuf) - 1); + el->el_search.patbuf[0] = '.'; + el->el_search.patbuf[1] = '*'; + (void) wcsncpy(&el->el_search.patbuf[2], tmpbuf, + EL_BUFSIZ - 3); + el->el_search.patlen++; + el->el_search.patbuf[el->el_search.patlen++] = '.'; + el->el_search.patbuf[el->el_search.patlen++] = '*'; + el->el_search.patbuf[el->el_search.patlen] = '\0'; + } +#endif + } else { +#ifdef ANCHOR + tmpbuf[tmplen++] = '.'; + tmpbuf[tmplen++] = '*'; +#endif + tmpbuf[tmplen] = '\0'; + (void) wcsncpy(el->el_search.patbuf, tmpbuf, EL_BUFSIZ - 1); + el->el_search.patlen = (size_t)tmplen; + } + el->el_state.lastcmd = (el_action_t) dir; /* avoid c_setpat */ + el->el_line.cursor = el->el_line.lastchar = el->el_line.buffer; + if ((dir == ED_SEARCH_PREV_HISTORY ? ed_search_prev_history(el, 0) : + ed_search_next_history(el, 0)) == CC_ERROR) { + re_refresh(el); + return CC_ERROR; + } + if (ch == 0033) { + re_refresh(el); + return ed_newline(el, 0); + } + return CC_REFRESH; +} + + +/* ce_search_line(): + * Look for a pattern inside a line + */ +libedit_private el_action_t +ce_search_line(EditLine *el, int dir) +{ + wchar_t *cp = el->el_line.cursor; + wchar_t *pattern = el->el_search.patbuf; + wchar_t oc, *ocp; +#ifdef ANCHOR + ocp = &pattern[1]; + oc = *ocp; + *ocp = '^'; +#else + ocp = pattern; + oc = *ocp; +#endif + + if (dir == ED_SEARCH_PREV_HISTORY) { + for (; cp >= el->el_line.buffer; cp--) { + if (el_match(cp, ocp)) { + *ocp = oc; + el->el_line.cursor = cp; + return CC_NORM; + } + } + *ocp = oc; + return CC_ERROR; + } else { + for (; *cp != '\0' && cp < el->el_line.limit; cp++) { + if (el_match(cp, ocp)) { + *ocp = oc; + el->el_line.cursor = cp; + return CC_NORM; + } + } + *ocp = oc; + return CC_ERROR; + } +} + + +/* cv_repeat_srch(): + * Vi repeat search + */ +libedit_private el_action_t +cv_repeat_srch(EditLine *el, wint_t c) +{ + +#ifdef SDEBUG + static ct_buffer_t conv; + (void) fprintf(el->el_errfile, "dir %d patlen %ld patbuf %s\n", + c, el->el_search.patlen, ct_encode_string(el->el_search.patbuf, &conv)); +#endif + + el->el_state.lastcmd = (el_action_t) c; /* Hack to stop c_setpat */ + el->el_line.lastchar = el->el_line.buffer; + + switch (c) { + case ED_SEARCH_NEXT_HISTORY: + return ed_search_next_history(el, 0); + case ED_SEARCH_PREV_HISTORY: + return ed_search_prev_history(el, 0); + default: + return CC_ERROR; + } +} + + +/* cv_csearch(): + * Vi character search + */ +libedit_private el_action_t +cv_csearch(EditLine *el, int direction, wint_t ch, int count, int tflag) +{ + wchar_t *cp; + + if (ch == 0) + return CC_ERROR; + + if (ch == (wint_t)-1) { + wchar_t c; + if (el_wgetc(el, &c) != 1) + return ed_end_of_file(el, 0); + ch = c; + } + + /* Save for ';' and ',' commands */ + el->el_search.chacha = ch; + el->el_search.chadir = direction; + el->el_search.chatflg = (char)tflag; + + cp = el->el_line.cursor; + while (count--) { + if ((wint_t)*cp == ch) + cp += direction; + for (;;cp += direction) { + if (cp >= el->el_line.lastchar) + return CC_ERROR; + if (cp < el->el_line.buffer) + return CC_ERROR; + if ((wint_t)*cp == ch) + break; + } + } + + if (tflag) + cp -= direction; + + el->el_line.cursor = cp; + + if (el->el_chared.c_vcmd.action != NOP) { + if (direction > 0) + el->el_line.cursor++; + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; +} diff --git a/src/thirdparty/libedit-3.1/src/search.h b/src/thirdparty/libedit-3.1/src/search.h new file mode 100644 index 000000000..4ca39c4c0 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/search.h @@ -0,0 +1,64 @@ +/* $NetBSD: search.h,v 1.14 2016/05/09 21:46:56 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)search.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * el.search.h: Line and history searching utilities + */ +#ifndef _h_el_search +#define _h_el_search + +typedef struct el_search_t { + wchar_t *patbuf; /* The pattern buffer */ + size_t patlen; /* Length of the pattern buffer */ + int patdir; /* Direction of the last search */ + int chadir; /* Character search direction */ + wchar_t chacha; /* Character we are looking for */ + char chatflg; /* 0 if f, 1 if t */ +} el_search_t; + + +libedit_private int el_match(const wchar_t *, const wchar_t *); +libedit_private int search_init(EditLine *); +libedit_private void search_end(EditLine *); +libedit_private int c_hmatch(EditLine *, const wchar_t *); +libedit_private void c_setpat(EditLine *); +libedit_private el_action_t ce_inc_search(EditLine *, int); +libedit_private el_action_t cv_search(EditLine *, int); +libedit_private el_action_t ce_search_line(EditLine *, int); +libedit_private el_action_t cv_repeat_srch(EditLine *, wint_t); +libedit_private el_action_t cv_csearch(EditLine *, int, wint_t, int, int); + +#endif /* _h_el_search */ diff --git a/src/thirdparty/libedit-3.1/src/shlib_version b/src/thirdparty/libedit-3.1/src/shlib_version new file mode 100644 index 000000000..303609d26 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/shlib_version @@ -0,0 +1,5 @@ +# $NetBSD: shlib_version,v 1.19 2013/01/22 20:23:21 christos Exp $ +# Remember to update distrib/sets/lists/base/shl.* when changing +# +major=3 +minor=1 diff --git a/src/thirdparty/libedit-3.1/src/sig.c b/src/thirdparty/libedit-3.1/src/sig.c new file mode 100644 index 000000000..83742a3d6 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/sig.c @@ -0,0 +1,205 @@ +/* $NetBSD: sig.c,v 1.26 2016/05/09 21:46:56 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)sig.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: sig.c,v 1.26 2016/05/09 21:46:56 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * sig.c: Signal handling stuff. + * our policy is to trap all signals, set a good state + * and pass the ball to our caller. + */ +#include <errno.h> +#include <stdlib.h> + +#include "el.h" +#include "common.h" + +static EditLine *sel = NULL; + +static const int sighdl[] = { +#define _DO(a) (a), + ALLSIGS +#undef _DO + - 1 +}; + +static void sig_handler(int); + +/* sig_handler(): + * This is the handler called for all signals + * XXX: we cannot pass any data so we just store the old editline + * state in a private variable + */ +static void +sig_handler(int signo) +{ + int i, save_errno; + sigset_t nset, oset; + + save_errno = errno; + (void) sigemptyset(&nset); + (void) sigaddset(&nset, signo); + (void) sigprocmask(SIG_BLOCK, &nset, &oset); + + sel->el_signal->sig_no = signo; + + switch (signo) { + case SIGCONT: + tty_rawmode(sel); + if (ed_redisplay(sel, 0) == CC_REFRESH) + re_refresh(sel); + terminal__flush(sel); + break; + + case SIGWINCH: + el_resize(sel); + break; + + default: + tty_cookedmode(sel); + break; + } + + for (i = 0; sighdl[i] != -1; i++) + if (signo == sighdl[i]) + break; + + (void) sigaction(signo, &sel->el_signal->sig_action[i], NULL); + sel->el_signal->sig_action[i].sa_handler = SIG_ERR; + sel->el_signal->sig_action[i].sa_flags = 0; + sigemptyset(&sel->el_signal->sig_action[i].sa_mask); + (void) sigprocmask(SIG_SETMASK, &oset, NULL); + (void) kill(0, signo); + errno = save_errno; +} + + +/* sig_init(): + * Initialize all signal stuff + */ +libedit_private int +sig_init(EditLine *el) +{ + size_t i; + sigset_t *nset, oset; + + el->el_signal = el_malloc(sizeof(*el->el_signal)); + if (el->el_signal == NULL) + return -1; + + nset = &el->el_signal->sig_set; + (void) sigemptyset(nset); +#define _DO(a) (void) sigaddset(nset, a); + ALLSIGS +#undef _DO + (void) sigprocmask(SIG_BLOCK, nset, &oset); + + for (i = 0; sighdl[i] != -1; i++) { + el->el_signal->sig_action[i].sa_handler = SIG_ERR; + el->el_signal->sig_action[i].sa_flags = 0; + sigemptyset(&el->el_signal->sig_action[i].sa_mask); + } + + (void) sigprocmask(SIG_SETMASK, &oset, NULL); + + return 0; +} + + +/* sig_end(): + * Clear all signal stuff + */ +libedit_private void +sig_end(EditLine *el) +{ + + el_free(el->el_signal); + el->el_signal = NULL; +} + + +/* sig_set(): + * set all the signal handlers + */ +libedit_private void +sig_set(EditLine *el) +{ + size_t i; + sigset_t oset; + struct sigaction osa, nsa; + + nsa.sa_handler = sig_handler; + nsa.sa_flags = 0; + sigemptyset(&nsa.sa_mask); + + (void) sigprocmask(SIG_BLOCK, &el->el_signal->sig_set, &oset); + + for (i = 0; sighdl[i] != -1; i++) { + /* This could happen if we get interrupted */ + if (sigaction(sighdl[i], &nsa, &osa) != -1 && + osa.sa_handler != sig_handler) + el->el_signal->sig_action[i] = osa; + } + sel = el; + (void) sigprocmask(SIG_SETMASK, &oset, NULL); +} + + +/* sig_clr(): + * clear all the signal handlers + */ +libedit_private void +sig_clr(EditLine *el) +{ + size_t i; + sigset_t oset; + + (void) sigprocmask(SIG_BLOCK, &el->el_signal->sig_set, &oset); + + for (i = 0; sighdl[i] != -1; i++) + if (el->el_signal->sig_action[i].sa_handler != SIG_ERR) + (void)sigaction(sighdl[i], + &el->el_signal->sig_action[i], NULL); + + sel = NULL; /* we are going to die if the handler is + * called */ + (void)sigprocmask(SIG_SETMASK, &oset, NULL); +} diff --git a/src/thirdparty/libedit-3.1/src/sig.h b/src/thirdparty/libedit-3.1/src/sig.h new file mode 100644 index 000000000..5ee453fb6 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/sig.h @@ -0,0 +1,70 @@ +/* $NetBSD: sig.h,v 1.11 2016/05/09 21:46:56 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)sig.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * el.sig.h: Signal handling functions + */ +#ifndef _h_el_sig +#define _h_el_sig + +#include <signal.h> + +/* + * Define here all the signals we are going to handle + * The _DO macro is used to iterate in the source code + */ +#define ALLSIGS \ + _DO(SIGINT) \ + _DO(SIGTSTP) \ + _DO(SIGQUIT) \ + _DO(SIGHUP) \ + _DO(SIGTERM) \ + _DO(SIGCONT) \ + _DO(SIGWINCH) +#define ALLSIGSNO 7 + +typedef struct { + struct sigaction sig_action[ALLSIGSNO]; + sigset_t sig_set; + volatile sig_atomic_t sig_no; +} *el_signal_t; + +libedit_private void sig_end(EditLine*); +libedit_private int sig_init(EditLine*); +libedit_private void sig_set(EditLine*); +libedit_private void sig_clr(EditLine*); + +#endif /* _h_el_sig */ diff --git a/src/thirdparty/libedit-3.1/src/strlcat.c b/src/thirdparty/libedit-3.1/src/strlcat.c new file mode 100644 index 000000000..c1ef3a218 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/strlcat.c @@ -0,0 +1,90 @@ +/* $NetBSD: strlcat.c,v 1.4 2013/01/23 07:57:27 matt Exp $ */ +/* $OpenBSD: strlcat.c,v 1.10 2003/04/12 21:56:39 millert Exp $ */ + +/* + * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE + * FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "config.h" + +#if defined(LIBC_SCCS) && !defined(lint) +__RCSID("$NetBSD: strlcat.c,v 1.4 2013/01/23 07:57:27 matt Exp $"); +#endif /* LIBC_SCCS and not lint */ + +#include <sys/types.h> +#include <assert.h> +#include <string.h> + +#ifdef _LIBC +# ifdef __weak_alias +__weak_alias(strlcat, _strlcat) +# endif +#endif + +#if !HAVE_STRLCAT +/* + * Appends src to string dst of size siz (unlike strncat, siz is the + * full size of dst, not space left). At most siz-1 characters + * will be copied. Always NUL terminates (unless siz <= strlen(dst)). + * Returns strlen(src) + MIN(siz, strlen(initial dst)). + * If retval >= siz, truncation occurred. + */ +size_t +strlcat(char *dst, const char *src, size_t siz) +{ +#if 1 + char *d = dst; + const char *s = src; + size_t n = siz; + size_t dlen; + + _DIAGASSERT(dst != NULL); + _DIAGASSERT(src != NULL); + + /* Find the end of dst and adjust bytes left but don't go past end */ + while (n-- != 0 && *d != '\0') + d++; + dlen = d - dst; + n = siz - dlen; + + if (n == 0) + return(dlen + strlen(s)); + while (*s != '\0') { + if (n != 1) { + *d++ = *s; + n--; + } + s++; + } + *d = '\0'; + + return(dlen + (s - src)); /* count does not include NUL */ +#else + _DIAGASSERT(dst != NULL); + _DIAGASSERT(src != NULL); + + /* + * Find length of string in dst (maxing out at siz). + */ + size_t dlen = strnlen(dst, siz); + + /* + * Copy src into any remaining space in dst (truncating if needed). + * Note strlcpy(dst, src, 0) returns strlen(src). + */ + return dlen + strlcpy(dst + dlen, src, siz - dlen); +#endif +} +#endif diff --git a/src/thirdparty/libedit-3.1/src/strlcpy.c b/src/thirdparty/libedit-3.1/src/strlcpy.c new file mode 100644 index 000000000..8b3dfad21 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/strlcpy.c @@ -0,0 +1,70 @@ +/* $NetBSD: strlcpy.c,v 1.3 2007/06/04 18:19:27 christos Exp $ */ +/* $OpenBSD: strlcpy.c,v 1.7 2003/04/12 21:56:39 millert Exp $ */ + +/* + * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE + * FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "config.h" + +#if defined(LIBC_SCCS) && !defined(lint) +__RCSID("$NetBSD: strlcpy.c,v 1.3 2007/06/04 18:19:27 christos Exp $"); +#endif /* LIBC_SCCS and not lint */ + +#include <sys/types.h> +#include <assert.h> +#include <string.h> + +#ifdef _LIBC +# ifdef __weak_alias +__weak_alias(strlcpy, _strlcpy) +# endif +#endif + +#if !HAVE_STRLCPY +/* + * Copy src to string dst of size siz. At most siz-1 characters + * will be copied. Always NUL terminates (unless siz == 0). + * Returns strlen(src); if retval >= siz, truncation occurred. + */ +size_t +strlcpy(char *dst, const char *src, size_t siz) +{ + char *d = dst; + const char *s = src; + size_t n = siz; + + _DIAGASSERT(dst != NULL); + _DIAGASSERT(src != NULL); + + /* Copy as many bytes as will fit */ + if (n != 0 && --n != 0) { + do { + if ((*d++ = *s++) == 0) + break; + } while (--n != 0); + } + + /* Not enough room in dst, add NUL and traverse rest of src */ + if (n == 0) { + if (siz != 0) + *d = '\0'; /* NUL-terminate dst */ + while (*s++) + ; + } + + return(s - src - 1); /* count does not include NUL */ +} +#endif diff --git a/src/thirdparty/libedit-3.1/src/sys.h b/src/thirdparty/libedit-3.1/src/sys.h new file mode 100644 index 000000000..0511bad9a --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/sys.h @@ -0,0 +1,135 @@ +/* $NetBSD: sys.h,v 1.27 2016/05/09 21:46:56 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)sys.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * sys.h: Put all the stupid compiler and system dependencies here... + */ +#ifndef _h_sys +#define _h_sys + +#if defined(HAVE_SYS_TYPES_H) && defined(__sun) +#include <sys/types.h> +#endif + +#if !defined(__attribute__) && (defined(__cplusplus) || !defined(__GNUC__) || __GNUC__ == 2 && __GNUC_MINOR__ < 8) +# define __attribute__(A) +#endif + +#ifndef _DIAGASSERT +# define _DIAGASSERT(x) +#endif + +#ifndef __BEGIN_DECLS +# ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +# else +# define __BEGIN_DECLS +# define __END_DECLS +# endif +#endif + +/* If your compiler does not support this, define it to be empty. */ +#define libedit_private __attribute__((__visibility__("hidden"))) + +#ifndef __arraycount +# define __arraycount(a) (sizeof(a) / sizeof(*(a))) +#endif + +#ifndef _PTR_T +# define _PTR_T +typedef void *ptr_t; +#endif + +#ifndef _IOCTL_T +# define _IOCTL_T +typedef void *ioctl_t; +#endif + +#include <stdio.h> + +#ifndef HAVE_STRLCAT +//#define strlcat libedit_strlcat +size_t strlcat(char *dst, const char *src, size_t size); +#endif + +#ifndef HAVE_STRLCPY +//#define strlcpy libedit_strlcpy +size_t strlcpy(char *dst, const char *src, size_t size); +#endif + +#ifndef HAVE_GETLINE +//#define getline libedit_getline +ssize_t getline(char **line, size_t *len, FILE *fp); +#endif + +#ifndef HAVE_HAVE_REALLOCARR +int reallocarr(void *ptr, size_t number, size_t size); +#endif + +#ifndef HAVE_WCSDUP +wchar_t * wcsdup(const wchar_t *str); +#endif + +#ifndef _DIAGASSERT +#define _DIAGASSERT(x) +#endif + +#ifndef __RCSID +#define __RCSID(x) +#endif + +#ifndef HAVE_U_INT32_T +typedef unsigned int u_int32_t; +#endif + +#ifndef HAVE_SIZE_MAX +#define SIZE_MAX ((size_t)-1) +#endif + +#define REGEX /* Use POSIX.2 regular expression functions */ +#undef REGEXP /* Use UNIX V8 regular expression functions */ + +#if defined(__sun) +extern int tgetent(char *, const char *); +extern int tgetflag(char *); +extern int tgetnum(char *); +extern int tputs(const char *, int, int (*)(int)); +extern char* tgoto(const char*, int, int); +extern char* tgetstr(char*, char**); +#endif + +#endif /* _h_sys */ diff --git a/src/thirdparty/libedit-3.1/src/terminal.c b/src/thirdparty/libedit-3.1/src/terminal.c new file mode 100644 index 000000000..3bea1fc27 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/terminal.c @@ -0,0 +1,1666 @@ +/* $NetBSD: terminal.c,v 1.44 2021/09/09 20:24:07 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)term.c 8.2 (Berkeley) 4/30/95"; +#else +__RCSID("$NetBSD: terminal.c,v 1.44 2021/09/09 20:24:07 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * terminal.c: Editor/termcap-curses interface + * We have to declare a static variable here, since the + * termcap putchar routine does not take an argument! + */ +#include <sys/types.h> +#include <sys/ioctl.h> +#include <limits.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#ifdef HAVE_TERMCAP_H +#include <termcap.h> +#endif +#ifdef HAVE_CURSES_H +#include <curses.h> +#elif HAVE_NCURSES_H +#include <ncurses.h> +#endif + +/* Solaris's term.h does horrid things. */ +#if defined(HAVE_TERM_H) && !defined(__sun) && !defined(HAVE_TERMCAP_H) +#include <term.h> +#endif + +#ifdef _REENTRANT +#include <pthread.h> +#endif + +#include "el.h" +#include "fcns.h" + +/* + * IMPORTANT NOTE: these routines are allowed to look at the current screen + * and the current position assuming that it is correct. If this is not + * true, then the update will be WRONG! This is (should be) a valid + * assumption... + */ + +#define TC_BUFSIZE ((size_t)2048) + +#define GoodStr(a) (el->el_terminal.t_str[a] != NULL && \ + el->el_terminal.t_str[a][0] != '\0') +#define Str(a) el->el_terminal.t_str[a] +#define Val(a) el->el_terminal.t_val[a] + +static const struct termcapstr { + const char *name; + const char *long_name; +} tstr[] = { +#define T_al 0 + { "al", "add new blank line" }, +#define T_bl 1 + { "bl", "audible bell" }, +#define T_cd 2 + { "cd", "clear to bottom" }, +#define T_ce 3 + { "ce", "clear to end of line" }, +#define T_ch 4 + { "ch", "cursor to horiz pos" }, +#define T_cl 5 + { "cl", "clear screen" }, +#define T_dc 6 + { "dc", "delete a character" }, +#define T_dl 7 + { "dl", "delete a line" }, +#define T_dm 8 + { "dm", "start delete mode" }, +#define T_ed 9 + { "ed", "end delete mode" }, +#define T_ei 10 + { "ei", "end insert mode" }, +#define T_fs 11 + { "fs", "cursor from status line" }, +#define T_ho 12 + { "ho", "home cursor" }, +#define T_ic 13 + { "ic", "insert character" }, +#define T_im 14 + { "im", "start insert mode" }, +#define T_ip 15 + { "ip", "insert padding" }, +#define T_kd 16 + { "kd", "sends cursor down" }, +#define T_kl 17 + { "kl", "sends cursor left" }, +#define T_kr 18 + { "kr", "sends cursor right" }, +#define T_ku 19 + { "ku", "sends cursor up" }, +#define T_md 20 + { "md", "begin bold" }, +#define T_me 21 + { "me", "end attributes" }, +#define T_nd 22 + { "nd", "non destructive space" }, +#define T_se 23 + { "se", "end standout" }, +#define T_so 24 + { "so", "begin standout" }, +#define T_ts 25 + { "ts", "cursor to status line" }, +#define T_up 26 + { "up", "cursor up one" }, +#define T_us 27 + { "us", "begin underline" }, +#define T_ue 28 + { "ue", "end underline" }, +#define T_vb 29 + { "vb", "visible bell" }, +#define T_DC 30 + { "DC", "delete multiple chars" }, +#define T_DO 31 + { "DO", "cursor down multiple" }, +#define T_IC 32 + { "IC", "insert multiple chars" }, +#define T_LE 33 + { "LE", "cursor left multiple" }, +#define T_RI 34 + { "RI", "cursor right multiple" }, +#define T_UP 35 + { "UP", "cursor up multiple" }, +#define T_kh 36 + { "kh", "send cursor home" }, +#define T_at7 37 + { "@7", "send cursor end" }, +#define T_kD 38 + { "kD", "send cursor delete" }, +#define T_str 39 + { NULL, NULL } +}; + +static const struct termcapval { + const char *name; + const char *long_name; +} tval[] = { +#define T_am 0 + { "am", "has automatic margins" }, +#define T_pt 1 + { "pt", "has physical tabs" }, +#define T_li 2 + { "li", "Number of lines" }, +#define T_co 3 + { "co", "Number of columns" }, +#define T_km 4 + { "km", "Has meta key" }, +#define T_xt 5 + { "xt", "Tab chars destructive" }, +#define T_xn 6 + { "xn", "newline ignored at right margin" }, +#define T_MT 7 + { "MT", "Has meta key" }, /* XXX? */ +#define T_val 8 + { NULL, NULL, } +}; +/* do two or more of the attributes use me */ + +static void terminal_setflags(EditLine *); +static int terminal_rebuffer_display(EditLine *); +static void terminal_free_display(EditLine *); +static int terminal_alloc_display(EditLine *); +static void terminal_alloc(EditLine *, const struct termcapstr *, + const char *); +static void terminal_init_arrow(EditLine *); +static void terminal_reset_arrow(EditLine *); +static int terminal_putc(int); +static void terminal_tputs(EditLine *, const char *, int); + +#ifdef _REENTRANT +static pthread_mutex_t terminal_mutex = PTHREAD_MUTEX_INITIALIZER; +#endif +static FILE *terminal_outfile = NULL; + + +/* terminal_setflags(): + * Set the terminal capability flags + */ +static void +terminal_setflags(EditLine *el) +{ + EL_FLAGS = 0; + if (el->el_tty.t_tabs) + EL_FLAGS |= (Val(T_pt) && !Val(T_xt)) ? TERM_CAN_TAB : 0; + + EL_FLAGS |= (Val(T_km) || Val(T_MT)) ? TERM_HAS_META : 0; + EL_FLAGS |= GoodStr(T_ce) ? TERM_CAN_CEOL : 0; + EL_FLAGS |= (GoodStr(T_dc) || GoodStr(T_DC)) ? TERM_CAN_DELETE : 0; + EL_FLAGS |= (GoodStr(T_im) || GoodStr(T_ic) || GoodStr(T_IC)) ? + TERM_CAN_INSERT : 0; + EL_FLAGS |= (GoodStr(T_up) || GoodStr(T_UP)) ? TERM_CAN_UP : 0; + EL_FLAGS |= Val(T_am) ? TERM_HAS_AUTO_MARGINS : 0; + EL_FLAGS |= Val(T_xn) ? TERM_HAS_MAGIC_MARGINS : 0; + + if (GoodStr(T_me) && GoodStr(T_ue)) + EL_FLAGS |= (strcmp(Str(T_me), Str(T_ue)) == 0) ? + TERM_CAN_ME : 0; + else + EL_FLAGS &= ~TERM_CAN_ME; + if (GoodStr(T_me) && GoodStr(T_se)) + EL_FLAGS |= (strcmp(Str(T_me), Str(T_se)) == 0) ? + TERM_CAN_ME : 0; + + +#ifdef DEBUG_SCREEN + if (!EL_CAN_UP) { + (void) fprintf(el->el_errfile, + "WARNING: Your terminal cannot move up.\n"); + (void) fprintf(el->el_errfile, + "Editing may be odd for long lines.\n"); + } + if (!EL_CAN_CEOL) + (void) fprintf(el->el_errfile, "no clear EOL capability.\n"); + if (!EL_CAN_DELETE) + (void) fprintf(el->el_errfile, "no delete char capability.\n"); + if (!EL_CAN_INSERT) + (void) fprintf(el->el_errfile, "no insert char capability.\n"); +#endif /* DEBUG_SCREEN */ +} + +/* terminal_init(): + * Initialize the terminal stuff + */ +libedit_private int +terminal_init(EditLine *el) +{ + + el->el_terminal.t_buf = el_calloc(TC_BUFSIZE, + sizeof(*el->el_terminal.t_buf)); + if (el->el_terminal.t_buf == NULL) + goto fail1; + el->el_terminal.t_cap = el_calloc(TC_BUFSIZE, + sizeof(*el->el_terminal.t_cap)); + if (el->el_terminal.t_cap == NULL) + goto fail2; + el->el_terminal.t_fkey = el_calloc(A_K_NKEYS, + sizeof(*el->el_terminal.t_fkey)); + if (el->el_terminal.t_fkey == NULL) + goto fail3; + el->el_terminal.t_loc = 0; + el->el_terminal.t_str = el_calloc(T_str, + sizeof(*el->el_terminal.t_str)); + if (el->el_terminal.t_str == NULL) + goto fail4; + el->el_terminal.t_val = el_calloc(T_val, + sizeof(*el->el_terminal.t_val)); + if (el->el_terminal.t_val == NULL) + goto fail5; + (void) terminal_set(el, NULL); + terminal_init_arrow(el); + return 0; +fail5: + free(el->el_terminal.t_str); + el->el_terminal.t_str = NULL; +fail4: + free(el->el_terminal.t_fkey); + el->el_terminal.t_fkey = NULL; +fail3: + free(el->el_terminal.t_cap); + el->el_terminal.t_cap = NULL; +fail2: + free(el->el_terminal.t_buf); + el->el_terminal.t_buf = NULL; +fail1: + return -1; +} + +/* terminal_end(): + * Clean up the terminal stuff + */ +libedit_private void +terminal_end(EditLine *el) +{ + + el_free(el->el_terminal.t_buf); + el->el_terminal.t_buf = NULL; + el_free(el->el_terminal.t_cap); + el->el_terminal.t_cap = NULL; + el->el_terminal.t_loc = 0; + el_free(el->el_terminal.t_str); + el->el_terminal.t_str = NULL; + el_free(el->el_terminal.t_val); + el->el_terminal.t_val = NULL; + el_free(el->el_terminal.t_fkey); + el->el_terminal.t_fkey = NULL; + terminal_free_display(el); +} + + +/* terminal_alloc(): + * Maintain a string pool for termcap strings + */ +static void +terminal_alloc(EditLine *el, const struct termcapstr *t, const char *cap) +{ + char termbuf[TC_BUFSIZE]; + size_t tlen, clen; + char **tlist = el->el_terminal.t_str; + char **tmp, **str = &tlist[t - tstr]; + + (void) memset(termbuf, 0, sizeof(termbuf)); + if (cap == NULL || *cap == '\0') { + *str = NULL; + return; + } else + clen = strlen(cap); + + tlen = *str == NULL ? 0 : strlen(*str); + + /* + * New string is shorter; no need to allocate space + */ + if (clen <= tlen) { + if (*str) + (void) strcpy(*str, cap); /* XXX strcpy is safe */ + return; + } + /* + * New string is longer; see if we have enough space to append + */ + if (el->el_terminal.t_loc + 3 < TC_BUFSIZE) { + /* XXX strcpy is safe */ + (void) strcpy(*str = &el->el_terminal.t_buf[ + el->el_terminal.t_loc], cap); + el->el_terminal.t_loc += clen + 1; /* one for \0 */ + return; + } + /* + * Compact our buffer; no need to check compaction, cause we know it + * fits... + */ + tlen = 0; + for (tmp = tlist; tmp < &tlist[T_str]; tmp++) + if (*tmp != NULL && **tmp != '\0' && *tmp != *str) { + char *ptr; + + for (ptr = *tmp; *ptr != '\0'; termbuf[tlen++] = *ptr++) + continue; + termbuf[tlen++] = '\0'; + } + memcpy(el->el_terminal.t_buf, termbuf, TC_BUFSIZE); + el->el_terminal.t_loc = tlen; + if (el->el_terminal.t_loc + 3 >= TC_BUFSIZE) { + (void) fprintf(el->el_errfile, + "Out of termcap string space.\n"); + return; + } + /* XXX strcpy is safe */ + (void) strcpy(*str = &el->el_terminal.t_buf[el->el_terminal.t_loc], + cap); + el->el_terminal.t_loc += (size_t)clen + 1; /* one for \0 */ + return; +} + + +/* terminal_rebuffer_display(): + * Rebuffer the display after the screen changed size + */ +static int +terminal_rebuffer_display(EditLine *el) +{ + coord_t *c = &el->el_terminal.t_size; + + terminal_free_display(el); + + c->h = Val(T_co); + c->v = Val(T_li); + + if (terminal_alloc_display(el) == -1) + return -1; + return 0; +} + +static wint_t ** +terminal_alloc_buffer(EditLine *el) +{ + wint_t **b; + coord_t *c = &el->el_terminal.t_size; + int i; + + b = el_calloc((size_t)(c->v + 1), sizeof(*b)); + if (b == NULL) + return NULL; + for (i = 0; i < c->v; i++) { + b[i] = el_calloc((size_t)(c->h + 1), sizeof(**b)); + if (b[i] == NULL) { + while (--i >= 0) + el_free(b[i]); + el_free(b); + return NULL; + } + } + b[c->v] = NULL; + return b; +} + +static void +terminal_free_buffer(wint_t ***bp) +{ + wint_t **b; + wint_t **bufp; + + if (*bp == NULL) + return; + + b = *bp; + *bp = NULL; + + for (bufp = b; *bufp != NULL; bufp++) + el_free(*bufp); + el_free(b); +} + +/* terminal_alloc_display(): + * Allocate a new display. + */ +static int +terminal_alloc_display(EditLine *el) +{ + el->el_display = terminal_alloc_buffer(el); + if (el->el_display == NULL) + goto done; + el->el_vdisplay = terminal_alloc_buffer(el); + if (el->el_vdisplay == NULL) + goto done; + return 0; +done: + terminal_free_display(el); + return -1; +} + + +/* terminal_free_display(): + * Free the display buffers + */ +static void +terminal_free_display(EditLine *el) +{ + terminal_free_buffer(&el->el_display); + terminal_free_buffer(&el->el_vdisplay); +} + + +/* terminal_move_to_line(): + * move to line <where> (first line == 0) + * as efficiently as possible + */ +libedit_private void +terminal_move_to_line(EditLine *el, int where) +{ + int del; + + if (where == el->el_cursor.v) + return; + + if (where >= el->el_terminal.t_size.v) { +#ifdef DEBUG_SCREEN + (void) fprintf(el->el_errfile, + "%s: where is ridiculous: %d\r\n", __func__, where); +#endif /* DEBUG_SCREEN */ + return; + } + if ((del = where - el->el_cursor.v) > 0) { + /* + * We don't use DO here because some terminals are buggy + * if the destination is beyond bottom of the screen. + */ + for (; del > 0; del--) + terminal__putc(el, '\n'); + /* because the \n will become \r\n */ + el->el_cursor.h = 0; + } else { /* del < 0 */ + if (GoodStr(T_UP) && (-del > 1 || !GoodStr(T_up))) + terminal_tputs(el, tgoto(Str(T_UP), -del, -del), -del); + else { + if (GoodStr(T_up)) + for (; del < 0; del++) + terminal_tputs(el, Str(T_up), 1); + } + } + el->el_cursor.v = where;/* now where is here */ +} + + +/* terminal_move_to_char(): + * Move to the character position specified + */ +libedit_private void +terminal_move_to_char(EditLine *el, int where) +{ + int del, i; + +mc_again: + if (where == el->el_cursor.h) + return; + + if (where > el->el_terminal.t_size.h) { +#ifdef DEBUG_SCREEN + (void) fprintf(el->el_errfile, + "%s: where is ridiculous: %d\r\n", __func__, where); +#endif /* DEBUG_SCREEN */ + return; + } + if (!where) { /* if where is first column */ + terminal__putc(el, '\r'); /* do a CR */ + el->el_cursor.h = 0; + return; + } + del = where - el->el_cursor.h; + + if ((del < -4 || del > 4) && GoodStr(T_ch)) + /* go there directly */ + terminal_tputs(el, tgoto(Str(T_ch), where, where), where); + else { + if (del > 0) { /* moving forward */ + if ((del > 4) && GoodStr(T_RI)) + terminal_tputs(el, tgoto(Str(T_RI), del, del), + del); + else { + /* if I can do tabs, use them */ + if (EL_CAN_TAB) { + if ((el->el_cursor.h & 0370) != + (where & ~0x7) + && (el->el_display[ + el->el_cursor.v][where & 0370] != + MB_FILL_CHAR) + ) { + /* if not within tab stop */ + for (i = + (el->el_cursor.h & 0370); + i < (where & ~0x7); + i += 8) + terminal__putc(el, + '\t'); + /* then tab over */ + el->el_cursor.h = where & ~0x7; + } + } + /* + * it's usually cheaper to just write the + * chars, so we do. + */ + /* + * NOTE THAT terminal_overwrite() WILL CHANGE + * el->el_cursor.h!!! + */ + terminal_overwrite(el, + (wchar_t *)&el->el_display[ + el->el_cursor.v][el->el_cursor.h], + (size_t)(where - el->el_cursor.h)); + + } + } else { /* del < 0 := moving backward */ + if ((-del > 4) && GoodStr(T_LE)) + terminal_tputs(el, tgoto(Str(T_LE), -del, -del), + -del); + else { /* can't go directly there */ + /* + * if the "cost" is greater than the "cost" + * from col 0 + */ + if (EL_CAN_TAB ? + ((unsigned int)-del > + (((unsigned int) where >> 3) + + (where & 07))) + : (-del > where)) { + terminal__putc(el, '\r');/* do a CR */ + el->el_cursor.h = 0; + goto mc_again; /* and try again */ + } + for (i = 0; i < -del; i++) + terminal__putc(el, '\b'); + } + } + } + el->el_cursor.h = where; /* now where is here */ +} + + +/* terminal_overwrite(): + * Overstrike num characters + * Assumes MB_FILL_CHARs are present to keep the column count correct + */ +libedit_private void +terminal_overwrite(EditLine *el, const wchar_t *cp, size_t n) +{ + if (n == 0) + return; + + if (n > (size_t)el->el_terminal.t_size.h) { +#ifdef DEBUG_SCREEN + (void) fprintf(el->el_errfile, + "%s: n is ridiculous: %zu\r\n", __func__, n); +#endif /* DEBUG_SCREEN */ + return; + } + + do { + /* terminal__putc() ignores any MB_FILL_CHARs */ + terminal__putc(el, *cp++); + el->el_cursor.h++; + } while (--n); + + if (el->el_cursor.h >= el->el_terminal.t_size.h) { /* wrap? */ + if (EL_HAS_AUTO_MARGINS) { /* yes */ + el->el_cursor.h = 0; + if (el->el_cursor.v + 1 < el->el_terminal.t_size.v) + el->el_cursor.v++; + if (EL_HAS_MAGIC_MARGINS) { + /* force the wrap to avoid the "magic" + * situation */ + wchar_t c; + if ((c = el->el_display[el->el_cursor.v] + [el->el_cursor.h]) != '\0') { + terminal_overwrite(el, &c, (size_t)1); + while (el->el_display[el->el_cursor.v] + [el->el_cursor.h] == MB_FILL_CHAR) + el->el_cursor.h++; + } else { + terminal__putc(el, ' '); + el->el_cursor.h = 1; + } + } + } else /* no wrap, but cursor stays on screen */ + el->el_cursor.h = el->el_terminal.t_size.h - 1; + } +} + + +/* terminal_deletechars(): + * Delete num characters + */ +libedit_private void +terminal_deletechars(EditLine *el, int num) +{ + if (num <= 0) + return; + + if (!EL_CAN_DELETE) { +#ifdef DEBUG_EDIT + (void) fprintf(el->el_errfile, " ERROR: cannot delete \n"); +#endif /* DEBUG_EDIT */ + return; + } + if (num > el->el_terminal.t_size.h) { +#ifdef DEBUG_SCREEN + (void) fprintf(el->el_errfile, + "%s: num is ridiculous: %d\r\n", __func__, num); +#endif /* DEBUG_SCREEN */ + return; + } + if (GoodStr(T_DC)) /* if I have multiple delete */ + if ((num > 1) || !GoodStr(T_dc)) { /* if dc would be more + * expen. */ + terminal_tputs(el, tgoto(Str(T_DC), num, num), num); + return; + } + if (GoodStr(T_dm)) /* if I have delete mode */ + terminal_tputs(el, Str(T_dm), 1); + + if (GoodStr(T_dc)) /* else do one at a time */ + while (num--) + terminal_tputs(el, Str(T_dc), 1); + + if (GoodStr(T_ed)) /* if I have delete mode */ + terminal_tputs(el, Str(T_ed), 1); +} + + +/* terminal_insertwrite(): + * Puts terminal in insert character mode or inserts num + * characters in the line + * Assumes MB_FILL_CHARs are present to keep column count correct + */ +libedit_private void +terminal_insertwrite(EditLine *el, wchar_t *cp, int num) +{ + if (num <= 0) + return; + if (!EL_CAN_INSERT) { +#ifdef DEBUG_EDIT + (void) fprintf(el->el_errfile, " ERROR: cannot insert \n"); +#endif /* DEBUG_EDIT */ + return; + } + if (num > el->el_terminal.t_size.h) { +#ifdef DEBUG_SCREEN + (void) fprintf(el->el_errfile, + "%s: num is ridiculous: %d\r\n", __func__, num); +#endif /* DEBUG_SCREEN */ + return; + } + if (GoodStr(T_IC)) /* if I have multiple insert */ + if ((num > 1) || !GoodStr(T_ic)) { + /* if ic would be more expensive */ + terminal_tputs(el, tgoto(Str(T_IC), num, num), num); + terminal_overwrite(el, cp, (size_t)num); + /* this updates el_cursor.h */ + return; + } + if (GoodStr(T_im) && GoodStr(T_ei)) { /* if I have insert mode */ + terminal_tputs(el, Str(T_im), 1); + + el->el_cursor.h += num; + do + terminal__putc(el, *cp++); + while (--num); + + if (GoodStr(T_ip)) /* have to make num chars insert */ + terminal_tputs(el, Str(T_ip), 1); + + terminal_tputs(el, Str(T_ei), 1); + return; + } + do { + if (GoodStr(T_ic)) /* have to make num chars insert */ + terminal_tputs(el, Str(T_ic), 1); + + terminal__putc(el, *cp++); + + el->el_cursor.h++; + + if (GoodStr(T_ip)) /* have to make num chars insert */ + terminal_tputs(el, Str(T_ip), 1); + /* pad the inserted char */ + + } while (--num); +} + + +/* terminal_clear_EOL(): + * clear to end of line. There are num characters to clear + */ +libedit_private void +terminal_clear_EOL(EditLine *el, int num) +{ + int i; + + if (EL_CAN_CEOL && GoodStr(T_ce)) + terminal_tputs(el, Str(T_ce), 1); + else { + for (i = 0; i < num; i++) + terminal__putc(el, ' '); + el->el_cursor.h += num; /* have written num spaces */ + } +} + + +/* terminal_clear_screen(): + * Clear the screen + */ +libedit_private void +terminal_clear_screen(EditLine *el) +{ /* clear the whole screen and home */ + + if (GoodStr(T_cl)) + /* send the clear screen code */ + terminal_tputs(el, Str(T_cl), Val(T_li)); + else if (GoodStr(T_ho) && GoodStr(T_cd)) { + terminal_tputs(el, Str(T_ho), Val(T_li)); /* home */ + /* clear to bottom of screen */ + terminal_tputs(el, Str(T_cd), Val(T_li)); + } else { + terminal__putc(el, '\r'); + terminal__putc(el, '\n'); + } +} + + +/* terminal_beep(): + * Beep the way the terminal wants us + */ +libedit_private void +terminal_beep(EditLine *el) +{ + if (GoodStr(T_bl)) + /* what termcap says we should use */ + terminal_tputs(el, Str(T_bl), 1); + else + terminal__putc(el, '\007'); /* an ASCII bell; ^G */ +} + + +libedit_private void +terminal_get(EditLine *el, const char **term) +{ + *term = el->el_terminal.t_name; +} + + +/* terminal_set(): + * Read in the terminal capabilities from the requested terminal + */ +libedit_private int +terminal_set(EditLine *el, const char *term) +{ + int i; + char buf[TC_BUFSIZE]; + char *area; + const struct termcapstr *t; + sigset_t oset, nset; + int lins, cols; + + (void) sigemptyset(&nset); + (void) sigaddset(&nset, SIGWINCH); + (void) sigprocmask(SIG_BLOCK, &nset, &oset); + + area = buf; + + + if (term == NULL) + term = getenv("TERM"); + + if (!term || !term[0]) + term = "dumb"; + + if (strcmp(term, "emacs") == 0) + el->el_flags |= EDIT_DISABLED; + + (void) memset(el->el_terminal.t_cap, 0, TC_BUFSIZE); + + i = tgetent(el->el_terminal.t_cap, term); + + if (i <= 0) { + if (i == -1) + (void) fprintf(el->el_errfile, + "Cannot read termcap database;\n"); + else if (i == 0) + (void) fprintf(el->el_errfile, + "No entry for terminal type \"%s\";\n", term); + (void) fprintf(el->el_errfile, + "using dumb terminal settings.\n"); + Val(T_co) = 80; /* do a dumb terminal */ + Val(T_pt) = Val(T_km) = Val(T_li) = 0; + Val(T_xt) = Val(T_MT); + for (t = tstr; t->name != NULL; t++) + terminal_alloc(el, t, NULL); + } else { + /* auto/magic margins */ + Val(T_am) = tgetflag("am"); + Val(T_xn) = tgetflag("xn"); + /* Can we tab */ + Val(T_pt) = tgetflag("pt"); + Val(T_xt) = tgetflag("xt"); + /* do we have a meta? */ + Val(T_km) = tgetflag("km"); + Val(T_MT) = tgetflag("MT"); + /* Get the size */ + Val(T_co) = tgetnum("co"); + Val(T_li) = tgetnum("li"); + for (t = tstr; t->name != NULL; t++) { + /* XXX: some systems' tgetstr needs non const */ + terminal_alloc(el, t, tgetstr(strchr(t->name, *t->name), + &area)); + } + } + + if (Val(T_co) < 2) + Val(T_co) = 80; /* just in case */ + if (Val(T_li) < 1) + Val(T_li) = 24; + + el->el_terminal.t_size.v = Val(T_co); + el->el_terminal.t_size.h = Val(T_li); + + terminal_setflags(el); + + /* get the correct window size */ + (void) terminal_get_size(el, &lins, &cols); + if (terminal_change_size(el, lins, cols) == -1) + return -1; + (void) sigprocmask(SIG_SETMASK, &oset, NULL); + terminal_bind_arrow(el); + el->el_terminal.t_name = term; + return i <= 0 ? -1 : 0; +} + + +/* terminal_get_size(): + * Return the new window size in lines and cols, and + * true if the size was changed. + */ +libedit_private int +terminal_get_size(EditLine *el, int *lins, int *cols) +{ + + *cols = Val(T_co); + *lins = Val(T_li); + +#ifdef TIOCGWINSZ + { + struct winsize ws; + if (ioctl(el->el_infd, TIOCGWINSZ, &ws) != -1) { + if (ws.ws_col) + *cols = ws.ws_col; + if (ws.ws_row) + *lins = ws.ws_row; + } + } +#endif +#ifdef TIOCGSIZE + { + struct ttysize ts; + if (ioctl(el->el_infd, TIOCGSIZE, &ts) != -1) { + if (ts.ts_cols) + *cols = ts.ts_cols; + if (ts.ts_lines) + *lins = ts.ts_lines; + } + } +#endif + return Val(T_co) != *cols || Val(T_li) != *lins; +} + + +/* terminal_change_size(): + * Change the size of the terminal + */ +libedit_private int +terminal_change_size(EditLine *el, int lins, int cols) +{ + coord_t cur = el->el_cursor; + /* + * Just in case + */ + Val(T_co) = (cols < 2) ? 80 : cols; + Val(T_li) = (lins < 1) ? 24 : lins; + + /* re-make display buffers */ + if (terminal_rebuffer_display(el) == -1) + return -1; + re_clear_display(el); + el->el_cursor = cur; + return 0; +} + + +/* terminal_init_arrow(): + * Initialize the arrow key bindings from termcap + */ +static void +terminal_init_arrow(EditLine *el) +{ + funckey_t *arrow = el->el_terminal.t_fkey; + + arrow[A_K_DN].name = L"down"; + arrow[A_K_DN].key = T_kd; + arrow[A_K_DN].fun.cmd = ED_NEXT_HISTORY; + arrow[A_K_DN].type = XK_CMD; + + arrow[A_K_UP].name = L"up"; + arrow[A_K_UP].key = T_ku; + arrow[A_K_UP].fun.cmd = ED_PREV_HISTORY; + arrow[A_K_UP].type = XK_CMD; + + arrow[A_K_LT].name = L"left"; + arrow[A_K_LT].key = T_kl; + arrow[A_K_LT].fun.cmd = ED_PREV_CHAR; + arrow[A_K_LT].type = XK_CMD; + + arrow[A_K_RT].name = L"right"; + arrow[A_K_RT].key = T_kr; + arrow[A_K_RT].fun.cmd = ED_NEXT_CHAR; + arrow[A_K_RT].type = XK_CMD; + + arrow[A_K_HO].name = L"home"; + arrow[A_K_HO].key = T_kh; + arrow[A_K_HO].fun.cmd = ED_MOVE_TO_BEG; + arrow[A_K_HO].type = XK_CMD; + + arrow[A_K_EN].name = L"end"; + arrow[A_K_EN].key = T_at7; + arrow[A_K_EN].fun.cmd = ED_MOVE_TO_END; + arrow[A_K_EN].type = XK_CMD; + + arrow[A_K_DE].name = L"delete"; + arrow[A_K_DE].key = T_kD; + arrow[A_K_DE].fun.cmd = ED_DELETE_NEXT_CHAR; + arrow[A_K_DE].type = XK_CMD; +} + + +/* terminal_reset_arrow(): + * Reset arrow key bindings + */ +static void +terminal_reset_arrow(EditLine *el) +{ + funckey_t *arrow = el->el_terminal.t_fkey; + static const wchar_t strA[] = L"\033[A"; + static const wchar_t strB[] = L"\033[B"; + static const wchar_t strC[] = L"\033[C"; + static const wchar_t strD[] = L"\033[D"; + static const wchar_t strH[] = L"\033[H"; + static const wchar_t strF[] = L"\033[F"; + static const wchar_t stOA[] = L"\033OA"; + static const wchar_t stOB[] = L"\033OB"; + static const wchar_t stOC[] = L"\033OC"; + static const wchar_t stOD[] = L"\033OD"; + static const wchar_t stOH[] = L"\033OH"; + static const wchar_t stOF[] = L"\033OF"; + + keymacro_add(el, strA, &arrow[A_K_UP].fun, arrow[A_K_UP].type); + keymacro_add(el, strB, &arrow[A_K_DN].fun, arrow[A_K_DN].type); + keymacro_add(el, strC, &arrow[A_K_RT].fun, arrow[A_K_RT].type); + keymacro_add(el, strD, &arrow[A_K_LT].fun, arrow[A_K_LT].type); + keymacro_add(el, strH, &arrow[A_K_HO].fun, arrow[A_K_HO].type); + keymacro_add(el, strF, &arrow[A_K_EN].fun, arrow[A_K_EN].type); + keymacro_add(el, stOA, &arrow[A_K_UP].fun, arrow[A_K_UP].type); + keymacro_add(el, stOB, &arrow[A_K_DN].fun, arrow[A_K_DN].type); + keymacro_add(el, stOC, &arrow[A_K_RT].fun, arrow[A_K_RT].type); + keymacro_add(el, stOD, &arrow[A_K_LT].fun, arrow[A_K_LT].type); + keymacro_add(el, stOH, &arrow[A_K_HO].fun, arrow[A_K_HO].type); + keymacro_add(el, stOF, &arrow[A_K_EN].fun, arrow[A_K_EN].type); + + if (el->el_map.type != MAP_VI) + return; + keymacro_add(el, &strA[1], &arrow[A_K_UP].fun, arrow[A_K_UP].type); + keymacro_add(el, &strB[1], &arrow[A_K_DN].fun, arrow[A_K_DN].type); + keymacro_add(el, &strC[1], &arrow[A_K_RT].fun, arrow[A_K_RT].type); + keymacro_add(el, &strD[1], &arrow[A_K_LT].fun, arrow[A_K_LT].type); + keymacro_add(el, &strH[1], &arrow[A_K_HO].fun, arrow[A_K_HO].type); + keymacro_add(el, &strF[1], &arrow[A_K_EN].fun, arrow[A_K_EN].type); + keymacro_add(el, &stOA[1], &arrow[A_K_UP].fun, arrow[A_K_UP].type); + keymacro_add(el, &stOB[1], &arrow[A_K_DN].fun, arrow[A_K_DN].type); + keymacro_add(el, &stOC[1], &arrow[A_K_RT].fun, arrow[A_K_RT].type); + keymacro_add(el, &stOD[1], &arrow[A_K_LT].fun, arrow[A_K_LT].type); + keymacro_add(el, &stOH[1], &arrow[A_K_HO].fun, arrow[A_K_HO].type); + keymacro_add(el, &stOF[1], &arrow[A_K_EN].fun, arrow[A_K_EN].type); +} + + +/* terminal_set_arrow(): + * Set an arrow key binding + */ +libedit_private int +terminal_set_arrow(EditLine *el, const wchar_t *name, keymacro_value_t *fun, + int type) +{ + funckey_t *arrow = el->el_terminal.t_fkey; + int i; + + for (i = 0; i < A_K_NKEYS; i++) + if (wcscmp(name, arrow[i].name) == 0) { + arrow[i].fun = *fun; + arrow[i].type = type; + return 0; + } + return -1; +} + + +/* terminal_clear_arrow(): + * Clear an arrow key binding + */ +libedit_private int +terminal_clear_arrow(EditLine *el, const wchar_t *name) +{ + funckey_t *arrow = el->el_terminal.t_fkey; + int i; + + for (i = 0; i < A_K_NKEYS; i++) + if (wcscmp(name, arrow[i].name) == 0) { + arrow[i].type = XK_NOD; + return 0; + } + return -1; +} + + +/* terminal_print_arrow(): + * Print the arrow key bindings + */ +libedit_private void +terminal_print_arrow(EditLine *el, const wchar_t *name) +{ + int i; + funckey_t *arrow = el->el_terminal.t_fkey; + + for (i = 0; i < A_K_NKEYS; i++) + if (*name == '\0' || wcscmp(name, arrow[i].name) == 0) + if (arrow[i].type != XK_NOD) + keymacro_kprint(el, arrow[i].name, + &arrow[i].fun, arrow[i].type); +} + + +/* terminal_bind_arrow(): + * Bind the arrow keys + */ +libedit_private void +terminal_bind_arrow(EditLine *el) +{ + el_action_t *map; + const el_action_t *dmap; + int i, j; + char *p; + funckey_t *arrow = el->el_terminal.t_fkey; + + /* Check if the components needed are initialized */ + if (el->el_terminal.t_buf == NULL || el->el_map.key == NULL) + return; + + map = el->el_map.type == MAP_VI ? el->el_map.alt : el->el_map.key; + dmap = el->el_map.type == MAP_VI ? el->el_map.vic : el->el_map.emacs; + + terminal_reset_arrow(el); + + for (i = 0; i < A_K_NKEYS; i++) { + wchar_t wt_str[VISUAL_WIDTH_MAX]; + wchar_t *px; + size_t n; + + p = el->el_terminal.t_str[arrow[i].key]; + if (!p || !*p) + continue; + for (n = 0; n < VISUAL_WIDTH_MAX && p[n]; ++n) + wt_str[n] = p[n]; + while (n < VISUAL_WIDTH_MAX) + wt_str[n++] = '\0'; + px = wt_str; + j = (unsigned char) *p; + /* + * Assign the arrow keys only if: + * + * 1. They are multi-character arrow keys and the user + * has not re-assigned the leading character, or + * has re-assigned the leading character to be + * ED_SEQUENCE_LEAD_IN + * 2. They are single arrow keys pointing to an + * unassigned key. + */ + if (arrow[i].type == XK_NOD) + keymacro_clear(el, map, px); + else { + if (p[1] && (dmap[j] == map[j] || + map[j] == ED_SEQUENCE_LEAD_IN)) { + keymacro_add(el, px, &arrow[i].fun, + arrow[i].type); + map[j] = ED_SEQUENCE_LEAD_IN; + } else if (map[j] == ED_UNASSIGNED) { + keymacro_clear(el, map, px); + if (arrow[i].type == XK_CMD) + map[j] = arrow[i].fun.cmd; + else + keymacro_add(el, px, &arrow[i].fun, + arrow[i].type); + } + } + } +} + +/* terminal_putc(): + * Add a character + */ +static int +terminal_putc(int c) +{ + if (terminal_outfile == NULL) + return -1; + return fputc(c, terminal_outfile); +} + +static void +terminal_tputs(EditLine *el, const char *cap, int affcnt) +{ +#ifdef _REENTRANT + pthread_mutex_lock(&terminal_mutex); +#endif + terminal_outfile = el->el_outfile; + (void)tputs(cap, affcnt, terminal_putc); +#ifdef _REENTRANT + pthread_mutex_unlock(&terminal_mutex); +#endif +} + +/* terminal__putc(): + * Add a character + */ +libedit_private int +terminal__putc(EditLine *el, wint_t c) +{ + char buf[MB_LEN_MAX +1]; + ssize_t i; + if (c == MB_FILL_CHAR) + return 0; + if (c & EL_LITERAL) + return fputs(literal_get(el, c), el->el_outfile); + i = ct_encode_char(buf, (size_t)MB_LEN_MAX, c); + if (i <= 0) + return (int)i; + buf[i] = '\0'; + return fputs(buf, el->el_outfile); +} + +/* terminal__flush(): + * Flush output + */ +libedit_private void +terminal__flush(EditLine *el) +{ + + (void) fflush(el->el_outfile); +} + +/* terminal_writec(): + * Write the given character out, in a human readable form + */ +libedit_private void +terminal_writec(EditLine *el, wint_t c) +{ + wchar_t visbuf[VISUAL_WIDTH_MAX +1]; + ssize_t vcnt = ct_visual_char(visbuf, VISUAL_WIDTH_MAX, c); + if (vcnt < 0) + vcnt = 0; + visbuf[vcnt] = '\0'; + terminal_overwrite(el, visbuf, (size_t)vcnt); + terminal__flush(el); +} + + +/* terminal_telltc(): + * Print the current termcap characteristics + */ +libedit_private int +/*ARGSUSED*/ +terminal_telltc(EditLine *el, int argc __attribute__((__unused__)), + const wchar_t **argv __attribute__((__unused__))) +{ + const struct termcapstr *t; + char **ts; + + (void) fprintf(el->el_outfile, "\n\tYour terminal has the\n"); + (void) fprintf(el->el_outfile, "\tfollowing characteristics:\n\n"); + (void) fprintf(el->el_outfile, "\tIt has %d columns and %d lines\n", + Val(T_co), Val(T_li)); + (void) fprintf(el->el_outfile, + "\tIt has %s meta key\n", EL_HAS_META ? "a" : "no"); + (void) fprintf(el->el_outfile, + "\tIt can%suse tabs\n", EL_CAN_TAB ? " " : "not "); + (void) fprintf(el->el_outfile, "\tIt %s automatic margins\n", + EL_HAS_AUTO_MARGINS ? "has" : "does not have"); + if (EL_HAS_AUTO_MARGINS) + (void) fprintf(el->el_outfile, "\tIt %s magic margins\n", + EL_HAS_MAGIC_MARGINS ? "has" : "does not have"); + + for (t = tstr, ts = el->el_terminal.t_str; t->name != NULL; t++, ts++) { + const char *ub; + if (*ts && **ts) { + ub = ct_encode_string(ct_visual_string( + ct_decode_string(*ts, &el->el_scratch), + &el->el_visual), &el->el_scratch); + } else { + ub = "(empty)"; + } + (void) fprintf(el->el_outfile, "\t%25s (%s) == %s\n", + t->long_name, t->name, ub); + } + (void) fputc('\n', el->el_outfile); + return 0; +} + + +/* terminal_settc(): + * Change the current terminal characteristics + */ +libedit_private int +/*ARGSUSED*/ +terminal_settc(EditLine *el, int argc __attribute__((__unused__)), + const wchar_t **argv) +{ + const struct termcapstr *ts; + const struct termcapval *tv; + char what[8], how[8]; + long i; + char *ep; + + if (argv == NULL || argv[1] == NULL || argv[2] == NULL) + return -1; + + strlcpy(what, ct_encode_string(argv[1], &el->el_scratch), sizeof(what)); + strlcpy(how, ct_encode_string(argv[2], &el->el_scratch), sizeof(how)); + + /* + * Do the strings first + */ + for (ts = tstr; ts->name != NULL; ts++) + if (strcmp(ts->name, what) == 0) + break; + + if (ts->name != NULL) { + terminal_alloc(el, ts, how); + terminal_setflags(el); + return 0; + } + /* + * Do the numeric ones second + */ + for (tv = tval; tv->name != NULL; tv++) + if (strcmp(tv->name, what) == 0) + break; + + if (tv->name == NULL) { + (void) fprintf(el->el_errfile, + "%ls: Bad capability `%s'.\n", argv[0], what); + return -1; + } + + if (tv == &tval[T_pt] || tv == &tval[T_km] || + tv == &tval[T_am] || tv == &tval[T_xn]) { + /* + * Booleans + */ + if (strcmp(how, "yes") == 0) + el->el_terminal.t_val[tv - tval] = 1; + else if (strcmp(how, "no") == 0) + el->el_terminal.t_val[tv - tval] = 0; + else { + (void) fprintf(el->el_errfile, + "%ls: Bad value `%s'.\n", argv[0], how); + return -1; + } + terminal_setflags(el); + return 0; + } + + /* + * Numerics + */ + i = strtol(how, &ep, 10); + if (*ep != '\0') { + (void) fprintf(el->el_errfile, + "%ls: Bad value `%s'.\n", argv[0], how); + return -1; + } + el->el_terminal.t_val[tv - tval] = (int) i; + i = 0; + if (tv == &tval[T_co]) { + el->el_terminal.t_size.v = Val(T_co); + i++; + } else if (tv == &tval[T_li]) { + el->el_terminal.t_size.h = Val(T_li); + i++; + } + if (i && terminal_change_size(el, Val(T_li), Val(T_co)) == -1) + return -1; + return 0; +} + + +/* terminal_gettc(): + * Get the current terminal characteristics + */ +libedit_private int +/*ARGSUSED*/ +terminal_gettc(EditLine *el, int argc __attribute__((__unused__)), char **argv) +{ + const struct termcapstr *ts; + const struct termcapval *tv; + char *what; + void *how; + + if (argv == NULL || argv[1] == NULL || argv[2] == NULL) + return -1; + + what = argv[1]; + how = argv[2]; + + /* + * Do the strings first + */ + for (ts = tstr; ts->name != NULL; ts++) + if (strcmp(ts->name, what) == 0) + break; + + if (ts->name != NULL) { + *(char **)how = el->el_terminal.t_str[ts - tstr]; + return 0; + } + /* + * Do the numeric ones second + */ + for (tv = tval; tv->name != NULL; tv++) + if (strcmp(tv->name, what) == 0) + break; + + if (tv->name == NULL) + return -1; + + if (tv == &tval[T_pt] || tv == &tval[T_km] || + tv == &tval[T_am] || tv == &tval[T_xn]) { + static char yes[] = "yes"; + static char no[] = "no"; + if (el->el_terminal.t_val[tv - tval]) + *(char **)how = yes; + else + *(char **)how = no; + return 0; + } else { + *(int *)how = el->el_terminal.t_val[tv - tval]; + return 0; + } +} + +/* terminal_echotc(): + * Print the termcap string out with variable substitution + */ +libedit_private int +/*ARGSUSED*/ +terminal_echotc(EditLine *el, int argc __attribute__((__unused__)), + const wchar_t **argv) +{ + char *cap, *scap; + wchar_t *ep; + int arg_need, arg_cols, arg_rows; + int verbose = 0, silent = 0; + char *area; + static const char fmts[] = "%s\n", fmtd[] = "%d\n"; + const struct termcapstr *t; + char buf[TC_BUFSIZE]; + long i; + + area = buf; + + if (argv == NULL || argv[1] == NULL) + return -1; + argv++; + + if (argv[0][0] == '-') { + switch (argv[0][1]) { + case 'v': + verbose = 1; + break; + case 's': + silent = 1; + break; + default: + /* stderror(ERR_NAME | ERR_TCUSAGE); */ + break; + } + argv++; + } + if (!*argv || *argv[0] == '\0') + return 0; + if (wcscmp(*argv, L"tabs") == 0) { + (void) fprintf(el->el_outfile, fmts, EL_CAN_TAB ? "yes" : "no"); + return 0; + } else if (wcscmp(*argv, L"meta") == 0) { + (void) fprintf(el->el_outfile, fmts, Val(T_km) ? "yes" : "no"); + return 0; + } else if (wcscmp(*argv, L"xn") == 0) { + (void) fprintf(el->el_outfile, fmts, EL_HAS_MAGIC_MARGINS ? + "yes" : "no"); + return 0; + } else if (wcscmp(*argv, L"am") == 0) { + (void) fprintf(el->el_outfile, fmts, EL_HAS_AUTO_MARGINS ? + "yes" : "no"); + return 0; + } else if (wcscmp(*argv, L"baud") == 0) { + (void) fprintf(el->el_outfile, fmtd, (int)el->el_tty.t_speed); + return 0; + } else if (wcscmp(*argv, L"rows") == 0 || + wcscmp(*argv, L"lines") == 0) { + (void) fprintf(el->el_outfile, fmtd, Val(T_li)); + return 0; + } else if (wcscmp(*argv, L"cols") == 0) { + (void) fprintf(el->el_outfile, fmtd, Val(T_co)); + return 0; + } + /* + * Try to use our local definition first + */ + scap = NULL; + for (t = tstr; t->name != NULL; t++) + if (strcmp(t->name, + ct_encode_string(*argv, &el->el_scratch)) == 0) { + scap = el->el_terminal.t_str[t - tstr]; + break; + } + if (t->name == NULL) { + /* XXX: some systems' tgetstr needs non const */ + scap = tgetstr(ct_encode_string(*argv, &el->el_scratch), &area); + } + if (!scap || scap[0] == '\0') { + if (!silent) + (void) fprintf(el->el_errfile, + "echotc: Termcap parameter `%ls' not found.\n", + *argv); + return -1; + } + /* + * Count home many values we need for this capability. + */ + for (cap = scap, arg_need = 0; *cap; cap++) + if (*cap == '%') + switch (*++cap) { + case 'd': + case '2': + case '3': + case '.': + case '+': + arg_need++; + break; + case '%': + case '>': + case 'i': + case 'r': + case 'n': + case 'B': + case 'D': + break; + default: + /* + * hpux has lot's of them... + */ + if (verbose) + (void) fprintf(el->el_errfile, + "echotc: Warning: unknown termcap %% `%c'.\n", + *cap); + /* This is bad, but I won't complain */ + break; + } + + switch (arg_need) { + case 0: + argv++; + if (*argv && *argv[0]) { + if (!silent) + (void) fprintf(el->el_errfile, + "echotc: Warning: Extra argument `%ls'.\n", + *argv); + return -1; + } + terminal_tputs(el, scap, 1); + break; + case 1: + argv++; + if (!*argv || *argv[0] == '\0') { + if (!silent) + (void) fprintf(el->el_errfile, + "echotc: Warning: Missing argument.\n"); + return -1; + } + arg_cols = 0; + i = wcstol(*argv, &ep, 10); + if (*ep != '\0' || i < 0) { + if (!silent) + (void) fprintf(el->el_errfile, + "echotc: Bad value `%ls' for rows.\n", + *argv); + return -1; + } + arg_rows = (int) i; + argv++; + if (*argv && *argv[0]) { + if (!silent) + (void) fprintf(el->el_errfile, + "echotc: Warning: Extra argument `%ls" + "'.\n", *argv); + return -1; + } + terminal_tputs(el, tgoto(scap, arg_cols, arg_rows), 1); + break; + default: + /* This is wrong, but I will ignore it... */ + if (verbose) + (void) fprintf(el->el_errfile, + "echotc: Warning: Too many required arguments (%d).\n", + arg_need); + /* FALLTHROUGH */ + case 2: + argv++; + if (!*argv || *argv[0] == '\0') { + if (!silent) + (void) fprintf(el->el_errfile, + "echotc: Warning: Missing argument.\n"); + return -1; + } + i = wcstol(*argv, &ep, 10); + if (*ep != '\0' || i < 0) { + if (!silent) + (void) fprintf(el->el_errfile, + "echotc: Bad value `%ls' for cols.\n", + *argv); + return -1; + } + arg_cols = (int) i; + argv++; + if (!*argv || *argv[0] == '\0') { + if (!silent) + (void) fprintf(el->el_errfile, + "echotc: Warning: Missing argument.\n"); + return -1; + } + i = wcstol(*argv, &ep, 10); + if (*ep != '\0' || i < 0) { + if (!silent) + (void) fprintf(el->el_errfile, + "echotc: Bad value `%ls' for rows.\n", + *argv); + return -1; + } + arg_rows = (int) i; + if (*ep != '\0') { + if (!silent) + (void) fprintf(el->el_errfile, + "echotc: Bad value `%ls'.\n", *argv); + return -1; + } + argv++; + if (*argv && *argv[0]) { + if (!silent) + (void) fprintf(el->el_errfile, + "echotc: Warning: Extra argument `%ls" + "'.\n", *argv); + return -1; + } + terminal_tputs(el, tgoto(scap, arg_cols, arg_rows), arg_rows); + break; + } + return 0; +} diff --git a/src/thirdparty/libedit-3.1/src/terminal.h b/src/thirdparty/libedit-3.1/src/terminal.h new file mode 100644 index 000000000..e45836954 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/terminal.h @@ -0,0 +1,134 @@ +/* $NetBSD: terminal.h,v 1.9 2016/05/09 21:46:56 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)term.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * el.term.h: Termcap header + */ +#ifndef _h_el_terminal +#define _h_el_terminal + +typedef struct { /* Symbolic function key bindings */ + const wchar_t *name; /* name of the key */ + int key; /* Index in termcap table */ + keymacro_value_t fun; /* Function bound to it */ + int type; /* Type of function */ +} funckey_t; + +typedef struct { + const char *t_name; /* the terminal name */ + coord_t t_size; /* # lines and cols */ + int t_flags; +#define TERM_CAN_INSERT 0x001 /* Has insert cap */ +#define TERM_CAN_DELETE 0x002 /* Has delete cap */ +#define TERM_CAN_CEOL 0x004 /* Has CEOL cap */ +#define TERM_CAN_TAB 0x008 /* Can use tabs */ +#define TERM_CAN_ME 0x010 /* Can turn all attrs. */ +#define TERM_CAN_UP 0x020 /* Can move up */ +#define TERM_HAS_META 0x040 /* Has a meta key */ +#define TERM_HAS_AUTO_MARGINS 0x080 /* Has auto margins */ +#define TERM_HAS_MAGIC_MARGINS 0x100 /* Has magic margins */ + char *t_buf; /* Termcap buffer */ + size_t t_loc; /* location used */ + char **t_str; /* termcap strings */ + int *t_val; /* termcap values */ + char *t_cap; /* Termcap buffer */ + funckey_t *t_fkey; /* Array of keys */ +} el_terminal_t; + +/* + * fKey indexes + */ +#define A_K_DN 0 +#define A_K_UP 1 +#define A_K_LT 2 +#define A_K_RT 3 +#define A_K_HO 4 +#define A_K_EN 5 +#define A_K_DE 6 +#define A_K_NKEYS 7 + +#ifdef __sun +extern int tgetent(char *, const char *); +extern int tgetflag(char *); +extern int tgetnum(char *); +extern int tputs(const char *, int, int (*)(int)); +extern char* tgoto(const char*, int, int); +extern char* tgetstr(char*, char**); +#endif + +libedit_private void terminal_move_to_line(EditLine *, int); +libedit_private void terminal_move_to_char(EditLine *, int); +libedit_private void terminal_clear_EOL(EditLine *, int); +libedit_private void terminal_overwrite(EditLine *, const wchar_t *, size_t); +libedit_private void terminal_insertwrite(EditLine *, wchar_t *, int); +libedit_private void terminal_deletechars(EditLine *, int); +libedit_private void terminal_clear_screen(EditLine *); +libedit_private void terminal_beep(EditLine *); +libedit_private int terminal_change_size(EditLine *, int, int); +libedit_private int terminal_get_size(EditLine *, int *, int *); +libedit_private int terminal_init(EditLine *); +libedit_private void terminal_bind_arrow(EditLine *); +libedit_private void terminal_print_arrow(EditLine *, const wchar_t *); +libedit_private int terminal_clear_arrow(EditLine *, const wchar_t *); +libedit_private int terminal_set_arrow(EditLine *, const wchar_t *, + keymacro_value_t *, int); +libedit_private void terminal_end(EditLine *); +libedit_private void terminal_get(EditLine *, const char **); +libedit_private int terminal_set(EditLine *, const char *); +libedit_private int terminal_settc(EditLine *, int, const wchar_t **); +libedit_private int terminal_gettc(EditLine *, int, char **); +libedit_private int terminal_telltc(EditLine *, int, const wchar_t **); +libedit_private int terminal_echotc(EditLine *, int, const wchar_t **); +libedit_private void terminal_writec(EditLine *, wint_t); +libedit_private int terminal__putc(EditLine *, wint_t); +libedit_private void terminal__flush(EditLine *); + +/* + * Easy access macros + */ +#define EL_FLAGS (el)->el_terminal.t_flags + +#define EL_CAN_INSERT (EL_FLAGS & TERM_CAN_INSERT) +#define EL_CAN_DELETE (EL_FLAGS & TERM_CAN_DELETE) +#define EL_CAN_CEOL (EL_FLAGS & TERM_CAN_CEOL) +#define EL_CAN_TAB (EL_FLAGS & TERM_CAN_TAB) +#define EL_CAN_ME (EL_FLAGS & TERM_CAN_ME) +#define EL_CAN_UP (EL_FLAGS & TERM_CAN_UP) +#define EL_HAS_META (EL_FLAGS & TERM_HAS_META) +#define EL_HAS_AUTO_MARGINS (EL_FLAGS & TERM_HAS_AUTO_MARGINS) +#define EL_HAS_MAGIC_MARGINS (EL_FLAGS & TERM_HAS_MAGIC_MARGINS) + +#endif /* _h_el_terminal */ diff --git a/src/thirdparty/libedit-3.1/src/tokenizer.c b/src/thirdparty/libedit-3.1/src/tokenizer.c new file mode 100644 index 000000000..5efb43275 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/tokenizer.c @@ -0,0 +1,469 @@ +/* $NetBSD: tokenizer.c,v 1.28 2016/04/11 18:56:31 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef NARROWCHAR +#include "config.h" +#endif + +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)tokenizer.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: tokenizer.c,v 1.28 2016/04/11 18:56:31 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* We build this file twice, once as NARROW, once as WIDE. */ +/* + * tokenize.c: Bourne shell like tokenizer + */ +#include <stdlib.h> +#include <string.h> + +#include "histedit.h" + +typedef enum { + Q_none, Q_single, Q_double, Q_one, Q_doubleone +} quote_t; + +#define TOK_KEEP 1 +#define TOK_EAT 2 + +#define WINCR 20 +#define AINCR 10 + +#define IFS STR("\t \n") + +#define tok_malloc(a) malloc(a) +#define tok_free(a) free(a) +#define tok_realloc(a, b) realloc(a, b) + +#ifdef NARROWCHAR +#define Char char +#define FUN(prefix, rest) prefix ## _ ## rest +#define TYPE(type) type +#define STR(x) x +#define Strchr(s, c) strchr(s, c) +#define tok_strdup(s) strdup(s) +#else +#define Char wchar_t +#define FUN(prefix, rest) prefix ## _w ## rest +#define TYPE(type) type ## W +#define STR(x) L ## x +#define Strchr(s, c) wcschr(s, c) +#define tok_strdup(s) wcsdup(s) +#endif + +struct TYPE(tokenizer) { + Char *ifs; /* In field separator */ + size_t argc, amax; /* Current and maximum number of args */ + Char **argv; /* Argument list */ + Char *wptr, *wmax; /* Space and limit on the word buffer */ + Char *wstart; /* Beginning of next word */ + Char *wspace; /* Space of word buffer */ + quote_t quote; /* Quoting state */ + int flags; /* flags; */ +}; + + +static void FUN(tok,finish)(TYPE(Tokenizer) *); + + +/* FUN(tok,finish)(): + * Finish a word in the tokenizer. + */ +static void +FUN(tok,finish)(TYPE(Tokenizer) *tok) +{ + + *tok->wptr = '\0'; + if ((tok->flags & TOK_KEEP) || tok->wptr != tok->wstart) { + tok->argv[tok->argc++] = tok->wstart; + tok->argv[tok->argc] = NULL; + tok->wstart = ++tok->wptr; + } + tok->flags &= ~TOK_KEEP; +} + + +/* FUN(tok,init)(): + * Initialize the tokenizer + */ +TYPE(Tokenizer) * +FUN(tok,init)(const Char *ifs) +{ + TYPE(Tokenizer) *tok = tok_malloc(sizeof(*tok)); + + if (tok == NULL) + return NULL; + tok->ifs = tok_strdup(ifs ? ifs : IFS); + if (tok->ifs == NULL) { + tok_free(tok); + return NULL; + } + tok->argc = 0; + tok->amax = AINCR; + tok->argv = tok_malloc(sizeof(*tok->argv) * tok->amax); + if (tok->argv == NULL) { + tok_free(tok->ifs); + tok_free(tok); + return NULL; + } + tok->argv[0] = NULL; + tok->wspace = tok_malloc(WINCR * sizeof(*tok->wspace)); + if (tok->wspace == NULL) { + tok_free(tok->argv); + tok_free(tok->ifs); + tok_free(tok); + return NULL; + } + tok->wmax = tok->wspace + WINCR; + tok->wstart = tok->wspace; + tok->wptr = tok->wspace; + tok->flags = 0; + tok->quote = Q_none; + + return tok; +} + + +/* FUN(tok,reset)(): + * Reset the tokenizer + */ +void +FUN(tok,reset)(TYPE(Tokenizer) *tok) +{ + + tok->argc = 0; + tok->wstart = tok->wspace; + tok->wptr = tok->wspace; + tok->flags = 0; + tok->quote = Q_none; +} + + +/* FUN(tok,end)(): + * Clean up + */ +void +FUN(tok,end)(TYPE(Tokenizer) *tok) +{ + + tok_free(tok->ifs); + tok_free(tok->wspace); + tok_free(tok->argv); + tok_free(tok); +} + + + +/* FUN(tok,line)(): + * Bourne shell (sh(1)) like tokenizing + * Arguments: + * tok current tokenizer state (setup with FUN(tok,init)()) + * line line to parse + * Returns: + * -1 Internal error + * 3 Quoted return + * 2 Unmatched double quote + * 1 Unmatched single quote + * 0 Ok + * Modifies (if return value is 0): + * argc number of arguments + * argv argument array + * cursorc if !NULL, argv element containing cursor + * cursorv if !NULL, offset in argv[cursorc] of cursor + */ +int +FUN(tok,line)(TYPE(Tokenizer) *tok, const TYPE(LineInfo) *line, + int *argc, const Char ***argv, int *cursorc, int *cursoro) +{ + const Char *ptr; + int cc, co; + + cc = co = -1; + ptr = line->buffer; + for (ptr = line->buffer; ;ptr++) { + if (ptr >= line->lastchar) + ptr = STR(""); + if (ptr == line->cursor) { + cc = (int)tok->argc; + co = (int)(tok->wptr - tok->wstart); + } + switch (*ptr) { + case '\'': + tok->flags |= TOK_KEEP; + tok->flags &= ~TOK_EAT; + switch (tok->quote) { + case Q_none: + tok->quote = Q_single; /* Enter single quote + * mode */ + break; + + case Q_single: /* Exit single quote mode */ + tok->quote = Q_none; + break; + + case Q_one: /* Quote this ' */ + tok->quote = Q_none; + *tok->wptr++ = *ptr; + break; + + case Q_double: /* Stay in double quote mode */ + *tok->wptr++ = *ptr; + break; + + case Q_doubleone: /* Quote this ' */ + tok->quote = Q_double; + *tok->wptr++ = *ptr; + break; + + default: + return -1; + } + break; + + case '"': + tok->flags &= ~TOK_EAT; + tok->flags |= TOK_KEEP; + switch (tok->quote) { + case Q_none: /* Enter double quote mode */ + tok->quote = Q_double; + break; + + case Q_double: /* Exit double quote mode */ + tok->quote = Q_none; + break; + + case Q_one: /* Quote this " */ + tok->quote = Q_none; + *tok->wptr++ = *ptr; + break; + + case Q_single: /* Stay in single quote mode */ + *tok->wptr++ = *ptr; + break; + + case Q_doubleone: /* Quote this " */ + tok->quote = Q_double; + *tok->wptr++ = *ptr; + break; + + default: + return -1; + } + break; + + case '\\': + tok->flags |= TOK_KEEP; + tok->flags &= ~TOK_EAT; + switch (tok->quote) { + case Q_none: /* Quote next character */ + tok->quote = Q_one; + break; + + case Q_double: /* Quote next character */ + tok->quote = Q_doubleone; + break; + + case Q_one: /* Quote this, restore state */ + *tok->wptr++ = *ptr; + tok->quote = Q_none; + break; + + case Q_single: /* Stay in single quote mode */ + *tok->wptr++ = *ptr; + break; + + case Q_doubleone: /* Quote this \ */ + tok->quote = Q_double; + *tok->wptr++ = *ptr; + break; + + default: + return -1; + } + break; + + case '\n': + tok->flags &= ~TOK_EAT; + switch (tok->quote) { + case Q_none: + goto tok_line_outok; + + case Q_single: + case Q_double: + *tok->wptr++ = *ptr; /* Add the return */ + break; + + case Q_doubleone: /* Back to double, eat the '\n' */ + tok->flags |= TOK_EAT; + tok->quote = Q_double; + break; + + case Q_one: /* No quote, more eat the '\n' */ + tok->flags |= TOK_EAT; + tok->quote = Q_none; + break; + + default: + return 0; + } + break; + + case '\0': + switch (tok->quote) { + case Q_none: + /* Finish word and return */ + if (tok->flags & TOK_EAT) { + tok->flags &= ~TOK_EAT; + return 3; + } + goto tok_line_outok; + + case Q_single: + return 1; + + case Q_double: + return 2; + + case Q_doubleone: + tok->quote = Q_double; + *tok->wptr++ = *ptr; + break; + + case Q_one: + tok->quote = Q_none; + *tok->wptr++ = *ptr; + break; + + default: + return -1; + } + break; + + default: + tok->flags &= ~TOK_EAT; + switch (tok->quote) { + case Q_none: + if (Strchr(tok->ifs, *ptr) != NULL) + FUN(tok,finish)(tok); + else + *tok->wptr++ = *ptr; + break; + + case Q_single: + case Q_double: + *tok->wptr++ = *ptr; + break; + + + case Q_doubleone: + *tok->wptr++ = '\\'; + tok->quote = Q_double; + *tok->wptr++ = *ptr; + break; + + case Q_one: + tok->quote = Q_none; + *tok->wptr++ = *ptr; + break; + + default: + return -1; + + } + break; + } + + if (tok->wptr >= tok->wmax - 4) { + size_t size = (size_t)(tok->wmax - tok->wspace + WINCR); + Char *s = tok_realloc(tok->wspace, + size * sizeof(*s)); + if (s == NULL) + return -1; + + if (s != tok->wspace) { + size_t i; + for (i = 0; i < tok->argc; i++) { + tok->argv[i] = + (tok->argv[i] - tok->wspace) + s; + } + tok->wptr = (tok->wptr - tok->wspace) + s; + tok->wstart = (tok->wstart - tok->wspace) + s; + tok->wspace = s; + } + tok->wmax = s + size; + } + if (tok->argc >= tok->amax - 4) { + Char **p; + tok->amax += AINCR; + p = tok_realloc(tok->argv, tok->amax * sizeof(*p)); + if (p == NULL) { + tok->amax -= AINCR; + return -1; + } + tok->argv = p; + } + } + tok_line_outok: + if (cc == -1 && co == -1) { + cc = (int)tok->argc; + co = (int)(tok->wptr - tok->wstart); + } + if (cursorc != NULL) + *cursorc = cc; + if (cursoro != NULL) + *cursoro = co; + FUN(tok,finish)(tok); + *argv = (const Char **)tok->argv; + *argc = (int)tok->argc; + return 0; +} + +/* FUN(tok,str)(): + * Simpler version of tok_line, taking a NUL terminated line + * and splitting into words, ignoring cursor state. + */ +int +FUN(tok,str)(TYPE(Tokenizer) *tok, const Char *line, int *argc, + const Char ***argv) +{ + TYPE(LineInfo) li; + + memset(&li, 0, sizeof(li)); + li.buffer = line; + li.cursor = li.lastchar = Strchr(line, '\0'); + return FUN(tok,line)(tok, &li, argc, argv, NULL, NULL); +} diff --git a/src/thirdparty/libedit-3.1/src/tokenizern.c b/src/thirdparty/libedit-3.1/src/tokenizern.c new file mode 100644 index 000000000..5846b6064 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/tokenizern.c @@ -0,0 +1,3 @@ +#include "config.h" +#define NARROWCHAR +#include "tokenizer.c" diff --git a/src/thirdparty/libedit-3.1/src/tty.c b/src/thirdparty/libedit-3.1/src/tty.c new file mode 100644 index 000000000..b96c9a53c --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/tty.c @@ -0,0 +1,1372 @@ +/* $NetBSD: tty.c,v 1.70 2021/07/14 07:47:23 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)tty.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: tty.c,v 1.70 2021/07/14 07:47:23 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * tty.c: tty interface stuff + */ +#include <assert.h> +#include <errno.h> +#include <stdlib.h> /* for abort */ +#include <string.h> +#include <strings.h> /* for ffs */ +#include <unistd.h> /* for isatty */ + +#include "el.h" +#include "fcns.h" +#include "parse.h" + +typedef struct ttymodes_t { + const char *m_name; + unsigned int m_value; + int m_type; +} ttymodes_t; + +typedef struct ttymap_t { + wint_t nch, och; /* Internal and termio rep of chars */ + el_action_t bind[3]; /* emacs, vi, and vi-cmd */ +} ttymap_t; + + +static const ttyperm_t ttyperm = { + { + {"iflag:", ICRNL, (INLCR | IGNCR)}, + {"oflag:", (OPOST | ONLCR), ONLRET}, + {"cflag:", 0, 0}, + {"lflag:", (ISIG | ICANON | ECHO | ECHOE | ECHOCTL | IEXTEN), + (NOFLSH | ECHONL | EXTPROC | FLUSHO)}, + {"chars:", 0, 0}, + }, + { + {"iflag:", (INLCR | ICRNL), IGNCR}, + {"oflag:", (OPOST | ONLCR), ONLRET}, + {"cflag:", 0, 0}, + {"lflag:", ISIG, + (NOFLSH | ICANON | ECHO | ECHOK | ECHONL | EXTPROC | IEXTEN | FLUSHO)}, + {"chars:", (C_SH(C_MIN) | C_SH(C_TIME) | C_SH(C_SWTCH) | C_SH(C_DSWTCH) | + C_SH(C_SUSP) | C_SH(C_DSUSP) | C_SH(C_EOL) | C_SH(C_DISCARD) | + C_SH(C_PGOFF) | C_SH(C_PAGE) | C_SH(C_STATUS)), 0} + }, + { + {"iflag:", 0, IXON | IXOFF | INLCR | ICRNL}, + {"oflag:", 0, 0}, + {"cflag:", 0, 0}, + {"lflag:", 0, ISIG | IEXTEN}, + {"chars:", 0, 0}, + } +}; + +static const ttychar_t ttychar = { + { + CINTR, CQUIT, CERASE, CKILL, + CEOF, CEOL, CEOL2, CSWTCH, + CDSWTCH, CERASE2, CSTART, CSTOP, + CWERASE, CSUSP, CDSUSP, CREPRINT, + CDISCARD, CLNEXT, CSTATUS, CPAGE, + CPGOFF, CKILL2, CBRK, CMIN, + CTIME + }, + { + CINTR, CQUIT, CERASE, CKILL, + _POSIX_VDISABLE, _POSIX_VDISABLE, _POSIX_VDISABLE, _POSIX_VDISABLE, + _POSIX_VDISABLE, CERASE2, CSTART, CSTOP, + _POSIX_VDISABLE, CSUSP, _POSIX_VDISABLE, _POSIX_VDISABLE, + CDISCARD, _POSIX_VDISABLE, _POSIX_VDISABLE, _POSIX_VDISABLE, + _POSIX_VDISABLE, _POSIX_VDISABLE, _POSIX_VDISABLE, 1, + 0 + }, + { + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0 + } +}; + +static const ttymap_t tty_map[] = { +#ifdef VERASE + {C_ERASE, VERASE, + {EM_DELETE_PREV_CHAR, VI_DELETE_PREV_CHAR, ED_PREV_CHAR}}, +#endif /* VERASE */ +#ifdef VERASE2 + {C_ERASE2, VERASE2, + {EM_DELETE_PREV_CHAR, VI_DELETE_PREV_CHAR, ED_PREV_CHAR}}, +#endif /* VERASE2 */ +#ifdef VKILL + {C_KILL, VKILL, + {EM_KILL_LINE, VI_KILL_LINE_PREV, ED_UNASSIGNED}}, +#endif /* VKILL */ +#ifdef VKILL2 + {C_KILL2, VKILL2, + {EM_KILL_LINE, VI_KILL_LINE_PREV, ED_UNASSIGNED}}, +#endif /* VKILL2 */ +#ifdef VEOF + {C_EOF, VEOF, + {EM_DELETE_OR_LIST, VI_LIST_OR_EOF, ED_UNASSIGNED}}, +#endif /* VEOF */ +#ifdef VWERASE + {C_WERASE, VWERASE, + {ED_DELETE_PREV_WORD, ED_DELETE_PREV_WORD, ED_PREV_WORD}}, +#endif /* VWERASE */ +#ifdef VREPRINT + {C_REPRINT, VREPRINT, + {ED_REDISPLAY, ED_INSERT, ED_REDISPLAY}}, +#endif /* VREPRINT */ +#ifdef VLNEXT + {C_LNEXT, VLNEXT, + {ED_QUOTED_INSERT, ED_QUOTED_INSERT, ED_UNASSIGNED}}, +#endif /* VLNEXT */ + {(wint_t)-1, (wint_t)-1, + {ED_UNASSIGNED, ED_UNASSIGNED, ED_UNASSIGNED}} +}; + +static const ttymodes_t ttymodes[] = { +#ifdef IGNBRK + {"ignbrk", IGNBRK, MD_INP}, +#endif /* IGNBRK */ +#ifdef BRKINT + {"brkint", BRKINT, MD_INP}, +#endif /* BRKINT */ +#ifdef IGNPAR + {"ignpar", IGNPAR, MD_INP}, +#endif /* IGNPAR */ +#ifdef PARMRK + {"parmrk", PARMRK, MD_INP}, +#endif /* PARMRK */ +#ifdef INPCK + {"inpck", INPCK, MD_INP}, +#endif /* INPCK */ +#ifdef ISTRIP + {"istrip", ISTRIP, MD_INP}, +#endif /* ISTRIP */ +#ifdef INLCR + {"inlcr", INLCR, MD_INP}, +#endif /* INLCR */ +#ifdef IGNCR + {"igncr", IGNCR, MD_INP}, +#endif /* IGNCR */ +#ifdef ICRNL + {"icrnl", ICRNL, MD_INP}, +#endif /* ICRNL */ +#ifdef IUCLC + {"iuclc", IUCLC, MD_INP}, +#endif /* IUCLC */ +#ifdef IXON + {"ixon", IXON, MD_INP}, +#endif /* IXON */ +#ifdef IXANY + {"ixany", IXANY, MD_INP}, +#endif /* IXANY */ +#ifdef IXOFF + {"ixoff", IXOFF, MD_INP}, +#endif /* IXOFF */ +#ifdef IMAXBEL + {"imaxbel", IMAXBEL, MD_INP}, +#endif /* IMAXBEL */ + +#ifdef OPOST + {"opost", OPOST, MD_OUT}, +#endif /* OPOST */ +#ifdef OLCUC + {"olcuc", OLCUC, MD_OUT}, +#endif /* OLCUC */ +#ifdef ONLCR + {"onlcr", ONLCR, MD_OUT}, +#endif /* ONLCR */ +#ifdef OCRNL + {"ocrnl", OCRNL, MD_OUT}, +#endif /* OCRNL */ +#ifdef ONOCR + {"onocr", ONOCR, MD_OUT}, +#endif /* ONOCR */ +#ifdef ONOEOT + {"onoeot", ONOEOT, MD_OUT}, +#endif /* ONOEOT */ +#ifdef ONLRET + {"onlret", ONLRET, MD_OUT}, +#endif /* ONLRET */ +#ifdef OFILL + {"ofill", OFILL, MD_OUT}, +#endif /* OFILL */ +#ifdef OFDEL + {"ofdel", OFDEL, MD_OUT}, +#endif /* OFDEL */ +#ifdef NLDLY + {"nldly", NLDLY, MD_OUT}, +#endif /* NLDLY */ +#ifdef CRDLY + {"crdly", CRDLY, MD_OUT}, +#endif /* CRDLY */ +#ifdef TABDLY + {"tabdly", TABDLY, MD_OUT}, +#endif /* TABDLY */ +#ifdef XTABS + {"xtabs", XTABS, MD_OUT}, +#endif /* XTABS */ +#ifdef BSDLY + {"bsdly", BSDLY, MD_OUT}, +#endif /* BSDLY */ +#ifdef VTDLY + {"vtdly", VTDLY, MD_OUT}, +#endif /* VTDLY */ +#ifdef FFDLY + {"ffdly", FFDLY, MD_OUT}, +#endif /* FFDLY */ +#ifdef PAGEOUT + {"pageout", PAGEOUT, MD_OUT}, +#endif /* PAGEOUT */ +#ifdef WRAP + {"wrap", WRAP, MD_OUT}, +#endif /* WRAP */ + +#ifdef CIGNORE + {"cignore", CIGNORE, MD_CTL}, +#endif /* CBAUD */ +#ifdef CBAUD + {"cbaud", CBAUD, MD_CTL}, +#endif /* CBAUD */ +#ifdef CSTOPB + {"cstopb", CSTOPB, MD_CTL}, +#endif /* CSTOPB */ +#ifdef CREAD + {"cread", CREAD, MD_CTL}, +#endif /* CREAD */ +#ifdef PARENB + {"parenb", PARENB, MD_CTL}, +#endif /* PARENB */ +#ifdef PARODD + {"parodd", PARODD, MD_CTL}, +#endif /* PARODD */ +#ifdef HUPCL + {"hupcl", HUPCL, MD_CTL}, +#endif /* HUPCL */ +#ifdef CLOCAL + {"clocal", CLOCAL, MD_CTL}, +#endif /* CLOCAL */ +#ifdef LOBLK + {"loblk", LOBLK, MD_CTL}, +#endif /* LOBLK */ +#ifdef CIBAUD + {"cibaud", CIBAUD, MD_CTL}, +#endif /* CIBAUD */ +#ifdef CRTSCTS +#ifdef CCTS_OFLOW + {"ccts_oflow", CCTS_OFLOW, MD_CTL}, +#else + {"crtscts", CRTSCTS, MD_CTL}, +#endif /* CCTS_OFLOW */ +#endif /* CRTSCTS */ +#ifdef CRTS_IFLOW + {"crts_iflow", CRTS_IFLOW, MD_CTL}, +#endif /* CRTS_IFLOW */ +#ifdef CDTRCTS + {"cdtrcts", CDTRCTS, MD_CTL}, +#endif /* CDTRCTS */ +#ifdef MDMBUF + {"mdmbuf", MDMBUF, MD_CTL}, +#endif /* MDMBUF */ +#ifdef RCV1EN + {"rcv1en", RCV1EN, MD_CTL}, +#endif /* RCV1EN */ +#ifdef XMT1EN + {"xmt1en", XMT1EN, MD_CTL}, +#endif /* XMT1EN */ + +#ifdef ISIG + {"isig", ISIG, MD_LIN}, +#endif /* ISIG */ +#ifdef ICANON + {"icanon", ICANON, MD_LIN}, +#endif /* ICANON */ +#ifdef XCASE + {"xcase", XCASE, MD_LIN}, +#endif /* XCASE */ +#ifdef ECHO + {"echo", ECHO, MD_LIN}, +#endif /* ECHO */ +#ifdef ECHOE + {"echoe", ECHOE, MD_LIN}, +#endif /* ECHOE */ +#ifdef ECHOK + {"echok", ECHOK, MD_LIN}, +#endif /* ECHOK */ +#ifdef ECHONL + {"echonl", ECHONL, MD_LIN}, +#endif /* ECHONL */ +#ifdef NOFLSH + {"noflsh", NOFLSH, MD_LIN}, +#endif /* NOFLSH */ +#ifdef TOSTOP + {"tostop", TOSTOP, MD_LIN}, +#endif /* TOSTOP */ +#ifdef ECHOCTL + {"echoctl", ECHOCTL, MD_LIN}, +#endif /* ECHOCTL */ +#ifdef ECHOPRT + {"echoprt", ECHOPRT, MD_LIN}, +#endif /* ECHOPRT */ +#ifdef ECHOKE + {"echoke", ECHOKE, MD_LIN}, +#endif /* ECHOKE */ +#ifdef DEFECHO + {"defecho", DEFECHO, MD_LIN}, +#endif /* DEFECHO */ +#ifdef FLUSHO + {"flusho", FLUSHO, MD_LIN}, +#endif /* FLUSHO */ +#ifdef PENDIN + {"pendin", PENDIN, MD_LIN}, +#endif /* PENDIN */ +#ifdef IEXTEN + {"iexten", IEXTEN, MD_LIN}, +#endif /* IEXTEN */ +#ifdef NOKERNINFO + {"nokerninfo", NOKERNINFO, MD_LIN}, +#endif /* NOKERNINFO */ +#ifdef ALTWERASE + {"altwerase", ALTWERASE, MD_LIN}, +#endif /* ALTWERASE */ +#ifdef EXTPROC + {"extproc", EXTPROC, MD_LIN}, +#endif /* EXTPROC */ + +#if defined(VINTR) + {"intr", C_SH(C_INTR), MD_CHAR}, +#endif /* VINTR */ +#if defined(VQUIT) + {"quit", C_SH(C_QUIT), MD_CHAR}, +#endif /* VQUIT */ +#if defined(VERASE) + {"erase", C_SH(C_ERASE), MD_CHAR}, +#endif /* VERASE */ +#if defined(VKILL) + {"kill", C_SH(C_KILL), MD_CHAR}, +#endif /* VKILL */ +#if defined(VEOF) + {"eof", C_SH(C_EOF), MD_CHAR}, +#endif /* VEOF */ +#if defined(VEOL) + {"eol", C_SH(C_EOL), MD_CHAR}, +#endif /* VEOL */ +#if defined(VEOL2) + {"eol2", C_SH(C_EOL2), MD_CHAR}, +#endif /* VEOL2 */ +#if defined(VSWTCH) + {"swtch", C_SH(C_SWTCH), MD_CHAR}, +#endif /* VSWTCH */ +#if defined(VDSWTCH) + {"dswtch", C_SH(C_DSWTCH), MD_CHAR}, +#endif /* VDSWTCH */ +#if defined(VERASE2) + {"erase2", C_SH(C_ERASE2), MD_CHAR}, +#endif /* VERASE2 */ +#if defined(VSTART) + {"start", C_SH(C_START), MD_CHAR}, +#endif /* VSTART */ +#if defined(VSTOP) + {"stop", C_SH(C_STOP), MD_CHAR}, +#endif /* VSTOP */ +#if defined(VWERASE) + {"werase", C_SH(C_WERASE), MD_CHAR}, +#endif /* VWERASE */ +#if defined(VSUSP) + {"susp", C_SH(C_SUSP), MD_CHAR}, +#endif /* VSUSP */ +#if defined(VDSUSP) + {"dsusp", C_SH(C_DSUSP), MD_CHAR}, +#endif /* VDSUSP */ +#if defined(VREPRINT) + {"reprint", C_SH(C_REPRINT), MD_CHAR}, +#endif /* VREPRINT */ +#if defined(VDISCARD) + {"discard", C_SH(C_DISCARD), MD_CHAR}, +#endif /* VDISCARD */ +#if defined(VLNEXT) + {"lnext", C_SH(C_LNEXT), MD_CHAR}, +#endif /* VLNEXT */ +#if defined(VSTATUS) + {"status", C_SH(C_STATUS), MD_CHAR}, +#endif /* VSTATUS */ +#if defined(VPAGE) + {"page", C_SH(C_PAGE), MD_CHAR}, +#endif /* VPAGE */ +#if defined(VPGOFF) + {"pgoff", C_SH(C_PGOFF), MD_CHAR}, +#endif /* VPGOFF */ +#if defined(VKILL2) + {"kill2", C_SH(C_KILL2), MD_CHAR}, +#endif /* VKILL2 */ +#if defined(VBRK) + {"brk", C_SH(C_BRK), MD_CHAR}, +#endif /* VBRK */ +#if defined(VMIN) + {"min", C_SH(C_MIN), MD_CHAR}, +#endif /* VMIN */ +#if defined(VTIME) + {"time", C_SH(C_TIME), MD_CHAR}, +#endif /* VTIME */ + {NULL, 0, -1}, +}; + + + +#define tty__gettabs(td) ((((td)->c_oflag & TAB3) == TAB3) ? 0 : 1) +#define tty__geteightbit(td) (((td)->c_cflag & CSIZE) == CS8) +#define tty__cooked_mode(td) ((td)->c_lflag & ICANON) + +static int tty_getty(EditLine *, struct termios *); +static int tty_setty(EditLine *, int, const struct termios *); +static int tty__getcharindex(int); +static void tty__getchar(struct termios *, unsigned char *); +static void tty__setchar(struct termios *, unsigned char *); +static speed_t tty__getspeed(struct termios *); +static int tty_setup(EditLine *); +static void tty_setup_flags(EditLine *, struct termios *, int); + +#define t_qu t_ts + +/* tty_getty(): + * Wrapper for tcgetattr to handle EINTR + */ +static int +tty_getty(EditLine *el, struct termios *t) +{ + int rv; + while ((rv = tcgetattr(el->el_infd, t)) == -1 && errno == EINTR) + continue; + return rv; +} + +/* tty_setty(): + * Wrapper for tcsetattr to handle EINTR + */ +static int +tty_setty(EditLine *el, int action, const struct termios *t) +{ + int rv; + while ((rv = tcsetattr(el->el_infd, action, t)) == -1 && errno == EINTR) + continue; + return rv; +} + +/* tty_setup(): + * Get the tty parameters and initialize the editing state + */ +static int +tty_setup(EditLine *el) +{ + int rst = (el->el_flags & NO_RESET) == 0; + + if (el->el_flags & EDIT_DISABLED) + return 0; + + if (el->el_tty.t_initialized) + return -1; + + if (!isatty(el->el_outfd)) { +#ifdef DEBUG_TTY + (void) fprintf(el->el_errfile, "%s: isatty: %s\n", __func__, + strerror(errno)); +#endif /* DEBUG_TTY */ + return -1; + } + if (tty_getty(el, &el->el_tty.t_or) == -1) { +#ifdef DEBUG_TTY + (void) fprintf(el->el_errfile, "%s: tty_getty: %s\n", __func__, + strerror(errno)); +#endif /* DEBUG_TTY */ + return -1; + } + el->el_tty.t_ts = el->el_tty.t_ex = el->el_tty.t_ed = el->el_tty.t_or; + + el->el_tty.t_speed = tty__getspeed(&el->el_tty.t_ex); + el->el_tty.t_tabs = tty__gettabs(&el->el_tty.t_ex); + el->el_tty.t_eight = tty__geteightbit(&el->el_tty.t_ex); + + tty_setup_flags(el, &el->el_tty.t_ex, EX_IO); + + /* + * Reset the tty chars to reasonable defaults + * If they are disabled, then enable them. + */ + if (rst) { + if (tty__cooked_mode(&el->el_tty.t_ts)) { + tty__getchar(&el->el_tty.t_ts, el->el_tty.t_c[TS_IO]); + /* + * Don't affect CMIN and CTIME for the editor mode + */ + for (rst = 0; rst < C_NCC - 2; rst++) + if (el->el_tty.t_c[TS_IO][rst] != + el->el_tty.t_vdisable + && el->el_tty.t_c[ED_IO][rst] != + el->el_tty.t_vdisable) + el->el_tty.t_c[ED_IO][rst] = + el->el_tty.t_c[TS_IO][rst]; + for (rst = 0; rst < C_NCC; rst++) + if (el->el_tty.t_c[TS_IO][rst] != + el->el_tty.t_vdisable) + el->el_tty.t_c[EX_IO][rst] = + el->el_tty.t_c[TS_IO][rst]; + } + tty__setchar(&el->el_tty.t_ex, el->el_tty.t_c[EX_IO]); + if (tty_setty(el, TCSADRAIN, &el->el_tty.t_ex) == -1) { +#ifdef DEBUG_TTY + (void) fprintf(el->el_errfile, "%s: tty_setty: %s\n", + __func__, strerror(errno)); +#endif /* DEBUG_TTY */ + return -1; + } + } + + tty_setup_flags(el, &el->el_tty.t_ed, ED_IO); + + tty__setchar(&el->el_tty.t_ed, el->el_tty.t_c[ED_IO]); + tty_bind_char(el, 1); + el->el_tty.t_initialized = 1; + return 0; +} + +libedit_private int +tty_init(EditLine *el) +{ + + el->el_tty.t_mode = EX_IO; + el->el_tty.t_vdisable = _POSIX_VDISABLE; + el->el_tty.t_initialized = 0; + (void) memcpy(el->el_tty.t_t, ttyperm, sizeof(ttyperm_t)); + (void) memcpy(el->el_tty.t_c, ttychar, sizeof(ttychar_t)); + return tty_setup(el); +} + + +/* tty_end(): + * Restore the tty to its original settings + */ +libedit_private void +/*ARGSUSED*/ +tty_end(EditLine *el, int how) +{ + if (el->el_flags & EDIT_DISABLED) + return; + + if (!el->el_tty.t_initialized) + return; + + if (tty_setty(el, how, &el->el_tty.t_or) == -1) + { +#ifdef DEBUG_TTY + (void) fprintf(el->el_errfile, + "%s: tty_setty: %s\n", __func__, strerror(errno)); +#endif /* DEBUG_TTY */ + } +} + + +/* tty__getspeed(): + * Get the tty speed + */ +static speed_t +tty__getspeed(struct termios *td) +{ + speed_t spd; + + if ((spd = cfgetispeed(td)) == 0) + spd = cfgetospeed(td); + return spd; +} + +/* tty__getspeed(): + * Return the index of the asked char in the c_cc array + */ +static int +tty__getcharindex(int i) +{ + switch (i) { +#ifdef VINTR + case C_INTR: + return VINTR; +#endif /* VINTR */ +#ifdef VQUIT + case C_QUIT: + return VQUIT; +#endif /* VQUIT */ +#ifdef VERASE + case C_ERASE: + return VERASE; +#endif /* VERASE */ +#ifdef VKILL + case C_KILL: + return VKILL; +#endif /* VKILL */ +#ifdef VEOF + case C_EOF: + return VEOF; +#endif /* VEOF */ +#ifdef VEOL + case C_EOL: + return VEOL; +#endif /* VEOL */ +#ifdef VEOL2 + case C_EOL2: + return VEOL2; +#endif /* VEOL2 */ +#ifdef VSWTCH + case C_SWTCH: + return VSWTCH; +#endif /* VSWTCH */ +#ifdef VDSWTCH + case C_DSWTCH: + return VDSWTCH; +#endif /* VDSWTCH */ +#ifdef VERASE2 + case C_ERASE2: + return VERASE2; +#endif /* VERASE2 */ +#ifdef VSTART + case C_START: + return VSTART; +#endif /* VSTART */ +#ifdef VSTOP + case C_STOP: + return VSTOP; +#endif /* VSTOP */ +#ifdef VWERASE + case C_WERASE: + return VWERASE; +#endif /* VWERASE */ +#ifdef VSUSP + case C_SUSP: + return VSUSP; +#endif /* VSUSP */ +#ifdef VDSUSP + case C_DSUSP: + return VDSUSP; +#endif /* VDSUSP */ +#ifdef VREPRINT + case C_REPRINT: + return VREPRINT; +#endif /* VREPRINT */ +#ifdef VDISCARD + case C_DISCARD: + return VDISCARD; +#endif /* VDISCARD */ +#ifdef VLNEXT + case C_LNEXT: + return VLNEXT; +#endif /* VLNEXT */ +#ifdef VSTATUS + case C_STATUS: + return VSTATUS; +#endif /* VSTATUS */ +#ifdef VPAGE + case C_PAGE: + return VPAGE; +#endif /* VPAGE */ +#ifdef VPGOFF + case C_PGOFF: + return VPGOFF; +#endif /* VPGOFF */ +#ifdef VKILL2 + case C_KILL2: + return VKILL2; +#endif /* KILL2 */ +#ifdef VMIN + case C_MIN: + return VMIN; +#endif /* VMIN */ +#ifdef VTIME + case C_TIME: + return VTIME; +#endif /* VTIME */ + default: + return -1; + } +} + +/* tty__getchar(): + * Get the tty characters + */ +static void +tty__getchar(struct termios *td, unsigned char *s) +{ + +#ifdef VINTR + s[C_INTR] = td->c_cc[VINTR]; +#endif /* VINTR */ +#ifdef VQUIT + s[C_QUIT] = td->c_cc[VQUIT]; +#endif /* VQUIT */ +#ifdef VERASE + s[C_ERASE] = td->c_cc[VERASE]; +#endif /* VERASE */ +#ifdef VKILL + s[C_KILL] = td->c_cc[VKILL]; +#endif /* VKILL */ +#ifdef VEOF + s[C_EOF] = td->c_cc[VEOF]; +#endif /* VEOF */ +#ifdef VEOL + s[C_EOL] = td->c_cc[VEOL]; +#endif /* VEOL */ +#ifdef VEOL2 + s[C_EOL2] = td->c_cc[VEOL2]; +#endif /* VEOL2 */ +#ifdef VSWTCH + s[C_SWTCH] = td->c_cc[VSWTCH]; +#endif /* VSWTCH */ +#ifdef VDSWTCH + s[C_DSWTCH] = td->c_cc[VDSWTCH]; +#endif /* VDSWTCH */ +#ifdef VERASE2 + s[C_ERASE2] = td->c_cc[VERASE2]; +#endif /* VERASE2 */ +#ifdef VSTART + s[C_START] = td->c_cc[VSTART]; +#endif /* VSTART */ +#ifdef VSTOP + s[C_STOP] = td->c_cc[VSTOP]; +#endif /* VSTOP */ +#ifdef VWERASE + s[C_WERASE] = td->c_cc[VWERASE]; +#endif /* VWERASE */ +#ifdef VSUSP + s[C_SUSP] = td->c_cc[VSUSP]; +#endif /* VSUSP */ +#ifdef VDSUSP + s[C_DSUSP] = td->c_cc[VDSUSP]; +#endif /* VDSUSP */ +#ifdef VREPRINT + s[C_REPRINT] = td->c_cc[VREPRINT]; +#endif /* VREPRINT */ +#ifdef VDISCARD + s[C_DISCARD] = td->c_cc[VDISCARD]; +#endif /* VDISCARD */ +#ifdef VLNEXT + s[C_LNEXT] = td->c_cc[VLNEXT]; +#endif /* VLNEXT */ +#ifdef VSTATUS + s[C_STATUS] = td->c_cc[VSTATUS]; +#endif /* VSTATUS */ +#ifdef VPAGE + s[C_PAGE] = td->c_cc[VPAGE]; +#endif /* VPAGE */ +#ifdef VPGOFF + s[C_PGOFF] = td->c_cc[VPGOFF]; +#endif /* VPGOFF */ +#ifdef VKILL2 + s[C_KILL2] = td->c_cc[VKILL2]; +#endif /* KILL2 */ +#ifdef VMIN + s[C_MIN] = td->c_cc[VMIN]; +#endif /* VMIN */ +#ifdef VTIME + s[C_TIME] = td->c_cc[VTIME]; +#endif /* VTIME */ +} /* tty__getchar */ + + +/* tty__setchar(): + * Set the tty characters + */ +static void +tty__setchar(struct termios *td, unsigned char *s) +{ + +#ifdef VINTR + td->c_cc[VINTR] = s[C_INTR]; +#endif /* VINTR */ +#ifdef VQUIT + td->c_cc[VQUIT] = s[C_QUIT]; +#endif /* VQUIT */ +#ifdef VERASE + td->c_cc[VERASE] = s[C_ERASE]; +#endif /* VERASE */ +#ifdef VKILL + td->c_cc[VKILL] = s[C_KILL]; +#endif /* VKILL */ +#ifdef VEOF + td->c_cc[VEOF] = s[C_EOF]; +#endif /* VEOF */ +#ifdef VEOL + td->c_cc[VEOL] = s[C_EOL]; +#endif /* VEOL */ +#ifdef VEOL2 + td->c_cc[VEOL2] = s[C_EOL2]; +#endif /* VEOL2 */ +#ifdef VSWTCH + td->c_cc[VSWTCH] = s[C_SWTCH]; +#endif /* VSWTCH */ +#ifdef VDSWTCH + td->c_cc[VDSWTCH] = s[C_DSWTCH]; +#endif /* VDSWTCH */ +#ifdef VERASE2 + td->c_cc[VERASE2] = s[C_ERASE2]; +#endif /* VERASE2 */ +#ifdef VSTART + td->c_cc[VSTART] = s[C_START]; +#endif /* VSTART */ +#ifdef VSTOP + td->c_cc[VSTOP] = s[C_STOP]; +#endif /* VSTOP */ +#ifdef VWERASE + td->c_cc[VWERASE] = s[C_WERASE]; +#endif /* VWERASE */ +#ifdef VSUSP + td->c_cc[VSUSP] = s[C_SUSP]; +#endif /* VSUSP */ +#ifdef VDSUSP + td->c_cc[VDSUSP] = s[C_DSUSP]; +#endif /* VDSUSP */ +#ifdef VREPRINT + td->c_cc[VREPRINT] = s[C_REPRINT]; +#endif /* VREPRINT */ +#ifdef VDISCARD + td->c_cc[VDISCARD] = s[C_DISCARD]; +#endif /* VDISCARD */ +#ifdef VLNEXT + td->c_cc[VLNEXT] = s[C_LNEXT]; +#endif /* VLNEXT */ +#ifdef VSTATUS + td->c_cc[VSTATUS] = s[C_STATUS]; +#endif /* VSTATUS */ +#ifdef VPAGE + td->c_cc[VPAGE] = s[C_PAGE]; +#endif /* VPAGE */ +#ifdef VPGOFF + td->c_cc[VPGOFF] = s[C_PGOFF]; +#endif /* VPGOFF */ +#ifdef VKILL2 + td->c_cc[VKILL2] = s[C_KILL2]; +#endif /* VKILL2 */ +#ifdef VMIN + td->c_cc[VMIN] = s[C_MIN]; +#endif /* VMIN */ +#ifdef VTIME + td->c_cc[VTIME] = s[C_TIME]; +#endif /* VTIME */ +} /* tty__setchar */ + + +/* tty_bind_char(): + * Rebind the editline functions + */ +libedit_private void +tty_bind_char(EditLine *el, int force) +{ + + unsigned char *t_n = el->el_tty.t_c[ED_IO]; + unsigned char *t_o = el->el_tty.t_ed.c_cc; + wchar_t new[2], old[2]; + const ttymap_t *tp; + el_action_t *map, *alt; + const el_action_t *dmap, *dalt; + new[1] = old[1] = '\0'; + + map = el->el_map.key; + alt = el->el_map.alt; + if (el->el_map.type == MAP_VI) { + dmap = el->el_map.vii; + dalt = el->el_map.vic; + } else { + dmap = el->el_map.emacs; + dalt = NULL; + } + + for (tp = tty_map; tp->nch != (wint_t)-1; tp++) { + new[0] = (wchar_t)t_n[tp->nch]; + old[0] = (wchar_t)t_o[tp->och]; + if (new[0] == old[0] && !force) + continue; + /* Put the old default binding back, and set the new binding */ + keymacro_clear(el, map, old); + map[(unsigned char)old[0]] = dmap[(unsigned char)old[0]]; + keymacro_clear(el, map, new); + /* MAP_VI == 1, MAP_EMACS == 0... */ + map[(unsigned char)new[0]] = tp->bind[el->el_map.type]; + if (dalt) { + keymacro_clear(el, alt, old); + alt[(unsigned char)old[0]] = + dalt[(unsigned char)old[0]]; + keymacro_clear(el, alt, new); + alt[(unsigned char)new[0]] = + tp->bind[el->el_map.type + 1]; + } + } +} + + +static tcflag_t * +tty__get_flag(struct termios *t, int kind) { + switch (kind) { + case MD_INP: + return &t->c_iflag; + case MD_OUT: + return &t->c_oflag; + case MD_CTL: + return &t->c_cflag; + case MD_LIN: + return &t->c_lflag; + default: + abort(); + /*NOTREACHED*/ + } +} + + +static tcflag_t +tty_update_flag(EditLine *el, tcflag_t f, int mode, int kind) +{ + f &= ~el->el_tty.t_t[mode][kind].t_clrmask; + f |= el->el_tty.t_t[mode][kind].t_setmask; + return f; +} + + +static void +tty_update_flags(EditLine *el, int kind) +{ + tcflag_t *tt, *ed, *ex; + tt = tty__get_flag(&el->el_tty.t_ts, kind); + ed = tty__get_flag(&el->el_tty.t_ed, kind); + ex = tty__get_flag(&el->el_tty.t_ex, kind); + + if (*tt != *ex && (kind != MD_CTL || *tt != *ed)) { + *ed = tty_update_flag(el, *tt, ED_IO, kind); + *ex = tty_update_flag(el, *tt, EX_IO, kind); + } +} + + +static void +tty_update_char(EditLine *el, int mode, int c) { + if (!((el->el_tty.t_t[mode][MD_CHAR].t_setmask & C_SH(c))) + && (el->el_tty.t_c[TS_IO][c] != el->el_tty.t_c[EX_IO][c])) + el->el_tty.t_c[mode][c] = el->el_tty.t_c[TS_IO][c]; + if (el->el_tty.t_t[mode][MD_CHAR].t_clrmask & C_SH(c)) + el->el_tty.t_c[mode][c] = el->el_tty.t_vdisable; +} + + +/* tty_rawmode(): + * Set terminal into 1 character at a time mode. + */ +libedit_private int +tty_rawmode(EditLine *el) +{ + + if (el->el_tty.t_mode == ED_IO || el->el_tty.t_mode == QU_IO) + return 0; + + if (el->el_flags & EDIT_DISABLED) + return 0; + + if (tty_getty(el, &el->el_tty.t_ts) == -1) { +#ifdef DEBUG_TTY + (void) fprintf(el->el_errfile, "%s: tty_getty: %s\n", __func__, + strerror(errno)); +#endif /* DEBUG_TTY */ + return -1; + } + /* + * We always keep up with the eight bit setting and the speed of the + * tty. But we only believe changes that are made to cooked mode! + */ + el->el_tty.t_eight = tty__geteightbit(&el->el_tty.t_ts); + el->el_tty.t_speed = tty__getspeed(&el->el_tty.t_ts); + + if (tty__getspeed(&el->el_tty.t_ex) != el->el_tty.t_speed || + tty__getspeed(&el->el_tty.t_ed) != el->el_tty.t_speed) { + (void) cfsetispeed(&el->el_tty.t_ex, el->el_tty.t_speed); + (void) cfsetospeed(&el->el_tty.t_ex, el->el_tty.t_speed); + (void) cfsetispeed(&el->el_tty.t_ed, el->el_tty.t_speed); + (void) cfsetospeed(&el->el_tty.t_ed, el->el_tty.t_speed); + } + if (tty__cooked_mode(&el->el_tty.t_ts)) { + int i; + + for (i = MD_INP; i <= MD_LIN; i++) + tty_update_flags(el, i); + + if (tty__gettabs(&el->el_tty.t_ex) == 0) + el->el_tty.t_tabs = 0; + else + el->el_tty.t_tabs = EL_CAN_TAB ? 1 : 0; + + tty__getchar(&el->el_tty.t_ts, el->el_tty.t_c[TS_IO]); + /* + * Check if the user made any changes. + * If he did, then propagate the changes to the + * edit and execute data structures. + */ + for (i = 0; i < C_NCC; i++) + if (el->el_tty.t_c[TS_IO][i] != + el->el_tty.t_c[EX_IO][i]) + break; + + if (i != C_NCC) { + /* + * Propagate changes only to the unlibedit_private + * chars that have been modified just now. + */ + for (i = 0; i < C_NCC; i++) + tty_update_char(el, ED_IO, i); + + tty_bind_char(el, 0); + tty__setchar(&el->el_tty.t_ed, el->el_tty.t_c[ED_IO]); + + for (i = 0; i < C_NCC; i++) + tty_update_char(el, EX_IO, i); + + tty__setchar(&el->el_tty.t_ex, el->el_tty.t_c[EX_IO]); + } + } + if (tty_setty(el, TCSADRAIN, &el->el_tty.t_ed) == -1) { +#ifdef DEBUG_TTY + (void) fprintf(el->el_errfile, "%s: tty_setty: %s\n", __func__, + strerror(errno)); +#endif /* DEBUG_TTY */ + return -1; + } + el->el_tty.t_mode = ED_IO; + return 0; +} + + +/* tty_cookedmode(): + * Set the tty back to normal mode + */ +libedit_private int +tty_cookedmode(EditLine *el) +{ /* set tty in normal setup */ + + if (el->el_tty.t_mode == EX_IO) + return 0; + + if (el->el_flags & EDIT_DISABLED) + return 0; + + if (tty_setty(el, TCSADRAIN, &el->el_tty.t_ex) == -1) { +#ifdef DEBUG_TTY + (void) fprintf(el->el_errfile, "%s: tty_setty: %s\n", __func__, + strerror(errno)); +#endif /* DEBUG_TTY */ + return -1; + } + el->el_tty.t_mode = EX_IO; + return 0; +} + + +/* tty_quotemode(): + * Turn on quote mode + */ +libedit_private int +tty_quotemode(EditLine *el) +{ + if (el->el_tty.t_mode == QU_IO) + return 0; + + el->el_tty.t_qu = el->el_tty.t_ed; + + tty_setup_flags(el, &el->el_tty.t_qu, QU_IO); + + if (tty_setty(el, TCSADRAIN, &el->el_tty.t_qu) == -1) { +#ifdef DEBUG_TTY + (void) fprintf(el->el_errfile, "%s: tty_setty: %s\n", __func__, + strerror(errno)); +#endif /* DEBUG_TTY */ + return -1; + } + el->el_tty.t_mode = QU_IO; + return 0; +} + + +/* tty_noquotemode(): + * Turn off quote mode + */ +libedit_private int +tty_noquotemode(EditLine *el) +{ + + if (el->el_tty.t_mode != QU_IO) + return 0; + if (tty_setty(el, TCSADRAIN, &el->el_tty.t_ed) == -1) { +#ifdef DEBUG_TTY + (void) fprintf(el->el_errfile, "%s: tty_setty: %s\n", __func__, + strerror(errno)); +#endif /* DEBUG_TTY */ + return -1; + } + el->el_tty.t_mode = ED_IO; + return 0; +} + + +/* tty_stty(): + * Stty builtin + */ +libedit_private int +/*ARGSUSED*/ +tty_stty(EditLine *el, int argc __attribute__((__unused__)), + const wchar_t **argv) +{ + const ttymodes_t *m; + char x; + int aflag = 0; + const wchar_t *s, *d; + char name[EL_BUFSIZ]; + struct termios *tios = &el->el_tty.t_ex; + int z = EX_IO; + + if (argv == NULL) + return -1; + strlcpy(name, ct_encode_string(*argv++, &el->el_scratch), sizeof(name)); + + while (argv && *argv && argv[0][0] == '-' && argv[0][2] == '\0') + switch (argv[0][1]) { + case 'a': + aflag++; + argv++; + break; + case 'd': + argv++; + tios = &el->el_tty.t_ed; + z = ED_IO; + break; + case 'x': + argv++; + tios = &el->el_tty.t_ex; + z = EX_IO; + break; + case 'q': + argv++; + tios = &el->el_tty.t_ts; + z = QU_IO; + break; + default: + (void) fprintf(el->el_errfile, + "%s: Unknown switch `%lc'.\n", + name, (wint_t)argv[0][1]); + return -1; + } + + if (!argv || !*argv) { + int i = -1; + size_t len = 0, st = 0, cu; + for (m = ttymodes; m->m_name; m++) { + if (m->m_type != i) { + (void) fprintf(el->el_outfile, "%s%s", + i != -1 ? "\n" : "", + el->el_tty.t_t[z][m->m_type].t_name); + i = m->m_type; + st = len = + strlen(el->el_tty.t_t[z][m->m_type].t_name); + } + if (i != -1) { + x = (el->el_tty.t_t[z][i].t_setmask & m->m_value) + ? '+' : '\0'; + + if (el->el_tty.t_t[z][i].t_clrmask & m->m_value) + x = '-'; + } else { + x = '\0'; + } + + if (x != '\0' || aflag) { + + cu = strlen(m->m_name) + (x != '\0') + 1; + + if (len + cu >= + (size_t)el->el_terminal.t_size.h) { + (void) fprintf(el->el_outfile, "\n%*s", + (int)st, ""); + len = st + cu; + } else + len += cu; + + if (x != '\0') + (void) fprintf(el->el_outfile, "%c%s ", + x, m->m_name); + else + (void) fprintf(el->el_outfile, "%s ", + m->m_name); + } + } + (void) fprintf(el->el_outfile, "\n"); + return 0; + } + while (argv && (s = *argv++)) { + const wchar_t *p; + switch (*s) { + case '+': + case '-': + x = (char)*s++; + break; + default: + x = '\0'; + break; + } + d = s; + p = wcschr(s, L'='); + for (m = ttymodes; m->m_name; m++) + if ((p ? strncmp(m->m_name, ct_encode_string(d, + &el->el_scratch), (size_t)(p - d)) : + strcmp(m->m_name, ct_encode_string(d, + &el->el_scratch))) == 0 && + (p == NULL || m->m_type == MD_CHAR)) + break; + + if (!m->m_name) { + (void) fprintf(el->el_errfile, + "%s: Invalid argument `%ls'.\n", name, d); + return -1; + } + if (p) { + int c = ffs((int)m->m_value); + int v = *++p ? parse__escape(&p) : + el->el_tty.t_vdisable; + assert(c != 0); + c--; + c = tty__getcharindex(c); + assert(c != -1); + tios->c_cc[c] = (cc_t)v; + continue; + } + switch (x) { + case '+': + el->el_tty.t_t[z][m->m_type].t_setmask |= m->m_value; + el->el_tty.t_t[z][m->m_type].t_clrmask &= ~m->m_value; + break; + case '-': + el->el_tty.t_t[z][m->m_type].t_setmask &= ~m->m_value; + el->el_tty.t_t[z][m->m_type].t_clrmask |= m->m_value; + break; + default: + el->el_tty.t_t[z][m->m_type].t_setmask &= ~m->m_value; + el->el_tty.t_t[z][m->m_type].t_clrmask &= ~m->m_value; + break; + } + } + + tty_setup_flags(el, tios, z); + if (el->el_tty.t_mode == z) { + if (tty_setty(el, TCSADRAIN, tios) == -1) { +#ifdef DEBUG_TTY + (void) fprintf(el->el_errfile, "%s: tty_setty: %s\n", + __func__, strerror(errno)); +#endif /* DEBUG_TTY */ + return -1; + } + } + + return 0; +} + + +#ifdef notyet +/* tty_printchar(): + * DEbugging routine to print the tty characters + */ +static void +tty_printchar(EditLine *el, unsigned char *s) +{ + ttyperm_t *m; + int i; + + for (i = 0; i < C_NCC; i++) { + for (m = el->el_tty.t_t; m->m_name; m++) + if (m->m_type == MD_CHAR && C_SH(i) == m->m_value) + break; + if (m->m_name) + (void) fprintf(el->el_errfile, "%s ^%c ", + m->m_name, s[i] + 'A' - 1); + if (i % 5 == 0) + (void) fprintf(el->el_errfile, "\n"); + } + (void) fprintf(el->el_errfile, "\n"); +} +#endif /* notyet */ + + +static void +tty_setup_flags(EditLine *el, struct termios *tios, int mode) +{ + int kind; + for (kind = MD_INP; kind <= MD_LIN; kind++) { + tcflag_t *f = tty__get_flag(tios, kind); + *f = tty_update_flag(el, *f, mode, kind); + } +} + +libedit_private int +tty_get_signal_character(EditLine *el, int sig) +{ +#ifdef ECHOCTL + tcflag_t *ed = tty__get_flag(&el->el_tty.t_ed, MD_INP); + if ((*ed & ECHOCTL) == 0) + return -1; +#endif + switch (sig) { +#if defined(SIGINT) && defined(VINTR) + case SIGINT: + return el->el_tty.t_c[ED_IO][VINTR]; +#endif +#if defined(SIGQUIT) && defined(VQUIT) + case SIGQUIT: + return el->el_tty.t_c[ED_IO][VQUIT]; +#endif +#if defined(SIGINFO) && defined(VSTATUS) + case SIGINFO: + return el->el_tty.t_c[ED_IO][VSTATUS]; +#endif +#if defined(SIGTSTP) && defined(VSUSP) + case SIGTSTP: + return el->el_tty.t_c[ED_IO][VSUSP]; +#endif + default: + return -1; + } +} diff --git a/src/thirdparty/libedit-3.1/src/tty.h b/src/thirdparty/libedit-3.1/src/tty.h new file mode 100644 index 000000000..ac817c8ad --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/tty.h @@ -0,0 +1,482 @@ +/* $NetBSD: tty.h,v 1.24 2021/07/31 20:51:32 andvar Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)tty.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * el.tty.h: Local terminal header + */ +#ifndef _h_el_tty +#define _h_el_tty + +#include <termios.h> +#include <unistd.h> + +/* Define our own since everyone gets it wrong! */ +#define CONTROL(A) ((A) & 037) + +/* + * Aix compatible names + */ +# if defined(VWERSE) && !defined(VWERASE) +# define VWERASE VWERSE +# endif /* VWERSE && !VWERASE */ + +# if defined(VDISCRD) && !defined(VDISCARD) +# define VDISCARD VDISCRD +# endif /* VDISCRD && !VDISCARD */ + +# if defined(VFLUSHO) && !defined(VDISCARD) +# define VDISCARD VFLUSHO +# endif /* VFLUSHO && VDISCARD */ + +# if defined(VSTRT) && !defined(VSTART) +# define VSTART VSTRT +# endif /* VSTRT && ! VSTART */ + +# if defined(VSTAT) && !defined(VSTATUS) +# define VSTATUS VSTAT +# endif /* VSTAT && ! VSTATUS */ + +# ifndef ONLRET +# define ONLRET 0 +# endif /* ONLRET */ + +# ifndef TAB3 +# ifdef OXTABS +# define TAB3 OXTABS +# else +# define TAB3 0 +# endif /* OXTABS */ +# endif /* !TAB3 */ + +# if defined(OXTABS) && !defined(XTABS) +# define XTABS OXTABS +# endif /* OXTABS && !XTABS */ + +# ifndef ONLCR +# define ONLCR 0 +# endif /* ONLCR */ + +# ifndef IEXTEN +# define IEXTEN 0 +# endif /* IEXTEN */ + +# ifndef ECHOCTL +# define ECHOCTL 0 +# endif /* ECHOCTL */ + +# ifndef PARENB +# define PARENB 0 +# endif /* PARENB */ + +# ifndef EXTPROC +# define EXTPROC 0 +# endif /* EXTPROC */ + +# ifndef FLUSHO +# define FLUSHO 0 +# endif /* FLUSHO */ + + +# if defined(VDISABLE) && !defined(_POSIX_VDISABLE) +# define _POSIX_VDISABLE VDISABLE +# endif /* VDISABLE && ! _POSIX_VDISABLE */ + +/* + * Work around ISC's definition of IEXTEN which is + * XCASE! + */ +# ifdef ISC +# if defined(IEXTEN) && defined(XCASE) +# if IEXTEN == XCASE +# undef IEXTEN +# define IEXTEN 0 +# endif /* IEXTEN == XCASE */ +# endif /* IEXTEN && XCASE */ +# if defined(IEXTEN) && !defined(XCASE) +# define XCASE IEXTEN +# undef IEXTEN +# define IEXTEN 0 +# endif /* IEXTEN && !XCASE */ +# endif /* ISC */ + +/* + * Work around convex weirdness where turning off IEXTEN makes us + * lose all postprocessing! + */ +#if defined(convex) || defined(__convex__) +# if defined(IEXTEN) && IEXTEN != 0 +# undef IEXTEN +# define IEXTEN 0 +# endif /* IEXTEN != 0 */ +#endif /* convex || __convex__ */ + +/* + * So that we don't lose job control. + */ +#ifdef __SVR4 +# undef CSWTCH +#endif + +#ifndef _POSIX_VDISABLE +# define _POSIX_VDISABLE ((unsigned char) -1) +#endif /* _POSIX_VDISABLE */ + +#if !defined(CREPRINT) && defined(CRPRNT) +# define CREPRINT CRPRNT +#endif /* !CREPRINT && CRPRNT */ +#if !defined(CDISCARD) && defined(CFLUSH) +# define CDISCARD CFLUSH +#endif /* !CDISCARD && CFLUSH */ + +#ifndef CINTR +# define CINTR CONTROL('c') +#endif /* CINTR */ +#ifndef CQUIT +# define CQUIT 034 /* ^\ */ +#endif /* CQUIT */ +#ifndef CERASE +# define CERASE 0177 /* ^? */ +#endif /* CERASE */ +#ifndef CKILL +# define CKILL CONTROL('u') +#endif /* CKILL */ +#ifndef CEOF +# define CEOF CONTROL('d') +#endif /* CEOF */ +#ifndef CEOL +# define CEOL _POSIX_VDISABLE +#endif /* CEOL */ +#ifndef CEOL2 +# define CEOL2 _POSIX_VDISABLE +#endif /* CEOL2 */ +#ifndef CSWTCH +# define CSWTCH _POSIX_VDISABLE +#endif /* CSWTCH */ +#ifndef CDSWTCH +# define CDSWTCH _POSIX_VDISABLE +#endif /* CDSWTCH */ +#ifndef CERASE2 +# define CERASE2 _POSIX_VDISABLE +#endif /* CERASE2 */ +#ifndef CSTART +# define CSTART CONTROL('q') +#endif /* CSTART */ +#ifndef CSTOP +# define CSTOP CONTROL('s') +#endif /* CSTOP */ +#ifndef CSUSP +# define CSUSP CONTROL('z') +#endif /* CSUSP */ +#ifndef CDSUSP +# define CDSUSP CONTROL('y') +#endif /* CDSUSP */ + +#ifdef hpux + +# ifndef CREPRINT +# define CREPRINT _POSIX_VDISABLE +# endif /* CREPRINT */ +# ifndef CDISCARD +# define CDISCARD _POSIX_VDISABLE +# endif /* CDISCARD */ +# ifndef CLNEXT +# define CLNEXT _POSIX_VDISABLE +# endif /* CLNEXT */ +# ifndef CWERASE +# define CWERASE _POSIX_VDISABLE +# endif /* CWERASE */ + +#else /* !hpux */ + +# ifndef CREPRINT +# define CREPRINT CONTROL('r') +# endif /* CREPRINT */ +# ifndef CDISCARD +# define CDISCARD CONTROL('o') +# endif /* CDISCARD */ +# ifndef CLNEXT +# define CLNEXT CONTROL('v') +# endif /* CLNEXT */ +# ifndef CWERASE +# define CWERASE CONTROL('w') +# endif /* CWERASE */ + +#endif /* hpux */ + +#ifndef CSTATUS +# define CSTATUS CONTROL('t') +#endif /* CSTATUS */ +#ifndef CPAGE +# define CPAGE ' ' +#endif /* CPAGE */ +#ifndef CPGOFF +# define CPGOFF CONTROL('m') +#endif /* CPGOFF */ +#ifndef CKILL2 +# define CKILL2 _POSIX_VDISABLE +#endif /* CKILL2 */ +#ifndef CBRK +# ifndef masscomp +# define CBRK 0377 +# else +# define CBRK '\0' +# endif /* masscomp */ +#endif /* CBRK */ +#ifndef CMIN +# define CMIN CEOF +#endif /* CMIN */ +#ifndef CTIME +# define CTIME CEOL +#endif /* CTIME */ + +/* + * Fix for sun inconsistency. On termio VSUSP and the rest of the + * ttychars > NCC are defined. So we undefine them. + */ +#if defined(TERMIO) || defined(POSIX) +# if defined(POSIX) && defined(NCCS) +# define NUMCC NCCS +# else +# ifdef NCC +# define NUMCC NCC +# endif /* NCC */ +# endif /* POSIX && NCCS */ +# ifdef NUMCC +# ifdef VINTR +# if NUMCC <= VINTR +# undef VINTR +# endif /* NUMCC <= VINTR */ +# endif /* VINTR */ +# ifdef VQUIT +# if NUMCC <= VQUIT +# undef VQUIT +# endif /* NUMCC <= VQUIT */ +# endif /* VQUIT */ +# ifdef VERASE +# if NUMCC <= VERASE +# undef VERASE +# endif /* NUMCC <= VERASE */ +# endif /* VERASE */ +# ifdef VKILL +# if NUMCC <= VKILL +# undef VKILL +# endif /* NUMCC <= VKILL */ +# endif /* VKILL */ +# ifdef VEOF +# if NUMCC <= VEOF +# undef VEOF +# endif /* NUMCC <= VEOF */ +# endif /* VEOF */ +# ifdef VEOL +# if NUMCC <= VEOL +# undef VEOL +# endif /* NUMCC <= VEOL */ +# endif /* VEOL */ +# ifdef VEOL2 +# if NUMCC <= VEOL2 +# undef VEOL2 +# endif /* NUMCC <= VEOL2 */ +# endif /* VEOL2 */ +# ifdef VSWTCH +# if NUMCC <= VSWTCH +# undef VSWTCH +# endif /* NUMCC <= VSWTCH */ +# endif /* VSWTCH */ +# ifdef VDSWTCH +# if NUMCC <= VDSWTCH +# undef VDSWTCH +# endif /* NUMCC <= VDSWTCH */ +# endif /* VDSWTCH */ +# ifdef VERASE2 +# if NUMCC <= VERASE2 +# undef VERASE2 +# endif /* NUMCC <= VERASE2 */ +# endif /* VERASE2 */ +# ifdef VSTART +# if NUMCC <= VSTART +# undef VSTART +# endif /* NUMCC <= VSTART */ +# endif /* VSTART */ +# ifdef VSTOP +# if NUMCC <= VSTOP +# undef VSTOP +# endif /* NUMCC <= VSTOP */ +# endif /* VSTOP */ +# ifdef VWERASE +# if NUMCC <= VWERASE +# undef VWERASE +# endif /* NUMCC <= VWERASE */ +# endif /* VWERASE */ +# ifdef VSUSP +# if NUMCC <= VSUSP +# undef VSUSP +# endif /* NUMCC <= VSUSP */ +# endif /* VSUSP */ +# ifdef VDSUSP +# if NUMCC <= VDSUSP +# undef VDSUSP +# endif /* NUMCC <= VDSUSP */ +# endif /* VDSUSP */ +# ifdef VREPRINT +# if NUMCC <= VREPRINT +# undef VREPRINT +# endif /* NUMCC <= VREPRINT */ +# endif /* VREPRINT */ +# ifdef VDISCARD +# if NUMCC <= VDISCARD +# undef VDISCARD +# endif /* NUMCC <= VDISCARD */ +# endif /* VDISCARD */ +# ifdef VLNEXT +# if NUMCC <= VLNEXT +# undef VLNEXT +# endif /* NUMCC <= VLNEXT */ +# endif /* VLNEXT */ +# ifdef VSTATUS +# if NUMCC <= VSTATUS +# undef VSTATUS +# endif /* NUMCC <= VSTATUS */ +# endif /* VSTATUS */ +# ifdef VPAGE +# if NUMCC <= VPAGE +# undef VPAGE +# endif /* NUMCC <= VPAGE */ +# endif /* VPAGE */ +# ifdef VPGOFF +# if NUMCC <= VPGOFF +# undef VPGOFF +# endif /* NUMCC <= VPGOFF */ +# endif /* VPGOFF */ +# ifdef VKILL2 +# if NUMCC <= VKILL2 +# undef VKILL2 +# endif /* NUMCC <= VKILL2 */ +# endif /* VKILL2 */ +# ifdef VBRK +# if NUMCC <= VBRK +# undef VBRK +# endif /* NUMCC <= VBRK */ +# endif /* VBRK */ +# ifdef VMIN +# if NUMCC <= VMIN +# undef VMIN +# endif /* NUMCC <= VMIN */ +# endif /* VMIN */ +# ifdef VTIME +# if NUMCC <= VTIME +# undef VTIME +# endif /* NUMCC <= VTIME */ +# endif /* VTIME */ +# endif /* NUMCC */ +#endif /* !POSIX */ + +#define C_INTR 0 +#define C_QUIT 1 +#define C_ERASE 2 +#define C_KILL 3 +#define C_EOF 4 +#define C_EOL 5 +#define C_EOL2 6 +#define C_SWTCH 7 +#define C_DSWTCH 8 +#define C_ERASE2 9 +#define C_START 10 +#define C_STOP 11 +#define C_WERASE 12 +#define C_SUSP 13 +#define C_DSUSP 14 +#define C_REPRINT 15 +#define C_DISCARD 16 +#define C_LNEXT 17 +#define C_STATUS 18 +#define C_PAGE 19 +#define C_PGOFF 20 +#define C_KILL2 21 +#define C_BRK 22 +#define C_MIN 23 +#define C_TIME 24 +#define C_NCC 25 +#define C_SH(A) ((unsigned int)(1 << (A))) + +/* + * Terminal dependent data structures + */ +#define EX_IO 0 /* while we are executing */ +#define ED_IO 1 /* while we are editing */ +#define TS_IO 2 /* new mode from terminal */ +#define QU_IO 2 /* used only for quoted chars */ +#define NN_IO 3 /* The number of entries */ + +/* Don't re-order */ +#define MD_INP 0 +#define MD_OUT 1 +#define MD_CTL 2 +#define MD_LIN 3 +#define MD_CHAR 4 +#define MD_NN 5 + +typedef struct { + const char *t_name; + unsigned int t_setmask; + unsigned int t_clrmask; +} ttyperm_t[NN_IO][MD_NN]; + +typedef unsigned char ttychar_t[NN_IO][C_NCC]; + +libedit_private int tty_init(EditLine *); +libedit_private void tty_end(EditLine *, int); +libedit_private int tty_stty(EditLine *, int, const wchar_t **); +libedit_private int tty_rawmode(EditLine *); +libedit_private int tty_cookedmode(EditLine *); +libedit_private int tty_quotemode(EditLine *); +libedit_private int tty_noquotemode(EditLine *); +libedit_private void tty_bind_char(EditLine *, int); +libedit_private int tty_get_signal_character(EditLine *, int); + +typedef struct { + ttyperm_t t_t; + ttychar_t t_c; + struct termios t_or, t_ex, t_ed, t_ts; + int t_tabs; + int t_eight; + speed_t t_speed; + unsigned char t_mode; + unsigned char t_vdisable; + unsigned char t_initialized; +} el_tty_t; + + +#endif /* _h_el_tty */ diff --git a/src/thirdparty/libedit-3.1/src/unvis.c b/src/thirdparty/libedit-3.1/src/unvis.c new file mode 100644 index 000000000..b88b309fb --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/unvis.c @@ -0,0 +1,560 @@ +/* $NetBSD: unvis.c,v 1.45 2022/04/19 20:32:15 rillig Exp $ */ + +/*- + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)unvis.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: unvis.c,v 1.45 2022/04/19 20:32:15 rillig Exp $"); +#endif +#endif /* LIBC_SCCS and not lint */ + +#include <sys/types.h> + +#include <assert.h> +#include <ctype.h> +#ifdef HAVE_STDINT_H +#include <stdint.h> +#endif +#include <stdio.h> +#include <errno.h> +#include <vis.h> + +#ifdef __weak_alias +__weak_alias(strnunvisx,_strnunvisx) +#endif + +#if !HAVE_VIS +/* + * decode driven by state machine + */ +#define S_GROUND 0 /* haven't seen escape char */ +#define S_START 1 /* start decoding special sequence */ +#define S_META 2 /* metachar started (M) */ +#define S_META1 3 /* metachar more, regular char (-) */ +#define S_CTRL 4 /* control char started (^) */ +#define S_OCTAL2 5 /* octal digit 2 */ +#define S_OCTAL3 6 /* octal digit 3 */ +#define S_HEX 7 /* mandatory hex digit */ +#define S_HEX1 8 /* http hex digit */ +#define S_HEX2 9 /* http hex digit 2 */ +#define S_MIME1 10 /* mime hex digit 1 */ +#define S_MIME2 11 /* mime hex digit 2 */ +#define S_EATCRNL 12 /* mime eating CRNL */ +#define S_AMP 13 /* seen & */ +#define S_NUMBER 14 /* collecting number */ +#define S_STRING 15 /* collecting string */ + +#define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7') +#define xtod(c) (isdigit(c) ? (c - '0') : ((tolower(c) - 'a') + 10)) +#define XTOD(c) (isdigit(c) ? (c - '0') : ((c - 'A') + 10)) + +/* + * RFC 1866 + */ +static const struct nv { + char name[7]; + uint8_t value; +} nv[] = { + { "AElig", 198 }, /* capital AE diphthong (ligature) */ + { "Aacute", 193 }, /* capital A, acute accent */ + { "Acirc", 194 }, /* capital A, circumflex accent */ + { "Agrave", 192 }, /* capital A, grave accent */ + { "Aring", 197 }, /* capital A, ring */ + { "Atilde", 195 }, /* capital A, tilde */ + { "Auml", 196 }, /* capital A, dieresis or umlaut mark */ + { "Ccedil", 199 }, /* capital C, cedilla */ + { "ETH", 208 }, /* capital Eth, Icelandic */ + { "Eacute", 201 }, /* capital E, acute accent */ + { "Ecirc", 202 }, /* capital E, circumflex accent */ + { "Egrave", 200 }, /* capital E, grave accent */ + { "Euml", 203 }, /* capital E, dieresis or umlaut mark */ + { "Iacute", 205 }, /* capital I, acute accent */ + { "Icirc", 206 }, /* capital I, circumflex accent */ + { "Igrave", 204 }, /* capital I, grave accent */ + { "Iuml", 207 }, /* capital I, dieresis or umlaut mark */ + { "Ntilde", 209 }, /* capital N, tilde */ + { "Oacute", 211 }, /* capital O, acute accent */ + { "Ocirc", 212 }, /* capital O, circumflex accent */ + { "Ograve", 210 }, /* capital O, grave accent */ + { "Oslash", 216 }, /* capital O, slash */ + { "Otilde", 213 }, /* capital O, tilde */ + { "Ouml", 214 }, /* capital O, dieresis or umlaut mark */ + { "THORN", 222 }, /* capital THORN, Icelandic */ + { "Uacute", 218 }, /* capital U, acute accent */ + { "Ucirc", 219 }, /* capital U, circumflex accent */ + { "Ugrave", 217 }, /* capital U, grave accent */ + { "Uuml", 220 }, /* capital U, dieresis or umlaut mark */ + { "Yacute", 221 }, /* capital Y, acute accent */ + { "aacute", 225 }, /* small a, acute accent */ + { "acirc", 226 }, /* small a, circumflex accent */ + { "acute", 180 }, /* acute accent */ + { "aelig", 230 }, /* small ae diphthong (ligature) */ + { "agrave", 224 }, /* small a, grave accent */ + { "amp", 38 }, /* ampersand */ + { "aring", 229 }, /* small a, ring */ + { "atilde", 227 }, /* small a, tilde */ + { "auml", 228 }, /* small a, dieresis or umlaut mark */ + { "brvbar", 166 }, /* broken (vertical) bar */ + { "ccedil", 231 }, /* small c, cedilla */ + { "cedil", 184 }, /* cedilla */ + { "cent", 162 }, /* cent sign */ + { "copy", 169 }, /* copyright sign */ + { "curren", 164 }, /* general currency sign */ + { "deg", 176 }, /* degree sign */ + { "divide", 247 }, /* divide sign */ + { "eacute", 233 }, /* small e, acute accent */ + { "ecirc", 234 }, /* small e, circumflex accent */ + { "egrave", 232 }, /* small e, grave accent */ + { "eth", 240 }, /* small eth, Icelandic */ + { "euml", 235 }, /* small e, dieresis or umlaut mark */ + { "frac12", 189 }, /* fraction one-half */ + { "frac14", 188 }, /* fraction one-quarter */ + { "frac34", 190 }, /* fraction three-quarters */ + { "gt", 62 }, /* greater than */ + { "iacute", 237 }, /* small i, acute accent */ + { "icirc", 238 }, /* small i, circumflex accent */ + { "iexcl", 161 }, /* inverted exclamation mark */ + { "igrave", 236 }, /* small i, grave accent */ + { "iquest", 191 }, /* inverted question mark */ + { "iuml", 239 }, /* small i, dieresis or umlaut mark */ + { "laquo", 171 }, /* angle quotation mark, left */ + { "lt", 60 }, /* less than */ + { "macr", 175 }, /* macron */ + { "micro", 181 }, /* micro sign */ + { "middot", 183 }, /* middle dot */ + { "nbsp", 160 }, /* no-break space */ + { "not", 172 }, /* not sign */ + { "ntilde", 241 }, /* small n, tilde */ + { "oacute", 243 }, /* small o, acute accent */ + { "ocirc", 244 }, /* small o, circumflex accent */ + { "ograve", 242 }, /* small o, grave accent */ + { "ordf", 170 }, /* ordinal indicator, feminine */ + { "ordm", 186 }, /* ordinal indicator, masculine */ + { "oslash", 248 }, /* small o, slash */ + { "otilde", 245 }, /* small o, tilde */ + { "ouml", 246 }, /* small o, dieresis or umlaut mark */ + { "para", 182 }, /* pilcrow (paragraph sign) */ + { "plusmn", 177 }, /* plus-or-minus sign */ + { "pound", 163 }, /* pound sterling sign */ + { "quot", 34 }, /* double quote */ + { "raquo", 187 }, /* angle quotation mark, right */ + { "reg", 174 }, /* registered sign */ + { "sect", 167 }, /* section sign */ + { "shy", 173 }, /* soft hyphen */ + { "sup1", 185 }, /* superscript one */ + { "sup2", 178 }, /* superscript two */ + { "sup3", 179 }, /* superscript three */ + { "szlig", 223 }, /* small sharp s, German (sz ligature) */ + { "thorn", 254 }, /* small thorn, Icelandic */ + { "times", 215 }, /* multiply sign */ + { "uacute", 250 }, /* small u, acute accent */ + { "ucirc", 251 }, /* small u, circumflex accent */ + { "ugrave", 249 }, /* small u, grave accent */ + { "uml", 168 }, /* umlaut (dieresis) */ + { "uuml", 252 }, /* small u, dieresis or umlaut mark */ + { "yacute", 253 }, /* small y, acute accent */ + { "yen", 165 }, /* yen sign */ + { "yuml", 255 }, /* small y, dieresis or umlaut mark */ +}; + +/* + * unvis - decode characters previously encoded by vis + */ +int +unvis(char *cp, int c, int *astate, int flag) +{ + unsigned char uc = (unsigned char)c; + unsigned char st, ia, is, lc; + +/* + * Bottom 8 bits of astate hold the state machine state. + * Top 8 bits hold the current character in the http 1866 nv string decoding + */ +#define GS(a) ((a) & 0xff) +#define SS(a, b) (((uint32_t)(a) << 24) | (b)) +#define GI(a) ((uint32_t)(a) >> 24) + + _DIAGASSERT(cp != NULL); + _DIAGASSERT(astate != NULL); + st = GS(*astate); + + if (flag & UNVIS_END) { + switch (st) { + case S_OCTAL2: + case S_OCTAL3: + case S_HEX2: + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + case S_GROUND: + return UNVIS_NOCHAR; + default: + return UNVIS_SYNBAD; + } + } + + switch (st) { + + case S_GROUND: + *cp = 0; + if ((flag & VIS_NOESCAPE) == 0 && c == '\\') { + *astate = SS(0, S_START); + return UNVIS_NOCHAR; + } + if ((flag & VIS_HTTP1808) && c == '%') { + *astate = SS(0, S_HEX1); + return UNVIS_NOCHAR; + } + if ((flag & VIS_HTTP1866) && c == '&') { + *astate = SS(0, S_AMP); + return UNVIS_NOCHAR; + } + if ((flag & VIS_MIMESTYLE) && c == '=') { + *astate = SS(0, S_MIME1); + return UNVIS_NOCHAR; + } + *cp = c; + return UNVIS_VALID; + + case S_START: + switch(c) { + case '\\': + *cp = c; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + *cp = (c - '0'); + *astate = SS(0, S_OCTAL2); + return UNVIS_NOCHAR; + case 'M': + *cp = (char)0200; + *astate = SS(0, S_META); + return UNVIS_NOCHAR; + case '^': + *astate = SS(0, S_CTRL); + return UNVIS_NOCHAR; + case 'n': + *cp = '\n'; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + case 'r': + *cp = '\r'; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + case 'b': + *cp = '\b'; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + case 'a': + *cp = '\007'; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + case 'v': + *cp = '\v'; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + case 't': + *cp = '\t'; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + case 'f': + *cp = '\f'; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + case 's': + *cp = ' '; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + case 'E': + *cp = '\033'; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + case 'x': + *astate = SS(0, S_HEX); + return UNVIS_NOCHAR; + case '\n': + /* + * hidden newline + */ + *astate = SS(0, S_GROUND); + return UNVIS_NOCHAR; + case '$': + /* + * hidden marker + */ + *astate = SS(0, S_GROUND); + return UNVIS_NOCHAR; + default: + if (isgraph(c)) { + *cp = c; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + } + } + goto bad; + + case S_META: + if (c == '-') + *astate = SS(0, S_META1); + else if (c == '^') + *astate = SS(0, S_CTRL); + else + goto bad; + return UNVIS_NOCHAR; + + case S_META1: + *astate = SS(0, S_GROUND); + *cp |= c; + return UNVIS_VALID; + + case S_CTRL: + if (c == '?') + *cp |= 0177; + else + *cp |= c & 037; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + + case S_OCTAL2: /* second possible octal digit */ + if (isoctal(uc)) { + /* + * yes - and maybe a third + */ + *cp = (*cp << 3) + (c - '0'); + *astate = SS(0, S_OCTAL3); + return UNVIS_NOCHAR; + } + /* + * no - done with current sequence, push back passed char + */ + *astate = SS(0, S_GROUND); + return UNVIS_VALIDPUSH; + + case S_OCTAL3: /* third possible octal digit */ + *astate = SS(0, S_GROUND); + if (isoctal(uc)) { + *cp = (*cp << 3) + (c - '0'); + return UNVIS_VALID; + } + /* + * we were done, push back passed char + */ + return UNVIS_VALIDPUSH; + + case S_HEX: + if (!isxdigit(uc)) + goto bad; + /*FALLTHROUGH*/ + case S_HEX1: + if (isxdigit(uc)) { + *cp = xtod(uc); + *astate = SS(0, S_HEX2); + return UNVIS_NOCHAR; + } + /* + * no - done with current sequence, push back passed char + */ + *astate = SS(0, S_GROUND); + return UNVIS_VALIDPUSH; + + case S_HEX2: + *astate = S_GROUND; + if (isxdigit(uc)) { + *cp = xtod(uc) | (*cp << 4); + return UNVIS_VALID; + } + return UNVIS_VALIDPUSH; + + case S_MIME1: + if (uc == '\n' || uc == '\r') { + *astate = SS(0, S_EATCRNL); + return UNVIS_NOCHAR; + } + if (isxdigit(uc) && (isdigit(uc) || isupper(uc))) { + *cp = XTOD(uc); + *astate = SS(0, S_MIME2); + return UNVIS_NOCHAR; + } + goto bad; + + case S_MIME2: + if (isxdigit(uc) && (isdigit(uc) || isupper(uc))) { + *astate = SS(0, S_GROUND); + *cp = XTOD(uc) | (*cp << 4); + return UNVIS_VALID; + } + goto bad; + + case S_EATCRNL: + switch (uc) { + case '\r': + case '\n': + return UNVIS_NOCHAR; + case '=': + *astate = SS(0, S_MIME1); + return UNVIS_NOCHAR; + default: + *cp = uc; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + } + + case S_AMP: + *cp = 0; + if (uc == '#') { + *astate = SS(0, S_NUMBER); + return UNVIS_NOCHAR; + } + *astate = SS(0, S_STRING); + /*FALLTHROUGH*/ + + case S_STRING: + ia = *cp; /* index in the array */ + is = GI(*astate); /* index in the string */ + lc = is == 0 ? 0 : nv[ia].name[is - 1]; /* last character */ + + if (uc == ';') + uc = '\0'; + + for (; ia < __arraycount(nv); ia++) { + if (is != 0 && nv[ia].name[is - 1] != lc) + goto bad; + if (nv[ia].name[is] == uc) + break; + } + + if (ia == __arraycount(nv)) + goto bad; + + if (uc != 0) { + *cp = ia; + *astate = SS(is + 1, S_STRING); + return UNVIS_NOCHAR; + } + + *cp = nv[ia].value; + *astate = SS(0, S_GROUND); + return UNVIS_VALID; + + case S_NUMBER: + if (uc == ';') + return UNVIS_VALID; + if (!isdigit(uc)) + goto bad; + *cp += (*cp * 10) + uc - '0'; + return UNVIS_NOCHAR; + + default: + bad: + /* + * decoder in unknown state - (probably uninitialized) + */ + *astate = SS(0, S_GROUND); + return UNVIS_SYNBAD; + } +} + +/* + * strnunvisx - decode src into dst + * + * Number of chars decoded into dst is returned, -1 on error. + * Dst is null terminated. + */ + +int +strnunvisx(char *dst, size_t dlen, const char *src, int flag) +{ + char c; + char t = '\0', *start = dst; + int state = 0; + + _DIAGASSERT(src != NULL); + _DIAGASSERT(dst != NULL); +#define CHECKSPACE() \ + do { \ + if (dlen-- == 0) { \ + errno = ENOSPC; \ + return -1; \ + } \ + } while (0) + + while ((c = *src++) != '\0') { + again: + switch (unvis(&t, c, &state, flag)) { + case UNVIS_VALID: + CHECKSPACE(); + *dst++ = t; + break; + case UNVIS_VALIDPUSH: + CHECKSPACE(); + *dst++ = t; + goto again; + case 0: + case UNVIS_NOCHAR: + break; + case UNVIS_SYNBAD: + errno = EINVAL; + return -1; + default: + _DIAGASSERT(/*CONSTCOND*/0); + errno = EINVAL; + return -1; + } + } + if (unvis(&t, c, &state, UNVIS_END) == UNVIS_VALID) { + CHECKSPACE(); + *dst++ = t; + } + CHECKSPACE(); + *dst = '\0'; + return (int)(dst - start); +} + +int +strunvisx(char *dst, const char *src, int flag) +{ + return strnunvisx(dst, (size_t)~0, src, flag); +} + +int +strunvis(char *dst, const char *src) +{ + return strnunvisx(dst, (size_t)~0, src, 0); +} + +int +strnunvis(char *dst, size_t dlen, const char *src) +{ + return strnunvisx(dst, dlen, src, 0); +} +#endif diff --git a/src/thirdparty/libedit-3.1/src/vi.c b/src/thirdparty/libedit-3.1/src/vi.c new file mode 100644 index 000000000..e7f78494f --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/vi.c @@ -0,0 +1,1160 @@ +/* $NetBSD: vi.c,v 1.64 2021/08/28 17:17:47 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Christos Zoulas of Cornell University. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#if !defined(lint) && !defined(SCCSID) +#if 0 +static char sccsid[] = "@(#)vi.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: vi.c,v 1.64 2021/08/28 17:17:47 christos Exp $"); +#endif +#endif /* not lint && not SCCSID */ + +/* + * vi.c: Vi mode commands. + */ +#include <sys/wait.h> +#include <ctype.h> +#include <limits.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "el.h" +#include "common.h" +#include "emacs.h" +#include "fcns.h" +#include "vi.h" + +static el_action_t cv_action(EditLine *, wint_t); +static el_action_t cv_paste(EditLine *, wint_t); + +/* cv_action(): + * Handle vi actions. + */ +static el_action_t +cv_action(EditLine *el, wint_t c) +{ + + if (el->el_chared.c_vcmd.action != NOP) { + /* 'cc', 'dd' and (possibly) friends */ + if (c != (wint_t)el->el_chared.c_vcmd.action) + return CC_ERROR; + + if (!(c & YANK)) + cv_undo(el); + cv_yank(el, el->el_line.buffer, + (int)(el->el_line.lastchar - el->el_line.buffer)); + el->el_chared.c_vcmd.action = NOP; + el->el_chared.c_vcmd.pos = 0; + if (!(c & YANK)) { + el->el_line.lastchar = el->el_line.buffer; + el->el_line.cursor = el->el_line.buffer; + } + if (c & INSERT) + el->el_map.current = el->el_map.key; + + return CC_REFRESH; + } + el->el_chared.c_vcmd.pos = el->el_line.cursor; + el->el_chared.c_vcmd.action = c; + return CC_ARGHACK; +} + +/* cv_paste(): + * Paste previous deletion before or after the cursor + */ +static el_action_t +cv_paste(EditLine *el, wint_t c) +{ + c_kill_t *k = &el->el_chared.c_kill; + size_t len = (size_t)(k->last - k->buf); + + if (k->buf == NULL || len == 0) + return CC_ERROR; +#ifdef DEBUG_PASTE + (void) fprintf(el->el_errfile, "Paste: \"%.*ls\"\n", (int)len, + k->buf); +#endif + + cv_undo(el); + + if (!c && el->el_line.cursor < el->el_line.lastchar) + el->el_line.cursor++; + + c_insert(el, (int)len); + if (el->el_line.cursor + len > el->el_line.lastchar) + return CC_ERROR; + (void) memcpy(el->el_line.cursor, k->buf, len * + sizeof(*el->el_line.cursor)); + + return CC_REFRESH; +} + + +/* vi_paste_next(): + * Vi paste previous deletion to the right of the cursor + * [p] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_paste_next(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + return cv_paste(el, 0); +} + + +/* vi_paste_prev(): + * Vi paste previous deletion to the left of the cursor + * [P] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_paste_prev(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + return cv_paste(el, 1); +} + + +/* vi_prev_big_word(): + * Vi move to the previous space delimited word + * [B] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_prev_big_word(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_line.cursor == el->el_line.buffer) + return CC_ERROR; + + el->el_line.cursor = cv_prev_word(el->el_line.cursor, + el->el_line.buffer, + el->el_state.argument, + cv__isWord); + + if (el->el_chared.c_vcmd.action != NOP) { + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; +} + + +/* vi_prev_word(): + * Vi move to the previous word + * [b] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_prev_word(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_line.cursor == el->el_line.buffer) + return CC_ERROR; + + el->el_line.cursor = cv_prev_word(el->el_line.cursor, + el->el_line.buffer, + el->el_state.argument, + cv__isword); + + if (el->el_chared.c_vcmd.action != NOP) { + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; +} + + +/* vi_next_big_word(): + * Vi move to the next space delimited word + * [W] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_next_big_word(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_line.cursor >= el->el_line.lastchar - 1) + return CC_ERROR; + + el->el_line.cursor = cv_next_word(el, el->el_line.cursor, + el->el_line.lastchar, el->el_state.argument, cv__isWord); + + if (el->el_map.type == MAP_VI) + if (el->el_chared.c_vcmd.action != NOP) { + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; +} + + +/* vi_next_word(): + * Vi move to the next word + * [w] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_next_word(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_line.cursor >= el->el_line.lastchar - 1) + return CC_ERROR; + + el->el_line.cursor = cv_next_word(el, el->el_line.cursor, + el->el_line.lastchar, el->el_state.argument, cv__isword); + + if (el->el_map.type == MAP_VI) + if (el->el_chared.c_vcmd.action != NOP) { + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; +} + + +/* vi_change_case(): + * Vi change case of character under the cursor and advance one character + * [~] + */ +libedit_private el_action_t +vi_change_case(EditLine *el, wint_t c) +{ + int i; + + if (el->el_line.cursor >= el->el_line.lastchar) + return CC_ERROR; + cv_undo(el); + for (i = 0; i < el->el_state.argument; i++) { + + c = *el->el_line.cursor; + if (iswupper(c)) + *el->el_line.cursor = towlower(c); + else if (iswlower(c)) + *el->el_line.cursor = towupper(c); + + if (++el->el_line.cursor >= el->el_line.lastchar) { + el->el_line.cursor--; + re_fastaddc(el); + break; + } + re_fastaddc(el); + } + return CC_NORM; +} + + +/* vi_change_meta(): + * Vi change prefix command + * [c] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_change_meta(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + /* + * Delete with insert == change: first we delete and then we leave in + * insert mode. + */ + return cv_action(el, DELETE | INSERT); +} + + +/* vi_insert_at_bol(): + * Vi enter insert mode at the beginning of line + * [I] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_insert_at_bol(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_line.cursor = el->el_line.buffer; + cv_undo(el); + el->el_map.current = el->el_map.key; + return CC_CURSOR; +} + + +/* vi_replace_char(): + * Vi replace character under the cursor with the next character typed + * [r] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_replace_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_line.cursor >= el->el_line.lastchar) + return CC_ERROR; + + el->el_map.current = el->el_map.key; + el->el_state.inputmode = MODE_REPLACE_1; + cv_undo(el); + return CC_ARGHACK; +} + + +/* vi_replace_mode(): + * Vi enter replace mode + * [R] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_replace_mode(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_map.current = el->el_map.key; + el->el_state.inputmode = MODE_REPLACE; + cv_undo(el); + return CC_NORM; +} + + +/* vi_substitute_char(): + * Vi replace character under the cursor and enter insert mode + * [s] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_substitute_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + c_delafter(el, el->el_state.argument); + el->el_map.current = el->el_map.key; + return CC_REFRESH; +} + + +/* vi_substitute_line(): + * Vi substitute entire line + * [S] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_substitute_line(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + cv_undo(el); + cv_yank(el, el->el_line.buffer, + (int)(el->el_line.lastchar - el->el_line.buffer)); + (void) em_kill_line(el, 0); + el->el_map.current = el->el_map.key; + return CC_REFRESH; +} + + +/* vi_change_to_eol(): + * Vi change to end of line + * [C] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_change_to_eol(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + cv_undo(el); + cv_yank(el, el->el_line.cursor, + (int)(el->el_line.lastchar - el->el_line.cursor)); + (void) ed_kill_line(el, 0); + el->el_map.current = el->el_map.key; + return CC_REFRESH; +} + + +/* vi_insert(): + * Vi enter insert mode + * [i] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_insert(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_map.current = el->el_map.key; + cv_undo(el); + return CC_NORM; +} + + +/* vi_add(): + * Vi enter insert mode after the cursor + * [a] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_add(EditLine *el, wint_t c __attribute__((__unused__))) +{ + int ret; + + el->el_map.current = el->el_map.key; + if (el->el_line.cursor < el->el_line.lastchar) { + el->el_line.cursor++; + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; + ret = CC_CURSOR; + } else + ret = CC_NORM; + + cv_undo(el); + + return (el_action_t)ret; +} + + +/* vi_add_at_eol(): + * Vi enter insert mode at end of line + * [A] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_add_at_eol(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_map.current = el->el_map.key; + el->el_line.cursor = el->el_line.lastchar; + cv_undo(el); + return CC_CURSOR; +} + + +/* vi_delete_meta(): + * Vi delete prefix command + * [d] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_delete_meta(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + return cv_action(el, DELETE); +} + + +/* vi_end_big_word(): + * Vi move to the end of the current space delimited word + * [E] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_end_big_word(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_line.cursor == el->el_line.lastchar) + return CC_ERROR; + + el->el_line.cursor = cv__endword(el->el_line.cursor, + el->el_line.lastchar, el->el_state.argument, cv__isWord); + + if (el->el_chared.c_vcmd.action != NOP) { + el->el_line.cursor++; + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; +} + + +/* vi_end_word(): + * Vi move to the end of the current word + * [e] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_end_word(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_line.cursor == el->el_line.lastchar) + return CC_ERROR; + + el->el_line.cursor = cv__endword(el->el_line.cursor, + el->el_line.lastchar, el->el_state.argument, cv__isword); + + if (el->el_chared.c_vcmd.action != NOP) { + el->el_line.cursor++; + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; +} + + +/* vi_undo(): + * Vi undo last change + * [u] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_undo(EditLine *el, wint_t c __attribute__((__unused__))) +{ + c_undo_t un = el->el_chared.c_undo; + + if (un.len == -1) + return CC_ERROR; + + /* switch line buffer and undo buffer */ + el->el_chared.c_undo.buf = el->el_line.buffer; + el->el_chared.c_undo.len = el->el_line.lastchar - el->el_line.buffer; + el->el_chared.c_undo.cursor = + (int)(el->el_line.cursor - el->el_line.buffer); + el->el_line.limit = un.buf + (el->el_line.limit - el->el_line.buffer); + el->el_line.buffer = un.buf; + el->el_line.cursor = un.buf + un.cursor; + el->el_line.lastchar = un.buf + un.len; + + return CC_REFRESH; +} + + +/* vi_command_mode(): + * Vi enter command mode (use alternative key bindings) + * [<ESC>] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_command_mode(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + /* [Esc] cancels pending action */ + el->el_chared.c_vcmd.action = NOP; + el->el_chared.c_vcmd.pos = 0; + + el->el_state.doingarg = 0; + + el->el_state.inputmode = MODE_INSERT; + el->el_map.current = el->el_map.alt; +#ifdef VI_MOVE + if (el->el_line.cursor > el->el_line.buffer) + el->el_line.cursor--; +#endif + return CC_CURSOR; +} + + +/* vi_zero(): + * Vi move to the beginning of line + * [0] + */ +libedit_private el_action_t +vi_zero(EditLine *el, wint_t c) +{ + + if (el->el_state.doingarg) + return ed_argument_digit(el, c); + + el->el_line.cursor = el->el_line.buffer; + if (el->el_chared.c_vcmd.action != NOP) { + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; +} + + +/* vi_delete_prev_char(): + * Vi move to previous character (backspace) + * [^H] in insert mode only + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_delete_prev_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_line.cursor <= el->el_line.buffer) + return CC_ERROR; + + c_delbefore1(el); + el->el_line.cursor--; + return CC_REFRESH; +} + + +/* vi_list_or_eof(): + * Vi list choices for completion or indicate end of file if empty line + * [^D] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_list_or_eof(EditLine *el, wint_t c) +{ + + if (el->el_line.cursor == el->el_line.lastchar) { + if (el->el_line.cursor == el->el_line.buffer) { + terminal_writec(el, c); /* then do a EOF */ + return CC_EOF; + } else { + /* + * Here we could list completions, but it is an + * error right now + */ + terminal_beep(el); + return CC_ERROR; + } + } else { +#ifdef notyet + re_goto_bottom(el); + *el->el_line.lastchar = '\0'; /* just in case */ + return CC_LIST_CHOICES; +#else + /* + * Just complain for now. + */ + terminal_beep(el); + return CC_ERROR; +#endif + } +} + + +/* vi_kill_line_prev(): + * Vi cut from beginning of line to cursor + * [^U] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_kill_line_prev(EditLine *el, wint_t c __attribute__((__unused__))) +{ + wchar_t *kp, *cp; + + cp = el->el_line.buffer; + kp = el->el_chared.c_kill.buf; + while (cp < el->el_line.cursor) + *kp++ = *cp++; /* copy it */ + el->el_chared.c_kill.last = kp; + c_delbefore(el, (int)(el->el_line.cursor - el->el_line.buffer)); + el->el_line.cursor = el->el_line.buffer; /* zap! */ + return CC_REFRESH; +} + + +/* vi_search_prev(): + * Vi search history previous + * [?] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_search_prev(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + return cv_search(el, ED_SEARCH_PREV_HISTORY); +} + + +/* vi_search_next(): + * Vi search history next + * [/] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_search_next(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + return cv_search(el, ED_SEARCH_NEXT_HISTORY); +} + + +/* vi_repeat_search_next(): + * Vi repeat current search in the same search direction + * [n] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_repeat_search_next(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_search.patlen == 0) + return CC_ERROR; + else + return cv_repeat_srch(el, el->el_search.patdir); +} + + +/* vi_repeat_search_prev(): + * Vi repeat current search in the opposite search direction + * [N] + */ +/*ARGSUSED*/ +libedit_private el_action_t +vi_repeat_search_prev(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + if (el->el_search.patlen == 0) + return CC_ERROR; + else + return (cv_repeat_srch(el, + el->el_search.patdir == ED_SEARCH_PREV_HISTORY ? + ED_SEARCH_NEXT_HISTORY : ED_SEARCH_PREV_HISTORY)); +} + + +/* vi_next_char(): + * Vi move to the character specified next + * [f] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_next_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + return cv_csearch(el, CHAR_FWD, -1, el->el_state.argument, 0); +} + + +/* vi_prev_char(): + * Vi move to the character specified previous + * [F] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_prev_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + return cv_csearch(el, CHAR_BACK, -1, el->el_state.argument, 0); +} + + +/* vi_to_next_char(): + * Vi move up to the character specified next + * [t] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_to_next_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + return cv_csearch(el, CHAR_FWD, -1, el->el_state.argument, 1); +} + + +/* vi_to_prev_char(): + * Vi move up to the character specified previous + * [T] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_to_prev_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + return cv_csearch(el, CHAR_BACK, -1, el->el_state.argument, 1); +} + + +/* vi_repeat_next_char(): + * Vi repeat current character search in the same search direction + * [;] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_repeat_next_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + return cv_csearch(el, el->el_search.chadir, el->el_search.chacha, + el->el_state.argument, el->el_search.chatflg); +} + + +/* vi_repeat_prev_char(): + * Vi repeat current character search in the opposite search direction + * [,] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_repeat_prev_char(EditLine *el, wint_t c __attribute__((__unused__))) +{ + el_action_t r; + int dir = el->el_search.chadir; + + r = cv_csearch(el, -dir, el->el_search.chacha, + el->el_state.argument, el->el_search.chatflg); + el->el_search.chadir = dir; + return r; +} + + +/* vi_match(): + * Vi go to matching () {} or [] + * [%] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_match(EditLine *el, wint_t c __attribute__((__unused__))) +{ + const wchar_t match_chars[] = L"()[]{}"; + wchar_t *cp; + size_t delta, i, count; + wchar_t o_ch, c_ch; + + *el->el_line.lastchar = '\0'; /* just in case */ + + i = wcscspn(el->el_line.cursor, match_chars); + o_ch = el->el_line.cursor[i]; + if (o_ch == 0) + return CC_ERROR; + delta = (size_t)(wcschr(match_chars, o_ch) - match_chars); + c_ch = match_chars[delta ^ 1]; + count = 1; + delta = 1 - (delta & 1) * 2; + + for (cp = &el->el_line.cursor[i]; count; ) { + cp += delta; + if (cp < el->el_line.buffer || cp >= el->el_line.lastchar) + return CC_ERROR; + if (*cp == o_ch) + count++; + else if (*cp == c_ch) + count--; + } + + el->el_line.cursor = cp; + + if (el->el_chared.c_vcmd.action != NOP) { + /* NB posix says char under cursor should NOT be deleted + for -ve delta - this is different to netbsd vi. */ + if (delta > 0) + el->el_line.cursor++; + cv_delfini(el); + return CC_REFRESH; + } + return CC_CURSOR; +} + +/* vi_undo_line(): + * Vi undo all changes to line + * [U] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_undo_line(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + cv_undo(el); + return hist_get(el); +} + +/* vi_to_column(): + * Vi go to specified column + * [|] + * NB netbsd vi goes to screen column 'n', posix says nth character + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_to_column(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_line.cursor = el->el_line.buffer; + el->el_state.argument--; + return ed_next_char(el, 0); +} + +/* vi_yank_end(): + * Vi yank to end of line + * [Y] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_yank_end(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + cv_yank(el, el->el_line.cursor, + (int)(el->el_line.lastchar - el->el_line.cursor)); + return CC_REFRESH; +} + +/* vi_yank(): + * Vi yank + * [y] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_yank(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + return cv_action(el, YANK); +} + +/* vi_comment_out(): + * Vi comment out current command + * [#] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_comment_out(EditLine *el, wint_t c __attribute__((__unused__))) +{ + + el->el_line.cursor = el->el_line.buffer; + c_insert(el, 1); + *el->el_line.cursor = '#'; + re_refresh(el); + return ed_newline(el, 0); +} + +/* vi_alias(): + * Vi include shell alias + * [@] + * NB: posix implies that we should enter insert mode, however + * this is against historical precedent... + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_alias(EditLine *el, wint_t c __attribute__((__unused__))) +{ + char alias_name[3]; + const char *alias_text; + + if (el->el_chared.c_aliasfun == NULL) + return CC_ERROR; + + alias_name[0] = '_'; + alias_name[2] = 0; + if (el_getc(el, &alias_name[1]) != 1) + return CC_ERROR; + + alias_text = (*el->el_chared.c_aliasfun)(el->el_chared.c_aliasarg, + alias_name); + if (alias_text != NULL) + el_wpush(el, ct_decode_string(alias_text, &el->el_scratch)); + return CC_NORM; +} + +/* vi_to_history_line(): + * Vi go to specified history file line. + * [G] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_to_history_line(EditLine *el, wint_t c __attribute__((__unused__))) +{ + int sv_event_no = el->el_history.eventno; + el_action_t rval; + + + if (el->el_history.eventno == 0) { + (void) wcsncpy(el->el_history.buf, el->el_line.buffer, + EL_BUFSIZ); + el->el_history.last = el->el_history.buf + + (el->el_line.lastchar - el->el_line.buffer); + } + + /* Lack of a 'count' means oldest, not 1 */ + if (!el->el_state.doingarg) { + el->el_history.eventno = 0x7fffffff; + hist_get(el); + } else { + /* This is brain dead, all the rest of this code counts + * upwards going into the past. Here we need count in the + * other direction (to match the output of fc -l). + * I could change the world, but this seems to suffice. + */ + el->el_history.eventno = 1; + if (hist_get(el) == CC_ERROR) + return CC_ERROR; + el->el_history.eventno = 1 + el->el_history.ev.num + - el->el_state.argument; + if (el->el_history.eventno < 0) { + el->el_history.eventno = sv_event_no; + return CC_ERROR; + } + } + rval = hist_get(el); + if (rval == CC_ERROR) + el->el_history.eventno = sv_event_no; + return rval; +} + +/* vi_histedit(): + * Vi edit history line with vi + * [v] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_histedit(EditLine *el, wint_t c __attribute__((__unused__))) +{ + int fd; + pid_t pid; + ssize_t st; + int status; + char tempfile[] = "/tmp/histedit.XXXXXXXXXX"; + char *cp = NULL; + size_t len; + wchar_t *line = NULL; + const char *editor; + + if (el->el_state.doingarg) { + if (vi_to_history_line(el, 0) == CC_ERROR) + return CC_ERROR; + } + + if ((editor = getenv("EDITOR")) == NULL) + editor = "vi"; + fd = mkstemp(tempfile); + if (fd < 0) + return CC_ERROR; + len = (size_t)(el->el_line.lastchar - el->el_line.buffer); +#define TMP_BUFSIZ (EL_BUFSIZ * MB_LEN_MAX) + cp = el_calloc(TMP_BUFSIZ, sizeof(*cp)); + if (cp == NULL) + goto error; + line = el_calloc(len + 1, sizeof(*line)); + if (line == NULL) + goto error; + wcsncpy(line, el->el_line.buffer, len); + line[len] = '\0'; + wcstombs(cp, line, TMP_BUFSIZ - 1); + cp[TMP_BUFSIZ - 1] = '\0'; + len = strlen(cp); + write(fd, cp, len); + write(fd, "\n", (size_t)1); + pid = fork(); + switch (pid) { + case -1: + goto error; + case 0: + close(fd); + execlp(editor, editor, tempfile, (char *)NULL); + exit(0); + /*NOTREACHED*/ + default: + while (waitpid(pid, &status, 0) != pid) + continue; + lseek(fd, (off_t)0, SEEK_SET); + st = read(fd, cp, TMP_BUFSIZ - 1); + if (st > 0) { + cp[st] = '\0'; + len = (size_t)(el->el_line.limit - el->el_line.buffer); + len = mbstowcs(el->el_line.buffer, cp, len); + if (len > 0 && el->el_line.buffer[len - 1] == '\n') + --len; + } + else + len = 0; + el->el_line.cursor = el->el_line.buffer; + el->el_line.lastchar = el->el_line.buffer + len; + el_free(cp); + el_free(line); + break; + } + + close(fd); + unlink(tempfile); + /* return CC_REFRESH; */ + return ed_newline(el, 0); +error: + el_free(line); + el_free(cp); + close(fd); + unlink(tempfile); + return CC_ERROR; +} + +/* vi_history_word(): + * Vi append word from previous input line + * [_] + * Who knows where this one came from! + * '_' in vi means 'entire current line', so 'cc' is a synonym for 'c_' + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_history_word(EditLine *el, wint_t c __attribute__((__unused__))) +{ + const wchar_t *wp = HIST_FIRST(el); + const wchar_t *wep, *wsp; + int len; + wchar_t *cp; + const wchar_t *lim; + + if (wp == NULL) + return CC_ERROR; + + wep = wsp = NULL; + do { + while (iswspace(*wp)) + wp++; + if (*wp == 0) + break; + wsp = wp; + while (*wp && !iswspace(*wp)) + wp++; + wep = wp; + } while ((!el->el_state.doingarg || --el->el_state.argument > 0) + && *wp != 0); + + if (wsp == NULL || (el->el_state.doingarg && el->el_state.argument != 0)) + return CC_ERROR; + + cv_undo(el); + len = (int)(wep - wsp); + if (el->el_line.cursor < el->el_line.lastchar) + el->el_line.cursor++; + c_insert(el, len + 1); + cp = el->el_line.cursor; + lim = el->el_line.limit; + if (cp < lim) + *cp++ = ' '; + while (wsp < wep && cp < lim) + *cp++ = *wsp++; + el->el_line.cursor = cp; + + el->el_map.current = el->el_map.key; + return CC_REFRESH; +} + +/* vi_redo(): + * Vi redo last non-motion command + * [.] + */ +libedit_private el_action_t +/*ARGSUSED*/ +vi_redo(EditLine *el, wint_t c __attribute__((__unused__))) +{ + c_redo_t *r = &el->el_chared.c_redo; + + if (!el->el_state.doingarg && r->count) { + el->el_state.doingarg = 1; + el->el_state.argument = r->count; + } + + el->el_chared.c_vcmd.pos = el->el_line.cursor; + el->el_chared.c_vcmd.action = r->action; + if (r->pos != r->buf) { + if (r->pos + 1 > r->lim) + /* sanity */ + r->pos = r->lim - 1; + r->pos[0] = 0; + el_wpush(el, r->buf); + } + + el->el_state.thiscmd = r->cmd; + el->el_state.thisch = r->ch; + return (*el->el_map.func[r->cmd])(el, r->ch); +} diff --git a/src/thirdparty/libedit-3.1/src/vis.c b/src/thirdparty/libedit-3.1/src/vis.c new file mode 100644 index 000000000..a454874d7 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/vis.c @@ -0,0 +1,774 @@ +/* $NetBSD: vis.c,v 1.75 2021/06/18 10:57:14 christos Exp $ */ + +/*- + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/*- + * Copyright (c) 1999, 2005 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" + +#if defined(LIBC_SCCS) && !defined(lint) +__RCSID("$NetBSD: vis.c,v 1.75 2021/06/18 10:57:14 christos Exp $"); +#endif /* LIBC_SCCS and not lint */ +#ifdef __FBSDID +__FBSDID("$FreeBSD$"); +#endif + +#include <sys/types.h> +#include <sys/param.h> + +#include <stdint.h> +#include <assert.h> +#include <vis.h> +#include <errno.h> +#include <stdlib.h> +#include <wchar.h> +#include <wctype.h> + +#ifdef __weak_alias +__weak_alias(strvisx,_strvisx) +#endif + +#if !HAVE_VIS || !HAVE_SVIS +#include <ctype.h> +#include <limits.h> +#include <stdio.h> +#include <string.h> + +/* + * The reason for going through the trouble to deal with character encodings + * in vis(3), is that we use this to safe encode output of commands. This + * safe encoding varies depending on the character set. For example if we + * display ps output in French, we don't want to display French characters + * as M-foo. + */ + +static wchar_t *do_svis(wchar_t *, wint_t, int, wint_t, const wchar_t *); + +#undef BELL +#define BELL L'\a' + +#if defined(LC_C_LOCALE) +#define iscgraph(c) isgraph_l(c, LC_C_LOCALE) +#else +/* Keep it simple for now, no locale stuff */ +#define iscgraph(c) isgraph(c) +#ifdef notyet +#include <locale.h> +static int +iscgraph(int c) { + int rv; + char *ol; + + ol = setlocale(LC_CTYPE, "C"); + rv = isgraph(c); + if (ol) + setlocale(LC_CTYPE, ol); + return rv; +} +#endif +#endif + +#define ISGRAPH(flags, c) \ + (((flags) & VIS_NOLOCALE) ? iscgraph(c) : iswgraph(c)) + +#define iswoctal(c) (((u_char)(c)) >= L'0' && ((u_char)(c)) <= L'7') +#define iswwhite(c) (c == L' ' || c == L'\t' || c == L'\n') +#define iswsafe(c) (c == L'\b' || c == BELL || c == L'\r') +#define xtoa(c) L"0123456789abcdef"[c] +#define XTOA(c) L"0123456789ABCDEF"[c] + +#define MAXEXTRAS 30 + +static const wchar_t char_shell[] = L"'`\";&<>()|{}]\\$!^~"; +static const wchar_t char_glob[] = L"*?[#"; + +#if !HAVE_NBTOOL_CONFIG_H +#ifndef __NetBSD__ +/* + * On NetBSD MB_LEN_MAX is currently 32 which does not fit on any integer + * integral type and it is probably wrong, since currently the maximum + * number of bytes and character needs is 6. Until this is fixed, the + * loops below are using sizeof(uint64_t) - 1 instead of MB_LEN_MAX, and + * the assertion is commented out. + */ +#ifdef __FreeBSD__ +/* + * On FreeBSD including <sys/systm.h> for CTASSERT only works in kernel + * mode. + */ +#ifndef CTASSERT +#define CTASSERT(x) _CTASSERT(x, __LINE__) +#define _CTASSERT(x, y) __CTASSERT(x, y) +#define __CTASSERT(x, y) typedef char __assert ## y[(x) ? 1 : -1] +#endif +#endif /* __FreeBSD__ */ +/* +CTASSERT(MB_LEN_MAX <= sizeof(uint64_t)); +*/ +#endif /* !__NetBSD__ */ +#endif + +/* + * This is do_hvis, for HTTP style (RFC 1808) + */ +static wchar_t * +do_hvis(wchar_t *dst, wint_t c, int flags, wint_t nextc, const wchar_t *extra) +{ + if (iswalnum(c) + /* safe */ + || c == L'$' || c == L'-' || c == L'_' || c == L'.' || c == L'+' + /* extra */ + || c == L'!' || c == L'*' || c == L'\'' || c == L'(' || c == L')' + || c == L',') + dst = do_svis(dst, c, flags, nextc, extra); + else { + *dst++ = L'%'; + *dst++ = xtoa(((unsigned int)c >> 4) & 0xf); + *dst++ = xtoa((unsigned int)c & 0xf); + } + + return dst; +} + +/* + * This is do_mvis, for Quoted-Printable MIME (RFC 2045) + * NB: No handling of long lines or CRLF. + */ +static wchar_t * +do_mvis(wchar_t *dst, wint_t c, int flags, wint_t nextc, const wchar_t *extra) +{ + if ((c != L'\n') && + /* Space at the end of the line */ + ((iswspace(c) && (nextc == L'\r' || nextc == L'\n')) || + /* Out of range */ + (!iswspace(c) && (c < 33 || (c > 60 && c < 62) || c > 126)) || + /* Specific char to be escaped */ + wcschr(L"#$@[\\]^`{|}~", c) != NULL)) { + *dst++ = L'='; + *dst++ = XTOA(((unsigned int)c >> 4) & 0xf); + *dst++ = XTOA((unsigned int)c & 0xf); + } else + dst = do_svis(dst, c, flags, nextc, extra); + return dst; +} + +/* + * Output single byte of multibyte character. + */ +static wchar_t * +do_mbyte(wchar_t *dst, wint_t c, int flags, wint_t nextc, int iswextra) +{ + if (flags & VIS_CSTYLE) { + switch (c) { + case L'\n': + *dst++ = L'\\'; *dst++ = L'n'; + return dst; + case L'\r': + *dst++ = L'\\'; *dst++ = L'r'; + return dst; + case L'\b': + *dst++ = L'\\'; *dst++ = L'b'; + return dst; + case BELL: + *dst++ = L'\\'; *dst++ = L'a'; + return dst; + case L'\v': + *dst++ = L'\\'; *dst++ = L'v'; + return dst; + case L'\t': + *dst++ = L'\\'; *dst++ = L't'; + return dst; + case L'\f': + *dst++ = L'\\'; *dst++ = L'f'; + return dst; + case L' ': + *dst++ = L'\\'; *dst++ = L's'; + return dst; + case L'\0': + *dst++ = L'\\'; *dst++ = L'0'; + if (iswoctal(nextc)) { + *dst++ = L'0'; + *dst++ = L'0'; + } + return dst; + /* We cannot encode these characters in VIS_CSTYLE + * because they special meaning */ + case L'n': + case L'r': + case L'b': + case L'a': + case L'v': + case L't': + case L'f': + case L's': + case L'0': + case L'M': + case L'^': + case L'$': /* vis(1) -l */ + break; + default: + if (ISGRAPH(flags, c) && !iswoctal(c)) { + *dst++ = L'\\'; + *dst++ = c; + return dst; + } + } + } + if (iswextra || ((c & 0177) == L' ') || (flags & VIS_OCTAL)) { + *dst++ = L'\\'; + *dst++ = (u_char)(((u_int32_t)(u_char)c >> 6) & 03) + L'0'; + *dst++ = (u_char)(((u_int32_t)(u_char)c >> 3) & 07) + L'0'; + *dst++ = (c & 07) + L'0'; + } else { + if ((flags & VIS_NOSLASH) == 0) + *dst++ = L'\\'; + + if (c & 0200) { + c &= 0177; + *dst++ = L'M'; + } + + if (iswcntrl(c)) { + *dst++ = L'^'; + if (c == 0177) + *dst++ = L'?'; + else + *dst++ = c + L'@'; + } else { + *dst++ = L'-'; + *dst++ = c; + } + } + + return dst; +} + +/* + * This is do_vis, the central code of vis. + * dst: Pointer to the destination buffer + * c: Character to encode + * flags: Flags word + * nextc: The character following 'c' + * extra: Pointer to the list of extra characters to be + * backslash-protected. + */ +static wchar_t * +do_svis(wchar_t *dst, wint_t c, int flags, wint_t nextc, const wchar_t *extra) +{ + int iswextra, i, shft; + uint64_t bmsk, wmsk; + + iswextra = wcschr(extra, c) != NULL; + if (!iswextra && (ISGRAPH(flags, c) || iswwhite(c) || + ((flags & VIS_SAFE) && iswsafe(c)))) { + *dst++ = c; + return dst; + } + + /* See comment in istrsenvisx() output loop, below. */ + wmsk = 0; + for (i = sizeof(wmsk) - 1; i >= 0; i--) { + shft = i * NBBY; + bmsk = (uint64_t)0xffLL << shft; + wmsk |= bmsk; + if ((c & wmsk) || i == 0) + dst = do_mbyte(dst, (wint_t)( + (uint64_t)(c & bmsk) >> shft), + flags, nextc, iswextra); + } + + return dst; +} + +typedef wchar_t *(*visfun_t)(wchar_t *, wint_t, int, wint_t, const wchar_t *); + +/* + * Return the appropriate encoding function depending on the flags given. + */ +static visfun_t +getvisfun(int flags) +{ + if (flags & VIS_HTTPSTYLE) + return do_hvis; + if (flags & VIS_MIMESTYLE) + return do_mvis; + return do_svis; +} + +/* + * Expand list of extra characters to not visually encode. + */ +static wchar_t * +makeextralist(int flags, const char *src) +{ + wchar_t *dst, *d; + size_t len; + const wchar_t *s; + mbstate_t mbstate; + + len = strlen(src); + if ((dst = calloc(len + MAXEXTRAS, sizeof(*dst))) == NULL) + return NULL; + + memset(&mbstate, 0, sizeof(mbstate)); + if ((flags & VIS_NOLOCALE) + || mbsrtowcs(dst, &src, len, &mbstate) == (size_t)-1) { + size_t i; + for (i = 0; i < len; i++) + dst[i] = (wchar_t)(u_char)src[i]; + d = dst + len; + } else + d = dst + wcslen(dst); + + if (flags & VIS_GLOB) + for (s = char_glob; *s; *d++ = *s++) + continue; + + if (flags & VIS_SHELL) + for (s = char_shell; *s; *d++ = *s++) + continue; + + if (flags & VIS_SP) *d++ = L' '; + if (flags & VIS_TAB) *d++ = L'\t'; + if (flags & VIS_NL) *d++ = L'\n'; + if (flags & VIS_DQ) *d++ = L'"'; + if ((flags & VIS_NOSLASH) == 0) *d++ = L'\\'; + *d = L'\0'; + + return dst; +} + +/* + * istrsenvisx() + * The main internal function. + * All user-visible functions call this one. + */ +static int +istrsenvisx(char **mbdstp, size_t *dlen, const char *mbsrc, size_t mblength, + int flags, const char *mbextra, int *cerr_ptr) +{ + wchar_t *dst, *src, *pdst, *psrc, *start, *extra; + size_t len, olen; + uint64_t bmsk, wmsk; + wint_t c; + visfun_t f; + int clen = 0, cerr, error = -1, i, shft; + char *mbdst, *mdst; + ssize_t mbslength, maxolen; + mbstate_t mbstate; + + _DIAGASSERT(mbdstp != NULL); + _DIAGASSERT(mbsrc != NULL || mblength == 0); + _DIAGASSERT(mbextra != NULL); + + mbslength = (ssize_t)mblength; + /* + * When inputing a single character, must also read in the + * next character for nextc, the look-ahead character. + */ + if (mbslength == 1) + mbslength++; + + /* + * Input (mbsrc) is a char string considered to be multibyte + * characters. The input loop will read this string pulling + * one character, possibly multiple bytes, from mbsrc and + * converting each to wchar_t in src. + * + * The vis conversion will be done using the wide char + * wchar_t string. + * + * This will then be converted back to a multibyte string to + * return to the caller. + */ + + /* Allocate space for the wide char strings */ + psrc = pdst = extra = NULL; + mdst = NULL; + if ((psrc = calloc(mbslength + 1, sizeof(*psrc))) == NULL) + return -1; + if ((pdst = calloc((16 * mbslength) + 1, sizeof(*pdst))) == NULL) + goto out; + if (*mbdstp == NULL) { + if ((mdst = calloc((16 * mbslength) + 1, sizeof(*mdst))) == NULL) + goto out; + *mbdstp = mdst; + } + + mbdst = *mbdstp; + dst = pdst; + src = psrc; + + if (flags & VIS_NOLOCALE) { + /* Do one byte at a time conversion */ + cerr = 1; + } else { + /* Use caller's multibyte conversion error flag. */ + cerr = cerr_ptr ? *cerr_ptr : 0; + } + + /* + * Input loop. + * Handle up to mblength characters (not bytes). We do not + * stop at NULs because we may be processing a block of data + * that includes NULs. + */ + memset(&mbstate, 0, sizeof(mbstate)); + while (mbslength > 0) { + /* Convert one multibyte character to wchar_t. */ + if (!cerr) + clen = mbrtowc(src, mbsrc, MIN(mbslength, MB_LEN_MAX), + &mbstate); + if (cerr || clen < 0) { + /* Conversion error, process as a byte instead. */ + *src = (wint_t)(u_char)*mbsrc; + clen = 1; + cerr = 1; + } + if (clen == 0) { + /* + * NUL in input gives 0 return value. process + * as single NUL byte and keep going. + */ + clen = 1; + } + /* Advance buffer character pointer. */ + src++; + /* Advance input pointer by number of bytes read. */ + mbsrc += clen; + /* Decrement input byte count. */ + mbslength -= clen; + } + len = src - psrc; + src = psrc; + + /* + * In the single character input case, we will have actually + * processed two characters, c and nextc. Reset len back to + * just a single character. + */ + if (mblength < len) + len = mblength; + + /* Convert extra argument to list of characters for this mode. */ + extra = makeextralist(flags, mbextra); + if (!extra) { + if (dlen && *dlen == 0) { + errno = ENOSPC; + goto out; + } + *mbdst = '\0'; /* can't create extra, return "" */ + error = 0; + goto out; + } + + /* Look up which processing function to call. */ + f = getvisfun(flags); + + /* + * Main processing loop. + * Call do_Xvis processing function one character at a time + * with next character available for look-ahead. + */ + for (start = dst; len > 0; len--) { + c = *src++; + dst = (*f)(dst, c, flags, len >= 1 ? *src : L'\0', extra); + if (dst == NULL) { + errno = ENOSPC; + goto out; + } + } + + /* Terminate the string in the buffer. */ + *dst = L'\0'; + + /* + * Output loop. + * Convert wchar_t string back to multibyte output string. + * If we have hit a multi-byte conversion error on input, + * output byte-by-byte here. Else use wctomb(). + */ + len = wcslen(start); + maxolen = dlen ? *dlen : (wcslen(start) * MB_LEN_MAX + 1); + olen = 0; + memset(&mbstate, 0, sizeof(mbstate)); + for (dst = start; len > 0; len--) { + if (!cerr) + clen = wcrtomb(mbdst, *dst, &mbstate); + if (cerr || clen < 0) { + /* + * Conversion error, process as a byte(s) instead. + * Examine each byte and higher-order bytes for + * data. E.g., + * 0x000000000000a264 -> a2 64 + * 0x000000001f00a264 -> 1f 00 a2 64 + */ + clen = 0; + wmsk = 0; + for (i = sizeof(wmsk) - 1; i >= 0; i--) { + shft = i * NBBY; + bmsk = (uint64_t)0xffLL << shft; + wmsk |= bmsk; + if ((*dst & wmsk) || i == 0) + mbdst[clen++] = (char)( + (uint64_t)(*dst & bmsk) >> + shft); + } + cerr = 1; + } + /* If this character would exceed our output limit, stop. */ + if (olen + clen > (size_t)maxolen) + break; + /* Advance output pointer by number of bytes written. */ + mbdst += clen; + /* Advance buffer character pointer. */ + dst++; + /* Incrment output character count. */ + olen += clen; + } + + /* Terminate the output string. */ + *mbdst = '\0'; + + if (flags & VIS_NOLOCALE) { + /* Pass conversion error flag out. */ + if (cerr_ptr) + *cerr_ptr = cerr; + } + + free(extra); + free(pdst); + free(psrc); + + return (int)olen; +out: + free(extra); + free(pdst); + free(psrc); + free(mdst); + return error; +} + +static int +istrsenvisxl(char **mbdstp, size_t *dlen, const char *mbsrc, + int flags, const char *mbextra, int *cerr_ptr) +{ + return istrsenvisx(mbdstp, dlen, mbsrc, + mbsrc != NULL ? strlen(mbsrc) : 0, flags, mbextra, cerr_ptr); +} + +#endif + +#if !HAVE_SVIS +/* + * The "svis" variants all take an "extra" arg that is a pointer + * to a NUL-terminated list of characters to be encoded, too. + * These functions are useful e. g. to encode strings in such a + * way so that they are not interpreted by a shell. + */ + +char * +svis(char *mbdst, int c, int flags, int nextc, const char *mbextra) +{ + char cc[2]; + int ret; + + cc[0] = c; + cc[1] = nextc; + + ret = istrsenvisx(&mbdst, NULL, cc, 1, flags, mbextra, NULL); + if (ret < 0) + return NULL; + return mbdst + ret; +} + +char * +snvis(char *mbdst, size_t dlen, int c, int flags, int nextc, const char *mbextra) +{ + char cc[2]; + int ret; + + cc[0] = c; + cc[1] = nextc; + + ret = istrsenvisx(&mbdst, &dlen, cc, 1, flags, mbextra, NULL); + if (ret < 0) + return NULL; + return mbdst + ret; +} + +int +strsvis(char *mbdst, const char *mbsrc, int flags, const char *mbextra) +{ + return istrsenvisxl(&mbdst, NULL, mbsrc, flags, mbextra, NULL); +} + +int +strsnvis(char *mbdst, size_t dlen, const char *mbsrc, int flags, const char *mbextra) +{ + return istrsenvisxl(&mbdst, &dlen, mbsrc, flags, mbextra, NULL); +} + +int +strsvisx(char *mbdst, const char *mbsrc, size_t len, int flags, const char *mbextra) +{ + return istrsenvisx(&mbdst, NULL, mbsrc, len, flags, mbextra, NULL); +} + +int +strsnvisx(char *mbdst, size_t dlen, const char *mbsrc, size_t len, int flags, + const char *mbextra) +{ + return istrsenvisx(&mbdst, &dlen, mbsrc, len, flags, mbextra, NULL); +} + +int +strsenvisx(char *mbdst, size_t dlen, const char *mbsrc, size_t len, int flags, + const char *mbextra, int *cerr_ptr) +{ + return istrsenvisx(&mbdst, &dlen, mbsrc, len, flags, mbextra, cerr_ptr); +} +#endif + +#if !HAVE_VIS +/* + * vis - visually encode characters + */ +char * +vis(char *mbdst, int c, int flags, int nextc) +{ + char cc[2]; + int ret; + + cc[0] = c; + cc[1] = nextc; + + ret = istrsenvisx(&mbdst, NULL, cc, 1, flags, "", NULL); + if (ret < 0) + return NULL; + return mbdst + ret; +} + +char * +nvis(char *mbdst, size_t dlen, int c, int flags, int nextc) +{ + char cc[2]; + int ret; + + cc[0] = c; + cc[1] = nextc; + + ret = istrsenvisx(&mbdst, &dlen, cc, 1, flags, "", NULL); + if (ret < 0) + return NULL; + return mbdst + ret; +} + +/* + * strvis - visually encode characters from src into dst + * + * Dst must be 4 times the size of src to account for possible + * expansion. The length of dst, not including the trailing NULL, + * is returned. + */ + +int +strvis(char *mbdst, const char *mbsrc, int flags) +{ + return istrsenvisxl(&mbdst, NULL, mbsrc, flags, "", NULL); +} + +int +strnvis(char *mbdst, size_t dlen, const char *mbsrc, int flags) +{ + return istrsenvisxl(&mbdst, &dlen, mbsrc, flags, "", NULL); +} + +int +stravis(char **mbdstp, const char *mbsrc, int flags) +{ + *mbdstp = NULL; + return istrsenvisxl(mbdstp, NULL, mbsrc, flags, "", NULL); +} + +/* + * strvisx - visually encode characters from src into dst + * + * Dst must be 4 times the size of src to account for possible + * expansion. The length of dst, not including the trailing NULL, + * is returned. + * + * Strvisx encodes exactly len characters from src into dst. + * This is useful for encoding a block of data. + */ + +int +strvisx(char *mbdst, const char *mbsrc, size_t len, int flags) +{ + return istrsenvisx(&mbdst, NULL, mbsrc, len, flags, "", NULL); +} + +int +strnvisx(char *mbdst, size_t dlen, const char *mbsrc, size_t len, int flags) +{ + return istrsenvisx(&mbdst, &dlen, mbsrc, len, flags, "", NULL); +} + +int +strenvisx(char *mbdst, size_t dlen, const char *mbsrc, size_t len, int flags, + int *cerr_ptr) +{ + return istrsenvisx(&mbdst, &dlen, mbsrc, len, flags, "", cerr_ptr); +} +#endif diff --git a/src/thirdparty/libedit-3.1/src/vis.h b/src/thirdparty/libedit-3.1/src/vis.h new file mode 100644 index 000000000..65ee43300 --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/vis.h @@ -0,0 +1,117 @@ +/* $NetBSD: vis.h,v 1.26 2022/05/20 21:31:24 andvar Exp $ */ + +/*- + * Copyright (c) 1990, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)vis.h 8.1 (Berkeley) 6/2/93 + */ + +#ifndef _VIS_H_ +#define _VIS_H_ + +/* + * to select alternate encoding format + */ +#define VIS_OCTAL 0x0001 /* use octal \ddd format */ +#define VIS_CSTYLE 0x0002 /* use \[nrft0..] where appropriate */ + +/* + * to alter set of characters encoded (default is to encode all + * non-graphic except space, tab, and newline). + */ +#define VIS_SP 0x0004 /* also encode space */ +#define VIS_TAB 0x0008 /* also encode tab */ +#define VIS_NL 0x0010 /* also encode newline */ +#define VIS_WHITE (VIS_SP | VIS_TAB | VIS_NL) +#define VIS_SAFE 0x0020 /* only encode "unsafe" characters */ +#define VIS_DQ 0x8000 /* also encode double quotes */ + +/* + * other + */ +#define VIS_NOSLASH 0x0040 /* inhibit printing '\' */ +#define VIS_HTTP1808 0x0080 /* http-style escape % hex hex */ +#define VIS_HTTPSTYLE 0x0080 /* http-style escape % hex hex */ +#define VIS_MIMESTYLE 0x0100 /* mime-style escape = HEX HEX */ +#define VIS_HTTP1866 0x0200 /* http-style &#num; or &string; */ +#define VIS_NOESCAPE 0x0400 /* don't decode `\' */ +#define _VIS_END 0x0800 /* for unvis */ +#define VIS_GLOB 0x1000 /* encode glob(3) magic characters */ +#define VIS_SHELL 0x2000 /* encode shell special characters [not glob] */ +#define VIS_META (VIS_WHITE | VIS_GLOB | VIS_SHELL) +#define VIS_NOLOCALE 0x4000 /* encode using the C locale */ + +/* + * unvis return codes + */ +#define UNVIS_VALID 1 /* character valid */ +#define UNVIS_VALIDPUSH 2 /* character valid, push back passed char */ +#define UNVIS_NOCHAR 3 /* valid sequence, no character produced */ +#define UNVIS_SYNBAD -1 /* unrecognized escape sequence */ +#define UNVIS_ERROR -2 /* decoder in unknown state (unrecoverable) */ + +/* + * unvis flags + */ +#define UNVIS_END _VIS_END /* no more characters */ + +__BEGIN_DECLS +char *vis(char *, int, int, int); +char *nvis(char *, size_t, int, int, int); + +char *svis(char *, int, int, int, const char *); +char *snvis(char *, size_t, int, int, int, const char *); + +int strvis(char *, const char *, int); +int stravis(char **, const char *, int); +int strnvis(char *, size_t, const char *, int); + +int strsvis(char *, const char *, int, const char *); +int strsnvis(char *, size_t, const char *, int, const char *); + +int strvisx(char *, const char *, size_t, int); +int strnvisx(char *, size_t, const char *, size_t, int); +int strenvisx(char *, size_t, const char *, size_t, int, int *); + +int strsvisx(char *, const char *, size_t, int, const char *); +int strsnvisx(char *, size_t, const char *, size_t, int, const char *); +int strsenvisx(char *, size_t, const char *, size_t , int, const char *, + int *); + +int strunvis(char *, const char *); +int strnunvis(char *, size_t, const char *); + +int strunvisx(char *, const char *, int); +int strnunvisx(char *, size_t, const char *, int); + +#ifndef __LIBC12_SOURCE__ +int unvis(char *, int, int *, int); +#endif +__END_DECLS + +#endif /* !_VIS_H_ */ diff --git a/src/thirdparty/libedit-3.1/src/wcsdup.c b/src/thirdparty/libedit-3.1/src/wcsdup.c new file mode 100644 index 000000000..2405e0d7e --- /dev/null +++ b/src/thirdparty/libedit-3.1/src/wcsdup.c @@ -0,0 +1,45 @@ +/* $NetBSD: wcsdup.c,v 1.6 2022/03/12 17:31:40 christos Exp $ */ + +/* + * Copyright (C) 2006 Aleksey Cheusov + * + * This material is provided "as is", with absolutely no warranty expressed + * or implied. Any use is at your own risk. + * + * Permission to use or copy this software for any purpose is hereby granted + * without fee. Permission to modify the code and to distribute modified + * code is also granted without any restrictions. + */ + +#ifndef HAVE_WCSDUP + +#include "config.h" + +#if defined(LIBC_SCCS) && !defined(lint) +__RCSID("$NetBSD: wcsdup.c,v 1.6 2022/03/12 17:31:40 christos Exp $"); +#endif /* LIBC_SCCS and not lint */ + +#include <stdlib.h> +#include <assert.h> +#include <errno.h> +#include <wchar.h> + +wchar_t * +wcsdup(const wchar_t *str) +{ + wchar_t *copy; + size_t len; + + _DIAGASSERT(str != NULL); + + len = wcslen(str) + 1; + + copy = NULL; + errno = reallocarr(©, len, sizeof(*copy)); + if (errno) + return NULL; + + return wmemcpy(copy, str, len); +} + +#endif From b6e930f77ec8a27d9a4b7951ba4a43dcd250a738 Mon Sep 17 00:00:00 2001 From: ReplayCoding <replaycoding@gmail.com> Date: Sun, 19 Feb 2023 15:00:48 -0800 Subject: [PATCH 15/24] add working tcmalloc --- .gitignore | 82 + src/thirdparty/gperftools-2.0/AUTHORS | 2 + src/thirdparty/gperftools-2.0/COPYING | 28 + src/thirdparty/gperftools-2.0/ChangeLog | 646 ++ src/thirdparty/gperftools-2.0/INSTALL | 539 ++ src/thirdparty/gperftools-2.0/Makefile.am | 1386 +++++ src/thirdparty/gperftools-2.0/NEWS | 338 ++ src/thirdparty/gperftools-2.0/README | 265 + .../gperftools-2.0/README_windows.txt | 118 + src/thirdparty/gperftools-2.0/TODO | 47 + src/thirdparty/gperftools-2.0/autogen.sh | 54 + src/thirdparty/gperftools-2.0/compile | 142 + src/thirdparty/gperftools-2.0/config.guess | 1526 +++++ src/thirdparty/gperftools-2.0/config.sub | 1658 +++++ src/thirdparty/gperftools-2.0/configure.ac | 421 ++ src/thirdparty/gperftools-2.0/depcomp | 589 ++ .../doc/cpuprofile-fileformat.html | 264 + .../gperftools-2.0/doc/cpuprofile.html | 521 ++ .../gperftools-2.0/doc/designstyle.css | 109 + .../gperftools-2.0/doc/heap-example1.png | Bin 0 -> 37619 bytes .../gperftools-2.0/doc/heap_checker.html | 534 ++ .../gperftools-2.0/doc/heapprofile.html | 373 ++ src/thirdparty/gperftools-2.0/doc/index.html | 20 + .../gperftools-2.0/doc/overview.dot | 15 + .../gperftools-2.0/doc/overview.gif | Bin 0 -> 6472 bytes .../gperftools-2.0/doc/pageheap.dot | 29 + .../gperftools-2.0/doc/pageheap.gif | Bin 0 -> 15486 bytes .../gperftools-2.0/doc/pprof-test-big.gif | Bin 0 -> 111566 bytes .../gperftools-2.0/doc/pprof-test.gif | Bin 0 -> 56995 bytes .../doc/pprof-vsnprintf-big.gif | Bin 0 -> 100721 bytes .../gperftools-2.0/doc/pprof-vsnprintf.gif | Bin 0 -> 31054 bytes src/thirdparty/gperftools-2.0/doc/pprof.1 | 131 + .../gperftools-2.0/doc/pprof.see_also | 11 + .../doc/pprof_remote_servers.html | 260 + src/thirdparty/gperftools-2.0/doc/spanmap.dot | 22 + src/thirdparty/gperftools-2.0/doc/spanmap.gif | Bin 0 -> 8482 bytes .../gperftools-2.0/doc/t-test1.times.txt | 480 ++ ...loc-opspercpusec.vs.threads.1024.bytes.png | Bin 0 -> 1882 bytes ...lloc-opspercpusec.vs.threads.128.bytes.png | Bin 0 -> 1731 bytes ...c-opspercpusec.vs.threads.131072.bytes.png | Bin 0 -> 1314 bytes ...oc-opspercpusec.vs.threads.16384.bytes.png | Bin 0 -> 1815 bytes ...loc-opspercpusec.vs.threads.2048.bytes.png | Bin 0 -> 1877 bytes ...lloc-opspercpusec.vs.threads.256.bytes.png | Bin 0 -> 1838 bytes ...oc-opspercpusec.vs.threads.32768.bytes.png | Bin 0 -> 1516 bytes ...loc-opspercpusec.vs.threads.4096.bytes.png | Bin 0 -> 2005 bytes ...lloc-opspercpusec.vs.threads.512.bytes.png | Bin 0 -> 1683 bytes ...alloc-opspercpusec.vs.threads.64.bytes.png | Bin 0 -> 1656 bytes ...oc-opspercpusec.vs.threads.65536.bytes.png | Bin 0 -> 1498 bytes ...loc-opspercpusec.vs.threads.8192.bytes.png | Bin 0 -> 1912 bytes .../tcmalloc-opspersec.vs.size.1.threads.png | Bin 0 -> 1689 bytes .../tcmalloc-opspersec.vs.size.12.threads.png | Bin 0 -> 2216 bytes .../tcmalloc-opspersec.vs.size.16.threads.png | Bin 0 -> 2010 bytes .../tcmalloc-opspersec.vs.size.2.threads.png | Bin 0 -> 2163 bytes .../tcmalloc-opspersec.vs.size.20.threads.png | Bin 0 -> 2147 bytes .../tcmalloc-opspersec.vs.size.3.threads.png | Bin 0 -> 2270 bytes .../tcmalloc-opspersec.vs.size.4.threads.png | Bin 0 -> 2174 bytes .../tcmalloc-opspersec.vs.size.5.threads.png | Bin 0 -> 1995 bytes .../tcmalloc-opspersec.vs.size.8.threads.png | Bin 0 -> 2156 bytes .../gperftools-2.0/doc/tcmalloc.html | 765 +++ .../gperftools-2.0/doc/threadheap.dot | 21 + .../gperftools-2.0/doc/threadheap.gif | Bin 0 -> 7571 bytes src/thirdparty/gperftools-2.0/install-sh | 519 ++ .../gperftools-2.0/m4/ac_have_attribute.m4 | 16 + .../gperftools-2.0/m4/acx_nanosleep.m4 | 35 + .../gperftools-2.0/m4/acx_pthread.m4 | 397 ++ .../m4/compiler_characteristics.m4 | 24 + .../gperftools-2.0/m4/install_prefix.m4 | 8 + src/thirdparty/gperftools-2.0/m4/ltsugar.m4 | 123 + .../gperftools-2.0/m4/namespaces.m4 | 15 + .../gperftools-2.0/m4/pc_from_ucontext.m4 | 96 + .../m4/program_invocation_name.m4 | 19 + .../gperftools-2.0/m4/stl_namespace.m4 | 25 + src/thirdparty/gperftools-2.0/missing | 367 ++ src/thirdparty/gperftools-2.0/mkinstalldirs | 161 + src/thirdparty/gperftools-2.0/packages/deb.sh | 74 + .../gperftools-2.0/packages/deb/README | 7 + .../gperftools-2.0/packages/deb/changelog | 196 + .../gperftools-2.0/packages/deb/compat | 1 + .../gperftools-2.0/packages/deb/control | 25 + .../gperftools-2.0/packages/deb/copyright | 35 + .../gperftools-2.0/packages/deb/docs | 47 + .../packages/deb/libgperftools-dev.dirs | 5 + .../packages/deb/libgperftools-dev.install | 12 + .../packages/deb/libgperftools0.dirs | 2 + .../packages/deb/libgperftools0.install | 4 + .../packages/deb/libgperftools0.manpages | 1 + .../gperftools-2.0/packages/deb/rules | 117 + src/thirdparty/gperftools-2.0/packages/rpm.sh | 86 + .../gperftools-2.0/packages/rpm/rpm.spec | 77 + .../gperftools-2.0/src/addressmap-inl.h | 421 ++ .../src/base/arm_instruction_set_select.h | 79 + .../base/atomicops-internals-arm-generic.h | 235 + .../src/base/atomicops-internals-arm-v6plus.h | 368 ++ .../src/base/atomicops-internals-linuxppc.h | 416 ++ .../src/base/atomicops-internals-macosx.h | 359 ++ .../src/base/atomicops-internals-windows.h | 501 ++ .../src/base/atomicops-internals-x86.cc | 125 + .../src/base/atomicops-internals-x86.h | 428 ++ .../gperftools-2.0/src/base/atomicops.h | 391 ++ .../gperftools-2.0/src/base/basictypes.h | 357 ++ .../src/base/commandlineflags.h | 131 + .../gperftools-2.0/src/base/cycleclock.h | 163 + .../src/base/dynamic_annotations.c | 190 + .../src/base/dynamic_annotations.h | 627 ++ .../gperftools-2.0/src/base/elf_mem_image.cc | 433 ++ .../gperftools-2.0/src/base/elf_mem_image.h | 134 + .../gperftools-2.0/src/base/elfcore.h | 385 ++ .../gperftools-2.0/src/base/googleinit.h | 73 + .../src/base/linux_syscall_support.h | 2183 +++++++ .../gperftools-2.0/src/base/linuxthreads.cc | 665 ++ .../gperftools-2.0/src/base/linuxthreads.h | 53 + .../gperftools-2.0/src/base/logging.cc | 107 + .../gperftools-2.0/src/base/logging.h | 258 + .../src/base/low_level_alloc.cc | 522 ++ .../gperftools-2.0/src/base/low_level_alloc.h | 106 + .../gperftools-2.0/src/base/simple_mutex.h | 331 + .../gperftools-2.0/src/base/spinlock.cc | 182 + .../gperftools-2.0/src/base/spinlock.h | 151 + .../src/base/spinlock_internal.cc | 102 + .../src/base/spinlock_internal.h | 64 + .../src/base/spinlock_linux-inl.h | 103 + .../src/base/spinlock_posix-inl.h | 62 + .../src/base/spinlock_win32-inl.h | 53 + .../gperftools-2.0/src/base/stl_allocator.h | 97 + .../src/base/synchronization_profiling.h | 50 + .../gperftools-2.0/src/base/sysinfo.cc | 985 +++ .../gperftools-2.0/src/base/sysinfo.h | 235 + .../src/base/thread_annotations.h | 134 + .../gperftools-2.0/src/base/thread_lister.c | 77 + .../gperftools-2.0/src/base/thread_lister.h | 82 + .../gperftools-2.0/src/base/vdso_support.cc | 189 + .../gperftools-2.0/src/base/vdso_support.h | 155 + .../gperftools-2.0/src/central_freelist.cc | 376 ++ .../gperftools-2.0/src/central_freelist.h | 200 + src/thirdparty/gperftools-2.0/src/common.cc | 202 + src/thirdparty/gperftools-2.0/src/common.h | 246 + .../gperftools-2.0/src/config_for_unittests.h | 64 + .../gperftools-2.0/src/debugallocation.cc | 1420 +++++ src/thirdparty/gperftools-2.0/src/getpc.h | 186 + .../gperftools-2.0/src/google/heap-checker.h | 33 + .../gperftools-2.0/src/google/heap-profiler.h | 34 + .../src/google/malloc_extension.h | 33 + .../src/google/malloc_extension_c.h | 34 + .../gperftools-2.0/src/google/malloc_hook.h | 33 + .../gperftools-2.0/src/google/malloc_hook_c.h | 34 + .../gperftools-2.0/src/google/profiler.h | 34 + .../gperftools-2.0/src/google/stacktrace.h | 33 + .../gperftools-2.0/src/google/tcmalloc.h | 34 + .../src/gperftools/heap-checker.h | 424 ++ .../src/gperftools/heap-profiler.h | 104 + .../src/gperftools/malloc_extension.h | 400 ++ .../src/gperftools/malloc_extension_c.h | 99 + .../src/gperftools/malloc_hook.h | 358 ++ .../src/gperftools/malloc_hook_c.h | 173 + .../gperftools-2.0/src/gperftools/profiler.h | 168 + .../src/gperftools/stacktrace.h | 116 + .../src/gperftools/tcmalloc.h.in | 123 + .../gperftools-2.0/src/heap-checker-bcad.cc | 92 + .../gperftools-2.0/src/heap-checker.cc | 2372 ++++++++ .../gperftools-2.0/src/heap-profile-table.cc | 696 +++ .../gperftools-2.0/src/heap-profile-table.h | 422 ++ .../gperftools-2.0/src/heap-profiler.cc | 555 ++ .../gperftools-2.0/src/internal_logging.cc | 193 + .../gperftools-2.0/src/internal_logging.h | 143 + .../gperftools-2.0/src/libc_override.h | 90 + .../src/libc_override_gcc_and_weak.h | 99 + .../gperftools-2.0/src/libc_override_glibc.h | 148 + .../gperftools-2.0/src/libc_override_osx.h | 275 + .../src/libc_override_redefine.h | 93 + .../gperftools-2.0/src/linked_list.h | 102 + .../gperftools-2.0/src/malloc_extension.cc | 372 ++ .../gperftools-2.0/src/malloc_hook-inl.h | 322 + .../gperftools-2.0/src/malloc_hook.cc | 723 +++ .../src/malloc_hook_mmap_freebsd.h | 165 + .../src/malloc_hook_mmap_linux.h | 234 + .../gperftools-2.0/src/maybe_threads.cc | 133 + .../gperftools-2.0/src/maybe_threads.h | 52 + .../gperftools-2.0/src/memfs_malloc.cc | 267 + .../gperftools-2.0/src/memory_region_map.cc | 652 ++ .../gperftools-2.0/src/memory_region_map.h | 340 ++ .../gperftools-2.0/src/packed-cache-inl.h | 238 + .../gperftools-2.0/src/page_heap.cc | 483 ++ src/thirdparty/gperftools-2.0/src/page_heap.h | 294 + .../gperftools-2.0/src/page_heap_allocator.h | 113 + src/thirdparty/gperftools-2.0/src/pagemap.h | 323 + src/thirdparty/gperftools-2.0/src/pprof | 5348 +++++++++++++++++ .../gperftools-2.0/src/profile-handler.cc | 555 ++ .../gperftools-2.0/src/profile-handler.h | 148 + .../gperftools-2.0/src/profiledata.cc | 331 + .../gperftools-2.0/src/profiledata.h | 183 + src/thirdparty/gperftools-2.0/src/profiler.cc | 342 ++ .../gperftools-2.0/src/raw_printer.cc | 71 + .../gperftools-2.0/src/raw_printer.h | 89 + src/thirdparty/gperftools-2.0/src/sampler.cc | 130 + src/thirdparty/gperftools-2.0/src/sampler.h | 179 + src/thirdparty/gperftools-2.0/src/span.cc | 101 + src/thirdparty/gperftools-2.0/src/span.h | 101 + .../gperftools-2.0/src/stack_trace_table.cc | 159 + .../gperftools-2.0/src/stack_trace_table.h | 91 + .../gperftools-2.0/src/stacktrace.cc | 110 + .../gperftools-2.0/src/stacktrace_arm-inl.h | 145 + .../gperftools-2.0/src/stacktrace_config.h | 85 + .../src/stacktrace_generic-inl.h | 83 + .../src/stacktrace_libunwind-inl.h | 128 + .../src/stacktrace_powerpc-inl.h | 170 + .../gperftools-2.0/src/stacktrace_win32-inl.h | 91 + .../gperftools-2.0/src/stacktrace_x86-inl.h | 351 ++ .../gperftools-2.0/src/static_vars.cc | 73 + .../gperftools-2.0/src/static_vars.h | 111 + .../gperftools-2.0/src/symbolize.cc | 280 + src/thirdparty/gperftools-2.0/src/symbolize.h | 83 + .../gperftools-2.0/src/system-alloc.cc | 530 ++ .../gperftools-2.0/src/system-alloc.h | 77 + src/thirdparty/gperftools-2.0/src/tcmalloc.cc | 1652 +++++ src/thirdparty/gperftools-2.0/src/tcmalloc.h | 69 + .../gperftools-2.0/src/tcmalloc_guard.h | 48 + .../src/tests/addressmap_unittest.cc | 170 + .../src/tests/atomicops_unittest.cc | 257 + .../src/tests/current_allocated_bytes_test.cc | 63 + .../src/tests/debugallocation_test.cc | 313 + .../src/tests/debugallocation_test.sh | 95 + .../gperftools-2.0/src/tests/frag_unittest.cc | 132 + .../gperftools-2.0/src/tests/getpc_test.cc | 120 + .../src/tests/heap-checker-death_unittest.sh | 176 + .../src/tests/heap-checker_unittest.cc | 1503 +++++ .../src/tests/heap-checker_unittest.sh | 89 + .../src/tests/heap-profiler_unittest.cc | 163 + .../src/tests/heap-profiler_unittest.sh | 150 + .../src/tests/low_level_alloc_unittest.cc | 196 + .../src/tests/malloc_extension_c_test.c | 147 + .../src/tests/malloc_extension_test.cc | 99 + .../src/tests/malloc_hook_test.cc | 366 ++ .../src/tests/markidle_unittest.cc | 108 + .../src/tests/maybe_threads_unittest.sh | 79 + .../src/tests/memalign_unittest.cc | 220 + .../src/tests/packed-cache_test.cc | 62 + .../src/tests/page_heap_test.cc | 55 + .../src/tests/pagemap_unittest.cc | 177 + .../src/tests/profile-handler_unittest.cc | 506 ++ .../src/tests/profiledata_unittest.cc | 610 ++ .../src/tests/profiler_unittest.cc | 142 + .../src/tests/profiler_unittest.sh | 261 + .../src/tests/raw_printer_test.cc | 60 + .../src/tests/realloc_unittest.cc | 124 + .../gperftools-2.0/src/tests/sampler_test.cc | 657 ++ .../gperftools-2.0/src/tests/sampling_test.cc | 82 + .../gperftools-2.0/src/tests/sampling_test.sh | 94 + .../src/tests/simple_compat_test.cc | 67 + .../src/tests/stack_trace_table_test.cc | 97 + .../src/tests/stacktrace_unittest.cc | 194 + .../src/tests/system-alloc_unittest.cc | 154 + .../src/tests/tcmalloc_large_unittest.cc | 137 + .../src/tests/tcmalloc_unittest.cc | 1327 ++++ .../gperftools-2.0/src/tests/testutil.cc | 223 + .../gperftools-2.0/src/tests/testutil.h | 61 + .../src/tests/thread_dealloc_unittest.cc | 83 + .../gperftools-2.0/src/third_party/valgrind.h | 3924 ++++++++++++ .../gperftools-2.0/src/thread_cache.cc | 503 ++ .../gperftools-2.0/src/thread_cache.h | 403 ++ .../gperftools-2.0/src/windows/TODO | 86 + .../src/windows/addr2line-pdb.c | 163 + .../src/windows/auto_testing_hook.h | 155 + .../gperftools-2.0/src/windows/config.h | 306 + .../src/windows/get_mangled_names.cc | 64 + .../src/windows/google/tcmalloc.h | 34 + .../src/windows/gperftools/tcmalloc.h.in | 123 + .../src/windows/ia32_modrm_map.cc | 121 + .../src/windows/ia32_opcode_map.cc | 1219 ++++ .../gperftools-2.0/src/windows/mingw.h | 67 + .../src/windows/mini_disassembler.cc | 431 ++ .../src/windows/mini_disassembler.h | 197 + .../src/windows/mini_disassembler_types.h | 236 + .../gperftools-2.0/src/windows/nm-pdb.c | 273 + .../src/windows/override_functions.cc | 122 + .../src/windows/patch_functions.cc | 1080 ++++ .../gperftools-2.0/src/windows/port.cc | 294 + .../gperftools-2.0/src/windows/port.h | 474 ++ .../src/windows/preamble_patcher.cc | 684 +++ .../src/windows/preamble_patcher.h | 611 ++ .../src/windows/preamble_patcher_test.cc | 367 ++ .../src/windows/preamble_patcher_with_stub.cc | 296 + .../gperftools-2.0/src/windows/shortproc.asm | 169 + .../addr2line-pdb/addr2line-pdb.vcproj | 127 + .../addressmap_unittest.vcproj | 301 + .../current_allocated_bytes_test.vcproj | 156 + .../frag_unittest/frag_unittest.vcproj | 150 + .../libtcmalloc_minimal.vcproj | 785 +++ .../low_level_alloc_unittest.vcproj | 373 ++ .../malloc_extension_test.vcproj | 157 + .../malloc_hook_test/malloc_hook_test.vcproj | 174 + .../markidle_unittest.vcproj | 170 + .../vsprojects/nm-pdb/nm-pdb.vcproj | 127 + .../packed-cache_test.vcproj | 201 + .../page_heap_test/page_heap_test.vcproj | 157 + .../pagemap_unittest/pagemap_unittest.vcproj | 154 + .../preamble_patcher_test.vcproj | 180 + .../realloc_unittest/realloc_unittest.vcproj | 151 + .../sampler_test/sampler_test.vcproj | 154 + .../stack_trace_table_test.vcproj | 153 + .../tcmalloc_minimal_large_unittest.vcproj | 150 + .../tcmalloc_minimal_unittest.vcproj | 170 + .../thread_dealloc_unittest.vcproj | 170 + .../vsprojects/tmu-static/tmu-static.vcproj | 884 +++ 303 files changed, 80583 insertions(+) create mode 100644 src/thirdparty/gperftools-2.0/AUTHORS create mode 100644 src/thirdparty/gperftools-2.0/COPYING create mode 100644 src/thirdparty/gperftools-2.0/ChangeLog create mode 100644 src/thirdparty/gperftools-2.0/INSTALL create mode 100644 src/thirdparty/gperftools-2.0/Makefile.am create mode 100644 src/thirdparty/gperftools-2.0/NEWS create mode 100644 src/thirdparty/gperftools-2.0/README create mode 100644 src/thirdparty/gperftools-2.0/README_windows.txt create mode 100644 src/thirdparty/gperftools-2.0/TODO create mode 100755 src/thirdparty/gperftools-2.0/autogen.sh create mode 100755 src/thirdparty/gperftools-2.0/compile create mode 100755 src/thirdparty/gperftools-2.0/config.guess create mode 100755 src/thirdparty/gperftools-2.0/config.sub create mode 100644 src/thirdparty/gperftools-2.0/configure.ac create mode 100755 src/thirdparty/gperftools-2.0/depcomp create mode 100644 src/thirdparty/gperftools-2.0/doc/cpuprofile-fileformat.html create mode 100644 src/thirdparty/gperftools-2.0/doc/cpuprofile.html create mode 100644 src/thirdparty/gperftools-2.0/doc/designstyle.css create mode 100644 src/thirdparty/gperftools-2.0/doc/heap-example1.png create mode 100644 src/thirdparty/gperftools-2.0/doc/heap_checker.html create mode 100644 src/thirdparty/gperftools-2.0/doc/heapprofile.html create mode 100644 src/thirdparty/gperftools-2.0/doc/index.html create mode 100644 src/thirdparty/gperftools-2.0/doc/overview.dot create mode 100644 src/thirdparty/gperftools-2.0/doc/overview.gif create mode 100644 src/thirdparty/gperftools-2.0/doc/pageheap.dot create mode 100644 src/thirdparty/gperftools-2.0/doc/pageheap.gif create mode 100644 src/thirdparty/gperftools-2.0/doc/pprof-test-big.gif create mode 100644 src/thirdparty/gperftools-2.0/doc/pprof-test.gif create mode 100644 src/thirdparty/gperftools-2.0/doc/pprof-vsnprintf-big.gif create mode 100644 src/thirdparty/gperftools-2.0/doc/pprof-vsnprintf.gif create mode 100644 src/thirdparty/gperftools-2.0/doc/pprof.1 create mode 100644 src/thirdparty/gperftools-2.0/doc/pprof.see_also create mode 100644 src/thirdparty/gperftools-2.0/doc/pprof_remote_servers.html create mode 100644 src/thirdparty/gperftools-2.0/doc/spanmap.dot create mode 100644 src/thirdparty/gperftools-2.0/doc/spanmap.gif create mode 100644 src/thirdparty/gperftools-2.0/doc/t-test1.times.txt create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.1024.bytes.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.128.bytes.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.131072.bytes.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.16384.bytes.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.2048.bytes.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.256.bytes.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.32768.bytes.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.4096.bytes.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.512.bytes.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.64.bytes.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.65536.bytes.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.8192.bytes.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.1.threads.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.12.threads.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.16.threads.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.2.threads.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.20.threads.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.3.threads.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.4.threads.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.5.threads.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.8.threads.png create mode 100644 src/thirdparty/gperftools-2.0/doc/tcmalloc.html create mode 100644 src/thirdparty/gperftools-2.0/doc/threadheap.dot create mode 100644 src/thirdparty/gperftools-2.0/doc/threadheap.gif create mode 100755 src/thirdparty/gperftools-2.0/install-sh create mode 100644 src/thirdparty/gperftools-2.0/m4/ac_have_attribute.m4 create mode 100644 src/thirdparty/gperftools-2.0/m4/acx_nanosleep.m4 create mode 100644 src/thirdparty/gperftools-2.0/m4/acx_pthread.m4 create mode 100644 src/thirdparty/gperftools-2.0/m4/compiler_characteristics.m4 create mode 100644 src/thirdparty/gperftools-2.0/m4/install_prefix.m4 create mode 100644 src/thirdparty/gperftools-2.0/m4/ltsugar.m4 create mode 100644 src/thirdparty/gperftools-2.0/m4/namespaces.m4 create mode 100644 src/thirdparty/gperftools-2.0/m4/pc_from_ucontext.m4 create mode 100644 src/thirdparty/gperftools-2.0/m4/program_invocation_name.m4 create mode 100644 src/thirdparty/gperftools-2.0/m4/stl_namespace.m4 create mode 100755 src/thirdparty/gperftools-2.0/missing create mode 100755 src/thirdparty/gperftools-2.0/mkinstalldirs create mode 100755 src/thirdparty/gperftools-2.0/packages/deb.sh create mode 100644 src/thirdparty/gperftools-2.0/packages/deb/README create mode 100644 src/thirdparty/gperftools-2.0/packages/deb/changelog create mode 100644 src/thirdparty/gperftools-2.0/packages/deb/compat create mode 100644 src/thirdparty/gperftools-2.0/packages/deb/control create mode 100644 src/thirdparty/gperftools-2.0/packages/deb/copyright create mode 100644 src/thirdparty/gperftools-2.0/packages/deb/docs create mode 100644 src/thirdparty/gperftools-2.0/packages/deb/libgperftools-dev.dirs create mode 100644 src/thirdparty/gperftools-2.0/packages/deb/libgperftools-dev.install create mode 100644 src/thirdparty/gperftools-2.0/packages/deb/libgperftools0.dirs create mode 100644 src/thirdparty/gperftools-2.0/packages/deb/libgperftools0.install create mode 100644 src/thirdparty/gperftools-2.0/packages/deb/libgperftools0.manpages create mode 100755 src/thirdparty/gperftools-2.0/packages/deb/rules create mode 100755 src/thirdparty/gperftools-2.0/packages/rpm.sh create mode 100644 src/thirdparty/gperftools-2.0/packages/rpm/rpm.spec create mode 100644 src/thirdparty/gperftools-2.0/src/addressmap-inl.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/arm_instruction_set_select.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/atomicops-internals-arm-generic.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/atomicops-internals-arm-v6plus.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/atomicops-internals-linuxppc.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/atomicops-internals-macosx.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/atomicops-internals-windows.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/atomicops-internals-x86.cc create mode 100644 src/thirdparty/gperftools-2.0/src/base/atomicops-internals-x86.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/atomicops.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/basictypes.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/commandlineflags.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/cycleclock.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/dynamic_annotations.c create mode 100644 src/thirdparty/gperftools-2.0/src/base/dynamic_annotations.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/elf_mem_image.cc create mode 100644 src/thirdparty/gperftools-2.0/src/base/elf_mem_image.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/elfcore.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/googleinit.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/linux_syscall_support.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/linuxthreads.cc create mode 100644 src/thirdparty/gperftools-2.0/src/base/linuxthreads.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/logging.cc create mode 100644 src/thirdparty/gperftools-2.0/src/base/logging.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/low_level_alloc.cc create mode 100644 src/thirdparty/gperftools-2.0/src/base/low_level_alloc.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/simple_mutex.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/spinlock.cc create mode 100644 src/thirdparty/gperftools-2.0/src/base/spinlock.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/spinlock_internal.cc create mode 100644 src/thirdparty/gperftools-2.0/src/base/spinlock_internal.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/spinlock_linux-inl.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/spinlock_posix-inl.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/spinlock_win32-inl.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/stl_allocator.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/synchronization_profiling.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/sysinfo.cc create mode 100644 src/thirdparty/gperftools-2.0/src/base/sysinfo.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/thread_annotations.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/thread_lister.c create mode 100644 src/thirdparty/gperftools-2.0/src/base/thread_lister.h create mode 100644 src/thirdparty/gperftools-2.0/src/base/vdso_support.cc create mode 100644 src/thirdparty/gperftools-2.0/src/base/vdso_support.h create mode 100644 src/thirdparty/gperftools-2.0/src/central_freelist.cc create mode 100644 src/thirdparty/gperftools-2.0/src/central_freelist.h create mode 100644 src/thirdparty/gperftools-2.0/src/common.cc create mode 100644 src/thirdparty/gperftools-2.0/src/common.h create mode 100644 src/thirdparty/gperftools-2.0/src/config_for_unittests.h create mode 100644 src/thirdparty/gperftools-2.0/src/debugallocation.cc create mode 100644 src/thirdparty/gperftools-2.0/src/getpc.h create mode 100644 src/thirdparty/gperftools-2.0/src/google/heap-checker.h create mode 100644 src/thirdparty/gperftools-2.0/src/google/heap-profiler.h create mode 100644 src/thirdparty/gperftools-2.0/src/google/malloc_extension.h create mode 100644 src/thirdparty/gperftools-2.0/src/google/malloc_extension_c.h create mode 100644 src/thirdparty/gperftools-2.0/src/google/malloc_hook.h create mode 100644 src/thirdparty/gperftools-2.0/src/google/malloc_hook_c.h create mode 100644 src/thirdparty/gperftools-2.0/src/google/profiler.h create mode 100644 src/thirdparty/gperftools-2.0/src/google/stacktrace.h create mode 100644 src/thirdparty/gperftools-2.0/src/google/tcmalloc.h create mode 100644 src/thirdparty/gperftools-2.0/src/gperftools/heap-checker.h create mode 100644 src/thirdparty/gperftools-2.0/src/gperftools/heap-profiler.h create mode 100644 src/thirdparty/gperftools-2.0/src/gperftools/malloc_extension.h create mode 100644 src/thirdparty/gperftools-2.0/src/gperftools/malloc_extension_c.h create mode 100644 src/thirdparty/gperftools-2.0/src/gperftools/malloc_hook.h create mode 100644 src/thirdparty/gperftools-2.0/src/gperftools/malloc_hook_c.h create mode 100644 src/thirdparty/gperftools-2.0/src/gperftools/profiler.h create mode 100644 src/thirdparty/gperftools-2.0/src/gperftools/stacktrace.h create mode 100644 src/thirdparty/gperftools-2.0/src/gperftools/tcmalloc.h.in create mode 100644 src/thirdparty/gperftools-2.0/src/heap-checker-bcad.cc create mode 100644 src/thirdparty/gperftools-2.0/src/heap-checker.cc create mode 100644 src/thirdparty/gperftools-2.0/src/heap-profile-table.cc create mode 100644 src/thirdparty/gperftools-2.0/src/heap-profile-table.h create mode 100644 src/thirdparty/gperftools-2.0/src/heap-profiler.cc create mode 100644 src/thirdparty/gperftools-2.0/src/internal_logging.cc create mode 100644 src/thirdparty/gperftools-2.0/src/internal_logging.h create mode 100644 src/thirdparty/gperftools-2.0/src/libc_override.h create mode 100644 src/thirdparty/gperftools-2.0/src/libc_override_gcc_and_weak.h create mode 100644 src/thirdparty/gperftools-2.0/src/libc_override_glibc.h create mode 100644 src/thirdparty/gperftools-2.0/src/libc_override_osx.h create mode 100644 src/thirdparty/gperftools-2.0/src/libc_override_redefine.h create mode 100644 src/thirdparty/gperftools-2.0/src/linked_list.h create mode 100644 src/thirdparty/gperftools-2.0/src/malloc_extension.cc create mode 100644 src/thirdparty/gperftools-2.0/src/malloc_hook-inl.h create mode 100644 src/thirdparty/gperftools-2.0/src/malloc_hook.cc create mode 100644 src/thirdparty/gperftools-2.0/src/malloc_hook_mmap_freebsd.h create mode 100644 src/thirdparty/gperftools-2.0/src/malloc_hook_mmap_linux.h create mode 100644 src/thirdparty/gperftools-2.0/src/maybe_threads.cc create mode 100644 src/thirdparty/gperftools-2.0/src/maybe_threads.h create mode 100644 src/thirdparty/gperftools-2.0/src/memfs_malloc.cc create mode 100644 src/thirdparty/gperftools-2.0/src/memory_region_map.cc create mode 100644 src/thirdparty/gperftools-2.0/src/memory_region_map.h create mode 100644 src/thirdparty/gperftools-2.0/src/packed-cache-inl.h create mode 100644 src/thirdparty/gperftools-2.0/src/page_heap.cc create mode 100644 src/thirdparty/gperftools-2.0/src/page_heap.h create mode 100644 src/thirdparty/gperftools-2.0/src/page_heap_allocator.h create mode 100644 src/thirdparty/gperftools-2.0/src/pagemap.h create mode 100755 src/thirdparty/gperftools-2.0/src/pprof create mode 100644 src/thirdparty/gperftools-2.0/src/profile-handler.cc create mode 100644 src/thirdparty/gperftools-2.0/src/profile-handler.h create mode 100644 src/thirdparty/gperftools-2.0/src/profiledata.cc create mode 100644 src/thirdparty/gperftools-2.0/src/profiledata.h create mode 100644 src/thirdparty/gperftools-2.0/src/profiler.cc create mode 100644 src/thirdparty/gperftools-2.0/src/raw_printer.cc create mode 100644 src/thirdparty/gperftools-2.0/src/raw_printer.h create mode 100755 src/thirdparty/gperftools-2.0/src/sampler.cc create mode 100755 src/thirdparty/gperftools-2.0/src/sampler.h create mode 100644 src/thirdparty/gperftools-2.0/src/span.cc create mode 100644 src/thirdparty/gperftools-2.0/src/span.h create mode 100644 src/thirdparty/gperftools-2.0/src/stack_trace_table.cc create mode 100644 src/thirdparty/gperftools-2.0/src/stack_trace_table.h create mode 100644 src/thirdparty/gperftools-2.0/src/stacktrace.cc create mode 100644 src/thirdparty/gperftools-2.0/src/stacktrace_arm-inl.h create mode 100644 src/thirdparty/gperftools-2.0/src/stacktrace_config.h create mode 100644 src/thirdparty/gperftools-2.0/src/stacktrace_generic-inl.h create mode 100644 src/thirdparty/gperftools-2.0/src/stacktrace_libunwind-inl.h create mode 100644 src/thirdparty/gperftools-2.0/src/stacktrace_powerpc-inl.h create mode 100644 src/thirdparty/gperftools-2.0/src/stacktrace_win32-inl.h create mode 100644 src/thirdparty/gperftools-2.0/src/stacktrace_x86-inl.h create mode 100644 src/thirdparty/gperftools-2.0/src/static_vars.cc create mode 100644 src/thirdparty/gperftools-2.0/src/static_vars.h create mode 100644 src/thirdparty/gperftools-2.0/src/symbolize.cc create mode 100644 src/thirdparty/gperftools-2.0/src/symbolize.h create mode 100644 src/thirdparty/gperftools-2.0/src/system-alloc.cc create mode 100644 src/thirdparty/gperftools-2.0/src/system-alloc.h create mode 100644 src/thirdparty/gperftools-2.0/src/tcmalloc.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tcmalloc.h create mode 100644 src/thirdparty/gperftools-2.0/src/tcmalloc_guard.h create mode 100644 src/thirdparty/gperftools-2.0/src/tests/addressmap_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/atomicops_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/current_allocated_bytes_test.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/debugallocation_test.cc create mode 100755 src/thirdparty/gperftools-2.0/src/tests/debugallocation_test.sh create mode 100644 src/thirdparty/gperftools-2.0/src/tests/frag_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/getpc_test.cc create mode 100755 src/thirdparty/gperftools-2.0/src/tests/heap-checker-death_unittest.sh create mode 100644 src/thirdparty/gperftools-2.0/src/tests/heap-checker_unittest.cc create mode 100755 src/thirdparty/gperftools-2.0/src/tests/heap-checker_unittest.sh create mode 100644 src/thirdparty/gperftools-2.0/src/tests/heap-profiler_unittest.cc create mode 100755 src/thirdparty/gperftools-2.0/src/tests/heap-profiler_unittest.sh create mode 100644 src/thirdparty/gperftools-2.0/src/tests/low_level_alloc_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/malloc_extension_c_test.c create mode 100644 src/thirdparty/gperftools-2.0/src/tests/malloc_extension_test.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/malloc_hook_test.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/markidle_unittest.cc create mode 100755 src/thirdparty/gperftools-2.0/src/tests/maybe_threads_unittest.sh create mode 100644 src/thirdparty/gperftools-2.0/src/tests/memalign_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/packed-cache_test.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/page_heap_test.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/pagemap_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/profile-handler_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/profiledata_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/profiler_unittest.cc create mode 100755 src/thirdparty/gperftools-2.0/src/tests/profiler_unittest.sh create mode 100644 src/thirdparty/gperftools-2.0/src/tests/raw_printer_test.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/realloc_unittest.cc create mode 100755 src/thirdparty/gperftools-2.0/src/tests/sampler_test.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/sampling_test.cc create mode 100755 src/thirdparty/gperftools-2.0/src/tests/sampling_test.sh create mode 100644 src/thirdparty/gperftools-2.0/src/tests/simple_compat_test.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/stack_trace_table_test.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/stacktrace_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/system-alloc_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/tcmalloc_large_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/tcmalloc_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/testutil.cc create mode 100644 src/thirdparty/gperftools-2.0/src/tests/testutil.h create mode 100644 src/thirdparty/gperftools-2.0/src/tests/thread_dealloc_unittest.cc create mode 100644 src/thirdparty/gperftools-2.0/src/third_party/valgrind.h create mode 100644 src/thirdparty/gperftools-2.0/src/thread_cache.cc create mode 100644 src/thirdparty/gperftools-2.0/src/thread_cache.h create mode 100644 src/thirdparty/gperftools-2.0/src/windows/TODO create mode 100644 src/thirdparty/gperftools-2.0/src/windows/addr2line-pdb.c create mode 100644 src/thirdparty/gperftools-2.0/src/windows/auto_testing_hook.h create mode 100644 src/thirdparty/gperftools-2.0/src/windows/config.h create mode 100644 src/thirdparty/gperftools-2.0/src/windows/get_mangled_names.cc create mode 100644 src/thirdparty/gperftools-2.0/src/windows/google/tcmalloc.h create mode 100644 src/thirdparty/gperftools-2.0/src/windows/gperftools/tcmalloc.h.in create mode 100644 src/thirdparty/gperftools-2.0/src/windows/ia32_modrm_map.cc create mode 100644 src/thirdparty/gperftools-2.0/src/windows/ia32_opcode_map.cc create mode 100644 src/thirdparty/gperftools-2.0/src/windows/mingw.h create mode 100644 src/thirdparty/gperftools-2.0/src/windows/mini_disassembler.cc create mode 100644 src/thirdparty/gperftools-2.0/src/windows/mini_disassembler.h create mode 100644 src/thirdparty/gperftools-2.0/src/windows/mini_disassembler_types.h create mode 100644 src/thirdparty/gperftools-2.0/src/windows/nm-pdb.c create mode 100644 src/thirdparty/gperftools-2.0/src/windows/override_functions.cc create mode 100644 src/thirdparty/gperftools-2.0/src/windows/patch_functions.cc create mode 100644 src/thirdparty/gperftools-2.0/src/windows/port.cc create mode 100644 src/thirdparty/gperftools-2.0/src/windows/port.h create mode 100644 src/thirdparty/gperftools-2.0/src/windows/preamble_patcher.cc create mode 100644 src/thirdparty/gperftools-2.0/src/windows/preamble_patcher.h create mode 100644 src/thirdparty/gperftools-2.0/src/windows/preamble_patcher_test.cc create mode 100644 src/thirdparty/gperftools-2.0/src/windows/preamble_patcher_with_stub.cc create mode 100644 src/thirdparty/gperftools-2.0/src/windows/shortproc.asm create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/addr2line-pdb/addr2line-pdb.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/addressmap_unittest/addressmap_unittest.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/current_allocated_bytes_test/current_allocated_bytes_test.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/frag_unittest/frag_unittest.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/libtcmalloc_minimal/libtcmalloc_minimal.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/low_level_alloc_unittest/low_level_alloc_unittest.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/malloc_extension_test/malloc_extension_test.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/malloc_hook_test/malloc_hook_test.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/markidle_unittest/markidle_unittest.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/nm-pdb/nm-pdb.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/packed-cache_test/packed-cache_test.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/page_heap_test/page_heap_test.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/pagemap_unittest/pagemap_unittest.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/preamble_patcher_test/preamble_patcher_test.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/realloc_unittest/realloc_unittest.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/sampler_test/sampler_test.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/stack_trace_table_test/stack_trace_table_test.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/tcmalloc_minimal_large/tcmalloc_minimal_large_unittest.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/tcmalloc_minimal_unittest/tcmalloc_minimal_unittest.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/thread_dealloc_unittest/thread_dealloc_unittest.vcproj create mode 100755 src/thirdparty/gperftools-2.0/vsprojects/tmu-static/tmu-static.vcproj diff --git a/.gitignore b/.gitignore index 0d0f43511..8e2628819 100644 --- a/.gitignore +++ b/.gitignore @@ -220,6 +220,88 @@ src/thirdparty/libedit-3.1/src/help.h src/thirdparty/libedit-3.1/src/vi.h src/thirdparty/libedit-3.1/stamp-h1 +src/thirdparty/gperftools-2.0/.deps/ +src/thirdparty/gperftools-2.0/.libs/ +src/thirdparty/gperftools-2.0/Makefile +src/thirdparty/gperftools-2.0/addressmap_unittest +src/thirdparty/gperftools-2.0/atomicops_unittest +src/thirdparty/gperftools-2.0/autom4te.cache/ +src/thirdparty/gperftools-2.0/config.status +src/thirdparty/gperftools-2.0/current_allocated_bytes_test +src/thirdparty/gperftools-2.0/debugallocation_test +src/thirdparty/gperftools-2.0/debugallocation_test.sh +src/thirdparty/gperftools-2.0/frag_unittest +src/thirdparty/gperftools-2.0/getpc_test +src/thirdparty/gperftools-2.0/heap-checker-death_unittest.sh +src/thirdparty/gperftools-2.0/heap-checker_debug_unittest +src/thirdparty/gperftools-2.0/heap-checker_debug_unittest.sh +src/thirdparty/gperftools-2.0/heap-checker_unittest +src/thirdparty/gperftools-2.0/heap-checker_unittest.sh +src/thirdparty/gperftools-2.0/heap-profiler_debug_unittest +src/thirdparty/gperftools-2.0/heap-profiler_debug_unittest.sh +src/thirdparty/gperftools-2.0/heap-profiler_unittest +src/thirdparty/gperftools-2.0/heap-profiler_unittest.sh +src/thirdparty/gperftools-2.0/libprofiler.pc +src/thirdparty/gperftools-2.0/libtcmalloc.pc +src/thirdparty/gperftools-2.0/libtcmalloc_debug.pc +src/thirdparty/gperftools-2.0/libtcmalloc_minimal.pc +src/thirdparty/gperftools-2.0/libtcmalloc_minimal_debug.pc +src/thirdparty/gperftools-2.0/libtool +src/thirdparty/gperftools-2.0/low_level_alloc_unittest +src/thirdparty/gperftools-2.0/malloc_extension_debug_test +src/thirdparty/gperftools-2.0/malloc_extension_test +src/thirdparty/gperftools-2.0/malloc_hook_test +src/thirdparty/gperftools-2.0/markidle_unittest +src/thirdparty/gperftools-2.0/memalign_debug_unittest +src/thirdparty/gperftools-2.0/memalign_unittest +src/thirdparty/gperftools-2.0/packed_cache_test +src/thirdparty/gperftools-2.0/page_heap_test +src/thirdparty/gperftools-2.0/pagemap_unittest +src/thirdparty/gperftools-2.0/profile_handler_unittest +src/thirdparty/gperftools-2.0/profiledata_unittest +src/thirdparty/gperftools-2.0/profiler1_unittest +src/thirdparty/gperftools-2.0/profiler2_unittest +src/thirdparty/gperftools-2.0/profiler3_unittest +src/thirdparty/gperftools-2.0/profiler4_unittest +src/thirdparty/gperftools-2.0/profiler_unittest.sh +src/thirdparty/gperftools-2.0/raw_printer_test +src/thirdparty/gperftools-2.0/realloc_debug_unittest +src/thirdparty/gperftools-2.0/realloc_unittest +src/thirdparty/gperftools-2.0/sampler_debug_test +src/thirdparty/gperftools-2.0/sampler_test +src/thirdparty/gperftools-2.0/sampling_debug_test +src/thirdparty/gperftools-2.0/sampling_debug_test.sh +src/thirdparty/gperftools-2.0/sampling_test +src/thirdparty/gperftools-2.0/sampling_test.sh +src/thirdparty/gperftools-2.0/simple_compat_test +src/thirdparty/gperftools-2.0/src/config.h +src/thirdparty/gperftools-2.0/src/config.h.in~ +src/thirdparty/gperftools-2.0/src/gperftools/tcmalloc.h +src/thirdparty/gperftools-2.0/src/stamp-h1 +src/thirdparty/gperftools-2.0/src/windows/gperftools/tcmalloc.h +src/thirdparty/gperftools-2.0/stack_trace_table_test +src/thirdparty/gperftools-2.0/stacktrace_unittest +src/thirdparty/gperftools-2.0/system_alloc_unittest +src/thirdparty/gperftools-2.0/tcmalloc_and_profiler_unittest +src/thirdparty/gperftools-2.0/tcmalloc_both_unittest +src/thirdparty/gperftools-2.0/tcmalloc_debug_unittest +src/thirdparty/gperftools-2.0/tcmalloc_large_unittest +src/thirdparty/gperftools-2.0/tcmalloc_minimal_debug_unittest +src/thirdparty/gperftools-2.0/tcmalloc_minimal_large_unittest +src/thirdparty/gperftools-2.0/tcmalloc_minimal_unittest +src/thirdparty/gperftools-2.0/tcmalloc_unittest +src/thirdparty/gperftools-2.0/test-driver +src/thirdparty/gperftools-2.0/thread_dealloc_unittest +src/thirdparty/gperftools-2.0/Makefile.in +src/thirdparty/gperftools-2.0/aclocal.m4 +src/thirdparty/gperftools-2.0/configure +src/thirdparty/gperftools-2.0/ltmain.sh +src/thirdparty/gperftools-2.0/m4/libtool.m4 +src/thirdparty/gperftools-2.0/m4/ltoptions.m4 +src/thirdparty/gperftools-2.0/m4/ltversion.m4 +src/thirdparty/gperftools-2.0/m4/lt~obsolete.m4 +src/thirdparty/gperftools-2.0/src/config.h.in + # ignore generated protobufs generated_proto*/ diff --git a/src/thirdparty/gperftools-2.0/AUTHORS b/src/thirdparty/gperftools-2.0/AUTHORS new file mode 100644 index 000000000..3995ed4cf --- /dev/null +++ b/src/thirdparty/gperftools-2.0/AUTHORS @@ -0,0 +1,2 @@ +google-perftools@googlegroups.com + diff --git a/src/thirdparty/gperftools-2.0/COPYING b/src/thirdparty/gperftools-2.0/COPYING new file mode 100644 index 000000000..e4956cfd9 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/COPYING @@ -0,0 +1,28 @@ +Copyright (c) 2005, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/thirdparty/gperftools-2.0/ChangeLog b/src/thirdparty/gperftools-2.0/ChangeLog new file mode 100644 index 000000000..4b334beaa --- /dev/null +++ b/src/thirdparty/gperftools-2.0/ChangeLog @@ -0,0 +1,646 @@ +Fri Feb 03 15:40:45 2012 Google Inc. <google-perftools@googlegroups.com> + + * gperftools: version 2.0 + * Renamed the project from google-perftools to gperftools (csilvers) + * Renamed the .deb/.rpm packagse from google-perftools to gperftools too + * Renamed include directory from google/ to gperftools/ (csilvers) + * Changed the 'official' perftools email in setup.py/etc + * Renamed google-perftools.sln to gperftools.sln + * PORTING: Removed bash-isms & grep -q in heap-checker-death_unittest.sh + * Changed copyright text to reflect Google's relinquished ownership + +Tue Jan 31 10:43:50 2012 Google Inc. <opensource@google.com> + + * google-perftools: version 1.10 release + * PORTING: Support for patching assembly on win x86_64! (scott.fr...) + * PORTING: Work around atexit-execution-order bug on freebsd (csilvers) + * PORTING: Patch _calloc_crt for windows (roger orr) + * PORTING: Add C++11 compatibility method for stl allocator (jdennett) + * PORTING: use MADV_FREE, not MADV_DONTNEED, on freebsd (csilvers) + * PORTING: Don't use SYS_open when not supported on solaris (csilvers) + * PORTING: Do not assume uname() returns 0 on success (csilvers) + * LSS: Improved ARM support in linux-syscall-support (dougkwan) + * LSS: Get rid of unused syscalls in linux-syscall-support (csilvers) + * LSS: Fix broken mmap wrapping for ppc (markus) + * LSS: Emit .cfi_adjust_cfa_offset when appropriate (ppluzhnikov) + * LSS: Be more accurate in register use in __asm__ (markus) + * LSS: Fix __asm__ calls to compile under clang (chandlerc) + * LSS: Fix ARM inline assembly bug around r7 and swi (lcwu) + * No longer log when an allocator fails (csilvers) + * void* -> const void* for MallocExtension methods (llib) + * Improve HEAP_PROFILE_MMAP and fix bugs with it (dmikurube) + * Replace int-based abs with more correct fabs in a test (pmurin) + +Thu Dec 22 16:22:45 2011 Google Inc. <opensource@google.com> + + * google-perftools: version 1.9 release + * Lightweight check for double-frees (blount) + * BUGFIX: Fix pprof to exit properly if run with no args (dagitses) + * Suggest ASan as a way to diagnose buggy code (ppluzhnikov) + * Get rid of unused CACHELINE_SIZE (csilvers) + * Replace atexit() calls with global dtors; helps freebsd (csilvers) + * Disable heap-checker under AddressSanitizer (kcc) + * Fix bug in powerpc stacktracing (ppluzhnikov) + * PERF: Use exponential backoff waiting for spinlocks (m3b) + * Fix 64-bit nm on 32-bit binaries in pprof (csilvers) + * Add ProfileHandlerDisallowForever (rsc) + * BUGFIX: Shell escape when forking in pprof (csilvers) + * No longer combine overloaded functions in pprof (csilvers) + * Fix address-normalizing bug in pprof (csilvers) + * More consistently call abort() instead of exit() on failure (csilvers) + * Allow NoGlobalLeaks to be safely called more than once (csilvers) + * PORTING/BUGFIX: Fix ARM cycleclock to use volatile asm (dougkwan) + * PORTING: 64-bit atomic ops for ARMv7 (dougkwan) + * PORTING: Implement stacktrace for ARM (dougkwan) + * PORTING: Fix malloc_hook_mmap_linux for ARM (dougkwan) + * PORTING: Update linux_syscall_support.h for ARM/etc (evannier, sanek) + * PORTING: Fix freebsd to work on x86_64 (chapp...@gmail.com) + * PORTING: Added additional SYS_mmap fixes for FreeBSD (chappedm) + * PORTING: Allow us to compile on OS X 10.6 and run on 10.5 (raltherr) + * PORTING: Check for mingw compilers that *do* define timespec + * PORTING: Add "support" for MIPS cycletimer + * PORTING: Fix fallback cycle-timer to work with Now (dougkwan) + * PERF: Move stack trace collecting out of the mutex (taylorc) + * PERF: Get the deallocation stack trace outside the mutex (sean) + * Make PageHeap dynamically allocated for leak checks (maxim) + * BUGFIX: Fix probing of nm -f behavior in pprof (dpeng) + * BUGFIX: Fix a race with the CentralFreeList lock before main (sanjay) + * Support /pprof/censusprofile url arguments (rajatjain) + * Change IgnoreObject to return its argument (nlewycky) + * Update malloc-hook files to support more CPUs + * BUGFIX: write our own strstr to avoid libc problems (csilvers) + * Use simple callgrind compression facility in pprof + * Print an error message when we can't run pprof to symbolize (csilvers) + * Die in configure when g++ is't installed (csilvers) + * DOC: Beef up the documentation a bit about using libunwind (csilvers) + +Fri Aug 26 13:29:25 2011 Google Inc. <opensource@google.com> + + * google-perftools: version 1.8.3 release + * Added back the 'pthreads unsafe early' #define, needed for FreeBSD + +Thu Aug 11 15:01:47 2011 Google Inc. <opensource@google.com> + + * google-perftools: version 1.8.2 release + * Fixed calculation of patchlevel, 'make check' should all pass again + +Tue Jul 26 20:57:51 2011 Google Inc. <opensource@google.com> + + * google-perftools: version 1.8.1 release + * Added an #include to fix compile breakage on latest gcc's + * Removed an extra , in the configure.ac script + +Fri Jul 15 16:10:51 2011 Google Inc. <opensource@google.com> + + * google-perftools: version 1.8 release + * PORTING: (Disabled) support for patching mmap on freebsd (chapp...) + * PORTING: Support volatile __malloc_hook for glibc 2.14 (csilvers) + * PORTING: Use _asm rdtsc and __rdtsc to get cycleclock in windows (koda) + * PORTING: Fix fd vs. HANDLE compiler error on cygwin (csilvers) + * PORTING: Do not test memalign or double-linking on OS X (csilvers) + * PORTING: Actually enable TLS on windows (jontra) + * PORTING: Some work to compile under Native Client (krasin) + * PORTING: deal with pthread_once w/o -pthread on freebsd (csilvers) + * Rearrange libc-overriding to make it easier to port (csilvers) + * Display source locations in pprof disassembly (sanjay) + * BUGFIX: Actually initialize allocator name (mec) + * BUGFIX: Keep track of 'overhead' bytes in malloc reporting (csilvers) + * Allow ignoring one object twice in the leak checker (glider) + * BUGFIX: top10 in pprof should print 10 lines, not 11 (rsc) + * Refactor vdso source files (tipp) + * Some documentation cleanups + * Document MAX_TOTAL_THREAD_CACHE_SIZE <= 1Gb (nsethi) + * Add MallocExtension::GetOwnership(ptr) (csilvers) + * BUGFIX: We were leaving out a needed $(top_srcdir) in the Makefile + * PORTING: Support getting argv0 on OS X + * Add 'weblist' command to pprof: like 'list' but html (sanjay) + * Improve source listing in pprof (sanjay) + * Cap cache sizes to reduce fragmentation (ruemmler) + * Improve performance by capping or increasing sizes (ruemmler) + * Add M{,un}mapReplacmenet hooks into MallocHook (ribrdb) + * Refactored system allocator logic (gangren) + * Include cleanups (csilvers) + * Add TCMALLOC_SMALL_BUT_SLOW support (ruemmler) + * Clarify that tcmalloc stats are MiB (robinson) + * Remove support for non-tcmalloc debugallocation (blount) + * Add a new test: malloc_hook_test (csilvers) + * Change the configure script to be more crosstool-friendly (mcgrathr) + * PORTING: leading-underscore changes to support win64 (csilvers) + * Improve debugallocation tc_malloc_size (csilvers) + * Extend atomicops.h and cyceclock to use ARM V6+ optimized code (sanek) + * Change malloc-hook to use a list-like structure (llib) + * Add flag to use MAP_PRIVATE in memfs_malloc (gangren) + * Windows support for pprof: nul and /usr/bin/file (csilvers) + * TESTING: add test on strdup to tcmalloc_test (csilvers) + * Augment heap-checker to deal with no-inode maps (csilvers) + * Count .dll/.dylib as shared libs in heap-checker (csilvers) + * Disable sys_futex for arm; it's not always reliable (sanek) + * PORTING: change lots of windows/port.h macros to functions + * BUGFIX: Generate correct version# in tcmalloc.h on windows (csilvers) + * PORTING: Some casting to make solaris happier about types (csilvers) + * TESTING: Disable debugallocation_test in 'minimal' mode (csilvers) + * Rewrite debugallocation to be more modular (csilvers) + * Don't try to run the heap-checker under valgrind (ppluzhnikov) + * BUGFIX: Make focused stat %'s relative, not absolute (sanjay) + * BUGFIX: Don't use '//' comments in a C file (csilvers) + * Quiet new-gcc compiler warnings via -Wno-unused-result, etc (csilvers) + +Fri Feb 04 15:54:31 2011 Google Inc. <opensource@google.com> + + * google-perftools: version 1.7 release + * Reduce page map key size under x86_64 by 4.4MB (rus) + * Remove a flaky malloc-extension test (fdabek) + * Improve the performance of PageHeap::New (ond..., csilvers) + * Improve sampling_test with no-inline additions/etc (fdabek) + * 16-byte align debug allocs (jyasskin) + * Change FillProcSelfMaps to detect out-of-buffer-space (csilvers) + * Document the need for sampling to use GetHeapSample (csilvers) + * Try to read TSC frequency from tsc_freq_khs (adurbin) + * Do better at figuring out if tests are running under gdb (ppluzhnikov) + * Improve spinlock contention performance (ruemmler) + * Better internal-function list for pprof's /contention (ruemmler) + * Speed up GoogleOnce (m3b) + * Limit number of incoming/outgoing edges in pprof (sanjay) + * Add pprof --evince to go along with --gv (csilvers) + * Document the various ways to get heap-profiling information (csilvers) + * Separate out synchronization profiling routines (ruemmler) + * Improve malloc-stats output to be more understandable (csilvers) + * Add support for census profiler in pporf (nabeelmian) + * Document how pprof's /symbol must support GET requests (csilvers) + * Improve acx_pthread.m4 (ssuomi, liujisi) + * Speed up pprof's ExtractSymbols (csilvers) + * Ignore some known-leaky (java) libraries in the heap checker (davidyu) + * Make kHideMask use all 64 bits in tests (ppluzhnikov) + * Clean up pprof input-file handling (csilvers) + * BUGFIX: Don't crash if __environ is NULL (csilvers) + * BUGFIX: Fix totally broken debugallocation tests (csilvers) + * BUGFIX: Fix up fake_VDSO handling for unittest (ppluzhnikov) + * BUGFIX: Suppress all large allocs when report threshold is 0 (lexie) + * BUGFIX: mmap2 on i386 takes an off_t, not off64_t (csilvers) + * PORTING: Add missing PERFTOOLS_DLL_DECL (csilvers) + * PORTING: Add stddef.h to make newer gcc's happy (csilvers) + * PORTING: Document some tricks for working under OS X (csilvers) + * PORTING: Don't try to check valgrind for windows (csilvers) + * PORTING: Make array-size a var to compile under clang (chandlerc) + * PORTING: No longer hook _aligned_malloc and _aligned_free (csilvers) + * PORTING: Quiet some gcc warnings (csilvers) + * PORTING: Replace %PRIxPTR with %p to be more portable (csilvers) + * PORTING: Support systems that capitalize /proc weirdly (sanek) + * PORTING: Treat arm3 the same as arm5t in cycletimer (csilvers) + * PORTING: Update windows logging to not allocate memory (csilvers) + * PORTING: avoid double-patching newer windows DLLs (roger.orr) + * PORTING: get dynamic_annotations.c to work on windows (csilvers) + * Add pkg-config .pc files for the 5 libraries we produce (csilvers) + * Added proper libtool versioning, so this lib will be 0.1.0 (csilvers) + * Moved from autoconf 2.64 to 2.65 + +Thu Aug 5 12:48:03 PDT 2010 Google Inc. <opensource@google.com> + + * google-perftools: version 1.6 release + * Add tc_malloc_usable_size for compatibility with glibc (csilvers) + * Override malloc_usable_size with tc_malloc_usable_size (csilvers) + * Default to no automatic heap sampling in tcmalloc (csilvers) + * Add -DTCMALLOC_LARGE_PAGES, a possibly faster tcmalloc (rus) + * Make some functions extern "C" to avoid false ODR warnings (jyasskin) + * pprof: Add SVG-based output (rsc) + * pprof: Extend pprof --tools to allow per-tool configs (csilvers) + * pprof: Improve support of 64-bit and big-endian profiles (csilvers) + * pprof: Add interactive callgrind suport (weidenri...) + * pprof: Improve address->function mapping a bit (dpeng) + * Better detection of when we're running under valgrind (csilvers) + * Better CPU-speed detection under valgrind (saito) + * Use, and recommend, -fno-builtin-malloc when compiling (csilvers) + * Avoid false-sharing of memory between caches (bmaurer) + * BUGFIX: Fix heap sampling to use correct alloc size (bmauer) + * BUGFIX: Avoid gcc 4.0.x bug by making hook-clearing atomic (csilvers) + * BUGFIX: Avoid gcc 4.5.x optimization bug (csilvers) + * BUGFIX: Work around deps-determining bug in libtool 1.5.26 (csilvers) + * BUGFIX: Fixed test to use HAVE_PTHREAD, not HAVE_PTHREADS (csilvers) + * BUGFIX: Fix tls callback behavior on windows when using wpo (wtc) + * BUGFIX: properly align allocation sizes on Windows (antonm) + * BUGFIX: Fix prototypes for tcmalloc/debugalloc wrt throw() (csilvers) + * DOC: Updated heap-checker doc to match reality better (fischman) + * DOC: Document ProfilerFlush, ProfilerStartWithOptions (csilvers) + * DOC: Update docs for heap-profiler functions (csilvers) + * DOC: Clean up documentation around tcmalloc.slack_bytes (fikes) + * DOC: Renamed README.windows to README_windows.txt (csilvers) + * DOC: Update the NEWS file to be non-empty (csilvers) + * PORTING: Fix windows addr2line and nm with proper rc code (csilvers) + * PORTING: Add CycleClock and atomicops support for arm 5 (sanek) + * PORTING: Improve PC finding on cygwin and redhat 7 (csilvers) + * PORTING: speed up function-patching under windows (csilvers) + +Tue Jan 19 14:46:12 2010 Google Inc. <opensource@google.com> + + * google-perftools: version 1.5 release + * Add tc_set_new_mode (willchan) + * Make memalign functions + realloc respect tc_set_new_mode (willchan) + * Add ReleaseToSystem(num_bytes) (kash) + * Handle zero-length symbols a bit better in pprof (csilvers) + * Prefer __environ to /proc/self/environ in cpu profiler (csilvers) + * Add HEAP_CHECK_MAX_LEAKS flag to control #leaks to report (glider) + * Add two new numeric pageheap properties to MallocExtension (fikes) + * Print alloc size when mmap fails (hakon) + * Add ITIMER_REAL support to cpu profiler (csilvers, nabeelmian) + * Speed up symbolizer in heap-checker reporting (glider) + * Speed up futexes with FUTEX_PRIVATE_FLAG (m3b) + * Speed up tcmalloc but doing better span coalescing (sanjay) + * Better support for different wget's and addr2maps in pprof (csilvres) + * Implement a nothrow version of delete and delete[] (csilvers) + * BUGFIX: fix a race on module_libcs[i] in windows patching (csilvers) + * BUGFIX: Fix debugallocation to call cpp_alloc for new (willchan) + * BUGFIX: A simple bugfix for --raw mode (mrabkin) + * BUGFIX: Fix C shims to actually be valid C (csilvers) + * BUGFIX: Fix recursively-unmapped-region accounting (ppluzhnikov) + * BUGFIX: better distinguish real and fake vdso (ppluzhnikov) + * WINDOWS: replace debugmodule with more reliable psai (andrey) + * PORTING: Add .bundle as another shared library extension (csilvers) + * PORTING: Fixed a typo bug in the ocnfigure PRIxx m4 macro (csilvers) + * PORTING: Augment sysinfo to work on 64-bit OS X (csilvers) + * PORTING: Use sys/ucontext.h to fix compiing on OS X 10.6 (csilvers) + * PORTING: Fix sysinfo libname reporting for solaris x86 (jeffrey) + * PORTING: Use libunwind for i386 when using --omitfp (ppluzhnikov) + +Thu Sep 10 13:51:15 2009 Google Inc. <opensource@google.com> + + * google-perftools: version 1.4 release + * Add debugallocation library, to catch memory leaks, stomping, etc + * Add --raw mode to allow for delayed processing of pprof files + * Use less memory when reading CPU profiles + * New environment variables to control kernel-allocs (sbrk, memfs, etc) + * Add MarkThreadBusy(): performance improvement + * Remove static thread-cache-size code; all is dynamic now + * Add new HiddenPointer class to heap checker + * BUGFIX: pvalloc(0) allocates now (found by new debugalloc library) + * BUGFIX: valloc test (not implementation) no longer overruns memory + * BUGFIX: GetHeapProfile no longer deadlocks + * BUGFIX: Support unmapping memory regions before main + * BUGFIX: Fix some malloc-stats formatting + * BUGFIX: Don't crash as often when freeing libc-allocated memory + * BUGFIX: Deal better with incorrect PPROF_PATH when symbolizing + * BUGFIX: weaken new/delete/etc in addition to malloc/free/etc + * BUGFIX: Fix return value of GetAllocatedSize + * PORTING: Fix mmap-#define problem on some 64-bit systems + * PORTING: Call ranlib again (some OS X versions need it) + * PORTING: Fix a leak when building with LLVM + * PORTING: Remove some unneeded bash-ishs from testing scripts + * WINDOWS: Support library unloading as well as loading + * WINDOWS/BUGFIX: Set page to 'xrw' instead of 'rw' when patching + +Tue Jun 9 18:19:06 2009 Google Inc. <opensource@google.com> + + * google-perftools: version 1.3 release + * Provide our own name for memory functions: tc_malloc, etc (csilvers) + * Weaken memory-alloc functions so user can override them (csilvers) + * Remove meaningless delete(nothrow) and delete[](nothrow) (csilvers) + * BUILD: replace clever libtcmalloc/profiler.a with a new .a (csilvers) + * PORTING: improve windows port by using google spinlocks (csilvers) + * PORTING: Fix RedHat 9 memory allocation in heapchecker (csilvers) + * PORTING: Rename OS_WINDOWS macro to PLATFORM_WINDOWS (mbelshe) + * PORTING/BUGFIX: Make sure we don't clobber GetLastError (mbelshe) + * BUGFIX: get rid of useless data for callgrind (weidenrinde) + * BUGFIX: Modify windows patching to deadlock sometimes (csilvers) + * BUGFIX: an improved fix for hook handling during fork (csilvers) + * BUGFIX: revamp profiler_unittest.sh, which was very broken (csilvers) + +Fri Apr 17 16:40:48 2009 Google Inc. <opensource@google.com> + + * google-perftools: version 1.2 release + * Allow large_alloc_threshold=0 to turn it off entirely (csilvers) + * Die more helpfully when out of memory for internal data (csilvers) + * Refactor profile-data gathering, add a new unittest (cgd, nabeelmian) + * BUGFIX: fix rounding errors with static thread-size caches (addi) + * BUGFIX: disable hooks better when forking in leak-checker (csilvers) + * BUGFIX: fix realloc of crt pointers on windows (csilvers) + * BUGFIX: do a better job of finding binaries in .sh tests (csilvers) + * WINDOWS: allow overriding malloc/etc instead of patching (mbelshe) + * PORTING: fix compilation error in a ppc-specific file (csilvers) + * PORTING: deal with quirks in cygwin's /proc/self/maps (csilvers) + * PORTING: use 'A' version of functions for ascii input (mbelshe) + * PORTING: generate .so's on cygwin and mingw (ajenjo) + * PORTING: disable profiler methods on cygwin (jperkins) + * Updated autoconf version to 2.61 and libtool version to 1.5.26 + +Wed Mar 11 11:25:34 2009 Google Inc. <opensource@google.com> + + * google-perftools: version 1.1 release + * Dynamically resize thread caches -- nice perf. improvement (kash) + * Add VDSO support to give better stacktraces in linux (ppluzhnikov) + * Improve heap-profiling sampling algorithm (ford) + * Rewrite leak-checking code: should be faster and more robust (sanjay) + * Use ps2 instead of ps for dot: better page cropping for gv (csilvers) + * Disable malloc-failure warning messages by default (csilvers) + * Update config/Makefile to disable tests on a per-OS basis (csilvers) + * PORTING: Get perftools compiling under MSVC 7.1 again (csilvers) + * PORTING: Get perftools compiling under cygwin again (csilvers) + * PORTING: automatically set library flags for solaris x86 (csilvers) + * Add TCMALLOC_SKIP_SBRK to mirror TCMALLOC_SKIP_MMAP (csilvers) + * Add --enable flags to allow selective building (csilvers) + * Put addr2line-pdb and nm-pdb in proper output directory (csilvers) + * Remove deprecated DisableChecksIn (sanjay) + * DOCUMENTATION: Document most MallocExtension routines (csilvers) + +Tue Jan 6 13:58:56 2009 Google Inc. <opensource@google.com> + + * google-perftools: version 1.0 release + * Exactly the same as 1.0rc2 + +Sun Dec 14 17:10:35 2008 Google Inc. <opensource@google.com> + + * google-perftools: version 1.0rc2 release + * Fix compile error on 64-bit systems (casting ptr to int) (csilvers) + +Thu Dec 11 16:01:32 2008 Google Inc. <opensource@google.com> + + * google-perftools: version 1.0rc1 release + * Replace API for selectively disabling heap-checker in code (sanjay) + * Add a pre-mmap hook (daven, adlr) + * Add MallocExtension interface to set memory-releasing rate (fikes) + * Augment pprof to allow any string ending in /pprof/profile (csilvers) + * PORTING: Rewrite -- and fix -- malloc patching for windows (dvitek) + * PORTING: Add nm-pdb and addr2line-pdb for use by pprof (dvitek) + * PORTING: Improve cygwin and mingw support (jperkins, csilvers) + * PORTING: Fix pprof for mac os x, other pprof improvements (csilvers) + * PORTING: Fix some PPC bugs in our locking code (anton.blanchard) + * A new unittest, smapling_test, to verify tcmalloc-profiles (csilvers) + * Turn off TLS for gcc < 4.1.2, due to a TLS + -fPIC bug (csilvers) + * Prefer __builtin_frame_address to assembly for stacktraces (nlewycky) + * Separate tcmalloc.cc out into multiple files -- finally! (kash) + * Make our locking code work with -fPIC on 32-bit x86 (aruns) + * Fix an initialization-ordering bug for tcmalloc/profiling (csilvers) + * Use "initial exec" model of TLS to speed up tcmalloc (csilvers) + * Enforce 16-byte alignment for tcmalloc, for SSE (sanjay) + +Tue Sep 23 08:56:31 2008 Google Inc. <opensource@google.com> + + * google-perftools: version 0.99.2 release + * COMPILE FIX: add #include needed for FreeBSD and OS X (csilvers) + +Sat Sep 20 09:37:18 2008 Google Inc. <opensource@google.com> + + * google-perftools: version 0.99.1 release + * BUG FIX: look for nm, etc in /usr/bin, not /usr/crosstool (csilvers) + +Thu Sep 18 16:00:27 2008 Google Inc. <opensource@google.com> + + * google-perftools: version 0.99 release + * Add IsHeapProfileRunning (csilvers) + * Add C shims for some of the C++ header files (csilvers) + * Fix heap profile file clean-up logic (maxim) + * Rename linuxthreads.c to .cc for better compiler support (csilvers) + * Add source info to disassembly in pprof (sanjay) + * Use open instead of fopen to avoid memory alloc (csilvers) + * Disable malloc extensions when running under valgrind (kcc) + * BUG FIX: Fix out-of-bound error by reordering a check (larryz) + * Add Options struct to ProfileData (cgd) + * Correct PC-handling of --base in pprof (csilvers) + * Handle 1 function occurring twice in an image (sanjay) + * Improve stack-data cleaning (maxim) + * Use 'struct Foo' to make header C compatible (csilvers) + * Add 'total' line to pprof --text (csilvers) + * Pre-allocate buffer for heap-profiler to avoid OOM errors (csilvers) + * Allow a few more env-settings to control tcmalloc (csilvers) + * Document some of the issues involving thread-local storage (csilvers) + * BUG FIX: Define strtoll and friends for windows (csilvers) + +Mon Jun 9 16:47:03 2008 Google Inc. <opensource@google.com> + + * google-perftools: version 0.98 release + * Add ProfilerStartWithOptions() (cgd) + * Change tcmalloc_minimal to not do any stack-tracing at all (csilvers) + * Prefer mmap to sbrk for 64-buit debug mode (sanjay) + * Fix accounting for some tcmalloc stats (sanjay) + * Use setrlimit() to keep unittests from killing the machine (odo) + * Fix a bug when sbrk-ing near address 4G (csilvers) + * Make MallocHook thread-safe (jyasskin) + * Fix windows build for MemoryBarrier (jyasskin) + * Fix CPU-profiler docs to mention correct libs (csilvers) + * Fix for GetHeapProfile() when heap-profiling is off (maxim) + * Avoid realloc resizing ping-pongs using hysteresis (csilvers) + * Add --callgrind output support to pprof (klimek) + * Fix profiler.h and heap-profiler.h to be C-compatible (csilvers) + * Break malloc_hook.h into two parts to reduce dependencies (csilvers) + * Better handle systems that don't implement mmap (csilvers) + * PORTING: disable system_alloc_unittest for msvc (csilvers) + * PORTING: Makefile tweaks to build better on cygwin (csilvers) + +Mon Apr 21 15:20:52 2008 Google Inc. <opensource@google.com> + + * google-perftools: version 0.97 release + * Refactor GetHeapProfile to avoid using malloc (maxim) + * Fix heap-checker and heap-profiler hook interactions (maxim) + * Fix a data race in MemoryRegionMap::Lock (jyasskin) + * Improve thread-safety of leak checker (maxim) + * Fix mmap profile to no longer deadlock (maxim) + * Fix rpm to have devel package depend on non-devel (csilvers) + * PORTING: Fix clock-speed detection for Mac OS X (csilvers) + +Tue Mar 18 14:30:44 2008 Google Inc. <opensource@google.com> + + * google-perftools: version 0.96 release + * major atomicops rewrite; fixed atomic ops code for linux/ppc (vchen) + * nix the stacktrace library; now build structure is simpler (csilvers) + * Speed up heap-checker, and reduce extraneous logging (maxim) + * Improve itimer code for NPTL case (cgd) + * Add source code annotations for use by valgrind, etc (kcc) + * PORTING: Fix high resolution timers for Mac OS X (adlr) + +Tue Feb 19 12:01:31 2008 Google Inc. <opensource@google.com> + + * google-perftools: version 0.95.1 release (bugfix release) + * x86_64 compile-fix: nix pread64 and pwrite64 (csilvers) + * more heap-checker debug logging (maxim) + * minor improvement to x86_64 CycleClock (gpike) + +Tue Feb 12 12:28:32 2008 Google Inc. <opensource@google.com> + + * google-perftools: version 0.95 release + * Better -- not perfect -- support for linux-ppc (csilvers) + * Fix race condition in libunwind stacktrace (aruns) + * Speed up x86 spinlock locking (m3b) + * Improve heap-checker performance (maxim) + * Heap checker traverses more ptrs inside heap-alloced objects (maxim) + * Remove deprecated ProfilerThreadState function (cgd) + * Update libunwind documentation for statically linked binaries (aruns) + +Mon Dec 3 23:51:54 2007 Google Inc. <opensource@google.com> + + * google-perftools: version 0.94.1 release (bugfix release) + * Fix missing #includes for x86_64 compile using libunwind (csilvers) + +Thu Nov 29 07:59:43 2007 Google Inc. <opensource@google.com> + + * google-perftools: version 0.94 release + * PORTING: MinGW/Msys support -- runs same code as MSVC does (csilvers) + * PORTING: Add NumCPUs support for Mac OS X (csilvers) + * Work around a sscanf bug in glibc(?) (waldemar) + * Fix Windows MSVC bug triggered by thread deletion (csilvers) + * Fix bug that triggers in MSVC /O2: missing volatile (gpike) + * March-of-time support: quiet warnings/errors for gcc 4.2, OS X 10.5 + * Modify pprof so it works without nm: useful for windows (csilvers) + * pprof: Support filtering for CPU profiles (cgd) + * Bugfix: have realloc report to hooks in all situations (maxim) + * Speed improvement: replace slow memcpy with std::copy (soren) + * Speed: better iterator efficiency in RecordRegionRemoval (soren) + * Speed: minor speed improvements via better bitfield alignment (gpike) + * Documentation: add documentation of binary profile output (cgd) + +Fri Aug 17 12:32:56 2007 Google Inc. <opensource@google.com> + + * google-perftools: version 0.93 release + * PORTING: everything compiles on Solaris, OS X, FreeBSD (see INSTALL) + * PORTING: cpu-profiler works on most platforms (much better GetPC()) + * PORTING: heap-profiler works on most platforms + * PORTING: improved windows support, including release builds + * No longer build or run ptmalloc tests by default + * Add support for using memfs filesystem to allocate memory in linux + * WINDOWS: give debug library and release library different names + +Tue Jul 17 22:26:27 2007 Google Inc. <opensource@google.com> + + * google-perftools: version 0.92 release + * PERFORMANCE: use a packed cache to speed up tcmalloc + * PORTING: preliminary windows support! (see README.windows) + * PORTING: better support for solaris, OS X, FreeBSD (see INSTALL) + * Envvar support for running the heap-checker under gdb + * Add weak declarations to maybe_threads to fix no-pthreads compile bugs + * Some 64bit fixes, especially with pprof + * Better heap-checker support for some low-level allocations + * Fix bug where heap-profiles would sometimes get truncated + * New documentation about how to handle common heap leak situations + * Use computed includes for hash_map/set: easier config + * Added all used .m4 templates to the distribution + +Wed Apr 18 16:43:55 2007 Google Inc. <opensource@google.com> + + * google-perftools: version 0.91 release + * Brown-paper-bag bugfix: compilation error on some x86-64 machines + +Fri Apr 13 14:50:51 2007 Google Inc. <opensource@google.com> + + * google-perftools: version 0.90 release + * (As the version-number jump hints, this is a major new release: + almost every piece of functionality was rewritten. I can't do + justice to all the changes, but will concentrate on highlights.) + *** USER-VISIBLE CHANGES: + * Ability to "release" unused memory added to tcmalloc + * Exposed more tweaking knobs via environment variables (see docs) + * pprof tries harder to map addresses to functions + * tcmalloc_minimal compiles and runs on FreeBSD 6.0 and Solaris 10 + *** INTERNAL CHANGES: + * Much better 64-bit support + * Better multiple-processor support (e.g. multicore contention tweaks) + * Support for recent kernel ABI changes (e.g. new arg to mremap) + * Addition of spinlocks to tcmalloc to reduce contention cost + * Speed up tcmalloc by using __thread on systems that support TLS + * Total redesign of heap-checker to improve liveness checking + * More portable stack-frame analysis -- no more hard-coded constants! + * Disentangled heap-profiler code and heap-checker code + * Several new unittests to test, e.g., thread-contention costs + * Lots of small (but important!) bug fixes: e.g., fixing GetPC on amd64 + *** KNOWN PROBLEMS: + * CPU-profiling may crash on x86_64 (64-bit) systems. See the README + * Profiling/heap-checking may deadlock on x86_64 systems. See README + +Wed Jun 14 15:11:14 2006 Google Inc. <opensource@google.com> + + * google-perftools: version 0.8 release + * Experimental support for remote profiling added to pprof (many) + * Fixed race condition in ProfileData::FlushTable (etune) + * Better support for weird /proc maps (maxim, mec) + * Fix heap-checker interaction with gdb (markus) + * Better 64-bit support in pprof (aruns) + * Reduce scavenging cost in tcmalloc by capping NumMoveSize (sanjay) + * Cast syscall(SYS_mmap); works on more 64-bit systems now (menage) + * Document the text output of pprof! (csilvers) + * Better compiler support for no-THREADS and for old compilers (csilvers) + * Make libunwind the default stack unwinder for x86-64 (aruns) + * Somehow the COPYING file got erased. Regenerate it (csilvers) + +Thu Apr 13 20:59:09 2006 Google Inc. <opensource@google.com> + + * google-perftools: version 0.7 release + * Major rewrite of thread introspection for new kernels (markus) + * Major rewrite of heap-checker to use new thread tools (maxim) + * Add proper support for following data in thread registers (maxim) + * Syscall support for older kernels, including _syscall6 (markus) + * Support PIC mode (markus, mbland, iant) + * Better support for running in non-threaded contexts (csilvers) + +Fri Jan 27 14:04:27 2006 Google Inc. <opensource@google.com> + + * google-perftools: version 0.6 release + * More sophisticated stacktrace usage, possibly using libunwind (aruns) + * Update pprof to handle 64-bit profiles (dehnert) + * Fix GetStackTrace to correctly return top stackframe (sanjay) + * Add ANSI compliance for new and new[], including new_handler (jkearney) + * More accuracy by reading ELF files directly rather than objdump (mec) + * Add readline support for pprof (addi) + * Add #includes for PPC (csilvers) + * New PC-detection routine for ibook powerpc (asbestoshead) + * Vastly improved tcmalloc unittest (csilvers) + * Move documentation from /usr/doc to /usr/share/doc + +Mon Nov 14 17:28:59 2005 Google Inc. <opensource@google.com> + + * google-perftools: version 0.5 release + * Add va_start/va_end calls around vsnprintf() (csilvers) + * Write our own __syscall_return(), since it's not defined + consistently on all 64-bit linux distros (markus) + +Wed Oct 26 15:19:16 2005 Google Inc. <opensource@google.com> + + * google-perftools: version 0.4 release + * Decrease fragmentation in tcmalloc (lefevere) + * Support for ARM in some of the thread-specific code (markus) + * Turn off heap-checker for statically-linked binaries, which + cause error leak reports now (etune) + * Many pprof improvements, including a command-line interface (jeff) + * CPU profiling now automatically affects all threads in linux 2.6. + (Kernel bugs break CPU profiling and threads in linux 2.4 a bit.) + ProfilerEnable() and ProfilerDisable() are deprecated. (sanjay) + * tcmalloc now correctly intercepts memalign (m3b, maxim) + * Syntax fix: added missing va_end()s. Helps non-gcc compiling (etune) + * Fixed a few coredumper bugs: race condition after PTRACE_DETACH, + ignore non-aligned stackframe pointers (markus, menage) + * 64-bit cleanup, especially for spinlock code (etune) and mmap (sanjay) + * Better support for finding threads in linux (markus) + * tcmalloc now tracks those stack traces that allocate memory (sanjay) + * Work around a weird setspecific problem (sanjay) + * Fix tcmalloc overflow problems when an alloc is close to 2G/4G (sanjay) + +Fri Jun 24 18:02:26 2005 Google Inc. <opensource@google.com> + + * google-perftools: version 0.3 release + * Add missing errno include for one of the unittests (csilvers) + * Reduce tcmalloc startup memory from 5M to 256K (sanjay) + * Add support for mallopt() and mallinfo (sanjay) + * Improve stacktrace's performance on some 64-bit systems (etune) + * Improve the stacktrace unittest (etune) + +Tue May 31 08:14:38 2005 Google Inc. <opensource@google.com> + + * google-perftools: version 0.2 release + * Use mmap2() instead of mmap(), to map more memory (menage) + * Do correct pthread-local checking in heap-checker! (maxim) + * Avoid overflow on 64-bit machines in pprof (sanjay) + * Add a few more GetPC() functions, including for AMD (csilvers) + * Better method for overriding pthread functions (menage) + * (Hacky) fix to avoid overwriting profile files after fork() (csilvers) + * Crashing bugfix involving dumping heaps on small-stack threads (tudor) + * Allow library versions with letters at the end (csilvers) + * Config fixes for systems that don't define PATH_MAX (csilvers) + * Confix fixes so we no longer need config.h after install (csilvers) + * Fix to pprof to correctly read very big cpu profiles (csilvers) + * Fix to pprof to deal with new commandline flags in modern gv's + * Better error reporting when we can't access /proc/maps (etune) + * Get rid of the libc-preallocate code (which could crash on some + systems); no longer needed with local-threads fix (csilvers) + +Tue Feb 8 09:57:17 2005 Google Inc. <opensource@google.com> + + * google-perftools: initial release: + The google-perftools package contains some utilities to improve + and analyze the performance of C++ programs. This includes an + optimized thread-caching malloc() and cpu and heap profiling + utilities. diff --git a/src/thirdparty/gperftools-2.0/INSTALL b/src/thirdparty/gperftools-2.0/INSTALL new file mode 100644 index 000000000..4a09e1482 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/INSTALL @@ -0,0 +1,539 @@ +Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + + +Perftools-Specific Install Notes +================================ + +*** NOTE FOR 64-BIT LINUX SYSTEMS + +The glibc built-in stack-unwinder on 64-bit systems has some problems +with the perftools libraries. (In particular, the cpu/heap profiler +may be in the middle of malloc, holding some malloc-related locks when +they invoke the stack unwinder. The built-in stack unwinder may call +malloc recursively, which may require the thread to acquire a lock it +already holds: deadlock.) + +For that reason, if you use a 64-bit system, we strongly recommend you +install libunwind before trying to configure or install gperftools. +libunwind can be found at + + http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-beta.tar.gz + +Even if you already have libunwind installed, you should check the +version. Versions older than this will not work properly; too-new +versions introduce new code that does not work well with perftools +(because libunwind can call malloc, which will lead to deadlock). + +There have been reports of crashes with libunwind 0.99 (see +http://code.google.com/p/gperftools/issues/detail?id=374). +Alternately, you can use a more recent libunwind (e.g. 1.0.1) at the +cost of adding a bit of boilerplate to your code. For details, see +http://groups.google.com/group/google-perftools/msg/2686d9f24ac4365f + + CAUTION: if you install libunwind from the url above, be aware that + you may have trouble if you try to statically link your binary with + perftools: that is, if you link with 'gcc -static -lgcc_eh ...'. + This is because both libunwind and libgcc implement the same C++ + exception handling APIs, but they implement them differently on + some platforms. This is not likely to be a problem on ia64, but + may be on x86-64. + + Also, if you link binaries statically, make sure that you add + -Wl,--eh-frame-hdr to your linker options. This is required so that + libunwind can find the information generated by the compiler + required for stack unwinding. + + Using -static is rare, though, so unless you know this will affect + you it probably won't. + +If you cannot or do not wish to install libunwind, you can still try +to use the built-in stack unwinder. The built-in stack unwinder +requires that your application, the tcmalloc library, and system +libraries like libc, all be compiled with a frame pointer. This is +*not* the default for x86-64. + +If you are on x86-64 system, know that you have a set of system +libraries with frame-pointers enabled, and compile all your +applications with -fno-omit-frame-pointer, then you can enable the +built-in perftools stack unwinder by passing the +--enable-frame-pointers flag to configure. + +Even with the use of libunwind, there are still known problems with +stack unwinding on 64-bit systems, particularly x86-64. See the +"64-BIT ISSUES" section in README. + +If you encounter problems, try compiling perftools with './configure +--enable-frame-pointers'. Note you will need to compile your +application with frame pointers (via 'gcc -fno-omit-frame-pointer +...') in this case. + + +*** TCMALLOC LARGE PAGES: TRADING TIME FOR SPACE + +You can set a compiler directive that makes tcmalloc faster, at the +cost of using more space (due to internal fragmentation). + +Internally, tcmalloc divides its memory into "pages." The default +page size is chosen to minimize memory use by reducing fragmentation. +The cost is that keeping track of these pages can cost tcmalloc time. +We've added a new, experimental flag to tcmalloc that enables a larger +page size. In general, this will increase the memory needs of +applications using tcmalloc. However, in many cases it will speed up +the applications as well, particularly if they allocate and free a lot +of memory. We've seen average speedups of 3-5% on Google +applications. + +This feature is still very experimental; it's not even a configure +flag yet. To build libtcmalloc with large pages, run + + ./configure <normal flags> CXXFLAGS=-DTCMALLOC_LARGE_PAGES + +(or add -DTCMALLOC_LARGE_PAGES to your existing CXXFLAGS argument). + + +*** SMALL TCMALLOC CACHES: TRADING SPACE FOR TIME + +You can set a compiler directive that makes tcmalloc use less memory +for overhead, at the cost of some time. + +Internally, tcmalloc keeps information about some of its internal data +structures in a cache. This speeds memory operations that need to +access this internal data. We've added a new, experimental flag to +tcmalloc that reduces the size of this cache, decresaing the memory +needs of applications using tcmalloc. + +This feature is still very experimental; it's not even a configure +flag yet. To build libtcmalloc with smaller internal caches, run + + ./configure <normal flags> CXXFLAGS=-DTCMALLOC_SMALL_BUT_SLOW + +(or add -DTCMALLOC_SMALL_BUT_SLOW to your existing CXXFLAGS argument). + + +*** NOTE FOR ___tls_get_addr ERROR + +When compiling perftools on some old systems, like RedHat 8, you may +get an error like this: + ___tls_get_addr: symbol not found + +This means that you have a system where some parts are updated enough +to support Thread Local Storage, but others are not. The perftools +configure script can't always detect this kind of case, leading to +that error. To fix it, just comment out the line + #define HAVE_TLS 1 +in your config.h file before building. + + +*** TCMALLOC AND DLOPEN + +To improve performance, we use the "initial exec" model of Thread +Local Storage in tcmalloc. The price for this is the library will not +work correctly if it is loaded via dlopen(). This should not be a +problem, since loading a malloc-replacement library via dlopen is +asking for trouble in any case: some data will be allocated with one +malloc, some with another. If, for some reason, you *do* need to use +dlopen on tcmalloc, the easiest way is to use a version of tcmalloc +with TLS turned off; see the ___tls_get_addr note above. + + +*** COMPILING ON NON-LINUX SYSTEMS + +Perftools has been tested on the following systems: + FreeBSD 6.0 (x86) + FreeBSD 8.1 (x86_64) + Linux CentOS 5.5 (x86_64) + Linux Debian 4.0 (PPC) + Linux Debian 5.0 (x86) + Linux Fedora Core 3 (x86) + Linux Fedora Core 4 (x86) + Linux Fedora Core 5 (x86) + Linux Fedora Core 6 (x86) + Linux Fedora Core 13 (x86_64) + Linux Fedora Core 14 (x86_64) + Linux RedHat 9 (x86) + Linux Slackware 13 (x86_64) + Linux Ubuntu 6.06.1 (x86) + Linux Ubuntu 6.06.1 (x86_64) + Linux Ubuntu 10.04 (x86) + Linux Ubuntu 10.10 (x86_64) + Mac OS X 10.3.9 (Panther) (PowerPC) + Mac OS X 10.4.8 (Tiger) (PowerPC) + Mac OS X 10.4.8 (Tiger) (x86) + Mac OS X 10.5 (Leopard) (x86) + Mac OS X 10.6 (Snow Leopard) (x86) + Solaris 10 (x86_64) + Windows XP, Visual Studio 2003 (VC++ 7.1) (x86) + Windows XP, Visual Studio 2005 (VC++ 8) (x86) + Windows XP, Visual Studio 2005 (VC++ 9) (x86) + Windows XP, Visual Studio 2005 (VC++ 10) (x86) + Windows XP, MinGW 5.1.3 (x86) + Windows XP, Cygwin 5.1 (x86) + +It works in its full generality on the Linux systems +tested (though see 64-bit notes above). Portions of perftools work on +the other systems. The basic memory-allocation library, +tcmalloc_minimal, works on all systems. The cpu-profiler also works +fairly widely. However, the heap-profiler and heap-checker are not +yet as widely supported. In general, the 'configure' script will +detect what OS you are building for, and only build the components +that work on that OS. + +Note that tcmalloc_minimal is perfectly usable as a malloc/new +replacement, so it is possible to use tcmalloc on all the systems +above, by linking in libtcmalloc_minimal. + +** FreeBSD: + + The following binaries build and run successfully (creating + libtcmalloc_minimal.so and libprofile.so in the process): + % ./configure + % make tcmalloc_minimal_unittest tcmalloc_minimal_large_unittest \ + addressmap_unittest atomicops_unittest frag_unittest \ + low_level_alloc_unittest markidle_unittest memalign_unittest \ + packed_cache_test stacktrace_unittest system_alloc_unittest \ + thread_dealloc_unittest profiler_unittest.sh + % ./tcmalloc_minimal_unittest # to run this test + % [etc] # to run other tests + + Three caveats: first, frag_unittest tries to allocate 400M of memory, + and if you have less virtual memory on your system, the test may + fail with a bad_alloc exception. + + Second, profiler_unittest.sh sometimes fails in the "fork" test. + This is because stray SIGPROF signals from the parent process are + making their way into the child process. (This may be a kernel + bug that only exists in older kernels.) The profiling code itself + is working fine. This only affects programs that call fork(); for + most programs, the cpu profiler is entirely safe to use. + + Third, perftools depends on /proc to get shared library + information. If you are running a FreeBSD system without proc, + perftools will not be able to map addresses to functions. Some + unittests will fail as a result. + + Finally, the new test introduced in perftools-1.2, + profile_handler_unittest, fails on FreeBSD. It has something to do + with how the itimer works. The cpu profiler test passes, so I + believe the functionality is correct and the issue is with the test + somehow. If anybody is an expert on itimers and SIGPROF in + FreeBSD, and would like to debug this, I'd be glad to hear the + results! + + libtcmalloc.so successfully builds, and the "advanced" tcmalloc + functionality all works except for the leak-checker, which has + Linux-specific code: + % make heap-profiler_unittest.sh maybe_threads_unittest.sh \ + tcmalloc_unittest tcmalloc_both_unittest \ + tcmalloc_large_unittest # THESE WORK + % make -k heap-checker_unittest.sh \ + heap-checker-death_unittest.sh # THESE DO NOT + + Note that unless you specify --enable-heap-checker explicitly, + 'make' will not build the heap-checker unittests on a FreeBSD + system. + + I have not tested other *BSD systems, but they are probably similar. + +** Mac OS X: + + I've tested OS X 10.5 [Leopard], OS X 10.4 [Tiger] and OS X 10.3 + [Panther] on both intel (x86) and PowerPC systems. For Panther + systems, perftools does not work at all: it depends on a header + file, OSAtomic.h, which is new in 10.4. (It's possible to get the + code working for Panther/i386 without too much work; if you're + interested in exploring this, drop an e-mail.) + + For the other seven systems, the binaries and libraries that + successfully build are exactly the same as for FreeBSD. See that + section for a list of binaries and instructions on building them. + + In addition, it appears OS X regularly fails profiler_unittest.sh + in the "thread" test (in addition to occassionally failing in the + "fork" test). It looks like OS X often delivers the profiling + signal to the main thread, even when it's sleeping, rather than + spawned threads that are doing actual work. If anyone knows + details of how OS X handles SIGPROF (via setitimer()) events with + threads, and has insight into this problem, please send mail to + google-perftools@googlegroups.com. + +** Solaris 10 x86: + + I've only tested using the GNU C++ compiler, not the Sun C++ + compiler. Using g++ requires setting the PATH appropriately when + configuring. + + % PATH=${PATH}:/usr/sfw/bin/:/usr/ccs/bin ./configure + % PATH=${PATH}:/usr/sfw/bin/:/usr/ccs/bin make [...] + + Again, the binaries and libraries that successfully build are + exactly the same as for FreeBSD. (However, while libprofiler.so can + be used to generate profiles, pprof is not very successful at + reading them -- necessary helper programs like nm don't seem + to be installed by default on Solaris, or perhaps are only + installed as part of the Sun C++ compiler package.) See that + section for a list of binaries, and instructions on building them. + +** Windows (MSVC, Cygwin, and MinGW): + + Work on Windows is rather preliminary: we haven't found a good way + to get stack traces in release mode on windows (that is, when FPO + is enabled), so the heap profiling may not be reliable in that + case. Also, heap-checking and CPU profiling do not yet work at + all. But as in other ports, the basic tcmalloc library + functionality, overriding malloc and new and such (and even + windows-specific functions like _aligned_malloc!), is working fine, + at least with VC++ 7.1 (Visual Studio 2003) through VC++ 10.0, + in both debug and release modes. See README.windows for + instructions on how to install on Windows using Visual Studio. + + Cygwin can compile some but not all of perftools. Furthermore, + there is a problem with exception-unwinding in cygwin (it can call + malloc, which can call the exception-unwinding-setup code, which + can lead to an infinite loop). I've comitted a workaround to the + exception unwinding problem, but it only works in debug mode and + when statically linking in tcmalloc. I hope to have a more proper + fix in a later release. To configure under cygwin, run + + ./configure --disable-shared CXXFLAGS=-g && make + + Most of cygwin will compile (cygwin doesn't allow weak symbols, so + the heap-checker and a few other pieces of functionality will not + compile). 'make' will compile those libraries and tests that can + be compiled. You can run 'make check' to make sure the basic + functionality is working. I've heard reports that some versions of + cygwin fail calls to pthread_join() with EINVAL, causing several + tests to fail. If you have any insight into this, please mail + google-perftools@googlegroups.com. + + This Windows functionality is also available using MinGW and Msys, + In this case, you can use the regular './configure && make' + process. 'make install' should also work. The Makefile will limit + itself to those libraries and binaries that work on windows. + + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. diff --git a/src/thirdparty/gperftools-2.0/Makefile.am b/src/thirdparty/gperftools-2.0/Makefile.am new file mode 100644 index 000000000..93ed11ed3 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/Makefile.am @@ -0,0 +1,1386 @@ +## Process this file with automake to produce Makefile.in + +# Note: for every library we create, we're explicit about what symbols +# we export. In order to avoid complications with C++ mangling, we always +# use the regexp for of specifying symbols. + +# Make sure that when we re-make ./configure, we get the macros we need +ACLOCAL_AMFLAGS = -I m4 + +# This is so we can #include <gperftools/foo> +AM_CPPFLAGS = -I$(top_srcdir)/src + +if !WITH_STACK_TRACE +AM_CPPFLAGS += -DNO_TCMALLOC_SAMPLES +endif !WITH_STACK_TRACE + +# This is mostly based on configure options +AM_CXXFLAGS = + +# These are good warnings to turn on by default. We also tell gcc +# that malloc, free, realloc, mmap, etc. are not builtins (these flags +# are supported since gcc 3.1.1). gcc doesn't think most of them are +# builtins now in any case, but it's best to be explicit in case that +# changes one day. gcc ignores functions it doesn't understand. +if GCC +AM_CXXFLAGS += -Wall -Wwrite-strings -Woverloaded-virtual \ + -Wno-sign-compare \ + -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc \ + -fno-builtin-calloc -fno-builtin-cfree \ + -fno-builtin-memalign -fno-builtin-posix_memalign \ + -fno-builtin-valloc -fno-builtin-pvalloc +# On i386, -mmmx is needed for the mmx-based instructions in +# atomicops-internal-x86.h. +if I386 +AM_CXXFLAGS += -mmmx +endif I386 +endif GCC +if HAVE_W_NO_UNUSED_RESULT +AM_CXXFLAGS += -Wno-unused-result +endif HAVE_W_NO_UNUSED_RESULT + +# The -no-undefined flag allows libtool to generate shared libraries for +# Cygwin and MinGW. LIBSTDCXX_LA_LINKER_FLAG is used to fix a Solaris bug. +AM_LDFLAGS = -no-undefined $(LIBSTDCXX_LA_LINKER_FLAG) + +# We know our low-level code cannot trigger an exception. On some +# systems, such as cygwin, it would be disastrous if they did, because +# the exception handler might call malloc! If our low-level routines +# raised an exception within the malloc, they'd deadlock. Luckily, +# we control all this code, and do not need exceptions for it. +if GCC +NO_EXCEPTIONS = -fno-exceptions +else !GCC +NO_EXCEPTIONS = +endif !GCC + +# These are x86-specific, having to do with frame-pointers. In +# particular, some x86_64 systems do not insert frame pointers by +# default (all i386 systems that I know of, do. I don't know about +# non-x86 chips). We need to tell perftools what to do about that. +if X86_64_AND_NO_FP_BY_DEFAULT +if ENABLE_FRAME_POINTERS +AM_CXXFLAGS += -fno-omit-frame-pointer +else + # TODO(csilvers): check if -fomit-frame-pointer might be in $(CXXFLAGS), + # before setting this. +AM_CXXFLAGS += -DNO_FRAME_POINTER +endif !ENABLE_FRAME_POINTERS +endif X86_64_AND_NO_FP_BY_DEFAULT + +# For windows systems (at least, mingw), we need to tell all our +# tests to link in libtcmalloc using -u. This is because libtcmalloc +# accomplishes its tasks via patching, leaving no work for the linker +# to identify, so the linker will ignore libtcmalloc by default unless +# we explicitly create a dependency via -u. +TCMALLOC_FLAGS = +if MINGW +TCMALLOC_FLAGS += -Wl,-u__tcmalloc +endif MINGW + +# If we have objcopy, make malloc/free/etc weak symbols. That way folks +# can override our malloc if they want to (they can still use tc_malloc). +# Note: the weird-looking symbols are the c++ memory functions: +# (in order) new, new(nothrow), new[], new[](nothrow), delete, delete[] +# In theory this will break if mangling changes, but that seems pretty +# unlikely at this point. Just in case, I throw in versions with an +# extra underscore as well, which may help on OS X. +if HAVE_OBJCOPY_WEAKEN +WEAKEN = $(OBJCOPY) -W malloc -W free -W realloc -W calloc -W cfree \ + -W memalign -W posix_memalign -W valloc -W pvalloc \ + -W malloc_stats -W mallopt -W mallinfo \ + -W _Znwm -W _ZnwmRKSt9nothrow_t -W _Znam -W _ZnamRKSt9nothrow_t \ + -W _ZdlPv -W _ZdaPv \ + -W __Znwm -W __ZnwmRKSt9nothrow_t -W __Znam -W __ZnamRKSt9nothrow_t \ + -W __ZdlPv -W __ZdaPv +else +WEAKEN = : +endif !HAVE_OBJCOPY_WEAKEN + +LIBS_TO_WEAKEN = + +perftoolsincludedir = $(includedir)/gperftools +# The .h files you want to install (that is, .h files that people +# who install this package can include in their own applications.) +# We'll add to this later, on a library-by-library basis +perftoolsinclude_HEADERS = +# tcmalloc.h is a special case, because it's a .h.in file +nodist_perftoolsinclude_HEADERS = src/gperftools/tcmalloc.h +noinst_HEADERS = src/gperftools/tcmalloc.h.in + +# This is provided for backwards compatibility. It is populated by +# files that just forward to the canonical location in +# perftoolsincludedir. +googleincludedir = $(includedir)/google +googleinclude_HEADERS = \ + src/google/heap-checker.h \ + src/google/heap-profiler.h \ + src/google/malloc_extension.h \ + src/google/malloc_extension_c.h \ + src/google/malloc_hook.h \ + src/google/malloc_hook_c.h \ + src/google/profiler.h \ + src/google/stacktrace.h \ + src/google/tcmalloc.h \ + src/windows/google/tcmalloc.h + +docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION) +# This is for HTML and other documentation you want to install. +# Add your documentation files (in doc/) in addition to these +# top-level boilerplate files. Also add a TODO file if you have one. +# We'll add to this later, on a library-by-library basis +dist_doc_DATA = AUTHORS COPYING ChangeLog INSTALL NEWS README README_windows.txt \ + TODO + +# The libraries (.so's) you want to install +# We'll add to this later, on a library-by-library basis +lib_LTLIBRARIES = +# This is for 'convenience libraries' -- basically just a container for sources +noinst_LTLIBRARIES = +## The location of the windows project file for each binary we make +WINDOWS_PROJECTS = gperftools.sln + +# unittests you want to run when people type 'make check'. +# Note: tests cannot take any arguments! +# In theory, unittests that are scripts should be added to check_SCRIPTS +# instead. But check_SCRIPTS is definitely a second-class testing mechanims: +# it don't get TESTS_ENVIRONMENT, and it doesn't get success/failure counting +# (in fact, a script failure aborts all the rest of the tests, even with -k). +# So, for scripts, we add the script to tests, and also put in an empty +# rule so automake doesn't try to build the script as a C binary. +TESTS = +# TESTS_ENVIRONMENT sets environment variables for when you run unittest. +# We always get "srcdir" set for free. +# We'll add to this later, on a library-by-library basis. +TESTS_ENVIRONMENT = +# All script tests should be added here +noinst_SCRIPTS = +# If your test calls another program that, like the test itself, shouldn't +# be installed, add it here. (Stuff in TESTS is automatically added later). +noinst_PROGRAMS = + +# Binaries we might build that should be installed +bin_PROGRAMS = + +# This is my own var, used for extra libraries I make that I need installed +EXTRA_INSTALL = + +## vvvv RULES TO MAKE THE LIBRARIES, BINARIES, AND UNITTESTS + +dist_doc_DATA += doc/index.html doc/designstyle.css + + +### ------- library routines, in src/base + +# This is a 'convenience library' -- it's not actually installed or anything +LOGGING_INCLUDES = src/base/logging.h \ + src/base/commandlineflags.h \ + src/base/basictypes.h \ + src/base/dynamic_annotations.h \ + src/third_party/valgrind.h +noinst_LTLIBRARIES += liblogging.la +liblogging_la_SOURCES = src/base/logging.cc \ + src/base/dynamic_annotations.c \ + $(LOGGING_INCLUDES) + +SYSINFO_INCLUDES = src/base/sysinfo.h \ + src/base/logging.h \ + src/base/commandlineflags.h \ + src/base/cycleclock.h \ + src/base/arm_instruction_set_select.h \ + src/base/basictypes.h +noinst_LTLIBRARIES += libsysinfo.la +libsysinfo_la_SOURCES = src/base/sysinfo.cc \ + $(SYSINFO_INCLUDES) +libsysinfo_la_LIBADD = $(NANOSLEEP_LIBS) + +# For MinGW, we use also have to use libwindows Luckily, we need the +# windows.a library in exactly the same place we need spinlock.a +# (pretty much everywhere), so we can use the same variable name for +# each. We can also optimize the MinGW rule a bit by leaving out +# files we know aren't used on windows, such as +# atomicops-internals-x86.cc. libwindows also obsoletes the need for +# other files like system_alloc.cc. +if MINGW +WINDOWS_INCLUDES = src/windows/port.h \ + src/windows/mingw.h \ + src/windows/mini_disassembler.h \ + src/windows/mini_disassembler_types.h \ + src/windows/preamble_patcher.h +noinst_LTLIBRARIES += libwindows.la +libwindows_la_SOURCES = $(WINDOWS_INCLUDES) \ + src/windows/port.cc \ + src/windows/ia32_modrm_map.cc \ + src/windows/ia32_opcode_map.cc \ + src/windows/mini_disassembler.cc \ + src/windows/patch_functions.cc \ + src/windows/preamble_patcher.cc \ + src/windows/preamble_patcher_with_stub.cc +# patch_functions.cc uses Psapi.lib. MSVC has a #pragma for that, but not us. +libwindows_la_LIBADD = -lPsapi + +SPINLOCK_INCLUDES = src/base/spinlock.h \ + src/base/spinlock_internal.h \ + src/base/spinlock_win32-inl.h \ + src/base/spinlock_linux-inl.h \ + src/base/spinlock_posix-inl.h \ + src/base/synchronization_profiling.h \ + src/base/atomicops-internals-macosx.h \ + src/base/atomicops-internals-linuxppc.h \ + src/base/atomicops-internals-arm-generic.h \ + src/base/atomicops-internals-arm-v6plus.h \ + src/base/atomicops-internals-windows.h \ + src/base/atomicops-internals-x86.h +noinst_LTLIBRARIES += libspinlock.la +libspinlock_la_SOURCES = src/base/spinlock.cc \ + src/base/spinlock_internal.cc \ + $(SPINLOCK_INCLUDES) + +LIBSPINLOCK = libwindows.la libspinlock.la libsysinfo.la liblogging.la + +# We also need to tell mingw that sysinfo.cc needs shlwapi.lib. +# (We do this via a #pragma for msvc, but need to do it here for mingw). +libsysinfo_la_LIBADD += -lshlwapi + +# There's a windows-specific unittest we can run. Right now it's +# win64-specific, and relies on masm, so we comment it out. +## TESTS += preamble_patcher_test +## preamble_patcher_test_SOURCES = src/windows/preamble_patcher_test.cc \ +## src/windows/shortproc.asm \ +## src/windows/auto_testing_hook.h \ +## src/windows/preamble_patcher.h \ +## src/base/basictypes.h \ +## src/base/logging.h +## preamble_patcher_test_LDFLAGS = $(TCMALLOC_FLAGS) +## preamble_patcher_test_LDADD = $(LIBTCMALLOC_MINIMAL) + +# patch_functions.cc #includes tcmalloc.cc, so no need to link it in. +TCMALLOC_CC = +# windows has its own system for threads and system memory allocation. +MAYBE_THREADS_CC = +SYSTEM_ALLOC_CC = +else !MINGW +# spinlock is the only code that uses atomicops. +SPINLOCK_INCLUDES = src/base/spinlock.h \ + src/base/spinlock_internal.h \ + src/base/atomicops.h \ + src/base/atomicops-internals-macosx.h \ + src/base/atomicops-internals-linuxppc.h \ + src/base/atomicops-internals-windows.h \ + src/base/atomicops-internals-x86.h + +noinst_LTLIBRARIES += libspinlock.la +libspinlock_la_SOURCES = src/base/spinlock.cc \ + src/base/spinlock_internal.cc \ + src/base/atomicops-internals-x86.cc \ + $(SPINLOCK_INCLUDES) +libspinlock_la_LIBADD = $(NANOSLEEP_LIBS) +# spinlock also needs NumCPUs, from libsysinfo, which in turn needs liblogging +LIBSPINLOCK = libspinlock.la libsysinfo.la liblogging.la + +TCMALLOC_CC = src/tcmalloc.cc +MAYBE_THREADS_CC = src/maybe_threads.cc +SYSTEM_ALLOC_CC = src/system-alloc.cc +endif !MINGW + +# Add this whether or not we're under MinGW, to keep the tarball complete. +WINDOWS_PROJECTS += vsprojects/preamble_patcher_test/preamble_patcher_test.vcproj +# Because we've commented out the test, above, we have to explicitly add +# the test files to the tarball or automake will leave them out. +WINDOWS_PROJECTS += src/windows/preamble_patcher_test.cc \ + src/windows/shortproc.asm \ + src/windows/auto_testing_hook.h + +### Unittests +TESTS += low_level_alloc_unittest +WINDOWS_PROJECTS += vsprojects/low_level_alloc_unittest/low_level_alloc_unittest.vcproj +LOW_LEVEL_ALLOC_UNITTEST_INCLUDES = src/base/low_level_alloc.h \ + src/base/basictypes.h \ + src/gperftools/malloc_hook.h \ + src/gperftools/malloc_hook_c.h \ + src/malloc_hook-inl.h \ + src/malloc_hook_mmap_linux.h \ + src/malloc_hook_mmap_freebsd.h \ + $(SPINLOCK_INCLUDES) \ + $(LOGGING_INCLUDES) +low_level_alloc_unittest_SOURCES = src/base/low_level_alloc.cc \ + src/malloc_hook.cc \ + $(MAYBE_THREADS_CC) \ + src/tests/low_level_alloc_unittest.cc \ + $(LOW_LEVEL_ALLOC_UNITTEST_INCLUDES) +# By default, MallocHook takes stack traces for use by the heap-checker. +# We don't need that functionality here, so we turn it off to reduce deps. +low_level_alloc_unittest_CXXFLAGS = -DNO_TCMALLOC_SAMPLES +low_level_alloc_unittest_LDADD = $(LIBSPINLOCK) + +TESTS += atomicops_unittest +ATOMICOPS_UNITTEST_INCLUDES = src/base/atomicops.h \ + src/base/atomicops-internals-macosx.h \ + src/base/atomicops-internals-windows.h \ + src/base/atomicops-internals-x86.h \ + $(LOGGING_INCLUDES) +atomicops_unittest_SOURCES = src/tests/atomicops_unittest.cc \ + $(ATOMICOPS_UNITTEST_INCLUDES) +atomicops_unittest_LDADD = $(LIBSPINLOCK) + + +### ------- stack trace + +if WITH_STACK_TRACE + +### The header files we use. We divide into categories based on directory +S_STACKTRACE_INCLUDES = src/stacktrace_config.h \ + src/stacktrace_generic-inl.h \ + src/stacktrace_libunwind-inl.h \ + src/stacktrace_arm-inl.h \ + src/stacktrace_powerpc-inl.h \ + src/stacktrace_x86-inl.h \ + src/stacktrace_win32-inl.h \ + src/base/elf_mem_image.h \ + src/base/vdso_support.h + +SG_STACKTRACE_INCLUDES = src/gperftools/stacktrace.h +STACKTRACE_INCLUDES = $(S_STACKTRACE_INCLUDES) $(SG_STACKTRACE_INCLUDES) +perftoolsinclude_HEADERS += $(SG_STACKTRACE_INCLUDES) + +### Making the library +noinst_LTLIBRARIES += libstacktrace.la +libstacktrace_la_SOURCES = src/stacktrace.cc \ + src/base/elf_mem_image.cc \ + src/base/vdso_support.cc \ + $(STACKTRACE_INCLUDES) +libstacktrace_la_LIBADD = $(UNWIND_LIBS) $(LIBSPINLOCK) +STACKTRACE_SYMBOLS = '(GetStackTrace|GetStackFrames|GetStackTraceWithContext|GetStackFramesWithContext)' +libstacktrace_la_LDFLAGS = -export-symbols-regex $(STACKTRACE_SYMBOLS) + +### Unittests +TESTS += stacktrace_unittest +STACKTRACE_UNITTEST_INCLUDES = src/config_for_unittests.h \ + src/base/commandlineflags.h \ + $(STACKTRACE_INCLUDES) \ + $(LOGGING_INCLUDES) +stacktrace_unittest_SOURCES = src/tests/stacktrace_unittest.cc \ + $(STACKTRACE_UNITTEST_INCLUDES) +stacktrace_unittest_LDADD = libstacktrace.la liblogging.la + +### Documentation +dist_doc_DATA += + +endif WITH_STACK_TRACE + +### ------- pprof + +# If we are not compiling with stacktrace support, pprof is worthless +if WITH_STACK_TRACE + +bin_SCRIPTS = src/pprof + +### Unittests + +check_SCRIPTS = pprof_unittest +pprof_unittest: $(top_srcdir)/src/pprof + $(top_srcdir)/src/pprof -test + +# Let unittests find pprof if they need to run it +TESTS_ENVIRONMENT += PPROF_PATH=$(top_srcdir)/src/pprof + +### Documentation +dist_man_MANS = doc/pprof.1 +dist_doc_DATA += doc/pprof_remote_servers.html + +# On MSVC, we need our own versions of addr2line and nm to work with pprof. +WINDOWS_PROJECTS += vsprojects/nm-pdb/nm-pdb.vcproj +WINDOWS_PROJECTS += vsprojects/addr2line-pdb/addr2line-pdb.vcproj +# This is a slight abuse of WINDOWS_PROJECTS, but not much +WINDOWS_PROJECTS += src/windows/nm-pdb.c \ + src/windows/addr2line-pdb.c + +endif WITH_STACK_TRACE + +### ------- tcmalloc_minimal (thread-caching malloc) + +### The header files we use. We divide into categories based on directory +S_TCMALLOC_MINIMAL_INCLUDES = src/common.h \ + src/internal_logging.h \ + src/system-alloc.h \ + src/packed-cache-inl.h \ + $(SPINLOCK_INCLUDES) \ + src/tcmalloc_guard.h \ + src/base/commandlineflags.h \ + src/base/basictypes.h \ + src/pagemap.h \ + src/sampler.h \ + src/central_freelist.h \ + src/linked_list.h \ + src/libc_override.h \ + src/libc_override_gcc_and_weak.h \ + src/libc_override_glibc.h \ + src/libc_override_osx.h \ + src/libc_override_redefine.h \ + src/page_heap.h \ + src/page_heap_allocator.h \ + src/span.h \ + src/static_vars.h \ + src/symbolize.h \ + src/thread_cache.h \ + src/stack_trace_table.h \ + src/base/thread_annotations.h \ + src/malloc_hook-inl.h \ + src/malloc_hook_mmap_linux.h \ + src/malloc_hook_mmap_freebsd.h \ + src/maybe_threads.h +SG_TCMALLOC_MINIMAL_INCLUDES = src/gperftools/malloc_hook.h \ + src/gperftools/malloc_hook_c.h \ + src/gperftools/malloc_extension.h \ + src/gperftools/malloc_extension_c.h \ + src/gperftools/stacktrace.h +TCMALLOC_MINIMAL_INCLUDES = $(S_TCMALLOC_MINIMAL_INCLUDES) $(SG_TCMALLOC_MINIMAL_INCLUDES) +perftoolsinclude_HEADERS += $(SG_TCMALLOC_MINIMAL_INCLUDES) + +### Making the library + +# As we describe at the top of this file, we want to turn off exceptions +# for all files in this library -- except tcmalloc.cc which needs them +# to fulfill its API. Automake doesn't allow per-file CXXFLAGS, so we need +# to separate into two libraries. +noinst_LTLIBRARIES += libtcmalloc_minimal_internal.la +libtcmalloc_minimal_internal_la_SOURCES = src/common.cc \ + src/internal_logging.cc \ + $(SYSTEM_ALLOC_CC) \ + src/memfs_malloc.cc \ + src/central_freelist.cc \ + src/page_heap.cc \ + src/sampler.cc \ + src/span.cc \ + src/stack_trace_table.cc \ + src/static_vars.cc \ + src/symbolize.cc \ + src/thread_cache.cc \ + src/malloc_hook.cc \ + src/malloc_extension.cc \ + $(MAYBE_THREADS_CC) \ + $(TCMALLOC_MINIMAL_INCLUDES) +# We #define NO_TCMALLOC_SAMPLES, since sampling is turned off for _minimal. +libtcmalloc_minimal_internal_la_CXXFLAGS = -DNO_TCMALLOC_SAMPLES \ + -DNO_HEAP_CHECK \ + $(PTHREAD_CFLAGS) -DNDEBUG \ + $(AM_CXXFLAGS) $(NO_EXCEPTIONS) +libtcmalloc_minimal_internal_la_LDFLAGS = $(PTHREAD_CFLAGS) +libtcmalloc_minimal_internal_la_LIBADD = $(PTHREAD_LIBS) $(LIBSPINLOCK) + +lib_LTLIBRARIES += libtcmalloc_minimal.la +WINDOWS_PROJECTS += vsprojects/libtcmalloc_minimal/libtcmalloc_minimal.vcproj +libtcmalloc_minimal_la_SOURCES = $(TCMALLOC_CC) $(TCMALLOC_MINIMAL_INCLUDES) +libtcmalloc_minimal_la_CXXFLAGS = -DNO_TCMALLOC_SAMPLES \ + $(PTHREAD_CFLAGS) -DNDEBUG $(AM_CXXFLAGS) +# -version-info gets passed to libtool +libtcmalloc_minimal_la_LDFLAGS = $(PTHREAD_CFLAGS) -version-info @TCMALLOC_SO_VERSION@ +libtcmalloc_minimal_la_LIBADD = libtcmalloc_minimal_internal.la $(PTHREAD_LIBS) + +# For windows, we're playing around with trying to do some stacktrace +# support even with libtcmalloc_minimal. For everyone else, though, +# we turn off all stack-trace activity for libtcmalloc_minimal. +# TODO(csilvers): when we're done experimenting, do something principled here +if MINGW +LIBTCMALLOC_MINIMAL = libtcmalloc_minimal.la libstacktrace.la +else !MINGW +LIBTCMALLOC_MINIMAL = libtcmalloc_minimal.la +endif !MINGW + +LIBS_TO_WEAKEN += libtcmalloc_minimal.la + +### Unittests + +# Commented out for the moment because malloc(very_big_num) is broken in +# standard libc! At least, in some situations, some of the time. +## TESTS += malloc_unittest +## MALLOC_UNITEST_INCLUDES = src/gperftools/malloc_extension.h \ +## src/gperftools/malloc_hook.h \ +## src/gperftools/malloc_hook_c.h \ +## src/malloc_hook-inl.h \ +## src/malloc_hook_mmap_linux.h \ +## src/malloc_hook_mmap_freebsd.h \ +## src/base/basictypes.h \ +## src/maybe_threads.h +## malloc_unittest_SOURCES = src/tests/tcmalloc_unittest.cc \ +## src/malloc_hook.cc \ +## src/malloc_extension.cc \ +## $(MAYBE_THREADS_CC) \ +## $(MALLOC_UNITTEST_INCLUDES) +## malloc_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +## malloc_unittest_LDFLAGS = $(PTHREAD_CFLAGS) +## malloc_unittest_LDADD = $(PTHREAD_LIBS) + +TESTS += tcmalloc_minimal_unittest +WINDOWS_PROJECTS += vsprojects/tcmalloc_minimal_unittest/tcmalloc_minimal_unittest.vcproj +WINDOWS_PROJECTS += vsprojects/tmu-static/tmu-static.vcproj +tcmalloc_minimal_unittest_SOURCES = src/tests/tcmalloc_unittest.cc \ + src/tests/testutil.h src/tests/testutil.cc \ + $(TCMALLOC_UNITTEST_INCLUDES) +tcmalloc_minimal_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +tcmalloc_minimal_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +# We want libtcmalloc last on the link line, but due to a bug in +# libtool involving convenience libs, they need to come last on the +# link line in order to get dependency ordering right. This is ok: +# convenience libraries are .a's, so tcmalloc is still the last .so. +# We also put pthreads after tcmalloc, because some pthread +# implementations define their own malloc, and we need to go on the +# first linkline to make sure our malloc 'wins'. +tcmalloc_minimal_unittest_LDADD = $(LIBTCMALLOC_MINIMAL) \ + liblogging.la $(PTHREAD_LIBS) + +TESTS += tcmalloc_minimal_large_unittest +WINDOWS_PROJECTS += vsprojects/tcmalloc_minimal_large/tcmalloc_minimal_large_unittest.vcproj +tcmalloc_minimal_large_unittest_SOURCES = src/tests/tcmalloc_large_unittest.cc +tcmalloc_minimal_large_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +tcmalloc_minimal_large_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +tcmalloc_minimal_large_unittest_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) + +# This tests it works to LD_PRELOAD libtcmalloc (tests maybe_threads.cc) +# In theory this should work under mingw, but mingw has trouble running +# shell scripts that end in .exe. And it doesn't seem to build shared +# libraries anyway (so can't be LD_PRELOADed) -- in fact, anybody who +# chooses not to build shared libraries won't be able to run this test. +# TODO(csilvers): figure out how to nix ".exe" or otherwise work under mingw +if !MINGW +if !ENABLE_STATIC +TESTS += maybe_threads_unittest.sh$(EXEEXT) +maybe_threads_unittest_sh_SOURCES = src/tests/maybe_threads_unittest.sh +noinst_SCRIPTS += $(maybe_threads_unittest_sh_SOURCES) +# This script preloads libtcmalloc, and calls two other binaries as well +# TODO(csilvers): replace by 'if ! cmp $^ $@ >/dev/null 2>&; then ...; fi' +maybe_threads_unittest.sh$(EXEEXT): $(top_srcdir)/$(maybe_threads_unittest_sh_SOURCES) \ + $(LIBTCMALLOC_MINIMAL) \ + low_level_alloc_unittest + rm -f $@ + cp -p $(top_srcdir)/$(maybe_threads_unittest_sh_SOURCES) $@ +endif !ENABLE_STATIC +endif !MINGW + +# These all tests components of tcmalloc_minimal + +TESTS += addressmap_unittest +WINDOWS_PROJECTS += vsprojects/addressmap_unittest/addressmap_unittest.vcproj +ADDRESSMAP_UNITTEST_INCLUDES = src/addressmap-inl.h \ + src/base/commandlineflags.h \ + $(LOGGING_INCLUDES) +addressmap_unittest_SOURCES = src/tests/addressmap_unittest.cc \ + $(ADDRESSMAP_UNITTEST_INCLUDES) +if MINGW +addressmap_unittest_SOURCES += src/windows/port.h src/windows/port.cc +endif MINGW +addressmap_unittest_CXXFLAGS = -g $(AM_CXXFLAGS) +addressmap_unittest_LDADD = liblogging.la + +if !MINGW +TESTS += system_alloc_unittest +system_alloc_unittest_SOURCES = src/config_for_unittests.h \ + src/tests/system-alloc_unittest.cc +system_alloc_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +system_alloc_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +system_alloc_unittest_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) +endif !MINGW + +TESTS += packed_cache_test +WINDOWS_PROJECTS += vsprojects/packed-cache_test/packed-cache_test.vcproj +packed_cache_test_SOURCES = src/tests/packed-cache_test.cc +packed_cache_test_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +packed_cache_test_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +packed_cache_test_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) + +TESTS += frag_unittest +WINDOWS_PROJECTS += vsprojects/frag_unittest/frag_unittest.vcproj +frag_unittest_SOURCES = src/tests/frag_unittest.cc src/config_for_unittests.h +frag_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +frag_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +frag_unittest_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) + +TESTS += markidle_unittest +WINDOWS_PROJECTS += vsprojects/markidle_unittest/markidle_unittest.vcproj +markidle_unittest_SOURCES = src/tests/markidle_unittest.cc \ + src/config_for_unittests.h \ + src/tests/testutil.h src/tests/testutil.cc +markidle_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +markidle_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +markidle_unittest_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) + +TESTS += current_allocated_bytes_test +WINDOWS_PROJECTS += vsprojects/current_allocated_bytes_test/current_allocated_bytes_test.vcproj +current_allocated_bytes_test_SOURCES = src/tests/current_allocated_bytes_test.cc \ + src/config_for_unittests.h +current_allocated_bytes_test_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +current_allocated_bytes_test_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +current_allocated_bytes_test_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) + +TESTS += malloc_hook_test +WINDOWS_PROJECTS += vsprojects/malloc_hook_test/malloc_hook_test.vcproj +malloc_hook_test_SOURCES = src/tests/malloc_hook_test.cc \ + src/config_for_unittests.h \ + src/base/logging.h \ + src/gperftools/malloc_hook.h \ + src/tests/testutil.h src/tests/testutil.cc +malloc_hook_test_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +malloc_hook_test_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +malloc_hook_test_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) + +TESTS += malloc_extension_test +WINDOWS_PROJECTS += vsprojects/malloc_extension_test/malloc_extension_test.vcproj +malloc_extension_test_SOURCES = src/tests/malloc_extension_test.cc \ + src/config_for_unittests.h \ + src/base/logging.h \ + src/gperftools/malloc_extension.h \ + src/gperftools/malloc_extension_c.h +malloc_extension_test_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +malloc_extension_test_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +malloc_extension_test_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) + +# This doesn't work with static linkage, because libtcmalloc.a isn't +# happy with C linkage (it misses the stdc++ library). Likewise with +# mingw, which links foo.a even though it doesn't set ENABLE_STATIC. +# TODO(csilvers): set enable_static=true in configure.ac:36? +if !MINGW +if !ENABLE_STATIC +TESTS += malloc_extension_c_test +malloc_extension_c_test_SOURCES = src/tests/malloc_extension_c_test.c \ + src/gperftools/malloc_extension.h \ + src/gperftools/malloc_extension_c.h +malloc_extension_c_test_CFLAGS = $(PTHREAD_CFLAGS) $(AM_CFLAGS) +# -ansi here is just to help ensure the code is bog-standard C. +if GCC +malloc_extension_c_test_CFLAGS += -ansi +endif GCC +malloc_extension_c_test_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +malloc_extension_c_test_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) +endif !ENABLE_STATIC +endif !MINGW + +if !MINGW +if !OSX +TESTS += memalign_unittest +memalign_unittest_SOURCES = src/tests/memalign_unittest.cc \ + src/tcmalloc.h \ + src/config_for_unittests.h \ + src/tests/testutil.h src/tests/testutil.cc +memalign_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +memalign_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +memalign_unittest_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) +endif !OSX +endif !MINGW + +TESTS += page_heap_test +WINDOWS_PROJECTS += vsprojects/page_heap_test/page_heap_test.vcproj +page_heap_test_SOURCES = src/tests/page_heap_test.cc \ + src/config_for_unittests.h \ + src/base/logging.h \ + src/common.h \ + src/page_heap.h +page_heap_test_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +page_heap_test_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +page_heap_test_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) + +TESTS += pagemap_unittest +WINDOWS_PROJECTS += vsprojects/pagemap_unittest/pagemap_unittest.vcproj +pagemap_unittest_SOURCES = src/tests/pagemap_unittest.cc \ + src/config_for_unittests.h \ + src/base/logging.h \ + src/pagemap.h +pagemap_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +pagemap_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +pagemap_unittest_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) + +TESTS += realloc_unittest +WINDOWS_PROJECTS += vsprojects/realloc_unittest/realloc_unittest.vcproj +realloc_unittest_SOURCES = src/tests/realloc_unittest.cc \ + src/config_for_unittests.h \ + src/base/logging.h +realloc_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +realloc_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +realloc_unittest_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) + +TESTS += stack_trace_table_test +WINDOWS_PROJECTS += vsprojects/stack_trace_table_test/stack_trace_table_test.vcproj +stack_trace_table_test_SOURCES = src/tests/stack_trace_table_test.cc \ + src/config_for_unittests.h +stack_trace_table_test_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +stack_trace_table_test_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +stack_trace_table_test_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) + +TESTS += thread_dealloc_unittest +WINDOWS_PROJECTS += vsprojects/thread_dealloc_unittest/thread_dealloc_unittest.vcproj +thread_dealloc_unittest_SOURCES = src/tests/thread_dealloc_unittest.cc \ + src/config_for_unittests.h \ + src/tests/testutil.h src/tests/testutil.cc +thread_dealloc_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +thread_dealloc_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +thread_dealloc_unittest_LDADD = $(LIBTCMALLOC_MINIMAL) $(PTHREAD_LIBS) + +### Documentation +dist_doc_DATA += doc/tcmalloc.html \ + doc/overview.gif \ + doc/pageheap.gif \ + doc/spanmap.gif \ + doc/threadheap.gif \ + doc/t-test1.times.txt \ + doc/tcmalloc-opspercpusec.vs.threads.1024.bytes.png \ + doc/tcmalloc-opspercpusec.vs.threads.128.bytes.png \ + doc/tcmalloc-opspercpusec.vs.threads.131072.bytes.png \ + doc/tcmalloc-opspercpusec.vs.threads.16384.bytes.png \ + doc/tcmalloc-opspercpusec.vs.threads.2048.bytes.png \ + doc/tcmalloc-opspercpusec.vs.threads.256.bytes.png \ + doc/tcmalloc-opspercpusec.vs.threads.32768.bytes.png \ + doc/tcmalloc-opspercpusec.vs.threads.4096.bytes.png \ + doc/tcmalloc-opspercpusec.vs.threads.512.bytes.png \ + doc/tcmalloc-opspercpusec.vs.threads.64.bytes.png \ + doc/tcmalloc-opspercpusec.vs.threads.65536.bytes.png \ + doc/tcmalloc-opspercpusec.vs.threads.8192.bytes.png \ + doc/tcmalloc-opspersec.vs.size.1.threads.png \ + doc/tcmalloc-opspersec.vs.size.12.threads.png \ + doc/tcmalloc-opspersec.vs.size.16.threads.png \ + doc/tcmalloc-opspersec.vs.size.2.threads.png \ + doc/tcmalloc-opspersec.vs.size.20.threads.png \ + doc/tcmalloc-opspersec.vs.size.3.threads.png \ + doc/tcmalloc-opspersec.vs.size.4.threads.png \ + doc/tcmalloc-opspersec.vs.size.5.threads.png \ + doc/tcmalloc-opspersec.vs.size.8.threads.png + +# I don't know how to say "distribute the .dot files but don't install them"; +# noinst doesn't seem to work with data. I separate them out anyway, in case +# one day we figure it out. Regardless, installing the dot files isn't the +# end of the world. +dist_doc_DATA += doc/overview.dot \ + doc/pageheap.dot \ + doc/spanmap.dot \ + doc/threadheap.dot + + +### ------- tcmalloc_minimal_debug (thread-caching malloc with debugallocation) + +# Like tcmalloc.cc, debugallocation.cc needs exceptions to fulfill its +# API. Luckily, we can reuse everything else from tcmalloc_minimal. + +if WITH_DEBUGALLOC + +lib_LTLIBRARIES += libtcmalloc_minimal_debug.la +libtcmalloc_minimal_debug_la_SOURCES = src/debugallocation.cc \ + $(TCMALLOC_MINIMAL_INCLUDES) +libtcmalloc_minimal_debug_la_CXXFLAGS = $(libtcmalloc_minimal_la_CXXFLAGS) \ + -DTCMALLOC_FOR_DEBUGALLOCATION +# version_info gets passed to libtool +libtcmalloc_minimal_debug_la_LDFLAGS = $(libtcmalloc_minimal_la_LDFLAGS) \ + -version-info @TCMALLOC_SO_VERSION@ +libtcmalloc_minimal_debug_la_LIBADD = $(libtcmalloc_minimal_la_LIBADD) + +LIBS_TO_WEAKEN += libtcmalloc_minimal_debug.la + +### Unittests + +TESTS += tcmalloc_minimal_debug_unittest +tcmalloc_minimal_debug_unittest_SOURCES = $(tcmalloc_minimal_unittest_SOURCES) +tcmalloc_minimal_debug_unittest_CXXFLAGS = $(tcmalloc_minimal_unittest_CXXFLAGS) \ + -DDEBUGALLOCATION +tcmalloc_minimal_debug_unittest_LDFLAGS = $(tcmalloc_minimal_unittest_LDFLAGS) +tcmalloc_minimal_debug_unittest_LDADD = libtcmalloc_minimal_debug.la $(PTHREAD_LIBS) + +TESTS += malloc_extension_debug_test +malloc_extension_debug_test_SOURCES = $(malloc_extension_test_SOURCES) +malloc_extension_debug_test_CXXFLAGS = $(malloc_extension_test_CXXFLAGS) +malloc_extension_debug_test_LDFLAGS = $(malloc_extension_test_LDFLAGS) +malloc_extension_debug_test_LDADD = libtcmalloc_minimal_debug.la $(PTHREAD_LIBS) + +if !MINGW +if !OSX +TESTS += memalign_debug_unittest +memalign_debug_unittest_SOURCES = $(memalign_unittest_SOURCES) +memalign_debug_unittest_CXXFLAGS = $(memalign_unittest_CXXFLAGS) +memalign_debug_unittest_LDFLAGS = $(memalign_unittest_LDFLAGS) +memalign_debug_unittest_LDADD = libtcmalloc_minimal_debug.la $(PTHREAD_LIBS) +endif !OSX +endif !MINGW + +TESTS += realloc_debug_unittest +realloc_debug_unittest_SOURCES = $(realloc_unittest_SOURCES) +realloc_debug_unittest_CXXFLAGS = $(realloc_unittest_CXXFLAGS) +realloc_debug_unittest_LDFLAGS = $(realloc_unittest_LDFLAGS) +realloc_debug_unittest_LDADD = libtcmalloc_minimal_debug.la $(PTHREAD_LIBS) + +# debugallocation_test checks that we print a proper stacktrace when +# debug-allocs fail, so we can't run it if we don't have stacktrace info. +if WITH_STACK_TRACE +TESTS += debugallocation_test.sh$(EXEEXT) +debugallocation_test_sh_SOURCES = src/tests/debugallocation_test.sh +noinst_SCRIPTS += $(debugallocation_test_sh_SOURCES) +debugallocation_test.sh$(EXEEXT): $(top_srcdir)/$(debugallocation_test_sh_SOURCES) \ + debugallocation_test + rm -f $@ + cp -p $(top_srcdir)/$(debugallocation_test_sh_SOURCES) $@ + +# This is the sub-program used by debugallocation_test.sh +noinst_PROGRAMS += debugallocation_test +debugallocation_test_SOURCES = src/tests/debugallocation_test.cc +debugallocation_test_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +debugallocation_test_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +debugallocation_test_LDADD = libtcmalloc_debug.la $(PTHREAD_LIBS) +endif WITH_STACK_TRACE + +endif WITH_DEBUGALLOC + + +### ------- tcmalloc (thread-caching malloc + heap profiler + heap checker) + +if WITH_HEAP_PROFILER_OR_CHECKER + +### The header files we use. We divide into categories based on directory +S_TCMALLOC_INCLUDES = $(S_TCMALLOC_MINIMAL_INCLUDES) \ + $(LOGGING_INCLUDES) \ + src/addressmap-inl.h \ + src/raw_printer.h \ + src/base/elfcore.h \ + src/base/googleinit.h \ + src/base/linux_syscall_support.h \ + src/base/linuxthreads.h \ + src/base/stl_allocator.h \ + src/base/sysinfo.h \ + src/base/thread_lister.h \ + src/heap-profile-table.h +SG_TCMALLOC_INCLUDES = $(SG_TCMALLOC_MINIMAL_INCLUDES) \ + src/gperftools/heap-profiler.h \ + src/gperftools/heap-checker.h +TCMALLOC_INCLUDES = $(S_TCMALLOC_INCLUDES) $(SG_TCMALLOC_INCLUDES) +perftoolsinclude_HEADERS += $(SG_TCMALLOC_INCLUDES) + +### Making the library + +# As we describe at the top of this file, we want to turn off exceptions +# for all files in this library -- except tcmalloc.cc which needs them +# to fulfill its API. Automake doesn't allow per-file CXXFLAGS, so we need +# to separate into two libraries. +noinst_LTLIBRARIES += libtcmalloc_internal.la +libtcmalloc_internal_la_SOURCES = $(libtcmalloc_minimal_internal_la_SOURCES) \ + $(TCMALLOC_INCLUDES) \ + src/base/low_level_alloc.cc \ + src/heap-profile-table.cc \ + src/heap-profiler.cc \ + src/raw_printer.cc \ + src/memory_region_map.cc +libtcmalloc_internal_la_CXXFLAGS = $(PTHREAD_CFLAGS) -DNDEBUG \ + $(AM_CXXFLAGS) $(NO_EXCEPTIONS) +libtcmalloc_internal_la_LDFLAGS = $(PTHREAD_CFLAGS) +libtcmalloc_internal_la_LIBADD = libstacktrace.la $(PTHREAD_LIBS) + +lib_LTLIBRARIES += libtcmalloc.la +libtcmalloc_la_SOURCES = $(TCMALLOC_CC) $(TCMALLOC_INCLUDES) +libtcmalloc_la_CXXFLAGS = $(PTHREAD_CFLAGS) -DNDEBUG $(AM_CXXFLAGS) +libtcmalloc_la_LDFLAGS = $(PTHREAD_CFLAGS) -version-info @TCMALLOC_SO_VERSION@ +libtcmalloc_la_LIBADD = libtcmalloc_internal.la $(PTHREAD_LIBS) + +if WITH_HEAP_CHECKER +# heap-checker-bcad is last, in hopes its global ctor will run first. +# (Note this is added to libtcmalloc.la, not libtcmalloc_internal.la, +# but that's ok; the internal/external distinction is only useful for +# cygwin, and cygwin doesn't use HEAP_CHECKER anyway.) +HEAP_CHECKER_SOURCES = src/base/thread_lister.c \ + src/base/linuxthreads.cc \ + src/heap-checker.cc \ + src/heap-checker-bcad.cc +libtcmalloc_la_SOURCES += $(HEAP_CHECKER_SOURCES) +else !WITH_HEAP_CHECKER +HEAP_CHECKER_SOURCES = +libtcmalloc_internal_la_CXXFLAGS += -DNO_HEAP_CHECK +libtcmalloc_la_CXXFLAGS += -DNO_HEAP_CHECK +endif !WITH_HEAP_CHECKER + +LIBTCMALLOC = libtcmalloc.la + +LIBS_TO_WEAKEN += libtcmalloc.la + +### Unittests + +TESTS += tcmalloc_unittest +TCMALLOC_UNITTEST_INCLUDES = src/config_for_unittests.h \ + src/gperftools/malloc_extension.h +tcmalloc_unittest_SOURCES = src/tests/tcmalloc_unittest.cc \ + src/tcmalloc.h \ + src/tests/testutil.h src/tests/testutil.cc \ + $(TCMALLOC_UNITTEST_INCLUDES) +tcmalloc_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +tcmalloc_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +# We want libtcmalloc last on the link line, but due to a bug in +# libtool involving convenience libs, they need to come last on the +# link line in order to get dependency ordering right. This is ok: +# convenience libraries are .a's, so tcmalloc is still the last .so. +# We also put pthreads after tcmalloc, because some pthread +# implementations define their own malloc, and we need to go on the +# first linkline to make sure our malloc 'wins'. +tcmalloc_unittest_LDADD = $(LIBTCMALLOC) liblogging.la $(PTHREAD_LIBS) + +# This makes sure it's safe to link in both tcmalloc and +# tcmalloc_minimal. (One would never do this on purpose, but perhaps +# by accident...) When we can compile libprofiler, we also link it in +# to make sure that works too. NOTE: On OS X, it's *not* safe to +# link both in (we end up with two copies of every global var, and +# the code tends to pick one arbitrarily), so don't run the test there. +# (We define these outside the 'if' because they're reused below.) +tcmalloc_both_unittest_srcs = src/tests/tcmalloc_unittest.cc \ + src/tests/testutil.h src/tests/testutil.cc \ + $(TCMALLOC_UNITTEST_INCLUDES) +tcmalloc_both_unittest_cflags = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +tcmalloc_both_unittest_lflags = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +if WITH_CPU_PROFILER +# We want libtcmalloc last on the link line, but due to a bug in +# libtool involving convenience libs, they need to come last on the +# link line in order to get dependency ordering right. This is ok: +# convenience libraries are .a's, so tcmalloc is still the last .so. +# We also put pthreads after tcmalloc, because some pthread +# implementations define their own malloc, and we need to go on the +# first linkline to make sure our malloc 'wins'. +tcmalloc_both_unittest_ladd = $(LIBTCMALLOC) $(LIBTCMALLOC_MINIMAL) \ + libprofiler.la liblogging.la $(PTHREAD_LIBS) +else +tcmalloc_both_unittest_ladd = $(LIBTCMALLOC) $(LIBTCMALLOC_MINIMAL) \ + liblogging.la $(PTHREAD_LIBS) +endif !WITH_CPU_PROFILER +if !OSX +TESTS += tcmalloc_both_unittest +tcmalloc_both_unittest_SOURCES = $(tcmalloc_both_unittest_srcs) +tcmalloc_both_unittest_CXXFLAGS = $(tcmalloc_both_unittest_cflags) +tcmalloc_both_unittest_LDFLAGS = $(tcmalloc_both_unittest_lflags) +tcmalloc_both_unittest_LDADD = $(tcmalloc_both_unittest_ladd) +endif !OSX + +TESTS += tcmalloc_large_unittest +tcmalloc_large_unittest_SOURCES = src/tests/tcmalloc_large_unittest.cc +tcmalloc_large_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +tcmalloc_large_unittest_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +tcmalloc_large_unittest_LDADD = $(LIBTCMALLOC) $(PTHREAD_LIBS) + +TESTS += raw_printer_test +raw_printer_test_SOURCES = src/tests/raw_printer_test.cc +raw_printer_test_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +raw_printer_test_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +raw_printer_test_LDADD = $(LIBTCMALLOC) $(PTHREAD_LIBS) + +# sampler_test and sampling_test both require sampling to be turned +# on, which it's not by default. Use the "standard" value of 2^19. +TESTS_ENVIRONMENT += TCMALLOC_SAMPLE_PARAMETER=524288 + +TESTS += sampler_test +WINDOWS_PROJECTS += vsprojects/sampler_test/sampler_test.vcproj +sampler_test_SOURCES = src/tests/sampler_test.cc \ + src/config_for_unittests.h +sampler_test_CXXFLAGS = $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +sampler_test_LDFLAGS = $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +sampler_test_LDADD = $(LIBTCMALLOC) $(PTHREAD_LIBS) -lm + + +# These unittests often need to run binaries. They're in the current dir +TESTS_ENVIRONMENT += BINDIR=. +TESTS_ENVIRONMENT += TMPDIR=/tmp/perftools + +TESTS += sampling_test.sh$(EXEEXT) +sampling_test_sh_SOURCES = src/tests/sampling_test.sh +noinst_SCRIPTS += $(sampling_test_sh_SOURCES) +sampling_test.sh$(EXEEXT): $(top_srcdir)/$(sampling_test_sh_SOURCES) \ + sampling_test + rm -f $@ + cp -p $(top_srcdir)/$(sampling_test_sh_SOURCES) $@ + +# This is the sub-program used by sampling_test.sh +# The -g is so pprof can get symbol information. +noinst_PROGRAMS += sampling_test +SAMPLING_TEST_INCLUDES = src/config_for_unittests.h \ + src/base/logging.h \ + src/gperftools/malloc_extension.h +sampling_test_SOURCES = src/tests/sampling_test.cc \ + $(SAMPLING_TEST_INCLUDES) +sampling_test_CXXFLAGS = -g $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +sampling_test_LDFLAGS = -g $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +sampling_test_LDADD = $(LIBTCMALLOC) $(PTHREAD_LIBS) + +endif WITH_HEAP_PROFILER_OR_CHECKER + +if WITH_HEAP_PROFILER + +TESTS += heap-profiler_unittest.sh$(EXEEXT) +heap_profiler_unittest_sh_SOURCES = src/tests/heap-profiler_unittest.sh +noinst_SCRIPTS += $(heap_profiler_unittest_sh_SOURCES) +heap-profiler_unittest.sh$(EXEEXT): $(top_srcdir)/$(heap_profiler_unittest_sh_SOURCES) \ + heap-profiler_unittest + rm -f $@ + cp -p $(top_srcdir)/$(heap_profiler_unittest_sh_SOURCES) $@ + +# These are sub-programs used by heap-profiler_unittest.sh +noinst_PROGRAMS += heap-profiler_unittest +HEAP_PROFILER_UNITTEST_INCLUDES = src/config_for_unittests.h \ + src/gperftools/heap-profiler.h +heap_profiler_unittest_SOURCES = src/tests/heap-profiler_unittest.cc \ + $(HEAP_PROFILER_UNITTEST_INCLUDES) +heap_profiler_unittest_CXXFLAGS = -g $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +heap_profiler_unittest_LDFLAGS = -g $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +heap_profiler_unittest_LDADD = $(LIBTCMALLOC) $(PTHREAD_LIBS) + +# Tests the compatibility include-headers in google/. Requires a function +# defined in the heap-profiler, which is why the test lives here. +TESTS += simple_compat_test +simple_compat_test_SOURCES = src/tests/simple_compat_test.cc \ + $(googleinclude_HEADERS) +simple_compat_test_LDFLAGS = $(TCMALLOC_FLAGS) +simple_compat_test_LDADD = $(LIBTCMALLOC) + +endif WITH_HEAP_PROFILER + +if WITH_HEAP_CHECKER + +TESTS += heap-checker_unittest.sh$(EXEEXT) +heap_checker_unittest_sh_SOURCES = src/tests/heap-checker_unittest.sh +noinst_SCRIPTS += $(heap_checker_unittest_sh_SOURCES) +heap-checker_unittest.sh$(EXEEXT): $(top_srcdir)/$(heap_checker_unittest_sh_SOURCES) \ + heap-checker_unittest + rm -f $@ + cp -p $(top_srcdir)/$(heap_checker_unittest_sh_SOURCES) $@ + +TESTS += heap-checker-death_unittest.sh$(EXEEXT) +heap_checker_death_unittest_sh_SOURCES = src/tests/heap-checker-death_unittest.sh +noinst_SCRIPTS += $(top_srcdir)/$(heap_checker_death_unittest_sh_SOURCES) +heap-checker-death_unittest.sh$(EXEEXT): $(heap_checker_death_unittest_sh_SOURCES) \ + heap-checker_unittest + rm -f $@ + cp -p $(top_srcdir)/$(heap_checker_death_unittest_sh_SOURCES) $@ + +# These are sub-programs used by heap-checker_unittest.sh +noinst_PROGRAMS += heap-checker_unittest +HEAP_CHECKER_UNITTEST_INCLUDES = src/config_for_unittests.h \ + src/memory_region_map.h \ + src/base/commandlineflags.h \ + src/base/googleinit.h \ + src/gperftools/heap-checker.h \ + $(LOGGING_INCLUDES) +heap_checker_unittest_SOURCES = src/tests/heap-checker_unittest.cc \ + $(HEAP_CHECKER_UNITTEST_INCLUDES) +heap_checker_unittest_CXXFLAGS = -g $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +heap_checker_unittest_LDFLAGS = -g $(PTHREAD_CFLAGS) $(TCMALLOC_FLAGS) +# We want libtcmalloc last on the link line, but due to a bug in +# libtool involving convenience libs, they need to come last on the +# link line in order to get dependency ordering right. This is ok: +# convenience libraries are .a's, so tcmalloc is still the last .so. +# We also put pthreads after tcmalloc, because some pthread +# implementations define their own malloc, and we need to go on the +# first linkline to make sure our malloc 'wins'. +heap_checker_unittest_LDADD = $(LIBTCMALLOC) liblogging.la $(PTHREAD_LIBS) + +endif WITH_HEAP_CHECKER + +### Documentation (above and beyond tcmalloc_minimal documentation) +if WITH_HEAP_PROFILER +dist_doc_DATA += doc/heapprofile.html doc/heap-example1.png +endif WITH_HEAP_PROFILER + +if WITH_HEAP_CHECKER +dist_doc_DATA += doc/heap_checker.html +endif WITH_HEAP_CHECKER + + +### ------- tcmalloc with debugallocation + +if WITH_DEBUGALLOC +if WITH_HEAP_PROFILER_OR_CHECKER + +lib_LTLIBRARIES += libtcmalloc_debug.la +libtcmalloc_debug_la_SOURCES = src/debugallocation.cc $(HEAP_CHECKER_SOURCES) \ + $(TCMALLOC_INCLUDES) +libtcmalloc_debug_la_CXXFLAGS = $(libtcmalloc_la_CXXFLAGS) \ + -DTCMALLOC_FOR_DEBUGALLOCATION +libtcmalloc_debug_la_LDFLAGS = $(libtcmalloc_la_LDFLAGS) \ + -version-info @TCMALLOC_SO_VERSION@ +libtcmalloc_debug_la_LIBADD = $(libtcmalloc_la_LIBADD) + +LIBS_TO_WEAKEN += libtcmalloc_debug.la + +### Unittests + +TESTS += tcmalloc_debug_unittest +tcmalloc_debug_unittest_SOURCES = $(tcmalloc_unittest_SOURCES) +tcmalloc_debug_unittest_CXXFLAGS = $(tcmalloc_unittest_CXXFLAGS) \ + -DDEBUGALLOCATION +tcmalloc_debug_unittest_LDFLAGS = $(tcmalloc_unittest_LDFLAGS) +tcmalloc_debug_unittest_LDADD = libtcmalloc_debug.la $(PTHREAD_LIBS) + +TESTS += sampler_debug_test +sampler_debug_test_SOURCES = $(sampler_test_SOURCES) +sampler_debug_test_CXXFLAGS = $(samples_test_CXXFLAGS) +sampler_debug_test_LDFLAGS = $(sampler_test_LDFLAGS) +sampler_debug_test_LDADD = libtcmalloc_debug.la $(PTHREAD_LIBS) -lm + +TESTS += sampling_debug_test.sh$(EXEEXT) +sampling_debug_test_sh_SOURCES = src/tests/sampling_test.sh +sampling_debug_test.sh$(EXEEXT): $(top_srcdir)/$(sampling_test_sh_SOURCES) \ + sampling_debug_test + rm -f $@ + cp -p $(top_srcdir)/$(sampling_test_sh_SOURCES) $@ + +# This is the sub-program using by sampling_debug_test.sh +# The -g is so pprof can get symbol information. +noinst_PROGRAMS += sampling_debug_test +sampling_debug_test_SOURCES = $(sampling_test_SOURCES) +sampling_debug_test_CXXFLAGS = $(sampling_test_CXXFLAGS) +sampling_debug_test_LDFLAGS = $(sampling_test_LDFLAGS) +sampling_debug_test_LDADD = libtcmalloc_debug.la $(PTHREAD_LIBS) + +endif WITH_HEAP_PROFILER_OR_CHECKER + +if WITH_HEAP_PROFILER + +TESTS += heap-profiler_debug_unittest.sh$(EXEEXT) +heap_profiler_debug_unittest_sh_SOURCES = src/tests/heap-profiler_unittest.sh +heap-profiler_debug_unittest.sh$(EXEEXT): $(top_srcdir)/$(heap_profiler_unittest_sh_SOURCES) \ + heap-profiler_debug_unittest + rm -f $@ + cp -p $(top_srcdir)/$(heap_profiler_unittest_sh_SOURCES) $@ + +# These are sub-programs used by heap-profiler_debug_unittest.sh +noinst_PROGRAMS += heap-profiler_debug_unittest +heap_profiler_debug_unittest_SOURCES = $(heap_profiler_unittest_SOURCES) +heap_profiler_debug_unittest_CXXFLAGS = $(heap_profiler_unittest_CXXFLAGS) +heap_profiler_debug_unittest_LDFLAGS = $(heap_profiler_unittest_LDFLAGS) +heap_profiler_debug_unittest_LDADD = libtcmalloc_debug.la $(PTHREAD_LIBS) + +endif WITH_HEAP_PROFILER + +if WITH_HEAP_CHECKER + +TESTS += heap-checker_debug_unittest.sh$(EXEEXT) +heap_checker_debug_unittest_sh_SOURCES = src/tests/heap-checker_unittest.sh +heap-checker_debug_unittest.sh$(EXEEXT): $(top_srcdir)/$(heap_checker_unittest_sh_SOURCES) \ + heap-checker_debug_unittest + rm -f $@ + cp -p $(top_srcdir)/$(heap_checker_unittest_sh_SOURCES) $@ + +# These are sub-programs used by heap-checker_debug_unittest.sh +noinst_PROGRAMS += heap-checker_debug_unittest +heap_checker_debug_unittest_SOURCES = $(heap_checker_unittest_SOURCES) +heap_checker_debug_unittest_CXXFLAGS = $(heap_checker_unittest_CXXFLAGS) +heap_checker_debug_unittest_LDFLAGS = $(heap_checker_unittest_LDFLAGS) +# We want libtcmalloc last on the link line, but due to a bug in +# libtool involving convenience libs, they need to come last on the +# link line in order to get dependency ordering right. This is ok: +# convenience libraries are .a's, so tcmalloc is still the last .so. +heap_checker_debug_unittest_LDADD = libtcmalloc_debug.la liblogging.la \ + $(PTHREAD_LIBS) + +endif WITH_HEAP_CHECKER +endif WITH_DEBUGALLOC + + +### ------- CPU profiler + +if WITH_CPU_PROFILER + +### The header files we use. We divide into categories based on directory +S_CPU_PROFILER_INCLUDES = src/profiledata.h \ + src/profile-handler.h \ + src/getpc.h \ + src/base/basictypes.h \ + src/base/commandlineflags.h \ + src/base/googleinit.h \ + src/base/logging.h \ + src/base/simple_mutex.h \ + src/base/sysinfo.h \ + $(SPINLOCK_INCLUDES) \ + $(LOGGING_INCLUDES) +SG_CPU_PROFILER_INCLUDES = src/gperftools/profiler.h \ + src/gperftools/stacktrace.h +CPU_PROFILER_INCLUDES = $(S_CPU_PROFILER_INCLUDES) $(SG_CPU_PROFILER_INCLUDES) +perftoolsinclude_HEADERS += $(SG_CPU_PROFILER_INCLUDES) + +### Making the library +lib_LTLIBRARIES += libprofiler.la +libprofiler_la_SOURCES = src/profiler.cc \ + src/profile-handler.cc \ + src/profiledata.cc \ + $(CPU_PROFILER_INCLUDES) +libprofiler_la_LIBADD = libstacktrace.la +# We have to include ProfileData for profiledata_unittest +CPU_PROFILER_SYMBOLS = '(ProfilerStart|ProfilerStartWithOptions|ProfilerStop|ProfilerFlush|ProfilerEnable|ProfilerDisable|ProfilingIsEnabledForAllThreads|ProfilerRegisterThread|ProfilerGetCurrentState|ProfilerState|ProfileData|ProfileHandler)' +libprofiler_la_LDFLAGS = -export-symbols-regex $(CPU_PROFILER_SYMBOLS) \ + -version-info @PROFILER_SO_VERSION@ + +# See discussion above (under LIBTCMALLOC_MINIMAL) for why we do this. +# Basically it's to work around systems where --rpath doesn't work right. +LIBPROFILER = libstacktrace.la libprofiler.la + +### Unittests +TESTS += getpc_test +#WINDOWS_PROJECTS += vsprojects/getpc_test/getpc_test.vcproj +getpc_test_SOURCES = src/tests/getpc_test.cc src/getpc.h + +TESTS += profiledata_unittest +#WINDOWS_PROJECTS += vsprojects/profiledata_unittest/profiledata_unittest.vcproj +profiledata_unittest_SOURCES = src/tests/profiledata_unittest.cc \ + src/profiledata.h \ + src/base/commandlineflags.h \ + src/base/logging.h \ + src/base/basictypes.h +profiledata_unittest_LDADD = $(LIBPROFILER) + +TESTS += profile_handler_unittest +profile_handler_unittest_SOURCES = src/tests/profile-handler_unittest.cc \ + src/profile-handler.h +profile_handler_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) +profile_handler_unittest_LDFLAGS = $(PTHREAD_CFLAGS) +profile_handler_unittest_LDADD = $(LIBPROFILER) $(PTHREAD_LIBS) + +TESTS += profiler_unittest.sh$(EXEEXT) +profiler_unittest_sh_SOURCES = src/tests/profiler_unittest.sh +noinst_SCRIPTS += $(profiler_unittest_sh_SOURCES) +profiler_unittest.sh$(EXEEXT): $(top_srcdir)/$(profiler_unittest_sh_SOURCES) \ + profiler1_unittest profiler2_unittest \ + profiler3_unittest profiler4_unittest + rm -f $@ + cp -p $(top_srcdir)/$(profiler_unittest_sh_SOURCES) $@ + +# These are sub-programs used by profiler_unittest.sh +noinst_PROGRAMS += profiler1_unittest profiler2_unittest profiler3_unittest \ + profiler4_unittest +PROFILER_UNITTEST_INCLUDES = src/config_for_unittests.h \ + src/gperftools/profiler.h +PROFILER_UNITTEST_SRCS = src/tests/profiler_unittest.cc \ + src/tests/testutil.h src/tests/testutil.cc \ + $(PROFILER_UNITTEST_INCLUDES) +profiler1_unittest_SOURCES = $(PROFILER_UNITTEST_SRCS) +profiler1_unittest_CXXFLAGS = -g -DNO_THREADS $(AM_CXXFLAGS) +profiler1_unittest_LDADD = $(LIBPROFILER) +profiler2_unittest_SOURCES = $(PROFILER_UNITTEST_SRCS) +profiler2_unittest_CXXFLAGS = -g -DNO_THREADS $(AM_CXXFLAGS) +profiler2_unittest_LDADD = -lstacktrace -lprofiler +# We depend on -lprofiler but haven't yet said how to build it. Do so now. +profiler2_unittest_DEPENDENCIES = $(LIBPROFILER) +profiler3_unittest_SOURCES = $(PROFILER_UNITTEST_SRCS) +profiler3_unittest_CXXFLAGS = -g $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +profiler3_unittest_LDFLAGS = $(PTHREAD_CFLAGS) +profiler3_unittest_LDADD = $(LIBPROFILER) $(PTHREAD_LIBS) +profiler4_unittest_SOURCES = $(PROFILER_UNITTEST_SRCS) +profiler4_unittest_CXXFLAGS = -g $(PTHREAD_CFLAGS) $(AM_CXXFLAGS) +profiler4_unittest_LDFLAGS = $(PTHREAD_CFLAGS) +profiler4_unittest_LDADD = -lstacktrace -lprofiler $(PTHREAD_LIBS) +# We depend on -lprofiler but haven't yet said how to build it. Do so now. +profiler4_unittest_DEPENDENCIES = $(LIBPROFILER) + + +### Documentation +dist_doc_DATA += doc/cpuprofile.html \ + doc/cpuprofile-fileformat.html \ + doc/pprof-test-big.gif \ + doc/pprof-test.gif \ + doc/pprof-vsnprintf-big.gif \ + doc/pprof-vsnprintf.gif + +endif WITH_CPU_PROFILER + + +### ------- CPU profiler and heap checker, in one! + +# Ideally, folks who wanted to use both tcmalloc and libprofiler, +# could just link them both into their application. But while this +# works fine for .so files, it does not for .a files. The easiest way +# around this -- and I've tried a bunch of the hard ways -- is to just +# to create another set of libraries that has both functionality in it. + +if WITH_HEAP_PROFILER_OR_CHECKER +if WITH_CPU_PROFILER + +lib_LTLIBRARIES += libtcmalloc_and_profiler.la +libtcmalloc_and_profiler_la_SOURCES = $(libtcmalloc_la_SOURCES) $(libprofiler_la_SOURCES) +libtcmalloc_and_profiler_la_CXXFLAGS = $(libtcmalloc_la_CXXFLAGS) $(libprofiler_la_CXXFLAGS) +# Since this library is meant to be used as a .a, I don't worry as much +# about .so versioning. I just give the libtcmalloc version number. +# TODO(csilvers): use -export-symbols-regex? +libtcmalloc_and_profiler_la_LDFLAGS = $(PTHREAD_CFLAGS) \ + -version-info @TCMALLOC_SO_VERSION@ +# We don't include libprofiler_la_LIBADD here because all it adds is +# libstacktrace.la, which we already get via libtcmalloc. Trying to +# specify it twice causes link-time duplicate-definition errors. :-( +libtcmalloc_and_profiler_la_LIBADD = $(libtcmalloc_la_LIBADD) + +TESTS += tcmalloc_and_profiler_unittest +tcmalloc_and_profiler_unittest_SOURCES = $(tcmalloc_both_unittest_srcs) +tcmalloc_and_profiler_unittest_CXXFLAGS = $(tcmalloc_both_unittest_cflags) +tcmalloc_and_profiler_unittest_LDFLAGS = $(tcmalloc_both_unittest_lflags) +tcmalloc_and_profiler_unittest_LDADD = libtcmalloc_and_profiler.la + +LIBS_TO_WEAKEN += libtcmalloc_and_profiler.la + +endif WITH_CPU_PROFILER +endif WITH_HEAP_PROFILER_OR_CHECKER + +## ^^^^ END OF RULES TO MAKE YOUR LIBRARIES, BINARIES, AND UNITTESTS + + +# Do the weakening on some exported libtcmalloc symbols. +install-exec-local: all-local +all-local: $(LIBS_TO_WEAKEN) + for la in $(LIBS_TO_WEAKEN); do lib=".libs/`basename $$la .la`.a"; [ ! -f "$$lib" ] || $(WEAKEN) "$$lib"; done + + +# This should always include $(TESTS), but may also include other +# binaries that you compile but don't want automatically installed. +# We'll add to this later, on a library-by-library basis +noinst_PROGRAMS += $(TESTS) + +rpm: dist-gzip packages/rpm.sh packages/rpm/rpm.spec + @cd packages && ./rpm.sh ${PACKAGE} ${VERSION} + +deb: dist-gzip packages/deb.sh packages/deb/* + @cd packages && ./deb.sh ${PACKAGE} ${VERSION} + +# http://linux.die.net/man/1/pkg-config, http://pkg-config.freedesktop.org/wiki +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libtcmalloc.pc libtcmalloc_minimal.pc \ + libtcmalloc_debug.pc libtcmalloc_minimal_debug.pc \ + libprofiler.pc +CLEANFILES = $(pkgconfig_DATA) + +# I get the description and URL lines from the rpm spec. I use sed to +# try to rewrite exec_prefix, libdir, and includedir in terms of +# prefix, if possible. +libtcmalloc.pc: Makefile packages/rpm/rpm.spec + echo 'prefix=$(prefix)' > "$@".tmp + echo 'exec_prefix='`echo '$(exec_prefix)' | sed 's@^$(prefix)@$${prefix}@'` >> "$@".tmp + echo 'libdir='`echo '$(libdir)' | sed 's@^$(exec_prefix)@$${exec_prefix}@'` >> "$@".tmp + echo 'includedir='`echo '$(includedir)' | sed 's@^$(prefix)@$${prefix}@'` >> "$@".tmp + echo '' >> "$@".tmp + echo 'Name: $(PACKAGE)' >> "$@".tmp + echo 'Version: $(VERSION)' >> "$@".tmp + -grep '^Summary:' $(top_srcdir)/packages/rpm/rpm.spec | sed s/^Summary:/Description:/ | head -n1 >> "$@".tmp + -grep '^URL: ' $(top_srcdir)/packages/rpm/rpm.spec >> "$@".tmp + echo 'Requires:' >> "$@".tmp + echo 'Libs: -L$${libdir} -ltcmalloc' >> "$@".tmp + echo 'Libs.private: $(PTHREAD_CFLAGS) $(PTHREAD_LIBS)' >> "$@".tmp + echo 'Cflags: -I$${includedir}' >> "$@".tmp + mv -f "$@".tmp "$@" + +# The other versions are mostly the same. +libtcmalloc_minimal.pc: libtcmalloc.pc + cat libtcmalloc.pc | sed s/-ltcmalloc/-ltcmalloc_minimal/ > "$@" + +libtcmalloc_debug.pc: libtcmalloc.pc + cat libtcmalloc.pc | sed s/-ltcmalloc/-ltcmalloc_debug/ > "$@" + +libtcmalloc_minimal_debug.pc: libtcmalloc.pc + cat libtcmalloc.pc | sed s/-ltcmalloc/-ltcmalloc_minimal_debug/ > "$@" + +libprofiler.pc: libtcmalloc.pc + cat libtcmalloc.pc | sed s/-ltcmalloc/-lprofiler/ > "$@" + +libtool: $(LIBTOOL_DEPS) + $(SHELL) ./config.status --recheck + +# Windows wants write permission to .vcproj files and maybe even sln files. +dist-hook: + test -e "$(distdir)/vsprojects" \ + && chmod -R u+w $(distdir)/*.sln $(distdir)/vsprojects/ + +EXTRA_DIST = packages/rpm.sh packages/rpm/rpm.spec packages/deb.sh packages/deb \ + $(SCRIPTS) libtool \ + src/windows/get_mangled_names.cc src/windows/override_functions.cc \ + src/windows/config.h src/windows/gperftools/tcmalloc.h \ + $(WINDOWS_PROJECTS) \ + src/solaris/libstdc++.la diff --git a/src/thirdparty/gperftools-2.0/NEWS b/src/thirdparty/gperftools-2.0/NEWS new file mode 100644 index 000000000..3bfcdef8c --- /dev/null +++ b/src/thirdparty/gperftools-2.0/NEWS @@ -0,0 +1,338 @@ +== 03 February 2012 == + +I've just released gperftools 2.0 + +The `google-perftools` project has been renamed to `gperftools`. I +(csilvers) am stepping down as maintainer, to be replaced by +David Chappelle. Welcome to the team, David! David has been an +an active contributor to perftools in the past -- in fact, he's the +only person other than me that already has commit status. I am +pleased to have him take over as maintainer. + +I have both renamed the project (the Google Code site renamed a few +weeks ago), and bumped the major version number up to 2, to reflect +the new community ownership of the project. Almost all the +[http://sparsehash.googlecode.com/svn/tags/gperftools-2.0/ChangeLog changes] +are related to the renaming. + +The main functional change from google-perftools 1.10 is that +I've renamed the `google/` include-directory to be `gperftools/` +instead. New code should `#include <gperftools/tcmalloc.h>`/etc. +(Most users of perftools don't need any perftools-specific includes at +all, so this is mostly directed to "power users.") I've kept the old +names around as forwarding headers to the new, so `#include +<google/tcmalloc.h>` will continue to work. + +(The other functional change which I snuck in is getting rid of some +bash-isms in one of the unittest driver scripts, so it could run on +Solaris.) + +Note that some internal names still contain the text `google`, such as +the `google_malloc` internal linker section. I think that's a +trickier transition, and can happen in a future release (if at all). + + +=== 31 January 2012 === + +I've just released perftools 1.10 + +There is an API-incompatible change: several of the methods in the +`MallocExtension` class have changed from taking a `void*` to taking a +`const void*`. You should not be affected by this API change +unless you've written your own custom malloc extension that derives +from `MallocExtension`, but since it is a user-visible change, I have +upped the `.so` version number for this release. + +This release focuses on improvements to linux-syscall-support.h, +including ARM and PPC fixups and general cleanups. I hope this will +magically fix an array of bugs people have been seeing. + +There is also exciting news on the porting front, with support for +patching win64 assembly contributed by IBM Canada! This is an +important step -- perhaps the most difficult -- to getting perftools +to work on 64-bit windows using the patching technique (it doesn't +affect the libc-modification technique). `premable_patcher_test` has +been added to help test these changes; it is meant to compile under +x86_64, and won't work under win32. + +For the full list of changes, including improved `HEAP_PROFILE_MMAP` +support, see the +[http://gperftools.googlecode.com/svn/tags/google-perftools-1.10/ChangeLog ChangeLog]. + + +=== 24 January 2011 === + +The `google-perftools` Google Code page has been renamed to +`gperftools`, in preparation for the project being renamed to +`gperftools`. In the coming weeks, I'll be stepping down as +maintainer for the perftools project, and as part of that Google is +relinquishing ownership of the project; it will now be entirely +community run. The name change reflects that shift. The 'g' in +'gperftools' stands for 'great'. :-) + +=== 23 December 2011 === + +I've just released perftools 1.9.1 + +I missed including a file in the tarball, that is needed to compile on +ARM. If you are not compiling on ARM, or have successfully compiled +perftools 1.9, there is no need to upgrade. + + +=== 22 December 2011 === + +I've just released perftools 1.9 + +This change has a slew of improvements, from better ARM and freebsd +support, to improved performance by moving some code outside of locks, +to better pprof reporting of code with overloaded functions. + +The full list of changes is in the +[http://google-perftools.googlecode.com/svn/tags/google-perftools-1.9/ChangeLog ChangeLog]. + + +=== 26 August 2011 === + +I've just released perftools 1.8.3 + +The star-crossed 1.8 series continues; in 1.8.1, I had accidentally +removed some code that was needed for FreeBSD. (Without this code +many apps would crash at startup.) This release re-adds that code. +If you are not on FreeBSD, or are using FreeBSD with perftools 1.8 or +earlier, there is no need to upgrade. + +=== 11 August 2011 === + +I've just released perftools 1.8.2 + +I was incorrectly calculating the patch-level in the configuration +step, meaning the TC_VERSION_PATCH #define in tcmalloc.h was wrong. +Since the testing framework checks for this, it was failing. Now it +should work again. This time, I was careful to re-run my tests after +upping the version number. :-) + +If you don't care about the TC_VERSION_PATCH #define, there's no +reason to upgrae. + +=== 26 July 2011 === + +I've just released perftools 1.8.1 + +I was missing an #include that caused the build to break under some +compilers, especially newer gcc's, that wanted it. This only affects +people who build from source, so only the .tar.gz file is updated from +perftools 1.8. If you didn't have any problems compiling perftools +1.8, there's no reason to upgrade. + +=== 15 July 2011 === + +I've just released perftools 1.8 + +Of the many changes in this release, a good number pertain to porting. +I've revamped OS X support to use the malloc-zone framework; it should +now Just Work to link in tcmalloc, without needing +`DYLD_FORCE_FLAT_NAMESPACE` or the like. (This is a pretty major +change, so please feel free to report feedback at +google-perftools@googlegroups.com.) 64-bit Windows support is also +improved, as is ARM support, and the hooks are in place to improve +FreeBSD support as well. + +On the other hand, I'm seeing hanging tests on Cygwin. I see the same +hanging even with (the old) perftools 1.7, so I'm guessing this is +either a problem specific to my Cygwin installation, or nobody is +trying to use perftools under Cygwin. If you can reproduce the +problem, and even better have a solution, you can report it at +google-perftools@googlegroups.com. + +Internal changes include several performance and space-saving tweaks. +One is user-visible (but in "stealth mode", and otherwise +undocumented): you can compile with `-DTCMALLOC_SMALL_BUT_SLOW`. In +this mode, tcmalloc will use less memory overhead, at the cost of +running (likely not noticeably) slower. + +There are many other changes as well, too numerous to recount here, +but present in the +[http://google-perftools.googlecode.com/svn/tags/google-perftools-1.8/ChangeLog ChangeLog]. + + +=== 7 February 2011 === + +Thanks to endlessr..., who +[http://code.google.com/p/google-perftools/issues/detail?id=307 identified] +why some tests were failing under MSVC 10 in release mode. It does not look +like these failures point toward any problem with tcmalloc itself; rather, the +problem is with the test, which made some assumptions that broke under the +some aggressive optimizations used in MSVC 10. I'll fix the test, but in +the meantime, feel free to use perftools even when compiled under MSVC +10. + +=== 4 February 2011 === + +I've just released perftools 1.7 + +I apologize for the delay since the last release; so many great new +patches and bugfixes kept coming in (and are still coming in; I also +apologize to those folks who have to slip until the next release). I +picked this arbitrary time to make a cut. + +Among the many new features in this release is a multi-megabyte +reduction in the amount of tcmalloc overhead uder x86_64, improved +performance in the case of contention, and many many bugfixes, +especially architecture-specific bugfixes. See the +[http://google-perftools.googlecode.com/svn/tags/google-perftools-1.7/ChangeLog ChangeLog] +for full details. + +One architecture-specific change of note is added comments in the +[http://google-perftools.googlecode.com/svn/tags/perftools-1.7/README README] +for using tcmalloc under OS X. I'm trying to get my head around the +exact behavior of the OS X linker, and hope to have more improvements +for the next release, but I hope these notes help folks who have been +having trouble with tcmalloc on OS X. + +*Windows users*: I've heard reports that some unittests fail on +Windows when compiled with MSVC 10 in Release mode. All tests pass in +Debug mode. I've not heard of any problems with earlier versions of +MSVC. I don't know if this is a problem with the runtime patching (so +the static patching discussed in README_windows.txt will still work), +a problem with perftools more generally, or a bug in MSVC 10. Anyone +with windows expertise that can debug this, I'd be glad to hear from! + + +=== 5 August 2010 === + +I've just released perftools 1.6 + +This version also has a large number of minor changes, including +support for `malloc_usable_size()` as a glibc-compatible alias to +`malloc_size()`, the addition of SVG-based output to `pprof`, and +experimental support for tcmalloc large pages, which may speed up +tcmalloc at the cost of greater memory use. To use tcmalloc large +pages, see the +[http://google-perftools.googlecode.com/svn/tags/perftools-1.6/INSTALL +INSTALL file]; for all changes, see the +[http://google-perftools.googlecode.com/svn/tags/perftools-1.6/ChangeLog +ChangeLog]. + +OS X NOTE: improvements in the profiler unittest have turned up an OS +X issue: in multithreaded programs, it seems that OS X often delivers +the profiling signal (from sigitimer()) to the main thread, even when +it's sleeping, rather than spawned threads that are doing actual work. +If anyone knows details of how OS X handles SIGPROF events (from +setitimer) in threaded programs, and has insight into this problem, +please send mail to google-perftools@googlegroups.com. + +To see if you're affected by this, look for profiling time that pprof +attributes to `___semwait_signal`. This is work being done in other +threads, that is being attributed to sleeping-time in the main thread. + + +=== 20 January 2010 === + +I've just released perftools 1.5 + +This version has a slew of changes, leading to somewhat faster +performance and improvements in portability. It adds features like +`ITIMER_REAL` support to the cpu profiler, and `tc_set_new_mode` to +mimic the windows function of the same name. Full details are in the +[http://google-perftools.googlecode.com/svn/tags/perftools-1.5/ChangeLog +ChangeLog]. + + +=== 11 September 2009 === + +I've just released perftools 1.4 + +The major change this release is the addition of a debugging malloc +library! If you link with `libtcmalloc_debug.so` instead of +`libtcmalloc.so` (and likewise for the `minimal` variants) you'll get +a debugging malloc, which will catch double-frees, writes to freed +data, `free`/`delete` and `delete`/`delete[]` mismatches, and even +(optionally) writes past the end of an allocated block. + +We plan to do more with this library in the future, including +supporting it on Windows, and adding the ability to use the debugging +library with your default malloc in addition to using it with +tcmalloc. + +There are also the usual complement of bug fixes, documented in the +ChangeLog, and a few minor user-tunable knobs added to components like +the system allocator. + + +=== 9 June 2009 === + +I've just released perftools 1.3 + +Like 1.2, this has a variety of bug fixes, especially related to the +Windows build. One of my bugfixes is to undo the weird `ld -r` fix to +`.a` files that I introduced in perftools 1.2: it caused problems on +too many platforms. I've reverted back to normal `.a` files. To work +around the original problem that prompted the `ld -r` fix, I now +provide `libtcmalloc_and_profiler.a`, for folks who want to link in +both. + +The most interesting API change is that I now not only override +`malloc`/`free`/etc, I also expose them via a unique set of symbols: +`tc_malloc`/`tc_free`/etc. This enables clients to write their own +memory wrappers that use tcmalloc: +{{{ + void* malloc(size_t size) { void* r = tc_malloc(size); Log(r); return r; } +}}} + + +=== 17 April 2009 === + +I've just released perftools 1.2. + +This is mostly a bugfix release. The major change is internal: I have +a new system for creating packages, which allows me to create 64-bit +packages. (I still don't do that for perftools, because there is +still no great 64-bit solution, with libunwind still giving problems +and --disable-frame-pointers not practical in every environment.) + +Another interesting change involves Windows: a +[http://code.google.com/p/google-perftools/issues/detail?id=126 new +patch] allows users to choose to override malloc/free/etc on Windows +rather than patching, as is done now. This can be used to create +custom CRTs. + +My fix for this +[http://groups.google.com/group/google-perftools/browse_thread/thread/1ff9b50043090d9d/a59210c4206f2060?lnk=gst&q=dynamic#a59210c4206f2060 +bug involving static linking] ended up being to make libtcmalloc.a and +libperftools.a a big .o file, rather than a true `ar` archive. This +should not yield any problems in practice -- in fact, it should be +better, since the heap profiler, leak checker, and cpu profiler will +now all work even with the static libraries -- but if you find it +does, please file a bug report. + +Finally, the profile_handler_unittest provided in the perftools +testsuite (new in this release) is failing on FreeBSD. The end-to-end +test that uses the profile-handler is passing, so I suspect the +problem may be with the test, not the perftools code itself. However, +I do not know enough about how itimers work on FreeBSD to be able to +debug it. If you can figure it out, please let me know! + +=== 11 March 2009 === + +I've just released perftools 1.1! + +It has many changes since perftools 1.0 including + + * Faster performance due to dynamically sized thread caches + * Better heap-sampling for more realistic profiles + * Improved support on Windows (MSVC 7.1 and cygwin) + * Better stacktraces in linux (using VDSO) + * Many bug fixes and feature requests + +Note: if you use the CPU-profiler with applications that fork without +doing an exec right afterwards, please see the README. Recent testing +has shown that profiles are unreliable in that case. The problem has +existed since the first release of perftools. We expect to have a fix +for perftools 1.2. For more details, see +[http://code.google.com/p/google-perftools/issues/detail?id=105 issue 105]. + +Everyone who uses perftools 1.0 is encouraged to upgrade to perftools +1.1. If you see any problems with the new release, please file a bug +report at http://code.google.com/p/google-perftools/issues/list. + +Enjoy! diff --git a/src/thirdparty/gperftools-2.0/README b/src/thirdparty/gperftools-2.0/README new file mode 100644 index 000000000..667bea1af --- /dev/null +++ b/src/thirdparty/gperftools-2.0/README @@ -0,0 +1,265 @@ +IMPORTANT NOTE FOR 64-BIT USERS +------------------------------- +There are known issues with some perftools functionality on x86_64 +systems. See 64-BIT ISSUES, below. + + +TCMALLOC +-------- +Just link in -ltcmalloc or -ltcmalloc_minimal to get the advantages of +tcmalloc -- a replacement for malloc and new. See below for some +environment variables you can use with tcmalloc, as well. + +tcmalloc functionality is available on all systems we've tested; see +INSTALL for more details. See README_windows.txt for instructions on +using tcmalloc on Windows. + +NOTE: When compiling with programs with gcc, that you plan to link +with libtcmalloc, it's safest to pass in the flags + + -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free + +when compiling. gcc makes some optimizations assuming it is using its +own, built-in malloc; that assumption obviously isn't true with +tcmalloc. In practice, we haven't seen any problems with this, but +the expected risk is highest for users who register their own malloc +hooks with tcmalloc (using gperftools/malloc_hook.h). The risk is +lowest for folks who use tcmalloc_minimal (or, of course, who pass in +the above flags :-) ). + + +HEAP PROFILER +------------- +See doc/heap-profiler.html for information about how to use tcmalloc's +heap profiler and analyze its output. + +As a quick-start, do the following after installing this package: + +1) Link your executable with -ltcmalloc +2) Run your executable with the HEAPPROFILE environment var set: + $ HEAPPROFILE=/tmp/heapprof <path/to/binary> [binary args] +3) Run pprof to analyze the heap usage + $ pprof <path/to/binary> /tmp/heapprof.0045.heap # run 'ls' to see options + $ pprof --gv <path/to/binary> /tmp/heapprof.0045.heap + +You can also use LD_PRELOAD to heap-profile an executable that you +didn't compile. + +There are other environment variables, besides HEAPPROFILE, you can +set to adjust the heap-profiler behavior; c.f. "ENVIRONMENT VARIABLES" +below. + +The heap profiler is available on all unix-based systems we've tested; +see INSTALL for more details. It is not currently available on Windows. + + +HEAP CHECKER +------------ +See doc/heap-checker.html for information about how to use tcmalloc's +heap checker. + +In order to catch all heap leaks, tcmalloc must be linked *last* into +your executable. The heap checker may mischaracterize some memory +accesses in libraries listed after it on the link line. For instance, +it may report these libraries as leaking memory when they're not. +(See the source code for more details.) + +Here's a quick-start for how to use: + +As a quick-start, do the following after installing this package: + +1) Link your executable with -ltcmalloc +2) Run your executable with the HEAPCHECK environment var set: + $ HEAPCHECK=1 <path/to/binary> [binary args] + +Other values for HEAPCHECK: normal (equivalent to "1"), strict, draconian + +You can also use LD_PRELOAD to heap-check an executable that you +didn't compile. + +The heap checker is only available on Linux at this time; see INSTALL +for more details. + + +CPU PROFILER +------------ +See doc/cpu-profiler.html for information about how to use the CPU +profiler and analyze its output. + +As a quick-start, do the following after installing this package: + +1) Link your executable with -lprofiler +2) Run your executable with the CPUPROFILE environment var set: + $ CPUPROFILE=/tmp/prof.out <path/to/binary> [binary args] +3) Run pprof to analyze the CPU usage + $ pprof <path/to/binary> /tmp/prof.out # -pg-like text output + $ pprof --gv <path/to/binary> /tmp/prof.out # really cool graphical output + +There are other environment variables, besides CPUPROFILE, you can set +to adjust the cpu-profiler behavior; cf "ENVIRONMENT VARIABLES" below. + +The CPU profiler is available on all unix-based systems we've tested; +see INSTALL for more details. It is not currently available on Windows. + +NOTE: CPU profiling doesn't work after fork (unless you immediately + do an exec()-like call afterwards). Furthermore, if you do + fork, and the child calls exit(), it may corrupt the profile + data. You can use _exit() to work around this. We hope to have + a fix for both problems in the next release of perftools + (hopefully perftools 1.2). + + +EVERYTHING IN ONE +----------------- +If you want the CPU profiler, heap profiler, and heap leak-checker to +all be available for your application, you can do: + gcc -o myapp ... -lprofiler -ltcmalloc + +However, if you have a reason to use the static versions of the +library, this two-library linking won't work: + gcc -o myapp ... /usr/lib/libprofiler.a /usr/lib/libtcmalloc.a # errors! + +Instead, use the special libtcmalloc_and_profiler library, which we +make for just this purpose: + gcc -o myapp ... /usr/lib/libtcmalloc_and_profiler.a + + +CONFIGURATION OPTIONS +--------------------- +For advanced users, there are several flags you can pass to +'./configure' that tweak tcmalloc performace. (These are in addition +to the environment variables you can set at runtime to affect +tcmalloc, described below.) See the INSTALL file for details. + + +ENVIRONMENT VARIABLES +--------------------- +The cpu profiler, heap checker, and heap profiler will lie dormant, +using no memory or CPU, until you turn them on. (Thus, there's no +harm in linking -lprofiler into every application, and also -ltcmalloc +assuming you're ok using the non-libc malloc library.) + +The easiest way to turn them on is by setting the appropriate +environment variables. We have several variables that let you +enable/disable features as well as tweak parameters. + +Here are some of the most important variables: + +HEAPPROFILE=<pre> -- turns on heap profiling and dumps data using this prefix +HEAPCHECK=<type> -- turns on heap checking with strictness 'type' +CPUPROFILE=<file> -- turns on cpu profiling and dumps data to this file. +PROFILESELECTED=1 -- if set, cpu-profiler will only profile regions of code + surrounded with ProfilerEnable()/ProfilerDisable(). +PROFILEFREQUENCY=x-- how many interrupts/second the cpu-profiler samples. + +TCMALLOC_DEBUG=<level> -- the higher level, the more messages malloc emits +MALLOCSTATS=<level> -- prints memory-use stats at program-exit + +For a full list of variables, see the documentation pages: + doc/cpuprofile.html + doc/heapprofile.html + doc/heap_checker.html + + +COMPILING ON NON-LINUX SYSTEMS +------------------------------ + +Perftools was developed and tested on x86 Linux systems, and it works +in its full generality only on those systems. However, we've +successfully ported much of the tcmalloc library to FreeBSD, Solaris +x86, and Darwin (Mac OS X) x86 and ppc; and we've ported the basic +functionality in tcmalloc_minimal to Windows. See INSTALL for details. +See README_windows.txt for details on the Windows port. + + +PERFORMANCE +----------- + +If you're interested in some third-party comparisons of tcmalloc to +other malloc libraries, here are a few web pages that have been +brought to our attention. The first discusses the effect of using +various malloc libraries on OpenLDAP. The second compares tcmalloc to +win32's malloc. + http://www.highlandsun.com/hyc/malloc/ + http://gaiacrtn.free.fr/articles/win32perftools.html + +It's possible to build tcmalloc in a way that trades off faster +performance (particularly for deletes) at the cost of more memory +fragmentation (that is, more unusable memory on your system). See the +INSTALL file for details. + + +OLD SYSTEM ISSUES +----------------- + +When compiling perftools on some old systems, like RedHat 8, you may +get an error like this: + ___tls_get_addr: symbol not found + +This means that you have a system where some parts are updated enough +to support Thread Local Storage, but others are not. The perftools +configure script can't always detect this kind of case, leading to +that error. To fix it, just comment out (or delete) the line + #define HAVE_TLS 1 +in your config.h file before building. + + +64-BIT ISSUES +------------- + +There are two issues that can cause program hangs or crashes on x86_64 +64-bit systems, which use the libunwind library to get stack-traces. +Neither issue should affect the core tcmalloc library; they both +affect the perftools tools such as cpu-profiler, heap-checker, and +heap-profiler. + +1) Some libc's -- at least glibc 2.4 on x86_64 -- have a bug where the +libc function dl_iterate_phdr() acquires its locks in the wrong +order. This bug should not affect tcmalloc, but may cause occasional +deadlock with the cpu-profiler, heap-profiler, and heap-checker. +Its likeliness increases the more dlopen() commands an executable has. +Most executables don't have any, though several library routines like +getgrgid() call dlopen() behind the scenes. + +2) On x86-64 64-bit systems, while tcmalloc itself works fine, the +cpu-profiler tool is unreliable: it will sometimes work, but sometimes +cause a segfault. I'll explain the problem first, and then some +workarounds. + +Note that this only affects the cpu-profiler, which is a +gperftools feature you must turn on manually by setting the +CPUPROFILE environment variable. If you do not turn on cpu-profiling, +you shouldn't see any crashes due to perftools. + +The gory details: The underlying problem is in the backtrace() +function, which is a built-in function in libc. +Backtracing is fairly straightforward in the normal case, but can run +into problems when having to backtrace across a signal frame. +Unfortunately, the cpu-profiler uses signals in order to register a +profiling event, so every backtrace that the profiler does crosses a +signal frame. + +In our experience, the only time there is trouble is when the signal +fires in the middle of pthread_mutex_lock. pthread_mutex_lock is +called quite a bit from system libraries, particularly at program +startup and when creating a new thread. + +The solution: The dwarf debugging format has support for 'cfi +annotations', which make it easy to recognize a signal frame. Some OS +distributions, such as Fedora and gentoo 2007.0, already have added +cfi annotations to their libc. A future version of libunwind should +recognize these annotations; these systems should not see any +crashses. + +Workarounds: If you see problems with crashes when running the +cpu-profiler, consider inserting ProfilerStart()/ProfilerStop() into +your code, rather than setting CPUPROFILE. This will profile only +those sections of the codebase. Though we haven't done much testing, +in theory this should reduce the chance of crashes by limiting the +signal generation to only a small part of the codebase. Ideally, you +would not use ProfilerStart()/ProfilerStop() around code that spawns +new threads, or is otherwise likely to cause a call to +pthread_mutex_lock! + +--- +17 May 2011 diff --git a/src/thirdparty/gperftools-2.0/README_windows.txt b/src/thirdparty/gperftools-2.0/README_windows.txt new file mode 100644 index 000000000..f74ee05d8 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/README_windows.txt @@ -0,0 +1,118 @@ +--- COMPILING + +This project has begun being ported to Windows. A working solution +file exists in this directory: + gperftools.sln + +You can load this solution file into VC++ 7.1 (Visual Studio 2003) or +later -- in the latter case, it will automatically convert the files +to the latest format for you. + +When you build the solution, it will create a number of unittests, +which you can run by hand (or, more easily, under the Visual Studio +debugger) to make sure everything is working properly on your system. +The binaries will end up in a directory called "debug" or "release" in +the top-level directory (next to the .sln file). It will also create +two binaries, nm-pdb and addr2line-pdb, which you should install in +the same directory you install the 'pprof' perl script. + +I don't know very much about how to install DLLs on Windows, so you'll +have to figure out that part for yourself. If you choose to just +re-use the existing .sln, make sure you set the IncludeDir's +appropriately! Look at the properties for libtcmalloc_minimal.dll. + +Note that these systems are set to build in Debug mode by default. +You may want to change them to Release mode. + +To use tcmalloc_minimal in your own projects, you should only need to +build the dll and install it someplace, so you can link it into +further binaries. To use the dll, you need to add the following to +the linker line of your executable: + "libtcmalloc_minimal.lib" /INCLUDE:"__tcmalloc" + +Here is how to accomplish this in Visual Studio 2005 (VC8): + +1) Have your executable depend on the tcmalloc library by selecting + "Project Dependencies..." from the "Project" menu. Your executable + should depend on "libtcmalloc_minimal". + +2) Have your executable depend on a tcmalloc symbol -- this is + necessary so the linker doesn't "optimize out" the libtcmalloc + dependency -- by right-clicking on your executable's project (in + the solution explorer), selecting Properties from the pull-down + menu, then selecting "Configuration Properties" -> "Linker" -> + "Input". Then, in the "Force Symbol References" field, enter the + text "__tcmalloc" (without the quotes). Be sure to do this for both + debug and release modes! + +You can also link tcmalloc code in statically -- see the example +project tcmalloc_minimal_unittest-static, which does this. For this +to work, you'll need to add "/D PERFTOOLS_DLL_DECL=" to the compile +line of every perftools .cc file. You do not need to depend on the +tcmalloc symbol in this case (that is, you don't need to do either +step 1 or step 2 from above). + +An alternative to all the above is to statically link your application +with libc, and then replace its malloc with tcmalloc. This allows you +to just build and link your program normally; the tcmalloc support +comes in a post-processing step. This is more reliable than the above +technique (which depends on run-time patching, which is inherently +fragile), though more work to set up. For details, see + https://groups.google.com/group/google-perftools/browse_thread/thread/41cd3710af85e57b + + +--- THE HEAP-PROFILER + +The heap-profiler has had a preliminary port to Windows. It has not +been well tested, and probably does not work at all when Frame Pointer +Optimization (FPO) is enabled -- that is, in release mode. The other +features of perftools, such as the cpu-profiler and leak-checker, have +not yet been ported to Windows at all. + + +--- WIN64 + +The function-patcher has to disassemble code, and is very +x86-specific. However, the rest of perftools should work fine for +both x86 and x64. In particular, if you use the 'statically link with +libc, and replace its malloc with tcmalloc' approach, mentioned above, +it should be possible to use tcmalloc with 64-bit windows. + +As of perftools 1.10, there is some support for disassembling x86_64 +instructions, for work with win64. This work is preliminary, but the +test file preamble_patcher_test.cc is provided to play around with +that a bit. preamble_patcher_test will not compile on win32. + + +--- ISSUES + +NOTE FOR WIN2K USERS: According to reports +(http://code.google.com/p/gperftools/issues/detail?id=127) +the stack-tracing necessary for the heap-profiler does not work on +Win2K. The best workaround is, if you are building on a Win2k system +is to add "/D NO_TCMALLOC_SAMPLES=" to your build, to turn off the +stack-tracing. You will not be able to use the heap-profiler if you +do this. + +NOTE ON _MSIZE and _RECALLOC: The tcmalloc version of _msize returns +the size of the region tcmalloc allocated for you -- which is at least +as many bytes you asked for, but may be more. (btw, these *are* bytes +you own, even if you didn't ask for all of them, so it's correct code +to access all of them if you want.) Unfortunately, the Windows CRT +_recalloc() routine assumes that _msize returns exactly as many bytes +as were requested. As a result, _recalloc() may not zero out new +bytes correctly. IT'S SAFEST NOT TO USE _RECALLOC WITH TCMALLOC. +_recalloc() is a tricky routine to use in any case (it's not safe to +use with realloc, for instance). + + +I have little experience with Windows programming, so there may be +better ways to set this up than I've done! If you run across any +problems, please post to the google-perftools Google Group, or report +them on the gperftools Google Code site: + http://groups.google.com/group/google-perftools + http://code.google.com/p/gperftools/issues/list + +-- craig + +Last modified: 2 February 2012 diff --git a/src/thirdparty/gperftools-2.0/TODO b/src/thirdparty/gperftools-2.0/TODO new file mode 100644 index 000000000..550f7e09b --- /dev/null +++ b/src/thirdparty/gperftools-2.0/TODO @@ -0,0 +1,47 @@ +HEAP PROFILER + +1) Fix heap profiling under all STLs + * Find out how to force non-glibc STL libraries to call new() and + delete() for every allocation / deallocation. + * Make heap profiler ignore STL-internal allocations for those + libraries under which we cannot profile accurately, so we only + see object-level leaks. +2) Remove dependency on tcmalloc? +3) Port to non-linux O/Ses (right now code uses /proc for library info) +4) Port to non-x86 architectures (locking code in spinlock is x86-specific) +5) Port to C? +6) Figure out how to get setenv() to work properly before main() in + shared libaries, and get rid of the profile-naming hack once we + do. (See HeapProfiler::Init().) + + +HEAP CHECKER + +1) Remove requirement that the heap-checker must be linked last into + an application (hard! -- it needs its global constructor to run + first) + +TCMALLOC + +1) Implement mallinfo/mallopt +2) Have tcmalloc work correctly when libpthread is not linked in + (currently working for glibc, could use other libc's too) +3) Return memory to the system when requirements drop +4) Explore coloring allocated objects to avoid cache conflicts +5) Explore biasing reclamation to larger addresses +6) Add contention stats to a synchronization.cc (can do spinlocks, + but threads? -- may have to provide our own thread implementation) + +CPU PROFILER + +1) Figure out how to get setenv() to work properly before main() in + shared libaries(), and get rid of the profile-naming hack once we + do. (See Profiler::GetUniquePathFromEnv().) +2) Resolve crashing problems on x86_64 (see README) + +STACKTRACE + +1) Remove dependency on linux/x86 + +--- +11 March 2008 diff --git a/src/thirdparty/gperftools-2.0/autogen.sh b/src/thirdparty/gperftools-2.0/autogen.sh new file mode 100755 index 000000000..09396a8e6 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/autogen.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +# Before using, you should figure out all the .m4 macros that your +# configure.m4 script needs and make sure they exist in the m4/ +# directory. +# +# These are the files that this script might edit: +# aclocal.m4 configure Makefile.in src/config.h.in \ +# depcomp config.guess config.sub install-sh missing mkinstalldirs \ +# ltmain.sh +# +# Here's a command you can run to see what files aclocal will import: +# aclocal -I ../autoconf --output=- | sed -n 's/^m4_include..\([^]]*\).*/\1/p' + +set -ex +rm -rf autom4te.cache + +trap 'rm -f aclocal.m4.tmp' EXIT + +# Returns the first binary in $* that exists, or the last arg, if none exists. +WhichOf() { + for candidate in "$@"; do + if "$candidate" --version >/dev/null 2>&1; then + echo "$candidate" + return + fi + done + echo "$candidate" # the last one in $@ +} + +# Use version 1.9 of aclocal and automake if available. +ACLOCAL=`WhichOf aclocal-1.9 aclocal` +AUTOMAKE=`WhichOf automake-1.9 automake` +LIBTOOLIZE=`WhichOf glibtoolize libtoolize15 libtoolize14 libtoolize` + +# aclocal tries to overwrite aclocal.m4 even if the contents haven't +# changed, which is annoying when the file is not open for edit (in +# p4). We work around this by writing to a temp file and just +# updating the timestamp if the file hasn't change. +"$ACLOCAL" --force -I m4 --output=aclocal.m4.tmp +if cmp aclocal.m4.tmp aclocal.m4; then + touch aclocal.m4 # pretend that we regenerated the file + rm -f aclocal.m4.tmp +else + mv aclocal.m4.tmp aclocal.m4 # we did set -e above, so we die if this fails +fi + +grep -q '^[^#]*AC_PROG_LIBTOOL' configure.ac && "$LIBTOOLIZE" -c -f +autoconf -f -W all,no-obsolete +autoheader -f -W all +"$AUTOMAKE" -a -c -f -W all + +rm -rf autom4te.cache +exit 0 diff --git a/src/thirdparty/gperftools-2.0/compile b/src/thirdparty/gperftools-2.0/compile new file mode 100755 index 000000000..1b1d23216 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/compile @@ -0,0 +1,142 @@ +#! /bin/sh +# Wrapper for compilers which do not understand `-c -o'. + +scriptversion=2005-05-14.22 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. +# Written by Tom Tromey <tromey@cygnus.com>. +# +# 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# 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 file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand `-c -o'. +Remove `-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file `INSTALL'. + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; +esac + +ofile= +cfile= +eat= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we strip `-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/src/thirdparty/gperftools-2.0/config.guess b/src/thirdparty/gperftools-2.0/config.guess new file mode 100755 index 000000000..ca2a03ca4 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/config.guess @@ -0,0 +1,1526 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2008-01-08' + +# 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 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# 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. + + +# Originally written by Per Bothner <per@bothner.com>. +# Please send patches to <config-patches@gnu.org>. Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -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 <config-patches@gnu.org>." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 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 + +trap 'exit 1' 1 2 15 + +# 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. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { 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) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; 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 ; set_cc_for_build= ;' + +# 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) >/dev/null 2>&1 ; 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 + +# 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 tupples: *-*-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". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-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. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + 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 + # 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/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + 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. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + 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. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + 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'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + 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) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # 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:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include <stdio.h> /* 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; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <sys/systemcfg.h> + + 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 + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + 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 [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 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 [ -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 [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include <stdlib.h> + #include <unistd.h> + + 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 [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $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 __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <unistd.h> + 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; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + 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*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + 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:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + 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/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 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/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` 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 ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <features.h> + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + 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. + echo i386-sequent-sysv4 + exit ;; + 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. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + 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 + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` + echo ${UNAME_MACHINE}-pc-isc$UNAME_REL + elif /bin/uname -X 2>/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 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + 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 i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + 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; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says <Richard.M.Bartel@ccMail.Census.GOV> + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes <hewes@openmarket.com>. + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *: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 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c <<EOF +#ifdef _SEQUENT_ +# include <sys/types.h> +# include <sys/utsname.h> +#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 <sys/param.h> + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#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 <sys/param.h> +# 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 + printf ("vax-dec-ultrix\n"); exit (0); +# 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; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 <<EOF +$0: unable to guess system type + +This script, last modified $timestamp, has failed to recognize +the operating system you are using. It is advised that you +download the most up to date version of the config scripts from + + http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess +and + http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub + +If the version you run ($0) is already up to date, please +send the following data and any information you think might be +pertinent to <config-patches@gnu.org> in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +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` +/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 + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/src/thirdparty/gperftools-2.0/config.sub b/src/thirdparty/gperftools-2.0/config.sub new file mode 100755 index 000000000..6759825a5 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/config.sub @@ -0,0 +1,1658 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2008-01-16' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# 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 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# 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. + + +# Please send patches to <config-patches@gnu.org>. Submit a context +# diff and a properly formatted ChangeLog entry. +# +# 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. + +# 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. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -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 <config-patches@gnu.org>." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 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" + 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 + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -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) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# 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) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -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 + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + 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 + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/src/thirdparty/gperftools-2.0/configure.ac b/src/thirdparty/gperftools-2.0/configure.ac new file mode 100644 index 000000000..4bd5460f9 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/configure.ac @@ -0,0 +1,421 @@ +## Process this file with autoconf to produce configure. +## In general, the safest way to proceed is to run ./autogen.sh + +# make sure we're interpreted by some minimal autoconf +AC_PREREQ(2.57) + +AC_INIT(gperftools, 2.0, google-perftools@googlegroups.com) +# Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B) +# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html +TCMALLOC_SO_VERSION=5:0:1 +PROFILER_SO_VERSION=3:0:3 + +AC_SUBST(TCMALLOC_SO_VERSION) +AC_SUBST(PROFILER_SO_VERSION) + +# The argument here is just something that should be in the current directory +# (for sanity checking) +AC_CONFIG_SRCDIR(README) +AC_CONFIG_MACRO_DIR([m4]) +AC_CANONICAL_HOST +AM_INIT_AUTOMAKE([dist-zip]) +AM_CONFIG_HEADER(src/config.h) + +# Export the version information (for tc_version and friends) +TC_VERSION_MAJOR=`expr "$PACKAGE_VERSION" : '\([[0-9]]*\)'` +TC_VERSION_MINOR=`expr "$PACKAGE_VERSION" : '[[0-9]]*\.\([[0-9]]*\)'` +TC_VERSION_PATCH=`expr "$PACKAGE_VERSION" : '[[0-9]]*\.[[0-9]]*\(.*\)$'` +AC_SUBST(TC_VERSION_MAJOR) +AC_SUBST(TC_VERSION_MINOR) +AC_SUBST(TC_VERSION_PATCH) +AC_SUBST(PACKAGE_STRING) + +# The user can choose not to compile in the heap-profiler, the +# heap-checker, or the cpu-profiler. There's also the possibility +# for a 'fully minimal' compile, which leaves out the stacktrace +# code as well. By default, we include all of these that the +# target system supports. +default_enable_cpu_profiler=yes +default_enable_heap_profiler=yes +default_enable_heap_checker=yes +default_enable_debugalloc=yes +default_enable_minimal=no +need_nanosleep=yes # Used later, to decide if to run ACX_NANOSLEEP +case "$host" in + *-mingw*) default_enable_minimal=yes; default_enable_debugalloc=no; + need_nanosleep=no;; + *-cygwin*) default_enable_heap_checker=no; default_enable_cpu_profiler=no;; + *-freebsd*) default_enable_heap_checker=no;; + *-darwin*) default_enable_heap_checker=no;; +esac + +AC_ARG_ENABLE([cpu-profiler], + [AS_HELP_STRING([--disable-cpu-profiler], + [do not build the cpu profiler])], + [], + [enable_cpu_profiler="$default_enable_cpu_profiler"]) +AC_ARG_ENABLE([heap-profiler], + [AS_HELP_STRING([--disable-heap-profiler], + [do not build the heap profiler])], + [], + [enable_heap_profiler="$default_enable_heap_profiler"]) +AC_ARG_ENABLE([heap-checker], + [AS_HELP_STRING([--disable-heap-checker], + [do not build the heap checker])], + [], + [enable_heap_checker="$default_enable_heap_checker"]) +AC_ARG_ENABLE([debugalloc], + [AS_HELP_STRING([--disable-debugalloc], + [do not build versions of libs with debugalloc])], + [], + [enable_debugalloc="$default_enable_debugalloc"]) +AC_ARG_ENABLE([minimal], + [AS_HELP_STRING([--enable-minimal], + [build only tcmalloc-minimal (and maybe tcmalloc-minimal-debug)])], + [], + [enable_minimal="$default_enable_minimal"]) +if test "$enable_minimal" = yes; then + enable_cpu_profiler=no + enable_heap_profiler=no + enable_heap_checker=no +fi + + +# Checks for programs. +AC_PROG_CXX +AC_PROG_CC +AC_PROG_CPP +AM_CONDITIONAL(GCC, test "$GCC" = yes) # let the Makefile know if we're gcc +AM_PROG_CC_C_O # shrug: autogen.sh suddenly needs this for some reason + +# Check if we have an objcopy installed that supports -W +AC_CHECK_TOOL([OBJCOPY], [objcopy], []) +AS_IF([test -n "$OBJCOPY"], [dnl + AC_CACHE_CHECK([if $OBJCOPY supports -W], gpt_cv_objcopy_weaken, [dnl + AC_LINK_IFELSE([void foo() {} int main() {return 0;}], [dnl + AS_IF(["$OBJCOPY" -W foo conftest$ac_exeext /dev/null], + [gpt_cv_objcopy_weaken=yes], [gpt_cv_objcopy_weaken=no])], + [gpt_cv_objcopy_weaken=no])])], + [gpt_cv_objcopy_weaken=no]) +AM_CONDITIONAL(HAVE_OBJCOPY_WEAKEN, test $gpt_cv_objcopy_weaken = yes) + +case $host_os in + *mingw*) + # Disabling fast install keeps libtool from creating wrapper scripts + # around the executables it builds. Such scripts have caused failures on + # MinGW. Using this option means an extra link step is executed during + # "make install". + AC_DISABLE_FAST_INSTALL + ;; + *) + AC_ENABLE_FAST_INSTALL + ;; +esac + +AC_PROG_LIBTOOL +AC_SUBST(LIBTOOL_DEPS) +AM_CONDITIONAL(USE_LIBTOOL, test "x$LIBTOOL" != "x") + +AC_C_INLINE +AX_C___ATTRIBUTE__ + +# Check whether some low-level functions/files are available +AC_HEADER_STDC + +# TODO(csilvers): we could remove a lot when WITH_CPU_PROFILER etc is "no". +AC_CHECK_TYPES([__int64]) # defined in some windows platforms +AC_CHECK_TYPES([struct mallinfo],,, [#include <malloc.h>]) +AC_CHECK_TYPES([Elf32_Versym],,, [#include <elf.h>]) # for vdso_support.h +AC_CHECK_FUNCS(sbrk) # for tcmalloc to get memory +AC_CHECK_FUNCS(geteuid) # for turning off services when run as root +AC_CHECK_HEADERS(features.h) # for vdso_support.h +AC_CHECK_HEADERS(malloc.h) # some systems define stuff there, others not +AC_CHECK_HEADERS(sys/malloc.h) # where some versions of OS X put malloc.h +AC_CHECK_HEADERS(malloc/malloc.h) # another place OS X puts malloc.h (?) +AC_CHECK_HEADERS(glob.h) # for heap-profile-table (cleaning up profiles) +AC_CHECK_HEADERS(execinfo.h) # for stacktrace? and heapchecker_unittest +AC_CHECK_HEADERS(libunwind.h) # for stacktrace +AC_CHECK_HEADERS(unwind.h) # for stacktrace +AC_CHECK_HEADERS(sched.h) # for being nice in our spinlock code +AC_CHECK_HEADERS(conflict-signal.h) # defined on some windows platforms? +AC_CHECK_HEADERS(sys/prctl.h) # for thread_lister (needed by leak-checker) +AC_CHECK_HEADERS(linux/ptrace.h)# also needed by leak-checker +AC_CHECK_HEADERS(sys/syscall.h) +AC_CHECK_HEADERS(sys/socket.h) # optional; for forking out to symbolizer +AC_CHECK_HEADERS(sys/wait.h) # optional; for forking out to symbolizer +AC_CHECK_HEADERS(poll.h) # optional; for forking out to symbolizer +AC_CHECK_HEADERS(fcntl.h) # for tcmalloc_unittest +AC_CHECK_HEADERS(grp.h) # for heapchecker_unittest +AC_CHECK_HEADERS(pwd.h) # for heapchecker_unittest +AC_CHECK_HEADERS(sys/resource.h) # for memalign_unittest.cc +AC_CHECK_HEADERS(valgrind.h) # we have a local copy if this isn't found +AC_CHECK_HEADERS(sys/cdefs.h) # Where glibc defines __THROW +AC_CHECK_HEADERS(features.h) # Where __GLIBC__ is defined +# We also need <ucontext.h>/<sys/ucontext.h>, but we get those from +# AC_PC_FROM_UCONTEXT, below. + +# We override a lot of memory allocation routines, not all of which are +# standard. For those the system doesn't declare, we'll declare ourselves. +AC_CHECK_DECLS([cfree, + posix_memalign, + memalign, + valloc, + pvalloc],,, + [#define _XOPEN_SOURCE 600 + #include <stdlib.h> + #include <malloc.h>]) + +if test "$ac_cv_type_struct_mallinfo" = yes; then + AC_SUBST(ac_cv_have_struct_mallinfo, 1) # gperftools/tcmalloc.h needs this +else + AC_SUBST(ac_cv_have_struct_mallinfo, 0) +fi + +# We need to check for mmap. cygwin supports mmap, but the autoconf +# test doesn't work on cygwin: +# http://www.cygwin.com/ml/cygwin/2002-04/msg00412.html +# This workaround comes from +# http://cygwin.com/ml/cygwin/2004-11/msg00138.html +case "$host" in + *-*-cygwin*) + ac_cv_func_mmap_fixed_mapped=yes + AC_DEFINE(HAVE_MMAP, 1, + [Define to 1 if you have a working `mmap' system call.]) + ;; + *) AC_FUNC_MMAP + ;; +esac + +# If AtomicWord != Atomic32, we need to define two versions of all the +# atomicops functions. If they're the same, we want to define only one. +AC_MSG_CHECKING([if int32_t is the same type as intptr_t]) +AC_TRY_COMPILE([#include <stdint.h>], + [int32_t v1 = 0; intptr_t v2 = 0; return (&v1 - &v2)], + [AC_DEFINE(INT32_EQUALS_INTPTR, 1, + Define to 1 if int32_t is equivalent to intptr_t) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + +# We want to access the "PC" (Program Counter) register from a struct +# ucontext. Every system has its own way of doing that. We try all the +# possibilities we know about. Note REG_PC should come first (REG_RIP +# is also defined on solaris, but does the wrong thing). But don't +# bother if we're not doing cpu-profiling. +# [*] means that we've not actually tested one of these systems +if test "$enable_cpu_profiler" = yes; then + AC_PC_FROM_UCONTEXT(AC_MSG_WARN(Could not find the PC. Will not try to compile libprofiler...); + enable_cpu_profiler=no) +fi + +# Some tests test the behavior of .so files, and only make sense for dynamic. +AM_CONDITIONAL(ENABLE_STATIC, test "$enable_static" = yes) + +# We want to link in libunwind if it exists +AC_CHECK_LIB(unwind, backtrace, UNWIND_LIBS=-lunwind, UNWIND_LIBS=) +AC_SUBST(UNWIND_LIBS) + +# On x86_64, instead of libunwind, we can choose to compile with frame-pointers +# (This isn't needed on i386, where -fno-omit-frame-pointer is the default). +AC_ARG_ENABLE(frame_pointers, + AS_HELP_STRING([--enable-frame-pointers], + [On x86_64 systems, compile with -fno-omit-frame-pointer (see INSTALL)]), + , enable_frame_pointers=no) +AM_CONDITIONAL(ENABLE_FRAME_POINTERS, test "$enable_frame_pointers" = yes) + +# Some x86_64 systems do not insert frame pointers by default (all +# i386 systems that I know of, do. I don't know about non-x86 chips). +# We want to see if the current system is one of those. +AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __x86_64__ == 1 ? 0 : 1])], + [is_x86_64=yes], [is_x86_64=no]) +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -S -O2 -o fp.s" +# This test will always fail because we don't name our output file properly. +# We do our own determination of success/failure in the grep, below. +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int f(int x) {return x;}], [return f(0);])], + [:], [:]) +AM_CONDITIONAL(X86_64_AND_NO_FP_BY_DEFAULT, + test "$is_x86_64" = yes && ! grep 'mov.*rsp.*rbp' fp.s >/dev/null 2>&1) +rm fp.s +CFLAGS="$OLD_CFLAGS" + +# We need to know if we're i386 so we can turn on -mmms, which is not +# on by default for i386 (it is for x86_64). +AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __i386__ == 1 ? 0 : 1])], + [is_i386=yes], [is_i386=no]) +AM_CONDITIONAL(I386, test "$is_i386" = yes) + +# See if the compiler supports -Wno-unused-result. +# Newer ubuntu's turn on -D_FORTIFY_SOURCE=2, enabling +# __attribute__((warn_unused_result)) for things like write(), +# which we don't care about. +AC_CACHE_CHECK([if the compiler supports -Wno-unused-result], + perftools_cv_w_no_unused_result, + [OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wno-error -Wno-unused-result" + # gcc doesn't warn about unknown flags unless it's + # also warning for some other purpose, hence the + # divide-by-0. (We use -Wno-error to make sure the + # divide-by-0 doesn't cause this test to fail!) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, return 1/0)], + perftools_cv_w_no_unused_result=yes, + perftools_cv_w_no_unused_result=no) + CFLAGS="$OLD_CFLAGS"]) +AM_CONDITIONAL(HAVE_W_NO_UNUSED_RESULT, + test "$perftools_cv_w_no_unused_result" = yes) + +# Defines PRIuS +AC_COMPILER_CHARACTERISTICS + +# Also make sure we get standard PRI... definitions, even with glibc. +# We have to use AH_VERBATIM because we need the #ifdef guard (gcc buglet) +AH_VERBATIM([__STDC_FORMAT_MACROS], + [/* C99 says: define this to get the PRI... macros from stdint.h */ +#ifndef __STDC_FORMAT_MACROS +# define __STDC_FORMAT_MACROS 1 +#endif]) + +# Check if __builtin_stack_pointer() is available (for elfcore.h) +AC_MSG_CHECKING([for __builtin_stack_pointer()]) +AC_LINK_IFELSE([AC_LANG_PROGRAM(, [void *sp = __builtin_stack_pointer()])], + [AC_DEFINE(HAVE_BUILTIN_STACK_POINTER, 1, + Define to 1 if compiler supports __builtin_stack_pointer) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + +# Check if __environ is available (for GetenvBeforeMain) +AC_MSG_CHECKING([for __environ]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>], + [char **env = __environ])], + [AC_DEFINE(HAVE___ENVIRON, 1, + [Define to 1 if compiler supports __environ]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + +# If we support __thread, that can speed up tcmalloc a bit. +# Note, however, that our code tickles a bug in gcc < 4.1.2 +# involving TLS and -fPIC (which our libraries will use) on x86: +# http://gcc.gnu.org/ml/gcc-bugs/2006-09/msg02275.html +AC_MSG_CHECKING([for __thread]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 1) || (__GNUC__ == 4 && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ < 2)) +#error gcc has this bug: http://gcc.gnu.org/ml/gcc-bugs/2006-09/msg02275.html +#endif], [static __thread int p = 0])], + [AC_DEFINE(HAVE_TLS, 1, + Define to 1 if compiler supports __thread) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + +# glibc's __malloc_hook/etc were declared volatile starting in glibc 2.14 +AC_MSG_CHECKING([if __malloc_hook is declared volatile]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <malloc.h> +void* (* volatile __malloc_hook)(size_t, const void*) = 0;],)], + [AC_DEFINE(MALLOC_HOOK_MAYBE_VOLATILE, volatile, + Define to 'volatile' if __malloc_hook is declared volatile) + AC_MSG_RESULT([yes])], + [AC_DEFINE(MALLOC_HOOK_MAYBE_VOLATILE, ) + AC_MSG_RESULT([no])]) + +# Nanosleep requires extra libraries on some architectures (solaris). +# This sets NANOSLEEP_LIBS. nanosleep doesn't exist on mingw, which +# is fine for us because we don't compile libspinlock, which uses it. +if test "$need_nanosleep" = yes; then + ACX_NANOSLEEP + AC_SUBST(NANOSLEEP_LIBS) +fi + +# Solaris 10 6/06 has a bug where /usr/sfw/lib/libstdc++.la is empty. +# If so, we replace it with our own version. +LIBSTDCXX_LA_LINKER_FLAG= +if test -f /usr/sfw/lib/libstdc++.la && ! test -s /usr/sfw/lib/libstdc++.la +then + LIBSTDCXX_LA_LINKER_FLAG='-L$(top_srcdir)/src/solaris' +fi +AC_SUBST(LIBSTDCXX_LA_LINKER_FLAG) + +# We also need to check if the kernel supports __thread, which requires uname() +AC_CHECK_DECLS(uname,,, [#include <sys/utsname.h>]) + +# In fact, a lot of the code in this directory depends on pthreads +ACX_PTHREAD + +# Find out what namespace 'normal' STL code lives in +AC_CXX_STL_NAMESPACE + +# Figure out where libc has program_invocation_name +AC_PROGRAM_INVOCATION_NAME + +# Make the install prefix available, to figure out where to look for pprof +AC_INSTALL_PREFIX + +# For windows, this has a non-trivial value (__declspec(export)), but any +# system that uses configure wants this to be the empty string. +AC_DEFINE(PERFTOOLS_DLL_DECL,, + [Always the empty-string on non-windows systems. + On windows, should be "__declspec(dllexport)". + This way, when we compile the dll, we export our functions/classes. + It's safe to define this here because config.h is only used + internally, to compile the DLL, and every DLL source file + #includes "config.h" before anything else.]) + +# In theory, config.h files shouldn't need a header guard, but we do, +# because we (maybe) #include windows/mingw.h from within config.h, +# and it #includes other .h files. These all have header guards, so +# the end result is if config.h is #included twice, its #undefs get +# evaluated twice, but all the ones in mingw.h/etc only get evaluated +# once, potentially causing trouble. c.f. +# http://code.google.com/p/gperftools/issues/detail?id=246 +AH_TOP([ +#ifndef GPERFTOOLS_CONFIG_H_ +#define GPERFTOOLS_CONFIG_H_ +]) + +AH_VERBATIM([PTHREADS_CRASHES_IF_RUN_TOO_EARLY], + [/* Mark the systems where we know it's bad if pthreads runs too + early before main (before threads are initialized, presumably). */ +#ifdef __FreeBSD__ +#define PTHREADS_CRASHES_IF_RUN_TOO_EARLY 1 +#endif]) + +# MinGW uses autoconf, but also needs the windows shim routines +# (since it doesn't have its own support for, say, pthreads). +# This requires us to #include a special header file, and also to +# link in some windows versions of .o's instead of the unix versions. +# +# Also, manually mark systems where we have to be careful how early +# we run pthreads. TODO(csilvers): turn this into an autoconf check. +AH_BOTTOM([ +#ifdef __MINGW32__ +#include "windows/mingw.h" +#endif + +#endif /* #ifndef GPERFTOOLS_CONFIG_H_ */ +]) +AM_CONDITIONAL(MINGW, expr $host : '.*-mingw' >/dev/null 2>&1) +AM_CONDITIONAL(OSX, expr $host : '.*-apple-darwin.*' >/dev/null 2>&1) + +# Redhat 7 (and below?) has sys/ucontext.h, but if you try to #include +# it directly, the compiler gets upset. So we pretend we don't have +# it. +if cat /etc/redhat-release 2>/dev/null | grep "Red Hat Linux release 7" >/dev/null 2>&1; then +AC_DEFINE(HAVE_SYS_UCONTEXT_H, 0, [<sys/ucontext.h> is broken on redhat 7]) +fi + +# Export the --enable flags we set above. We do this at the end so +# other configure rules can enable or disable targets based on what +# they find. +AM_CONDITIONAL(WITH_CPU_PROFILER, test "$enable_cpu_profiler" = yes) +AM_CONDITIONAL(WITH_HEAP_PROFILER, test "$enable_heap_profiler" = yes) +AM_CONDITIONAL(WITH_HEAP_CHECKER, test "$enable_heap_checker" = yes) +AM_CONDITIONAL(WITH_DEBUGALLOC, test "$enable_debugalloc" = yes) +# We make tcmalloc.so if either heap-profiler or heap-checker is asked for. +AM_CONDITIONAL(WITH_HEAP_PROFILER_OR_CHECKER, + test "$enable_heap_profiler" = yes -o \ + "$enable_heap_checker" = yes) +# If we don't use any profilers, we don't need stack traces (or pprof) +AM_CONDITIONAL(WITH_STACK_TRACE, test "$enable_cpu_profiler" = yes -o \ + "$enable_heap_profiler" = yes -o \ + "$enable_heap_checker" = yes) + +# Write generated configuration file +AC_CONFIG_FILES([Makefile + src/gperftools/tcmalloc.h src/windows/gperftools/tcmalloc.h]) +AC_OUTPUT diff --git a/src/thirdparty/gperftools-2.0/depcomp b/src/thirdparty/gperftools-2.0/depcomp new file mode 100755 index 000000000..e5f9736c7 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/depcomp @@ -0,0 +1,589 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2007-03-29.01 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software +# Foundation, Inc. + +# 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# 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. + +# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/src/thirdparty/gperftools-2.0/doc/cpuprofile-fileformat.html b/src/thirdparty/gperftools-2.0/doc/cpuprofile-fileformat.html new file mode 100644 index 000000000..3f90e6bc7 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/cpuprofile-fileformat.html @@ -0,0 +1,264 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<HTML> + +<HEAD> + <link rel="stylesheet" href="designstyle.css"> + <title>Google CPU Profiler Binary Data File Format + + + + +

Google CPU Profiler Binary Data File Format

+ +

+ Last modified + +

+ +

This file documents the binary data file format produced by the +Google CPU Profiler. For information about using the CPU Profiler, +see its user guide. + +

The profiler source code, which generates files using this format, is at +src/profiler.cc. + + +

CPU Profile Data File Structure

+ +

CPU profile data files each consist of four parts, in order: + +

    +
  • Binary header +
  • Binary profile records +
  • Binary trailer +
  • Text list of mapped objects +
+ +

The binary data is expressed in terms of "slots." These are words +large enough to hold the program's pointer type, i.e., for 32-bit +programs they are 4 bytes in size, and for 64-bit programs they are 8 +bytes. They are stored in the profile data file in the native byte +order (i.e., little-endian for x86 and x86_64). + + +

Binary Header

+ +

The binary header format is show below. Values written by the +profiler, along with requirements currently enforced by the analysis +tools, are shown in parentheses. + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
slotdata
0header count (0; must be 0)
1header slots after this one (3; must be >= 3)
2format version (0; must be 0)
3sampling period, in microseconds
4padding (0)
+ +

The headers currently generated for 32-bit and 64-bit little-endian +(x86 and x86_64) profiles are shown below, for comparison. + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
hdr counthdr wordsversionsampling periodpad
32-bit or 64-bit (slots)030100000
32-bit (4-byte words in file)0x000000x000030x000000x027100x00000
64-bit LE (4-byte words in file)0x00000 0x000000x00003 0x000000x00000 0x000000x02710 0x000000x00000 0x00000
+ +

The contents are shown in terms of slots, and in terms of 4-byte +words in the profile data file. The slot contents for 32-bit and +64-bit headers are identical. For 32-bit profiles, the 4-byte word +view matches the slot view. For 64-bit profiles, each (8-byte) slot +is shown as two 4-byte words, ordered as they would appear in the +file. + +

The profiling tools examine the contents of the file and use the +expected locations and values of the header words field to detect +whether the file is 32-bit or 64-bit. + + +

Binary Profile Records

+ +

The binary profile record format is shown below. + +

+ + + + + + + + + + + + + + + + + + + +
slotdata
0sample count, must be >= 1
1number of call chain PCs (num_pcs), must be >= 1
2 .. (num_pcs + 1)call chain PCs, most-recently-called function first. +
+ +

The total length of a given record is 2 + num_pcs. + +

Note that multiple profile records can be emitted by the profiler +having an identical call chain. In that case, analysis tools should +sum the counts of all records having identical call chains. + +

Note: Some profile analysis tools terminate if they see +any profile record with a call chain with its first entry +having the address 0. (This is similar to the binary trailer.) + +

Example

+ +This example shows the slots contained in a sample profile record. + +

+ + + + + + + + +
530xa00000xc00000xe0000
+ +

In this example, 5 ticks were received at PC 0xa0000, whose +function had been called by the function containing 0xc0000, which had +been called from the function containing 0xe0000. + + +

Binary Trailer

+ +

The binary trailer consists of three slots of data with fixed +values, shown below. + +

+ + + + + + + + + + + + + + + + + + + + +
slotvalue
00
11
20
+ +

Note that this is the same data that would contained in a profile +record with sample count = 0, num_pcs = 1, and a one-element call +chain containing the address 0. + + +

Text List of Mapped Objects

+ +

The binary data in the file is followed immediately by a list of +mapped objects. This list consists of lines of text separated by +newline characters. + +

Each line is one of the following types: + +

    +
  • Build specifier, starting with "build=". For example: +
      build=/path/to/binary
    + Leading spaces on the line are ignored. + +
  • Mapping line from ProcMapsIterator::FormatLine. For example: +
      40000000-40015000 r-xp 00000000 03:01 12845071   /lib/ld-2.3.2.so
    + The first address must start at the beginning of the line. +
+ +

Unrecognized lines should be ignored by analysis tools. + +

When processing the paths see in mapping lines, occurrences of +$build followed by a non-word character (i.e., characters +other than underscore or alphanumeric characters), should be replaced +by the path given on the last build specifier line. + +


+
Chris Demetriou
+ + +Last modified: Mon Aug 27 12:18:26 PDT 2007 (cgd) + +
+ + diff --git a/src/thirdparty/gperftools-2.0/doc/cpuprofile.html b/src/thirdparty/gperftools-2.0/doc/cpuprofile.html new file mode 100644 index 000000000..769ec68f3 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/cpuprofile.html @@ -0,0 +1,521 @@ + + + + + + Gperftools CPU Profiler + + + + +

+ Last modified + +

+ +

This is the CPU profiler we use at Google. There are three parts +to using it: linking the library into an application, running the +code, and analyzing the output.

+ +

On the off-chance that you should need to understand it, the CPU +profiler data file format is documented separately, +here. + + +

Linking in the Library

+ +

To install the CPU profiler into your executable, add +-lprofiler to the link-time step for your executable. +(It's also probably possible to add in the profiler at run-time using +LD_PRELOAD, e.g. +% env LD_PRELOAD="/usr/lib/libprofiler.so" <binary>, +but this isn't necessarily recommended.)

+ +

This does not turn on CPU profiling; it just inserts the +code. For that reason, it's practical to just always link +-lprofiler into a binary while developing; that's what we +do at Google. (However, since any user can turn on the profiler by +setting an environment variable, it's not necessarily recommended to +install profiler-linked binaries into a production, running +system.)

+ + +

Running the Code

+ +

There are several alternatives to actually turn on CPU profiling +for a given run of an executable:

+ +
    +
  1. Define the environment variable CPUPROFILE to the filename + to dump the profile to. For instance, if you had a version of + /bin/ls that had been linked against libprofiler, + you could run:

    +
    % env CPUPROFILE=ls.prof /bin/ls
    + +
  2. In your code, bracket the code you want profiled in calls to + ProfilerStart() and ProfilerStop(). + (These functions are declared in <gperftools/profiler.h>.) + ProfilerStart() will take + the profile-filename as an argument.

    +
+ +

In Linux 2.6 and above, profiling works correctly with threads, +automatically profiling all threads. In Linux 2.4, profiling only +profiles the main thread (due to a kernel bug involving itimers and +threads). Profiling works correctly with sub-processes: each child +process gets its own profile with its own name (generated by combining +CPUPROFILE with the child's process id).

+ +

For security reasons, CPU profiling will not write to a file -- and +is thus not usable -- for setuid programs.

+ +

See the include-file gperftools/profiler.h for +advanced-use functions, including ProfilerFlush() and +ProfilerStartWithOptions().

+ + +

Modifying Runtime Behavior

+ +

You can more finely control the behavior of the CPU profiler via +environment variables.

+ + + + + + + + + + + + + + + +
CPUPROFILE_FREQUENCY=xdefault: 100 + How many interrupts/second the cpu-profiler samples. +
CPUPROFILE_REALTIME=1default: [not set] + If set to any value (including 0 or the empty string), use + ITIMER_REAL instead of ITIMER_PROF to gather profiles. In + general, ITIMER_REAL is not as accurate as ITIMER_PROF, and also + interacts badly with use of alarm(), so prefer ITIMER_PROF unless + you have a reason prefer ITIMER_REAL. +
+ + +

Analyzing the Output

+ +

pprof is the script used to analyze a profile. It has +many output modes, both textual and graphical. Some give just raw +numbers, much like the -pg output of gcc, +and others show the data in the form of a dependency graph.

+ +

pprof requires perl5 to be installed to run. +It also requires dot to be installed for any of the +graphical output routines, and gv to be installed for +--gv mode (described below). +

+ +

Here are some ways to call pprof. These are described in more +detail below.

+ +
+% pprof /bin/ls ls.prof
+                       Enters "interactive" mode
+% pprof --text /bin/ls ls.prof
+                       Outputs one line per procedure
+% pprof --gv /bin/ls ls.prof
+                       Displays annotated call-graph via 'gv'
+% pprof --gv --focus=Mutex /bin/ls ls.prof
+                       Restricts to code paths including a .*Mutex.* entry
+% pprof --gv --focus=Mutex --ignore=string /bin/ls ls.prof
+                       Code paths including Mutex but not string
+% pprof --list=getdir /bin/ls ls.prof
+                       (Per-line) annotated source listing for getdir()
+% pprof --disasm=getdir /bin/ls ls.prof
+                       (Per-PC) annotated disassembly for getdir()
+% pprof --text localhost:1234
+                       Outputs one line per procedure for localhost:1234
+% pprof --callgrind /bin/ls ls.prof
+                       Outputs the call information in callgrind format
+
+ + +

Analyzing Text Output

+ +

Text mode has lines of output that look like this:

+
+       14   2.1%  17.2%       58   8.7% std::_Rb_tree::find
+
+ +

Here is how to interpret the columns:

+
    +
  1. Number of profiling samples in this function +
  2. Percentage of profiling samples in this function +
  3. Percentage of profiling samples in the functions printed so far +
  4. Number of profiling samples in this function and its callees +
  5. Percentage of profiling samples in this function and its callees +
  6. Function name +
+ +

Analyzing Callgrind Output

+ +

Use kcachegrind to +analyze your callgrind output:

+
+% pprof --callgrind /bin/ls ls.prof > ls.callgrind
+% kcachegrind ls.callgrind
+
+ +

The cost is specified in 'hits', i.e. how many times a function +appears in the recorded call stack information. The 'calls' from +function a to b record how many times function b was found in the +stack traces directly below function a.

+ +

Tip: if you use a debug build the output will include file and line +number information and kcachegrind will show an annotated source +code view.

+ +

Node Information

+ +

In the various graphical modes of pprof, the output is a call graph +annotated with timing information, like so:

+ + +
+ +
+
+ +

Each node represents a procedure. The directed edges indicate +caller to callee relations. Each node is formatted as follows:

+ +
+Class Name
+Method Name
+local (percentage)
+of cumulative (percentage)
+
+ +

The last one or two lines contains the timing information. (The +profiling is done via a sampling method, where by default we take 100 +samples a second. Therefor one unit of time in the output corresponds +to about 10 milliseconds of execution time.) The "local" time is the +time spent executing the instructions directly contained in the +procedure (and in any other procedures that were inlined into the +procedure). The "cumulative" time is the sum of the "local" time and +the time spent in any callees. If the cumulative time is the same as +the local time, it is not printed.

+ +

For instance, the timing information for test_main_thread() +indicates that 155 units (about 1.55 seconds) were spent executing the +code in test_main_thread() and 200 units were spent while +executing test_main_thread() and its callees such as +snprintf().

+ +

The size of the node is proportional to the local count. The +percentage displayed in the node corresponds to the count divided by +the total run time of the program (that is, the cumulative count for +main()).

+ +

Edge Information

+ +

An edge from one node to another indicates a caller to callee +relationship. Each edge is labelled with the time spent by the callee +on behalf of the caller. E.g, the edge from +test_main_thread() to snprintf() indicates +that of the 200 samples in test_main_thread(), 37 are +because of calls to snprintf().

+ +

Note that test_main_thread() has an edge to +vsnprintf(), even though test_main_thread() +doesn't call that function directly. This is because the code was +compiled with -O2; the profile reflects the optimized +control flow.

+ +

Meta Information

+ +

The top of the display should contain some meta information +like:

+
+      /tmp/profiler2_unittest
+      Total samples: 202
+      Focusing on: 202
+      Dropped nodes with <= 1 abs(samples)
+      Dropped edges with <= 0 samples
+
+ +

This section contains the name of the program, and the total +samples collected during the profiling run. If the +--focus option is on (see the Focus +section below), the legend also contains the number of samples being +shown in the focused display. Furthermore, some unimportant nodes and +edges are dropped to reduce clutter. The characteristics of the +dropped nodes and edges are also displayed in the legend.

+ +

Focus and Ignore

+ +

You can ask pprof to generate a display focused on a particular +piece of the program. You specify a regular expression. Any portion +of the call-graph that is on a path which contains at least one node +matching the regular expression is preserved. The rest of the +call-graph is dropped on the floor. For example, you can focus on the +vsnprintf() libc call in profiler2_unittest +as follows:

+ +
+% pprof --gv --focus=vsnprintf /tmp/profiler2_unittest test.prof
+
+ +
+ +
+
+ +

Similarly, you can supply the --ignore option to +ignore samples that match a specified regular expression. E.g., if +you are interested in everything except calls to +snprintf(), you can say:

+
+% pprof --gv --ignore=snprintf /tmp/profiler2_unittest test.prof
+
+ + +

Interactive mode

+ +

By default -- if you don't specify any flags to the contrary -- +pprof runs in interactive mode. At the (pprof) prompt, +you can run many of the commands described above. You can type +help for a list of what commands are available in +interactive mode.

+ +

pprof Options

+ +For a complete list of pprof options, you can run pprof +--help. + +

Output Type

+ +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--text + Produces a textual listing. (Note: If you have an X display, and + dot and gv installed, you will probably + be happier with the --gv output.) +
--gv + Generates annotated call-graph, converts to postscript, and + displays via gv (requres dot and gv be + installed). +
--dot + Generates the annotated call-graph in dot format and + emits to stdout (requres dot be installed). +
--ps + Generates the annotated call-graph in Postscript format and + emits to stdout (requres dot be installed). +
--pdf + Generates the annotated call-graph in PDF format and emits to + stdout (requires dot and ps2pdf be + installed). +
--gif + Generates the annotated call-graph in GIF format and + emits to stdout (requres dot be installed). +
--list=<regexp> +

Outputs source-code listing of routines whose + name matches <regexp>. Each line + in the listing is annotated with flat and cumulative + sample counts.

+ +

In the presence of inlined calls, the samples + associated with inlined code tend to get assigned + to a line that follows the location of the + inlined call. A more precise accounting can be + obtained by disassembling the routine using the + --disasm flag.

+
--disasm=<regexp> + Generates disassembly of routines that match + <regexp>, annotated with flat and + cumulative sample counts and emits to stdout. +
+
+ +

Reporting Granularity

+ +

By default, pprof produces one entry per procedure. However you can +use one of the following options to change the granularity of the +output. The --files option seems to be particularly +useless, and may be removed eventually.

+ +
+ + + + + + + + + + + + + + +
--addresses + Produce one node per program address. +
--lines + Produce one node per source line. +
--functions + Produce one node per function (this is the default). +
--files + Produce one node per source file. +
+
+ +

Controlling the Call Graph Display

+ +

Some nodes and edges are dropped to reduce clutter in the output +display. The following options control this effect:

+ +
+ + + + + + + + + + + + + + + + + + + + + +
--nodecount=<n> + This option controls the number of displayed nodes. The nodes + are first sorted by decreasing cumulative count, and then only + the top N nodes are kept. The default value is 80. +
--nodefraction=<f> + This option provides another mechanism for discarding nodes + from the display. If the cumulative count for a node is + less than this option's value multiplied by the total count + for the profile, the node is dropped. The default value + is 0.005; i.e. nodes that account for less than + half a percent of the total time are dropped. A node + is dropped if either this condition is satisfied, or the + --nodecount condition is satisfied. +
--edgefraction=<f> + This option controls the number of displayed edges. First of all, + an edge is dropped if either its source or destination node is + dropped. Otherwise, the edge is dropped if the sample + count along the edge is less than this option's value multiplied + by the total count for the profile. The default value is + 0.001; i.e., edges that account for less than + 0.1% of the total time are dropped. +
--focus=<re> + This option controls what region of the graph is displayed + based on the regular expression supplied with the option. + For any path in the callgraph, we check all nodes in the path + against the supplied regular expression. If none of the nodes + match, the path is dropped from the output. +
--ignore=<re> + This option controls what region of the graph is displayed + based on the regular expression supplied with the option. + For any path in the callgraph, we check all nodes in the path + against the supplied regular expression. If any of the nodes + match, the path is dropped from the output. +
+
+ +

The dropped edges and nodes account for some count mismatches in +the display. For example, the cumulative count for +snprintf() in the first diagram above was 41. However +the local count (1) and the count along the outgoing edges (12+1+20+6) +add up to only 40.

+ + +

Caveats

+ +
    +
  • If the program exits because of a signal, the generated profile + will be incomplete, and may perhaps be + completely empty. +
  • The displayed graph may have disconnected regions because + of the edge-dropping heuristics described above. +
  • If the program linked in a library that was not compiled + with enough symbolic information, all samples associated + with the library may be charged to the last symbol found + in the program before the library. This will artificially + inflate the count for that symbol. +
  • If you run the program on one machine, and profile it on + another, and the shared libraries are different on the two + machines, the profiling output may be confusing: samples that + fall within shared libaries may be assigned to arbitrary + procedures. +
  • If your program forks, the children will also be profiled + (since they inherit the same CPUPROFILE setting). Each process + is profiled separately; to distinguish the child profiles from + the parent profile and from each other, all children will have + their process-id appended to the CPUPROFILE name. +
  • Due to a hack we make to work around a possible gcc bug, your + profiles may end up named strangely if the first character of + your CPUPROFILE variable has ascii value greater than 127. + This should be exceedingly rare, but if you need to use such a + name, just set prepend ./ to your filename: + CPUPROFILE=./Ägypten. +
+ + +
+
Sanjay Ghemawat
+ + +Last modified: Fri May 9 14:41:29 PDT 2008 + +
+ + diff --git a/src/thirdparty/gperftools-2.0/doc/designstyle.css b/src/thirdparty/gperftools-2.0/doc/designstyle.css new file mode 100644 index 000000000..29299af1f --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/designstyle.css @@ -0,0 +1,109 @@ +body { + background-color: #ffffff; + color: black; + margin-right: 1in; + margin-left: 1in; +} + + +h1, h2, h3, h4, h5, h6 { + color: #3366ff; + font-family: sans-serif; +} +@media print { + /* Darker version for printing */ + h1, h2, h3, h4, h5, h6 { + color: #000080; + font-family: helvetica, sans-serif; + } +} + +h1 { + text-align: center; + font-size: 18pt; +} +h2 { + margin-left: -0.5in; +} +h3 { + margin-left: -0.25in; +} +h4 { + margin-left: -0.125in; +} +hr { + margin-left: -1in; +} + +/* Definition lists: definition term bold */ +dt { + font-weight: bold; +} + +address { + text-align: right; +} +/* Use the tag for bits of code and for variables and objects. */ +code,pre,samp,var { + color: #006000; +} +/* Use the tag for file and directory paths and names. */ +file { + color: #905050; + font-family: monospace; +} +/* Use the tag for stuff the user should type. */ +kbd { + color: #600000; +} +div.note p { + float: right; + width: 3in; + margin-right: 0%; + padding: 1px; + border: 2px solid #6060a0; + background-color: #fffff0; +} + +UL.nobullets { + list-style-type: none; + list-style-image: none; + margin-left: -1em; +} + +/* pretty printing styles. See prettify.js */ +.str { color: #080; } +.kwd { color: #008; } +.com { color: #800; } +.typ { color: #606; } +.lit { color: #066; } +.pun { color: #660; } +.pln { color: #000; } +.tag { color: #008; } +.atn { color: #606; } +.atv { color: #080; } +pre.prettyprint { padding: 2px; border: 1px solid #888; } + +.embsrc { background: #eee; } + +@media print { + .str { color: #060; } + .kwd { color: #006; font-weight: bold; } + .com { color: #600; font-style: italic; } + .typ { color: #404; font-weight: bold; } + .lit { color: #044; } + .pun { color: #440; } + .pln { color: #000; } + .tag { color: #006; font-weight: bold; } + .atn { color: #404; } + .atv { color: #060; } +} + +/* Table Column Headers */ +.hdr { + color: #006; + font-weight: bold; + background-color: #dddddd; } +.hdr2 { + color: #006; + background-color: #eeeeee; } \ No newline at end of file diff --git a/src/thirdparty/gperftools-2.0/doc/heap-example1.png b/src/thirdparty/gperftools-2.0/doc/heap-example1.png new file mode 100644 index 0000000000000000000000000000000000000000..9a14b6fb89e66316368656ae26f2250a25760951 GIT binary patch literal 37619 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 literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/heap_checker.html b/src/thirdparty/gperftools-2.0/doc/heap_checker.html new file mode 100644 index 000000000..ea2ade633 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/heap_checker.html @@ -0,0 +1,534 @@ + + + + + + Gperftools Heap Leak Checker + + + + +

+ Last modified + +

+ +

This is the heap checker we use at Google to detect memory leaks in +C++ programs. There are three parts to using it: linking the library +into an application, running the code, and analyzing the output.

+ + +

Linking in the Library

+ +

The heap-checker is part of tcmalloc, so to install the heap +checker into your executable, add -ltcmalloc to the +link-time step for your executable. Also, while we don't necessarily +recommend this form of usage, it's possible to add in the profiler at +run-time using LD_PRELOAD:

+
% env LD_PRELOAD="/usr/lib/libtcmalloc.so" 
+ +

This does not turn on heap checking; it just inserts the +code. For that reason, it's practical to just always link +-ltcmalloc into a binary while developing; that's what we +do at Google. (However, since any user can turn on the profiler by +setting an environment variable, it's not necessarily recommended to +install heapchecker-linked binaries into a production, running +system.) Note that if you wish to use the heap checker, you must +also use the tcmalloc memory-allocation library. There is no way +currently to use the heap checker separate from tcmalloc.

+ + +

Running the Code

+ +

Note: For security reasons, heap profiling will not write to a file +-- and is thus not usable -- for setuid programs.

+ +

Whole-program Heap Leak Checking

+ +

The recommended way to use the heap checker is in "whole program" +mode. In this case, the heap-checker starts tracking memory +allocations before the start of main(), and checks again +at program-exit. If it finds any memory leaks -- that is, any memory +not pointed to by objects that are still "live" at program-exit -- it +aborts the program (via exit(1)) and prints a message +describing how to track down the memory leak (using pprof).

+ +

The heap-checker records the stack trace for each allocation while +it is active. This causes a significant increase in memory usage, in +addition to slowing your program down.

+ +

Here's how to run a program with whole-program heap checking:

+ +
    +
  1. Define the environment variable HEAPCHECK to the type of heap-checking to do. For instance, + to heap-check + /usr/local/bin/my_binary_compiled_with_tcmalloc:

    +
    % env HEAPCHECK=normal /usr/local/bin/my_binary_compiled_with_tcmalloc
    +
+ +

No other action is required.

+ +

Note that since the heap-checker uses the heap-profiling framework +internally, it is not possible to run both the heap-checker and heap profiler at the same time.

+ + +

Flavors of Heap Checking

+ +

These are the legal values when running a whole-program heap +check:

+
    +
  1. minimal +
  2. normal +
  3. strict +
  4. draconian +
+ +

"Minimal" heap-checking starts as late as possible in a +initialization, meaning you can leak some memory in your +initialization routines (that run before main(), say), +and not trigger a leak message. If you frequently (and purposefully) +leak data in one-time global initializers, "minimal" mode is useful +for you. Otherwise, you should avoid it for stricter modes.

+ +

"Normal" heap-checking tracks live objects and +reports a leak for any data that is not reachable via a live object +when the program exits.

+ +

"Strict" heap-checking is much like "normal" but has a few extra +checks that memory isn't lost in global destructors. In particular, +if you have a global variable that allocates memory during program +execution, and then "forgets" about the memory in the global +destructor (say, by setting the pointer to it to NULL) without freeing +it, that will prompt a leak message in "strict" mode, though not in +"normal" mode.

+ +

"Draconian" heap-checking is appropriate for those who like to be +very precise about their memory management, and want the heap-checker +to help them enforce it. In "draconian" mode, the heap-checker does +not do "live object" checking at all, so it reports a leak unless +all allocated memory is freed before program exit. (However, +you can use IgnoreObject() to re-enable +liveness-checking on an object-by-object basis.)

+ +

"Normal" mode, as the name implies, is the one used most often at +Google. It's appropriate for everyday heap-checking use.

+ +

In addition, there are two other possible modes:

+
    +
  • as-is +
  • local +
+

as-is is the most flexible mode; it allows you to +specify the various knobs of the heap checker +explicitly. local activates the explicit heap-check instrumentation, but does not +turn on any whole-program leak checking.

+ + +

Tweaking whole-program checking

+ +

In some cases you want to check the whole program for memory leaks, +but waiting for after main() exits to do the first +whole-program leak check is waiting too long: e.g. in a long-running +server one might wish to simply periodically check for leaks while the +server is running. In this case, you can call the static method +NoGlobalLeaks(), to verify no global leaks have happened +as of that point in the program.

+ +

Alternately, doing the check after main() exits might +be too late. Perhaps you have some objects that are known not to +clean up properly at exit. You'd like to do the "at exit" check +before those objects are destroyed (since while they're live, any +memory they point to will not be considered a leak). In that case, +you can call NoGlobalLeaks() manually, near the end of +main(), and then call CancelGlobalCheck() to +turn off the automatic post-main() check.

+ +

Finally, there's a helper macro for "strict" and "draconian" modes, +which require all global memory to be freed before program exit. This +freeing can be time-consuming and is often unnecessary, since libc +cleans up all memory at program-exit for you. If you want the +benefits of "strict"/"draconian" modes without the cost of all that +freeing, look at REGISTER_HEAPCHECK_CLEANUP (in +heap-checker.h). This macro allows you to mark specific +cleanup code as active only when the heap-checker is turned on.

+ + +

Explicit (Partial-program) Heap Leak Checking

+ +

Instead of whole-program checking, you can check certain parts of your +code to verify they do not have memory leaks. This check verifies that +between two parts of a program, no memory is allocated without being freed.

+

To use this kind of checking code, bracket the code you want +checked by creating a HeapLeakChecker object at the +beginning of the code segment, and call +NoLeaks() at the end. These functions, and all others +referred to in this file, are declared in +<gperftools/heap-checker.h>. +

+ +

Here's an example:

+
+  HeapLeakChecker heap_checker("test_foo");
+  {
+    code that exercises some foo functionality;
+    this code should not leak memory;
+  }
+  if (!heap_checker.NoLeaks()) assert(NULL == "heap memory leak");
+
+ +

Note that adding in the HeapLeakChecker object merely +instruments the code for leak-checking. To actually turn on this +leak-checking on a particular run of the executable, you must still +run with the heap-checker turned on:

+
% env HEAPCHECK=local /usr/local/bin/my_binary_compiled_with_tcmalloc
+

If you want to do whole-program leak checking in addition to this +manual leak checking, you can run in normal or some other +mode instead: they'll run the "local" checks in addition to the +whole-program check.

+ + +

Disabling Heap-checking of Known Leaks

+ +

Sometimes your code has leaks that you know about and are willing +to accept. You would like the heap checker to ignore them when +checking your program. You can do this by bracketing the code in +question with an appropriate heap-checking construct:

+
+   ...
+   {
+     HeapLeakChecker::Disabler disabler;
+     <leaky code>
+   }
+   ...
+
+Any objects allocated by leaky code (including inside any +routines called by leaky code) and any objects reachable +from such objects are not reported as leaks. + +

Alternately, you can use IgnoreObject(), which takes a +pointer to an object to ignore. That memory, and everything reachable +from it (by following pointers), is ignored for the purposes of leak +checking. You can call UnIgnoreObject() to undo the +effects of IgnoreObject().

+ + +

Tuning the Heap Checker

+ +

The heap leak checker has many options, some that trade off running +time and accuracy, and others that increase the sensitivity at the +risk of returning false positives. For most uses, the range covered +by the heap-check flavors is enough, but in +specialized cases more control can be helpful.

+ +

+These options are specified via environment varaiables. +

+ +

This first set of options controls sensitivity and accuracy. These +options are ignored unless you run the heap checker in as-is mode. + + + + + + + + + + + + + + + + + + + + + +
HEAP_CHECK_AFTER_DESTRUCTORSDefault: false + When true, do the final leak check after all other global + destructors have run. When false, do it after all + REGISTER_HEAPCHECK_CLEANUP, typically much earlier in + the global-destructor process. +
HEAP_CHECK_IGNORE_THREAD_LIVEDefault: true + If true, ignore objects reachable from thread stacks and registers + (that is, do not report them as leaks). +
HEAP_CHECK_IGNORE_GLOBAL_LIVEDefault: true + If true, ignore objects reachable from global variables and data + (that is, do not report them as leaks). +
+ +

These options modify the behavior of whole-program leak +checking.

+ + + + + + + + + + +
HEAP_CHECK_MAX_LEAKSDefault: 20 + The maximum number of leaks to be printed to stderr (all leaks are still + emitted to file output for pprof to visualize). If negative or zero, + print all the leaks found. +
+ +

These options apply to all types of leak checking.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HEAP_CHECK_IDENTIFY_LEAKSDefault: false + If true, generate the addresses of the leaked objects in the + generated memory leak profile files. +
HEAP_CHECK_TEST_POINTER_ALIGNMENTDefault: false + If true, check all leaks to see if they might be due to the use + of unaligned pointers. +
HEAP_CHECK_POINTER_SOURCE_ALIGNMENTDefault: sizeof(void*) + Alignment at which all pointers in memory are supposed to be located. + Use 1 if any alignment is ok. +
PPROF_PATHDefault: pprof + The location of the pprof executable. +
HEAP_CHECK_DUMP_DIRECTORYDefault: /tmp + Where the heap-profile files are kept while the program is running. +
+ + +

Tips for Handling Detected Leaks

+ +

What do you do when the heap leak checker detects a memory leak? +First, you should run the reported pprof command; +hopefully, that is enough to track down the location where the leak +occurs.

+ +

If the leak is a real leak, you should fix it!

+ +

If you are sure that the reported leaks are not dangerous and there +is no good way to fix them, then you can use +HeapLeakChecker::Disabler and/or +HeapLeakChecker::IgnoreObject() to disable heap-checking +for certain parts of the codebase.

+ +

In "strict" or "draconian" mode, leaks may be due to incomplete +cleanup in the destructors of global variables. If you don't wish to +augment the cleanup routines, but still want to run in "strict" or +"draconian" mode, consider using REGISTER_HEAPCHECK_CLEANUP.

+ +

Hints for Debugging Detected Leaks

+ +

Sometimes it can be useful to not only know the exact code that +allocates the leaked objects, but also the addresses of the leaked objects. +Combining this e.g. with additional logging in the program +one can then track which subset of the allocations +made at a certain spot in the code are leaked. +
+To get the addresses of all leaked objects + define the environment variable HEAP_CHECK_IDENTIFY_LEAKS + to be 1. +The object addresses will be reported in the form of addresses +of fake immediate callers of the memory allocation routines. +Note that the performance of doing leak-checking in this mode +can be noticeably worse than the default mode. +

+ +

One relatively common class of leaks that don't look real +is the case of multiple initialization. +In such cases the reported leaks are typically things that are +linked from some global objects, +which are initialized and say never modified again. +The non-obvious cause of the leak is frequently the fact that +the initialization code for these objects executes more than once. +
+E.g. if the code of some .cc file is made to be included twice +into the binary, then the constructors for global objects defined in that file +will execute twice thus leaking the things allocated on the first run. +
+Similar problems can occur if object initialization is done more explicitly +e.g. on demand by a slightly buggy code +that does not always ensure only-once initialization. +

+ +

+A more rare but even more puzzling problem can be use of not properly +aligned pointers (maybe inside of not properly aligned objects). +Normally such pointers are not followed by the leak checker, +hence the objects reachable only via such pointers are reported as leaks. +If you suspect this case + define the environment variable HEAP_CHECK_TEST_POINTER_ALIGNMENT + to be 1 +and then look closely at the generated leak report messages. +

+ +

How It Works

+ +

When a HeapLeakChecker object is constructed, it dumps +a memory-usage profile named +<prefix>.<name>-beg.heap to a temporary +directory. When NoLeaks() +is called (for whole-program checking, this happens automatically at +program-exit), it dumps another profile, named +<prefix>.<name>-end.heap. +(<prefix> is typically determined automatically, +and <name> is typically argv[0].) It +then compares the two profiles. If the second profile shows +more memory use than the first, the +NoLeaks() function will +return false. For "whole program" profiling, this will cause the +executable to abort (via exit(1)). In all cases, it will +print a message on how to process the dumped profiles to locate +leaks.

+ +

Detecting Live Objects

+ +

At any point during a program's execution, all memory that is +accessible at that time is considered "live." This includes global +variables, and also any memory that is reachable by following pointers +from a global variable. It also includes all memory reachable from +the current stack frame and from current CPU registers (this captures +local variables). Finally, it includes the thread equivalents of +these: thread-local storage and thread heaps, memory reachable from +thread-local storage and thread heaps, and memory reachable from +thread CPU registers.

+ +

In all modes except "draconian," live memory is not +considered to be a leak. We detect this by doing a liveness flood, +traversing pointers to heap objects starting from some initial memory +regions we know to potentially contain live pointer data. Note that +this flood might potentially not find some (global) live data region +to start the flood from. If you find such, please file a bug.

+ +

The liveness flood attempts to treat any properly aligned byte +sequences as pointers to heap objects and thinks that it found a good +pointer whenever the current heap memory map contains an object with +the address whose byte representation we found. Some pointers into +not-at-start of object will also work here.

+ +

As a result of this simple approach, it's possible (though +unlikely) for the flood to be inexact and occasionally result in +leaked objects being erroneously determined to be live. For instance, +random bit patterns can happen to look like pointers to leaked heap +objects. More likely, stale pointer data not corresponding to any +live program variables can be still present in memory regions, +especially in thread stacks. For instance, depending on how the local +malloc is implemented, it may reuse a heap object +address:

+
+    char* p = new char[1];   // new might return 0x80000000, say.
+    delete p;
+    new char[1];             // new might return 0x80000000 again
+    // This last new is a leak, but doesn't seem it: p looks like it points to it
+
+ +

In other words, imprecisions in the liveness flood mean that for +any heap leak check we might miss some memory leaks. This means that +for local leak checks, we might report a memory leak in the local +area, even though the leak actually happened before the +HeapLeakChecker object was constructed. Note that for +whole-program checks, a leak report does always correspond to a +real leak (since there's no "before" to have created a false-live +object).

+ +

While this liveness flood approach is not very portable and not +100% accurate, it works in most cases and saves us from writing a lot +of explicit clean up code and other hassles when dealing with thread +data.

+ + +

Visualizing Leak with pprof

+ +

+The heap checker automatically prints basic leak info with stack traces of +leaked objects' allocation sites, as well as a pprof command line that can be +used to visualize the call-graph involved in these allocations. +The latter can be much more useful for a human +to see where/why the leaks happened, especially if the leaks are numerous. +

+ +

Leak-checking and Threads

+ +

At the time of HeapLeakChecker's construction and during +NoLeaks() calls, we grab a lock +and then pause all other threads so other threads do not interfere +with recording or analyzing the state of the heap.

+ +

In general, leak checking works correctly in the presence of +threads. However, thread stack data liveness determination (via +base/thread_lister.h) does not work when the program is +running under GDB, because the ptrace functionality needed for finding +threads is already hooked to by GDB. Conversely, leak checker's +ptrace attempts might also interfere with GDB. As a result, GDB can +result in potentially false leak reports. For this reason, the +heap-checker turns itself off when running under GDB.

+ +

Also, thread_lister only works for Linux pthreads; +leak checking is unlikely to handle other thread implementations +correctly.

+ +

As mentioned in the discussion of liveness flooding, thread-stack +liveness determination might mis-classify as reachable objects that +very recently became unreachable (leaked). This can happen when the +pointers to now-logically-unreachable objects are present in the +active thread stack frame. In other words, trivial code like the +following might not produce the expected leak checking outcome +depending on how the compiled code works with the stack:

+
+  int* foo = new int [20];
+  HeapLeakChecker check("a_check");
+  foo = NULL;
+  // May fail to trigger.
+  if (!heap_checker.NoLeaks()) assert(NULL == "heap memory leak");
+
+ + +
+
Maxim Lifantsev
+ + +Last modified: Fri Jul 13 13:14:33 PDT 2007 + +
+ + diff --git a/src/thirdparty/gperftools-2.0/doc/heapprofile.html b/src/thirdparty/gperftools-2.0/doc/heapprofile.html new file mode 100644 index 000000000..e9f6b15d1 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/heapprofile.html @@ -0,0 +1,373 @@ + + + + + + Gperftools Heap Profiler + + + + +

+ Last modified + +

+ +

This is the heap profiler we use at Google, to explore how C++ +programs manage memory. This facility can be useful for

+
    +
  • Figuring out what is in the program heap at any given time +
  • Locating memory leaks +
  • Finding places that do a lot of allocation +
+ +

The profiling system instruments all allocations and frees. It +keeps track of various pieces of information per allocation site. An +allocation site is defined as the active stack trace at the call to +malloc, calloc, realloc, or, +new.

+ +

There are three parts to using it: linking the library into an +application, running the code, and analyzing the output.

+ + +

Linking in the Library

+ +

To install the heap profiler into your executable, add +-ltcmalloc to the link-time step for your executable. +Also, while we don't necessarily recommend this form of usage, it's +possible to add in the profiler at run-time using +LD_PRELOAD: +

% env LD_PRELOAD="/usr/lib/libtcmalloc.so" <binary>
+ +

This does not turn on heap profiling; it just inserts the +code. For that reason, it's practical to just always link +-ltcmalloc into a binary while developing; that's what we +do at Google. (However, since any user can turn on the profiler by +setting an environment variable, it's not necessarily recommended to +install profiler-linked binaries into a production, running +system.) Note that if you wish to use the heap profiler, you must +also use the tcmalloc memory-allocation library. There is no way +currently to use the heap profiler separate from tcmalloc.

+ + +

Running the Code

+ +

There are several alternatives to actually turn on heap profiling +for a given run of an executable:

+ +
    +
  1. Define the environment variable HEAPPROFILE to the filename + to dump the profile to. For instance, to profile + /usr/local/bin/my_binary_compiled_with_tcmalloc:

    +
    % env HEAPPROFILE=/tmp/mybin.hprof /usr/local/bin/my_binary_compiled_with_tcmalloc
    +
  2. In your code, bracket the code you want profiled in calls to + HeapProfilerStart() and HeapProfilerStop(). + (These functions are declared in <gperftools/heap-profiler.h>.) + HeapProfilerStart() will take the + profile-filename-prefix as an argument. Then, as often as + you'd like before calling HeapProfilerStop(), you + can use HeapProfilerDump() or + GetHeapProfile() to examine the profile. In case + it's useful, IsHeapProfilerRunning() will tell you + whether you've already called HeapProfilerStart() or not.

    +
+ + +

For security reasons, heap profiling will not write to a file -- +and is thus not usable -- for setuid programs.

+ +

Modifying Runtime Behavior

+ +

You can more finely control the behavior of the heap profiler via +environment variables.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HEAP_PROFILE_ALLOCATION_INTERVALdefault: 1073741824 (1 Gb) + Dump heap profiling information once every specified number of + bytes has been allocated by the program. +
HEAP_PROFILE_INUSE_INTERVALdefault: 104857600 (100 Mb) + Dump heap profiling information whenever the high-water memory + usage mark increases by the specified number of bytes. +
HEAP_PROFILE_MMAPdefault: false + Profile mmap, mremap and sbrk + calls in addition + to malloc, calloc, realloc, + and new. NOTE: this causes the profiler to + profile calls internal to tcmalloc, since tcmalloc and friends use + mmap and sbrk internally for allocations. One partial solution is + to filter these allocations out when running pprof, + with something like + pprof --ignore='DoAllocWithArena|SbrkSysAllocator::Alloc|MmapSysAllocator::Alloc. +
HEAP_PROFILE_MMAP_ONLYdefault: false + Only profile mmap, mremap, and sbrk + calls; do not profile + malloc, calloc, realloc, + or new. +
HEAP_PROFILE_MMAP_LOGdefault: false + Log mmap/munmap calls. +
+ +

Checking for Leaks

+ +

You can use the heap profiler to manually check for leaks, for +instance by reading the profiler output and looking for large +allocations. However, for that task, it's easier to use the automatic heap-checking facility built +into tcmalloc.

+ + +

Analyzing the Output

+ +

If heap-profiling is turned on in a program, the program will +periodically write profiles to the filesystem. The sequence of +profiles will be named:

+
+           <prefix>.0000.heap
+           <prefix>.0001.heap
+           <prefix>.0002.heap
+           ...
+
+

where <prefix> is the filename-prefix supplied +when running the code (e.g. via the HEAPPROFILE +environment variable). Note that if the supplied prefix +does not start with a /, the profile files will be +written to the program's working directory.

+ +

The profile output can be viewed by passing it to the +pprof tool -- the same tool that's used to analyze CPU profiles. + +

Here are some examples. These examples assume the binary is named +gfs_master, and a sequence of heap profile files can be +found in files named:

+
+  /tmp/profile.0001.heap
+  /tmp/profile.0002.heap
+  ...
+  /tmp/profile.0100.heap
+
+ +

Why is a process so big

+ +
+    % pprof --gv gfs_master /tmp/profile.0100.heap
+
+ +

This command will pop-up a gv window that displays +the profile information as a directed graph. Here is a portion +of the resulting output:

+ +

+ +

+ +A few explanations: +
    +
  • GFS_MasterChunk::AddServer accounts for 255.6 MB + of the live memory, which is 25% of the total live memory. +
  • GFS_MasterChunkTable::UpdateState is directly + accountable for 176.2 MB of the live memory (i.e., it directly + allocated 176.2 MB that has not been freed yet). Furthermore, + it and its callees are responsible for 729.9 MB. The + labels on the outgoing edges give a good indication of the + amount allocated by each callee. +
+ +

Comparing Profiles

+ +

You often want to skip allocations during the initialization phase +of a program so you can find gradual memory leaks. One simple way to +do this is to compare two profiles -- both collected after the program +has been running for a while. Specify the name of the first profile +using the --base option. For example:

+
+   % pprof --base=/tmp/profile.0004.heap gfs_master /tmp/profile.0100.heap
+
+ +

The memory-usage in /tmp/profile.0004.heap will be +subtracted from the memory-usage in +/tmp/profile.0100.heap and the result will be +displayed.

+ +

Text display

+ +
+% pprof --text gfs_master /tmp/profile.0100.heap
+   255.6  24.7%  24.7%    255.6  24.7% GFS_MasterChunk::AddServer
+   184.6  17.8%  42.5%    298.8  28.8% GFS_MasterChunkTable::Create
+   176.2  17.0%  59.5%    729.9  70.5% GFS_MasterChunkTable::UpdateState
+   169.8  16.4%  75.9%    169.8  16.4% PendingClone::PendingClone
+    76.3   7.4%  83.3%     76.3   7.4% __default_alloc_template::_S_chunk_alloc
+    49.5   4.8%  88.0%     49.5   4.8% hashtable::resize
+   ...
+
+ +

+

    +
  • The first column contains the direct memory use in MB. +
  • The fourth column contains memory use by the procedure + and all of its callees. +
  • The second and fifth columns are just percentage + representations of the numbers in the first and fourth columns. +
  • The third column is a cumulative sum of the second column + (i.e., the kth entry in the third column is the + sum of the first k entries in the second column.) +
+ +

Ignoring or focusing on specific regions

+ +

The following command will give a graphical display of a subset of +the call-graph. Only paths in the call-graph that match the regular +expression DataBuffer are included:

+
+% pprof --gv --focus=DataBuffer gfs_master /tmp/profile.0100.heap
+
+ +

Similarly, the following command will omit all paths subset of the +call-graph. All paths in the call-graph that match the regular +expression DataBuffer are discarded:

+
+% pprof --gv --ignore=DataBuffer gfs_master /tmp/profile.0100.heap
+
+ +

Total allocations + object-level information

+ +

All of the previous examples have displayed the amount of in-use +space. I.e., the number of bytes that have been allocated but not +freed. You can also get other types of information by supplying a +flag to pprof:

+ +
+ + + + + + + + + + + + + + + + + + + + + +
--inuse_space + Display the number of in-use megabytes (i.e. space that has + been allocated but not freed). This is the default. +
--inuse_objects + Display the number of in-use objects (i.e. number of + objects that have been allocated but not freed). +
--alloc_space + Display the number of allocated megabytes. This includes + the space that has since been de-allocated. Use this + if you want to find the main allocation sites in the + program. +
--alloc_objects + Display the number of allocated objects. This includes + the objects that have since been de-allocated. Use this + if you want to find the main allocation sites in the + program. +
+
+ + +

Interactive mode

+ +

By default -- if you don't specify any flags to the contrary -- +pprof runs in interactive mode. At the (pprof) prompt, +you can run many of the commands described above. You can type +help for a list of what commands are available in +interactive mode.

+ + +

Caveats

+ +
    +
  • Heap profiling requires the use of libtcmalloc. This + requirement may be removed in a future version of the heap + profiler, and the heap profiler separated out into its own + library. + +
  • If the program linked in a library that was not compiled + with enough symbolic information, all samples associated + with the library may be charged to the last symbol found + in the program before the libary. This will artificially + inflate the count for that symbol. + +
  • If you run the program on one machine, and profile it on + another, and the shared libraries are different on the two + machines, the profiling output may be confusing: samples that + fall within the shared libaries may be assigned to arbitrary + procedures. + +
  • Several libraries, such as some STL implementations, do their + own memory management. This may cause strange profiling + results. We have code in libtcmalloc to cause STL to use + tcmalloc for memory management (which in our tests is better + than STL's internal management), though it only works for some + STL implementations. + +
  • If your program forks, the children will also be profiled + (since they inherit the same HEAPPROFILE setting). Each + process is profiled separately; to distinguish the child + profiles from the parent profile and from each other, all + children will have their process-id attached to the HEAPPROFILE + name. + +
  • Due to a hack we make to work around a possible gcc bug, your + profiles may end up named strangely if the first character of + your HEAPPROFILE variable has ascii value greater than 127. + This should be exceedingly rare, but if you need to use such a + name, just set prepend ./ to your filename: + HEAPPROFILE=./Ägypten. +
+ +
+
Sanjay Ghemawat + +
+ + diff --git a/src/thirdparty/gperftools-2.0/doc/index.html b/src/thirdparty/gperftools-2.0/doc/index.html new file mode 100644 index 000000000..7b93ed396 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/index.html @@ -0,0 +1,20 @@ + + + +Gperftools + + + + + +
+Last modified: Thu Feb 2 14:40:47 PST 2012 + + + + diff --git a/src/thirdparty/gperftools-2.0/doc/overview.dot b/src/thirdparty/gperftools-2.0/doc/overview.dot new file mode 100644 index 000000000..9966f56cf --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/overview.dot @@ -0,0 +1,15 @@ +digraph Overview { +node [shape = box] + +{rank=same +T1 [label="Thread Cache"] +Tsep [label="...", shape=plaintext] +Tn [label="Thread Cache"] +T1 -> Tsep -> Tn [style=invis] +} + +C [label="Central\nHeap"] +T1 -> C [dir=both] +Tn -> C [dir=both] + +} diff --git a/src/thirdparty/gperftools-2.0/doc/overview.gif b/src/thirdparty/gperftools-2.0/doc/overview.gif new file mode 100644 index 0000000000000000000000000000000000000000..43828dadec8b7ceb5e85e863fb35d78f172d5f46 GIT binary patch literal 6472 zcmd5>4Rll09l!78C4Gr$_nM}X#%kZ|hfS2Z^usNYdU#2SGyzKp;-EW9I*M2;T3fJ+ zy1s-o3PT8OaJ94}9Sy~45hw2BC?jb_DucG`LEMK@&-k0yts^@GI zdwP0KZtnem{O<4nb-U1Vhu%>8IQ9y76#$;+0s8yJ;lqb_@7}#?)vAe!iPqNE`Sa)J z<>d_x4YjniY~Q}UzrP=DgFnn?1O@;O=AsWs1|WE9*z)2b{e=^+^A63ny855r|I7Uk zUif|E+|l*xCLY^A_2d*E^fy+`Rc{~eYkK>^+jfubTW=kxdHGK-J^F`>8xNm3@Yv#8 zc8&h+;KmaVy*}~DZ=bAw`L9#|e&Z*jQ`5Auy5{1Ml@Fi3yql(r2mbZJOFx)8ZH_JW z!$mQM8|q)1v-Z&Am-0BAXc~Xudm|gC|8cvL_IBL;#3QG6weUq6_W!z%zgmjFC3^X9 z4C!x)!zupqy{D|{MuCUFQM>TBRJ&-ijbp28zDvd;%;TU zK#C8HyBz}oXor^E(Ej5(k^;>cq+r%159c)MGDUKu6h=!Av!bCM*(Ze7p{Jn%)%LA& zV^=dh>-GcLGHO^WO?N6NJfK{#RC%kBVd?XgA)7u4`2BFIS}110FWpqG;lcPasisU0}(An?V~F?g3L z%(0sH(S%4YCjm7G?jvx&AWSOlBs#v1Fy9EP6=M=|QeNxPnL9~|L8<~kYE@An%jL6s z=zvcF(g90?HVjzCI11)@z&X4fGh5=$!HH5rO39lPIsg>BPe+3r32i`bv}%h0#FPRu z5oq^g3;-qoLUb`?G8G49P%r}mRnJMWK2`*Q(k|2aszr-A%nh8~v^&QohX}F)d4=4L z=wzuUv)ww#6%TDB?bdow&TvWqXauHKW$njq3<49BN)5`59_X+iic-33){@x-^fqiu zkdhPjE>j&zyQL1qq9wEsU-pcf0rj-E4CxIWHx#3S5v?{Tp3-|=)O~O_RY-=aq>G&d zM?tIr1taHJ7Rd*K%KTcARSWpiW?l1$6q#$>x4~mGav0nPjRc^w7l0rOKRSSxf?z}K zcUnEiM3CklV51eC7%oTHv2Y))qK2g@H4ZKoAosvso8%wJg1cgf0%|VxHBf`YGaw7FKa2&q|_?1HP>3(>uIY>!(!j4$Q9M5#< z-^vvvh<;cl@>0*hb2|HNlFp@aLQppsGS>jy0J5FK%y2WjIp;VG7fq1D@nAPKqQ^XY zs>vfjXCn`&Si45jCaQ8_&)Os~M>X5Yk5v|j?1;ZH$THdBg!JszticiotumEBEF(!$ z-Mg7acssif{^h6B={5PPIu>*mjOzc%ZZK&iFy1v1yxmly$z|;-UtHMzE%+J=cj)E4BrrYBCs8A=fUjdU3^DE^k{<*#o0b=864zu|uKf8#Lh zHzG}Y7J)j6?oZFX|AZ#CsEjTi8lst4!xOS~`;$KAmT0PYSX*JNy?XkM&%fizQ}(%| zt;OXu^CKty^x9Z$g$wDjCQ~%IezB=n-(>SHOI#3(4e@SgzG};!G_j#L*8a>_S#93t z#Qpk>$pV;E0R^Pkkl?@pm#bUovZC`!ev-jMGMPO|e7nt?5d3njhC^9DGG##f3baNZ zMDNd+K2N_1A93`AW{f;$tb7Hvzgs6W-!q6CYCX)j#71(gA5LK~5n zqO!g^F821PQ?Ot3sw=+olqUtEt{4pbu9ntRjLu2ox4JA5Y6MX^LM;lKCI*A}TJeMvD1-!KZ4 zlhHgT-ISa$;J3x`q@n8LqZ?17gjcv|y0S=96;VCH5UPaSAl$^#Yh%oU)Kk7#z`PqY9DO7=`BxbYkk=(6hHW3}lYaNa!s*t= zk<^p9;wX{#JDZb^At@R}ULHkTOL}*6iqhPL;h`8d@C|3WQ>R-D%8^8{?Z+RE>5}Xzi(kHwOjbLKXUn$oSA=LNP)D5JEtXJYLXvAcD zyY6Zj7(>LnAP*f&Wz}XoN(t7%-f5flWA|bd7_)ENGU&f6gID5}LzI%0)^j@?-uwG> zR=n6kq=g5Ql(c&yD}c~0C#)ZlgldIL%}{0>2SGS-HG$?qjPMY!Ii3}bbfaQ z^`hgNF)nkkqqLnUX3lW1_L zLNfzgJIW^a9YS0RjQa1`df^_?`4pb>xkr~q%gB^ke?B?7An&hUXnwh`JNLL7J-MH_ z(R2knn!Ph~_24-5AbF~$Vdb^aBoa$UONEHyZ%z++90RXCw`LZGe5C{=K$nJ|YJwI; zx|x#ib+1QR^NRczR(Nxpv04@+iB5&Q;w(@obPToHAtT_^R{G4jVW-Do_C{YlID+Cb z70_e#6^U7J2N^@77b*BU0pAhO>x88tweD4hsZ>r}=aTc7n(RYSQb%S5y-?_>nR7}_ zJ^6iNGY((Qbv6LW4qw}V&IAX{n$*e|4v_ku0=ID?*(d}EN0D41QD)Ky{f;kDQ6yvB zg_-hFTIZcB@hTl~%%yM(hH__iYI$7}s~Kg)05;3z!bWwJIw* O0 -> O1 -> sep1 +heap:f1 -> O2 -> O3 -> sep2 +heap:f2 -> O4 -> O5 -> sep3 +heap:f255 -> O6 -> O7 -> sep4 +heap:frest -> O8 -> O9 -> sep5 + +} diff --git a/src/thirdparty/gperftools-2.0/doc/pageheap.gif b/src/thirdparty/gperftools-2.0/doc/pageheap.gif new file mode 100644 index 0000000000000000000000000000000000000000..66329812ae1d4c3a0d3e930f0d04c26891ec4b48 GIT binary patch literal 15486 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 literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/pprof-test-big.gif b/src/thirdparty/gperftools-2.0/doc/pprof-test-big.gif new file mode 100644 index 0000000000000000000000000000000000000000..67a1240fc10321edacdf8313197120cdddbd07ec GIT binary patch literal 111566 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

c0)to@d<|m zOhOig=Tm0PmZkXJb$(AKa1-7I7-|I!?X)L>9^EK-t)KJSW&OXl3rqfT0WfFXMa(v4 z9AAsX-*HyWbf3`Sy?C>?;nR@PsKj?qab{a9YN;Nw*^G6td(itL!yjZMRt+hxqxOen z!6gpg+{Q5@<9e>UTy=c*3XlK{f4Ty)m$|yID42MB2qv8aM}|%zq1=ot+Zeim&fD>W zAQMZMHrq@)B2j>}km4EY4>Hw<9p(J5c61geWTewcU(v%Y7nRagc&;Dj@kexgG=*9bedhDHqV3)eX#Uxsb|-Ss`@L9h$Ig`9I_^>I%k4zt=h*6iyL!yLdjmecld zwO!{1r&2z(H;R`c!vfremm+tn;(0h<^Kbzx6QZZL%MfB|W^Og2gXn23gN z-zt~T!F<6O9=BXXKKUldLeg&>tOP!ncjAE*H345>XG`FWb3#^6WY}j(2MqIFJERI)BL9$`9ya3=tUM+_NMV>+(HTa_hFOE zut{e+%xtYHqDRK6Q}8?stlL^M^prXU4j8tr*eFl}-$E&RnNt2MA*G;GFyjZ<3KgIf zNH?z9gt>eCk+3eY%3wLm1=AS z*TAtBu&pB4ijF%B*b1YDb>r#Xu$6Ka7hzxuM1fIb+#k^Ald;LQwwhI>6kjH_exB@#o>&9C*c%KW{ShMVz#a#!kf+;FF$-iNx&} z;mFFKyidZg1Q5g{bxZVc1}^@kIgc^eQm?R2hdpG|cRP+a)0udSp^-}BXJO4GPW{{^ z;x`{8ux5re4%Ppm_$eZ5xRu!T&m*$xe3jv3eO*gqV z!J2-;QXpH&(`T8?3vOq|&Oy8;DJVevoked}-AeyALAWTazl)L&yG!&6N_Z&`+iXYw zGc?1*{QleEsSs5>*^w7Um;_GcaS9D>wdu)ayHyJN`R}bc5XGNK1q>otc-Xm!whO`N zL>clE^nbgBH4q!uds+mgS7_pTMO>^OzgM5%r!NlB=l2&kG*|Tp-GqO8>kNP|OgZle z+fH;23j#z+m(`0{ETVBwY(;<=P9}8pN?7Da?Ep=;!K-2gJo~mo9X-<4$M*DuxQDnj zt588&9%A7lQYBX)NLPHM@)(QD^+MI1+f>!&YOqFWXY&A5W;OxJxQ-!^gQzw+$3YZW zwc8KdsI6JmOj85mU4kfbFHZ4E5Na5B36FmtxEo=x>q1-f&5eR@II^#+A%qBSf|ZG)6ZJ&%^)3 zKk=;Xp`!tU-%MM8LvANv()ILy>Q@N)r*jU#s9^8somUo>gW6I6u}aKO~i)!579G&{mkx{lsuiy)%bU7X-E54G!k zHDnK_uMa-eAsI8tvs$*oat>QvXfroB=@jLl!YgG(k~rd{(iE+w36jnAkCKfIVYW>K ziDM6PyM)5TE|SXI>}pz+wpue0eqvh`xwA)&scV7r8!#TF*&XViwA-ukkCeGcY_BkH zy$!KSIUxIwZtrINb9F{Ktp;np=H(%2KHyn2a!!>OO+J*0ygKf2lkm z@4qAb^2?&T{f3|OoRfIp4-Nb2Jt{MKY9%KzE4(js#AOGV=4&!ALz>TYi#Gkqx=scHDLMvo>*){Mn+ykQzls6gp-2I8s2O^3ZD|4ck;d@?4d~OlU z`<8Pjfn5j%`v1(i#j&Fo#Cz{bd~Ok;|CVznhS|LT9nYN@W%C=sg9E>J5|mAQ44o$< z^XM!8yL0bNNauHnZ0WbWcVbl4>F;*#B&e#6?{sbfV~eV$1lL5=UYLa2x4id`gy&YW z#NTr6#K6H}0%KDwobM}((98tJ4B23^0xXY|X!Yx|lgu{UPjk}uCo=FC-EsM{84D47 z?`2S&=-?auVT1k;)0m2wINaWyUq=_vcc9c?oXUf6E&av6$M^P_hr@m2-|G#d-%6Lf zv7?_xY;ppMn!2#gD-HiERJ^NtIu9}A-pvo|D1M&nH^)5uR3=kv)Qtg&O&`#n&|}XJNDXo z+f(+k_yrr9GC3+2r^G>=e(9^p752>a)l5mvxi zC^K5t-Z5vp0nO%6HHI``xObP{O2$3{){*lqm?C!#^9wun0$0H?>~|+N_uo!y*0Lz1aiVam$XbstRpdqH|EUwn7n}aMoofEe8U_QNh7q{65nHSzZeLnXQ66>%h zg}In5qa_OR(aNNQ2GpD;~<4t+5{22e=0%619gQgR zPrlymJ=!S&e@K;Ai0V@*C*BGYE82_RXb)6cs*&|3dGpTX=_bQ%8_;QkY<%R`sOS!) zy0LQ7d?eZE(%zYb=-Hiv!LPV~^AL6kz=Uih$&x_k_Z{Ku@4G>5PHSH@{&OBuwbm%F?WUTl1OB^l1h>IYLCN7tR!)78Cl*j$ z3wclp0wy-&yVND#bt4f?QLZAgXH`1om+oP?y95H-sB?lK$n!o3l{JNGc$8OiTXQVtGOPJRlYc54a9re+B ziyfS7M$jNI6g}VwiYd%wfqqDy91`)AQDyP(Id*^XC0;RIb(kd;k+}i^Y@6eedl1aQ z>(It)LzHG}2CIUyDaD5GK>@r40cKyt0E77^7U=On04N~>rP|^fS={$uMdJRDg<_vI zUT_SRURRA~%<{A+unP)m6l;Yw?Ma@%$6GUuPj#e#Dr##8>Ec?K6%9i4@z(_dEHj+pzrt??yiF;uf60CFSb_wek zm?pzwiN(`xoeDC4Dc7EiUcj5HLGS@WR26?{SKwX!5Z%s`Ml;n^xhHF7=# zO*Mp=lDH8+0AAwzv!Xx#?Ub^Lw{K!x4LDMeEPva)(lX(}d ztuiHnXei|UR+*fiMNV!l4hS{33->`nBt697RRBG*WsK~?CnXlR*NUkHT;NKuM=2m* zf);4>d@@`Bop18O5-HvLm`=|H^q-`u&yqfr;TJ#q z5?0l};(GL)Dr=BJMxp*TIn}L`)9h$9XZmCwRV^^s4+sHGx6lWY8S1!HvK`t{<6lCQ zBr#Z$j=C`cy-JgPX79F{_`Z>mCOcBzxfmBLQ@K+AcvbAyH$cF_B%(HaB)F7*GCM}` zJEsPJOrmv>hy_NK=`)!O$^jescplP<$Cy!oV`A&D<>>V~F5h|!%!nJY$NT(2$_ll( zSxYI9xf53aGhhiPbGvp3mrCXj%3kju2~TjydJQ)ZVw+w7Ui7hanw}x7cXJ-CJcL57oy20f6~1 zqbY~kV#wy^f<(%oT5VP0xYRiGCOK|ptr`>;EI4`w)O31^7WvViJ5`b!Y`c0uHYFnX3^&2rxDg*Tbv&2}`Bj)?hIxg)?L-ss~j zC<;sit79d}!I+Kbrm_G-hab@e=m;utS5bCoN5Oj!bpu?gBLa)ch zQ^m%gMSc>W%UhvAL=)bRclS_qi;Td#m3l-V!fjZiQYCG@0?I^?7B zRe*49v005UXZ2Y~GHxIa-VaFxk}F_c3@RPO%a=9K$Pr?anRdf~hDQIOnj1I-5j`&m zM*Z0!v7h1MvklLdA2E@?xLS zx7l_K-^(;g(xyx*T9QxF%;fhfrLRJ4{~J+l-NIP%B@`Ud>(@+Roh!B}SACkfPQ4cH z`;e;s7+5(-Xjn2evhJHRniEY&E9g1xSa25gi6Wxz4O$%&+(g;&e^EQlbpE)Z(TcJQ zIEDKVq^RR}kx5z~jSuOdmj!Zn$H>3Iur27qU~w>EAj%2u8DwT29h$E)hY7wV#KKfh zlrK$oAKUmbYR!a8rgL)nj2O>!f1spPhT%dy{hC8U$QuwAq9Ss1uoWrN_0DwJ zq}qYrsYSGXI0y8Ds%8G-HSoOxGXXIO^9W`47NW=f6C!z;Bo05 z#yy=E-dZT-u(jFefvK5;va%PuW=88AVU%Ad8`rf^iKKqsqDHF(y@YvA*5VvMl@`8d zh9MY(HUyjV`_v^S1kvDtE5gBi?9dh1Ah^jQv-Pl3cK;vdhQQTi977jJK@H>`5V&Kk zY)lAV`}$8H3sw|!2}UhRtK}eWvRwOQ?(Fz79J%&-_Gk5s3CgP&)h}WiJ4suzbs{3b zoPcXL$S4>vIH^||G_vkL#<*Hr@?nPf>4V`FMkbl91r$AjSC1}qb1Vu>u^lp$)Ylwb zXysONva8@Iws9|zO@~}!(Y+5j4_^&pi$z1bnUKlMixOug22JM6F6`43@cAr+kU8n2 z?O;i6_%k^Aka#T=ACIWEg0kDP&K$6pm!cl`4rJ55)D;V zGShyI*54)_f9c7<+_B2YIqMKKA$9^KlImKv$P5x7@x`mj@+UCbMYnX{g_{fyMm7QN}KlWP$lLm5egOWun;kend|R05=z~ zGK}Sr((L3HRK=8nk^F+{V_g4uV&NpRtS>OsuNAJrTAZr~2L3*3h0NIEEw)=HBu+n~ zk!AVl(FHkw3xdy&twu2v@l<;bLi?Y0UTX$qk%`K6V0mUH&O>pC?l#B^R-ufT#QUS? zLoQ$eUhr56_QC7^&M05qs=stYA zzlkPlo`N^uwkpf9kV*~qW6!fk2SE)iU5Cn}aQ(&Ax|2@CFxeAA19J#BL3AnX&;=h0 z(`lqKW^ke}Hz_M9CejxBksPX!Czr@btGLA3T-gO>r7Ts(G#=aqkgElVOV*$cAotlO z(+`VhOk%w7cII!;^Vs68r^L90eD#vC`7YZT>^=47S5ET2@1n z6#&7V=)%a%xJE!Q!3|{5DE$3aAGm)BlQTmQxFVaYJQWF)g_Q)l=NwMwG)jIXc9OnGdi*&Omfg)V_VrW?UeX0c%?1x*^#&IsoNX zo$cTNuL-C-AG;p!W0NHO9&>ka*O6t66gm=;!d-lXQD-qHg_#w|?Jkr&i}vF7R&9oD zxosa4M;oh|GAAMKH@VY1NKP<_(H!ioMk+2dF+kK?XYRulerPGk3sd1*@3LonF2h!$ zl*!!mPDQ4zSE@q|2g?luw}0=&?Zl4-M(8v$Aw%g=zw2PW7o(rxG*ENZXPtOD~tsCYv4>7FT2FPQ|^^V$&WLrGob>!`I$yby7jtcVA1Me~SJ~i%rPtl8#XpJAp7Or5KkWAfH$Z z|3sjoX2d_u2$)+WnUpC+Lvfej@cgu-bHi4M5vK8Ip!#qHhwBRj-+v&MOT8xkskMye z!x|ec+ExtwA`<~LbxTIE$Kjk`R;ugc*m|Zt%gsa|BQ!QzTCRl%RktUZhHxnvY0L%o zRv}titJs&%xb%3^wG?PeyxCdfk3o4VAWuRmrfLrnRmv;gR}d8Oi>>uHvR)SAkdK&l zF|bEjV~0RN$LZz|l+GS;6nj43mq*bhs_#EfP1$^T>lq{?>#4*d^ZnZdDCn|Xl~;`5 zT2O9S__i;P0mnmi7ZclHFN+km2DBCZzLjoZTgW(qJWxTdH>4GO#AL$pe`GPf)~V15 zEgQ{hWayo-m;e@k865QZuAE>=(%y?(x=cokOH=0lCYPqjRyvecS5EX7*!)SdU9 zZTYZxv-+Rs1yV9z^tj^^$pTq;;pZv+*{|NK`A@O|%X%6*4T&D0NLn^O-YWeC+Lw(F9K2#Qu?RF|Wd66-1R(@|v+$Myu ziEH2W6VZiGm;~yD#a%?XV6wQ!7$TBIkQrE zoy~D3s^3MrD|%V1?wf9T&YoZ+0e^gI;v2EN;8vfSnSMLYbA>+m|0o}NhQ^b>sgTZ; z*sdIv;bf-}Eox;Uu~=E~>DW`4`6&_{Vw6GxYodoMvIXAssfnj!4iVk**JNZlKTcYz z#CI{4n|`e9jvd!6tJF*DZ;gEm(S2_2ikD+g@q&-NMS@fCakq-f75%oJn%Ez6iY-Zb zYd*Q$CA~BuO-UVb%ZCZMl&Hbp;_@F*3MDZw9k9lL!*tSxMKoR8iLd5cljgI z&_WY)d{v(;8Q(Jzcs%B(e^zMawarP=zLCtQ`KF{5% z^c>zLb!EDwU`Quz4$7KBj{l6#i#d~OU=}}38!CwTspvoo;?WOLH%c~jxHI=% zl0E5of|eU%etJx0`-eOZgV!X5(UZg(^Px9MNi@;0&5S`scTa8{sKV@<@HwmGmz)Mk ziv7?$#yZi1P}f!z^0Q#g{UFEDKL4`amP+bTu98iN-6B&js~6`!mw+(6L*8GPu7u{BDPa`O(+ zF^4ObW4@?zfp5fY;<4nLn4xZ*)V#`SFEuHP;RiQZlQQhb8e)i6=Pgt9$Ap;2m{Sqa z5{QEAd%14R67_GOV#h0n!j~`0czaIfvqA}}9z?%j7yFy2B2`5j+rEb{rD@euQ}RvR zAG3*}>Lz+(Hu1fr6!EcYc)x^;5Dh=E_Y&+wfVznf zJQ&rYYQN`wK0nO11g65T#*}JL{E7&gUU+@-1DJ0tqQT#MZ?X14aqC*LdPDWb$ZS%* zyWg&1gCd0y(K^6w+^KG!*g)OKx(9santfDi_Yt=Z)z+eI7*wNR9g-R?mt^#0`X>f=AE6#e-R98D^1N>!~P5Qzj%Qj3olL#w52%L+%+CjjOp}fXmEPwPW<~Uo>YLov|>glIJt6 z$VDZH@BHN4?R#ULcGaYM|2ECeqvqs{{>K=9Sz|GGuGdJY2Q*)660?w2Yd6O@8}dkC za#8Nr{9s6O9-R@x9f}DTop|wT%}=tDpJ3Nsl?q|uDd7!_-sRfv15TH>HPSgGQwc*l||%>(|xp?F3YetGH4bIaeoPIOMX zz^aK9>8>Tp!uM6yh=N5G-)QyQ>sDYJSBdb^iddr(apLruZ*5=x{;dbmW1%9O?eY%>dfO(gSu4gj&Rsz(UEAm{ATVObb?>cPk>*KeYVTO`V$34t zVmlXUkW*`nGHd@zPe?z&n0DeDoY$nlvJc%6CDBs!8V>MA^IY1HcL zSe3HsCn~vt+EfcHt>v}~OO8}})NFR>)9_zgkBv7t0{CadW;40Em>YN1(^l7e<^lNn zbhcK!DYo%lDg9SupvEIyR4KW;4EQgH6p#!}_@`5n+bV9?9f<<@P}wv9uiO=D zw>1HU6Q8VI`^e)j{<{5}?q5wgH9>3RoK!^62VHAZ*Ej1O^MgZ;re6j#x=iS$c{IrW z*%Tbg-FECB1wL9|EQW_`W8y4|ZaLcUrNxr(w)rKO!3G3CgUuuXtU1biILMQ+$h#*? z+C#XUj?sEz+zDk3T7;PBKng!vr7^BF9TTCu3-5YV%K#IVrytT%e??KZtT-FB!3JfF z50h`FuM>il48scL(k^tB+@_duarqb}b_C&8dzFx)6lr`+;iA<%cakSI6gTyio~vW5 z^4o|-{$8O3Ia8n{A0Cdf=$I%XBvt?EJ3EwLN2phEgf9*!`SD?KvP4bYm^W4}pRTD!)yUemzpk1<(Hd2 zy0=xAPXMd*X4{Z}%WZizQ`(1&YJH4D7^6U6d`|RmffkPbz3~d-#J-JBQQg{DSquH= z*2o({DQu{WRO;_`2mNJm**D|=mjVi>Ur^me>Nj{DJgcB?;~!x_S`>10ZZ((!AL3xDneAU0b^)akpQF;KijL))ef~m`dSA*(ke(0S?GvN|Ko|N4uo;%$p^+s0%CrBE zVC&+lT4@piY?421?Ym;v5T8+DYkzfK?L?4iG(|P>%Qz{a2HP+Gy;j-HUWHHh#soRy z=>HqdXWy@WwmRSppPl@pwQj-!<)c~dW72GD_IQqU_w2lV@0KJ`0rsTYP5eOJ#3Ty# z7rIOT?99lD0vB1IopRK?1T%N2|MRQRv>E>0Qq~eFLR~;C0~mjU zC~kIE(J8Pb_^94yTevfCme~d39Keq0__>BSe;3k6WvN@AU2P)E4G>0mDYXe1q@RD> zb8zZOe9u{M!uxoBN+?n(wE|&dFwRN>vS3C-%%!NYpl5VVWOm_Z0?zfBpG>s{ojIn; zvT04t_Jwwd$(QtfUMp0X^g85riD~~pqF|5a6!)v7mRSt|ms!8R;Dje-dqpNJ{e9N@ zbb~%tY|?~X5MzNY4eg}k;gJV&e@Fl6(O zv~1mEKDtw~NI~qhsG@msWd4u<NW}$isX-COx$Gtr#mPxAYof}R#7$njN>4kxz{aEPA)^7|xShMVB@pY1 zR9~mL>B)-A(ZrZ&83xQnt7>zL%6a0Yw`EI`8Z!i(Vce|{8(DGYdgbV^*{Yccwq7~| z)ap^5a`|G@6h%xTau(-TzN^Ge9$xc?;(fdRtkG|=!FZ*PgzLfAHN>AKQ)cb(?lWp` z|B`i}kJmVizle&@?{WQE!&Kk-^E1Wg%Tb?p-GWWyk9w>}JOkRvYt*a!n}{B~*!0Uw z*QrMva0~CNzjsN1sxM@ApSgoiaz)Nbjz;l(PfUn+)pE_JM?1yGSH+}F<2;$Kf8JlD zP|up1#ibctf9_l^C*Q`KP_QWQuspsM_ilgFY+Cqy{kB7WyXVM1cn!m2Ur3(AA|pjZ z&ceYv>RQ@9p9OhgnH;hveEc<6WSnUO39}E)4570|fv|=#;dcr1Z!U-JabGX`vU(f!4xSV@(uK|xH|;{Nti{O_ zFz_`s_TC3PWpa16A0PZjVF>#On7(bmN6}dJwR{`nhv58$;)JhJvH6VyzKN=&L?Z58 z8_xflhhN5@*hs{xIP5?)prBSr>piC`qv7(S)Dm4U64@~}U+gnMY_Yjy*^s_UQI;Yz zdW!9%K!j#l^}~*Vu5?10OqO4r|C?N@yohaMm)IXGP(CHeM@z(Rnl(Db8bsHNgfq#8 zK|}|Bmnt=uST38p&M-*(*Y^mcgSVSg0}7YN6DD1@Mkgi|Ku9WUl(2q>1JS8wjcfTn zI=P@#q%6_Lfw@Vu*U(>oQ-fmUIf=72~8|04N|TkF4O?4Q0Q~E{(?CNV>wiY;gGUG&)S@(~AF_^+4w(mYayd@5Ji4)hbx{I`Xuh zYof5nywf)b>9vPZ$nu9($$Po^t-_u;f-$oj5s7toomN`E%ZofZ(4E|;-U%xpntWvc z$UU&pn+%m)(m&^mqPDp`6oSuZ+BYW5>IVp3!F-P&A1Da#zKA4EY~^>lh$= z9;4MZa*}0+-z$=NCH-Swlk$#b0@apU>5K{{8H|vOHA7E>C={S*jN4G8fUllwxI@U)iGxH4 zUlep$1~OPx_aN=JDsop@qh2lwQBuJi55BNw@6sopzUKmy3)c%N+F5f}I1v|K7f~=O z>7XRV=L1@3!VtS~eMVXIM=~=0JK+i7ogv+fbsBa<1e@!iY{_1TQ3sNu;%RyB_^T-zrKgS9-Sk}Km!)_T@)2dtbRLPSwg9p5=+b+ zz^+p00w@OA&P2jfS&OGb8LsIz<*F|a2`OZIZ=!uXB&cldr4I&rS%tG!ylq!@pq%Cx z>MGwC4--HCIz|*OKeB@xirD^d#2^2cCOR|_g}g2V>dZu|aHYvrpC%kaP<5>w`t%9} zzhwE><5Q~K-n;y87yn*Az$2})q}t>$!^I!ADgmRP0{<-|mzaUTWuXSq4Nyg_ag!%^ z6~zektZS^cfRe3I25qQ&qwI&cHC7Q3li?fHhCU}u;jV46Nx0O^Zslf`p)%JZ$*Y|8 z{iw$6jt8zCGNqRARy;lFMszAH2;00OH?Uc7_Ls3qZroTjsk~c-1zA^waagbY;d)!Owj5It2kUcBrDzOP-XB}hSB z9>Z1c2@MkEjg#0ZRs`ndZ}9ils8bf5nP|gf2v!PwUW>9ChE^-r_xTS31G%kN3*x|H zOQb}L4dbI8Wt}^C0P^^}mG`6=*F*YCs#k8G+0=x8{GHOVjSBk|AXMx?J0|5O=N;p> zREXHDX&-N&$85!kQL@l!wO4tM8M(&yM+5Lu(I6R(Qg3qI!n@CsDpnIiNF`{<{?7wg z=rw6F-mKpiO7kdCsXLW2nUXGz@dKEMW?fddtHz{y#K#OdEJt_A&KoX_;0scz;06-D ziUy1(P_ZH~bp(b8Y)dj1#4WMZj)+<3CihPlhlKWwKaLq*M6z36KEAA^40m_kQ>Rc zJtd0&`Q_)o6Mr(nbd?-gW4I^{_#HjpRA4U3GPRrXCE8TuFUKn?10WIc32amS$u^Z4 zvndh(O}?ub4HUO4MdbhHU#K5LN6MDErj9o{f()?bct{+Y0HI@gW^wdL?avjPf<@tiFt==D{NZd>IqW<6zogDHlc zSCr+37m#GS<4EUi8hU3>uKEbttI1Qc4`1pa$>gH3MO}^sn|R{+I+_@D<>vaM#e96; zJ2pg2%9pkj9yPa-^xDz1?imfSFytHnmeB;TG+q$!9HwP%F&oX&h;ut7>j<0M4ox() zA`o06RoirV&T5-ma!mD(IA?{QcK8G{gldmal!hmL`G)pZOA@b_d&hnp8~VhMA~{*` zD9MJB?`LzmX{IhKXpuG=y#BnCLA%ZA%19}L&usT+_DgoXAsDW(=IQI25od-86PuH~xH- zL?g5}d%H{k3036Tg0@Y~BMoK@1PKl`NjU2wE>Gi#;vEcul#Q>A-RpBXC^gFyKfi3i zJon4*QLOg*^LL0a6w_z4Z>w$fw5<-VBLFph6o)?&`&)7 zdy=%Xq`%n~YzU2U+luxXPI`4xMnErF4Jn4oAsGuNHSAl9MtANqX5OxN{<4lDqeR9j zMyp-PPx6elEqjX7f?Y`TMy2?lbXydBQ&PIqHNzINLVjsUl}F<-Cg`@^DW!S98htOT zFzjjYc>;C&tiPA4H(PC(-yoeZW3h%3mm!Gmgm`)g;eY-DZ`)zBr=7&kbWRj(23?YK z5W+Mmk`>bbTXwl-vqWtt>+(#llcjpAu1#k(H%MNm+0|N9;XNCn183X)d5feC{$j*7 zDL!cPN3~B)5p#s@5vlG6PwejpXq^wGp|(6#_w}$4bcDDeU$AZh!7vY{lttdH#=O*> zHlt*0st!&`*;gTXJdi!ojak(n1*M%ftMl-_6uZ^MLR+C2u9)|r-kO3rJ-Z6Ro{vqQ zFfL+bID%qR8o-pk$)+DpovX5evM2?BM&ic!^pv9$t7rIp<$%$B9H?Y1_{Q~ol|Azu zX;JuHAJiXu`lS4It(OkZkWFg+n~Z&zDS6E!vm1S$h~8^*(N*cf)d44lR^wj5=O!KI zHA%3?f-W8U?lHB?G6nmY=C87S-ub4%VKG!bGJcV1eh*`+jP6~oFeZc8!G@;UO~j-S zc?Rlph$fHBx5P!D?s?pG&n#-LknpVM8z2l+Cv+Hw+Tyi+M*l+pY?XA}0di`#a=$<9G zJ6)qeBIm6z?Dd%%^bWVg{^<;}-k4kyp+`|F_CLr4I2DhKnhq1?N=unXRaN4D{>KK9 z+a75^Zaeg??>}tG*wVL=$7>hjZsOAGnd{M>(=cOI3gbspeaO~rrDtq$87zKNMwe43 zd124Qzv?&$-?{#+mB;Pq|5y27pm>yIuQnZaOqFQT=i@~i0*$6XBwQ$YHb@{%)*Lc@ zOWh0!(~3j7)`%Ap0qs{kT~2*N^QVT;(UyAsQkxF{w40ZBy_jnxNfxsq3ucOxy3nTc zY^gI!^k>M&*v==$l*$HG^xnSeu*7;f!(Tjw$R}^3({8;q?+$eJ+X+l6E_;!wq1@4} z`>s!Mv!k-CrW?{|(yT2T4G{QS!xcwMFhn6|s$b$(icbod?CgCW8If*=ns(>88tgsR z`T7kcpmQ7%_V?3F_*1JP$4U8&-EO4xFfU^)I=C;80bI~*FN`r%705!V|=(KlB_fWr1B1fyf$p%SUA%XrR@K}1- z#+q<5rB4IxP|dy&;s=8ZAYYa^PT`d6*~6_4drBQEyS$RaB`0By>>PE>mS@#LT1a*Y z`6QiG?bl1$$e3WV)nZfW5C`le7!Q^ducsT5AF5KJm?z&G^1-DO!69i-Z3E;HU zGzdkO5bi6iJ8EU1#A1X%{48~p18tVmCC{J{4bG+DT?!ahb|V6~O7G2)q!IR$DBR(J zQeW498sV@RB(E9G5Eof6R&0>P1Lmf;p}Ry7xB*Ent1ra<$t+2!!7$2+AIvXv0B=f( ztnK{yBtOEu?)?Ux5mz}sWZP#BbmIZN@U0Ufi*HcEBp(8|W?uy>AzGOgGf29CfcnFN zY8@&^L~cKKW-#b}vv*(f7u54&HLOunQ5QuOkAs7YNEmQw*4q%WHrO3TVrUXsw)5tt z$hjF>u`w{e8w_DCFRq7COwWQY8W9iKdEb8d{kw;d#`TT3ad&!vMC8v8^lr`F`Foq4Kg<|z(>fPq1($Xw~I-%)+OWp)VjZ-4|wGY`qc zxH^u>8{4Kfc~h(^lNYX!eB`Vz-)2}(JC~fgh%FHD=T*0kWIj23t|kwDpS+K6;f*(Z z`p{zRcf!H|Z!(|nX$xj-D)Kmkp$6}9-+>~UE-AY}@3u~mdrb6a`A=5SfevxB7vAMz ze-Hwv(rc9JO|03!vnE*SZaBPe0q^KxJ}jkoGn3Qfa!k_~eTq-r-mp(sw#8uFHY8fy zw#nX|XNy$#>M#ae3g&_d=yqqCj4)pfUEylUJZd=Hj$UcxAgSw^PKRac{Fyn1Vhg?k zEhGv(DwI~#K)<*1V1yo%x~yH1 zpfPmL%5z7WG=Ku>RYZfwl!=ea9kJb5SsQZcq{@I3zdf~Zkku3hHABOm#rNiRx85ShmzJM|xF>Wu zS%#GrW*#M)NArKt7l{0ucuRU8Gv+lrVePFRkwd_L3~w7f2JXwjF%R@k>u%NA>$;_p z*^&{rP%=BOSriDRO(Jzuz)a&lGoQ)8G7r}iv(EX)f?qebIrT??nJKy1am$blSa;=F z`cxOZSVNv$qAr`uy4&K;t0B%expNYG%;+C_2R`R6Ot+mubl&W?T5fc@yqL65-vnd4 zV2d;jgUF;_^Q)3cax~yPa>vVeTPe_>t&xxeiUoIy{M(gX@^7QHwA|hT{lDdxM}9_R zBd^i~P?dnNV$``#+VRTenfm=*;kvxkR`6FrxMY7xufd?R7@7PPD?R6XfQU|W-@G0( zy6hhdaP-?gF@awXS{o|o`dc%+0P!%y%3){eUQd_lFS3mzv&wa!5X%c%pfnW^cmHFt zoj=X+L$_nhU?XOjwq^t?JQTSwtPCw!Y$^<-O>=$U42&_jup#T-$rQ3=A2m#zY8C1 z*n*k~0B&C21%Y`ZDxNYPY_1fSnYPy8fd1B6U_PFDiHl-}j)Fwc1}d|qP3RL11~Cd? z$)Hr^i)Ha-Ez6U#LLl+Y!MqZba11t7?k#LEo10;HeYq)rrWetehB5O4N|DIBLEda! zW1aJCPAqSa%NuUTorR`uD$0$J;lDe5bK7}C0LKl57mwIjDJVXsv!Ru>_(h0#3c`! z?F#EFJ-uB)$znwP)2?1P`a(Cw0*o^<_EF43rn#)|v8Lc8Ej?^=C0g1d(a47(`@`;PKnKYE@QN-K2Qt;=JBZquAW`HohicDd&@s&Krmq2 zabNFL<0d`H70a<*4;)K38b)TD_DxybGxcaodY3FXV!HqOeMF!gMu>Y+FHjw+-u)*qTL>S?u_xIpr%d0`%EX=$r$)9=7;i+)eAwXze zXtf`2N%!u@Afgel>~c-@&AJ=St}c%=@Sa|(=jD(&QnnAUX zHRi{ARxV4mnNwiE>T<2pO~sOxRMUZqyhOJDSB)WVOmeh#(|ia1Gs-8=f5p7Uz1VX9 z)TW*ceVf5(XlTxfzyWkyafz-?81%ik#|!`nNMX9^#;p{*gBM_UwPMmu&gM#4-E?phoqcVNSehoHC!P)!>@{m%A!x|aJ5ZU)% zk9kz)D$Mr18C+F=b=gg(`Maf33^vUO?W!*i>c`lQt@ZCr-)TDuM{Ez24!(?7T_-8) z-&1+MCA~R#zD0HdG&<0e5zW~UF7R3oGel&CM{j0hbqW#Aifn{*lJ-lH@?xWxD>;F( z(?Tp>X_dPManvHg1qwvk=!4d;!gQGZu9mszq>mnZ-uj*zB!&>oM(}K?epkJo{v1Kw z4Q^~UrNLWP55HtH5p1PxS^Mgkz2?Agl=9AT?OW|HZbq~L>4ff<-s~EEh{EI)is+Y} z291z^;^_>TR9`7Zc~B3#)YlkhmiiwGo?5-xc6^G<3oaTNMvOBTb59HysJX<{PzlQo z_KnFE$mouwG}VEX*+7cD!DS?z6`VS|7T;r1B8Bc#C5Zy z+VHQizF`%%XjG;Eb6g=j&$SFG%zU@l$KTesOW)=WBmCitlpM?^GuGe^Pi31N;exz{gfM!Id!pe$_)b*et}FWEg?# z%E+(>9!a2>MF8iTnZ*;r)jDeVRT=a})?)zmDP)T>t26BItI91_bDPy;aWjXhKD$bv+1M3f zi5Qe9BWt=$M94YDHT@R9juOf(Bb{ZNbxmD}SohCBxRVglQx=q^+q{r9(-9vw^E5$B z7v-x3o1)@lVh|Kse$7p$D_T6GvKv64+3wfVk7nyIZoN5w=f-X+w~MU8z}gcn8$rXO zoHqLq2W_?*7ECi;x!Hy}XO&(|kjk)EJM*^FD3;0+3kIUxQcdDK`stJfyKP%%cxciD z!i@cf`8_2wPq|}KzBgFP++?(6IQ@goAJIXUl$CamulF~TpiK`vVwjb1cDzxvE$W-U zg4F`9YO3&=8YwSbKf+(?C^D3_rAtzm!2pR70?SEP;A~h-wycVmj-5{$c4pw#z1Vo= zW*f9+6QujLzG>aR>MPe%!f(>7NAkk1K~|_&O4(dPGf+i|m)zxAw=@DOgHv5UbKz3< z-U{d){@;{;zeN$^eRmj#v`*FMBa6ny9G13jH5APZB1`eHY5msV0kaJrueD*b*J}b6 z9U(t39NZGx5`gqaeYKQds+<&f{Mj%pir#PqvJX7HU@0>lsTw`sJfGOje5)PdN<5?i z!`^9ZSR4^OYS={v36|X3=um7*jd{0B?LRo7Zo>v$j+2~zOy#k*g);Q|IvdXWY(Xv@7PtB4&|4XM0l0_5ku8Lpir2i>kNnnbkQ zR@UB;ZyAMo@rTq^LIkG8i+~^*w1RK>pF;5r-MVu+V zXDM<3E%2)#dvo`=ZrSB89yAK9n`^aHn)TZec0MT ziuLjAL2p?CUQ{Nf$az`495>oan(Jce}M-Or{ znnD(5=9gv|CFgo{F5x#_p01|?o@tI-cC%r&%lv_^X0LmOJ7VzWOZ(E#jt7P4A(~{d z*W;^YL37WLCwg1)z?gmR-(8Oxa440SlxC)VyNQbTUY_@B1KzZy~`%;wePAQO^E zil7y4A~1_8%qKpBK=w!boZ+l)Ya4<^xaFJj?CT@v5h;e~ZVR92IxeOw~_?@cXpr zV6@ME%o7QNM9zjwKc&IXvBnH4R}vvUeyX;cTprZHnAsN$`%=VB*LCkS5!G!C`)+om zrv`A-<>}>nUL_C+qJk`761QbD!asEoi_pFx39}O+TW=3E{em9MJWoX^2Vw`GvZ`g) zXwL&(b!0&d#q2!{*uLRAZFr@+;T1uhL;@?6-kYt9zRp@9WcpKGCx=p^Yi+0vUs3$J z#FTmKl~d=#XERHVbE;w4-#S6)nxFaqoubh%wb~(MXo6L&!3qFlA{tfH!kO$rkj4ck zO7@!<9+1*_YN{}7Dfh4l%j_MIPt1!qOEh}YV;X?13$CF(loy`Vwr#1n5HG8kG!E9>9{#(f`6&7P-ALti;O#fsPyQC*uOUVnO zOVR*=sl1@Z#{x9kNR&nG!^x|_nkyp!VCWG)1btJ)B_G+QRxp}vC|F|ya^ePHR#Hl) zmF4TofC^by4!DM7f@Bea72gFOB`Ca_Pd0)?d+vd*C~-%Om!U2} ze5ju;a=cmtHl&(qUrlsD$%TIB-3?asKgJs{16bp)oR&SkXTR&!o$!-tNN{Ib?ZuJk*Gxx>k@J55~4rJ*Bzb^~%GE z1@2-CC~%_$1%r3JrZUPm>H?yMXgOQp=L7BFh`PXJmHz)rPTSOGvugi1-yx-Bxp|ZeQu>f!V8yicFt%v*Xu$r1zo8|NF1t`L?QTeB6 zioZGcs7()^{UV2{E~_^DdM@;z>OT}Vq1oRS+Q4A)%6 z8O_&w)l~)wMw}@7>#;P)NbZn!CY##q0uA*QP7)}duY`Eig01E2jafy#>UHXh3QNoO zc&sHF<+R%)qWBOu_iJePel>`p6uAjA_cHr%$|>F{2FN5sn&6?yWH;ZEWhclIAI38l z03o2M*|=-8dH64Oy43uz_w&xvqL*##Cixx@a7Sg5#gQjln_r!$z3fS8xL2=qTgb=i z9-AYV)wED66Sjdved+!@KtJY6N*xi$ODpr=&>E~p*6tLmE44>_!t)ebz;`(%gdnfg&x$xrCPlnic#yZ*v$wuF~u$z=oJ^AA?N4$V(`xh9q@5$MO<>@4=?;?w#euqaKP?6zl%2_Tf94!Eu^*sB#96}gB)*VSnhm%iZCqCd- zHUc}m^$1vzFi%d;u^NR^s7<3j1IZFHqW)9SD{OU|0R{egD))Gx#j;>!`0R@+vM_3`&5S|X?xk3_L@r3r`P_G(InqJQi| zBgoISucX8cNWrT;Rnd7~evnN`ZN@AOMQb{4zkk0?9ESYbJejmUOv+)}%Y7r}$ut}< zcfub?aA>^#_oK=T2$)ey;WVp%|E0`hFJnrEP?B*>KTiAh8n(K>PJ6PYbTZ0kmF1_# z^pl90d^0v?Ee+p)??)P8GH5)m8>J15?aSpVvjjtMuFw*brndbDngM&4zK;kOGEEey ze`}u9*rJT+qxnBt4L3{6bhe=Ct^aKh{5?ce73C9k!uH(9jDZf%v1w`_lo;K%Q{%7y zZIC+q1*Daku~5<`x6wUBtfuLz60_RvLjAH>aZGGIOKFQj#&+wVRJm)3b*0idBu=du z$^3|l@(nf-iV|DQ$bonFUTaK2{lq-EgaLD1l1SovMPm>OJbXaGQmr$BCL{u-NldU4 zwTf&!3~DFTJB=CWV)bG>OSCth;g%%+hOEr#WMil$L*4O-Rsq44r~{5TS+jWW&i8{hlbKV?mV2}E?80b-wFPmfJ->bRY^P)=_=AUtM z;=eTdo{I#OhX^445FNS}X(-Lm8q@USh-UCxyt#AvKASZ+k(L@W8ECX<)Wbt}!xTYT zFAtAUqG6X`XTIhDSMkw!XoMuV+4_o&x>snPcqe6@+N1HIi*MU6@j`6cg=+)t_xK#k z%Rt`$FD@O`D7^n4Z9BoPsdl|H?-&tRGojKt`YfVpbKk=kQ;ehabn`WbrbWU6^0Y&5pStVoYQWAB8{m);yUZ?Xi zJg)1+P_$qH2hy9IRn6iAmEQ!<*<)PDV(0>buz*?wn}7 zhD-BzZC}K*;$EHzur#)y+HA9%1&p?Z>!y+R`naScRR0mB3qQ4X^i7JfNWafwJfk(= z`&aq)SP}a%--hN&JFvpr`m#dN4yU1Z>~ugjtHp#^s+ntKWxY>!zTFgwQDqdCQV=Xnxne3vkkMqADjd+w)LFkyd{t#O74CSpXzwadXP&G8}SjT?$K1fzy&#VHZg zmP^v@0jE)FGK8A)rVo)TJ$);h8z^PNp?nUGNF&MnOe$n(BO}OY?>m zky>Zy1DxWCC$_fEs(|T9)k;0HDs}>>o-0o^+cAG@q%d_0@hde!D5@x%^(MO*-~)1` zuI#k{FZM25vD5wDx^dj&J5#1Vp!<+}e5tMz=|@u|X3%*4%r*(=$G^0U2ZRU6)u7ZI z@tOxo>3TyimAbOR%;q8XrtCJWsY2)6f{S>?TcOu=g)#rmgNvaGNK};DnuByP_7K31 zDL%6)2qON1Rt<)w*NPut-F0-PvOsH?LydE_@_?DqvpEBl?#$14xH=Cn-tTp_jE8A5 zWaj;$XS2&H14JIcl_2|K>YWDy{eCw^L-h5}F^Xn{t($RoM)2W<)J9MXl|H0D-=*=4*eU3r4vURU# zgl2fG(v8LZo^bvy6VNbvz;iwHivU{rMmk~4NnxF27!@4aElI5vs3{CkX>q_@>X0^3 zkg{he%5jhBQc$c8+M6$#up%lYC1;lhrC?Z4N@>EY!+Lo<30Gg$J>~G*Iv~EwuNhQw z#8BWyeZ23OBS5vgZfbCpa=Y2~$ ze6wnFT1Owp6ILB5diClB?Td5~2x#v8&V2sTJnH?%z&gMwM{|5G>d-{+{Qa$lLR?fZ zr4hvM)B)ncs(L{|l~h(trdVoD>%B*}Anw2{1qsu=uZRkDZuiNkNyj$k7g|G$xkyQ#+q&p&=SV26mt0=fuXH=tpqt>{glPpz0FexCGd z7n}Iimf6q$f5lyEa2r<@zPpy?m7+MZ?0^)Uu(IWc(w54O3$~LVE89&J)pdnK8QSu& z9j7*Jp$ZB!4Joje73ERaD6Ueh;B@5HPMYuUN&3y3;PtdSJ>xSGQh9t%EzN1L!tQ?U{fdBY3dW3 z2Mr_#5akP(ckb3f^Tr$P6DkLsl1&+!h6O$N-!Kbes<(L|Ff?bzI%I4f|1^t$#F;DW z=7(X-+_tlm4=xLKt1oQKW6C)e zCa`O7V*9-9b2>?(=y9@c)0*-E2Mt-gPjBm0naZJsN-MF$X*KtGeU#8JHt3_wYi*mE}meAKeHls&mC?^h~j3 zx1IT?;G#snewiVUf+<-eIzz0aw%gs#c&JM#t>!Bp#Hhs}!}t(KxyXYDnh$Km&se_# zxd#i6=R=DM_i3nn1}}3|%dNtS!FEtV4!+}2-@J6A-pcCj0yp!u%@O+yH*-wmjwE6L zkG_0SV(i#U6O{R|S~LRLZflRawR@N|40oXW))OD4D}L#F7!r4+GblGV1=?U{Ok}PL zlnR3DO-{s!`vanKqw`$u^bL*%RhFRY7wBZ!?-F4w+|40e)BQa9dS}`^|Y~ z8#`n+LI1$lMC{|6rBfl7+Gn?xFPA6D6(J0BPm0qpNPRF@AuE7PPd$t4nDq~Eef6QS zoinXm)?i(0V1Dz7k5m$gW&$yN!njUU;YUOO`A1r^K=5%@n%%_$$ zy)YA%VG%3Lgf+JIq^T~Utf)iS&@434oyfLOq*oyfnG@-9-5w&ztQ=8KB^A3OPV~9G zdCHK1`NeA=3%QKSDBIE@=~(%4<`~uy{I(-8TpkfRNLqqP=S^%2npknLS|5! zU`lb2a+#}_ji4FVpnEx6FQL`@VeC;{fbQzLVZ31^0RjODWMm7HFwxKjO~!I(q-B{wD#WkFL+hF(Od8rQbTvs#M9<32Vj%-;nxr+5%g~M&hXjqF>I^~V zI=$DiS?qVd$0Ca?>epMVi1P7~FggSsOR*X@XEaEPSrnj7g|X2`#F{acFYL>ClKt6r z)vQ|E3VsN2S)qgO|AB}Ko#j`!kAN~jRSKkT{MwsKPhN}kFIT1_y~R(B9}VBS>@$Om zvUCQlk_G4cF+Zdw`7FHP6P6Y|>!8e#k2F7*e>PP>$a=bV7ixBu!F3fqtTOSk^$CDW zchgKmQ-W99?;xGP0b>8MmNV>SN0MG2EIO5j1+2ZA4%hUCT*%Z?SBES@WZu4(bRGvd zDcScfSDREoN8%;gt>}%NkpMP5+!aXoQ|Sk7CmrNl(~7=}+VD?++1DG1b^qm;E79;)F!Fx$~isY;BuG*AURN)#hTCF8RCj(6JKQ3hb zUml&g|2)&|SL%1&`yP^pB4w!0UuD57%U=1WF8ffBk5eiw`Q$yoMoofq@Ipklv9a%* zVVqWU+zk52Adnp>mI;>^ufAMB_bmgt^OeaPI_}RDxf?!&I7(Kt)xX^ODQ(xEJ{|mf ze7k0z`ksp%jFWw;k#5PyHwk%@{v@C~g+udpyRUH+5Ghnn+N+t!PT@qy2c}%x+FTk* z;i!2Ig`C)6Y@cs!!3KCGy&Yl^)3$RXbr(il+*zcqySf#}#dUc4k*#-@Mb8Mg)I)T9 zFQlEehwG}&rlg&6>L)iAdH2vROfD)v%k?4-FNC%}-T-fpL}@hUd2}gHBZX=BLFKBZ z@Lp1H4YciBa0o%@4s*(!?rcL3RZ+6#8J-&*ny5z@9B+6dq8v*)TtYLecdmw*#8z*2 zN-PmVS*a_#D*Cn~e0l>H?S1W=JH#;ax8pXUou{ISnTBmN>$z3_pr)$vZbdcHRo9)N z{sL1zDdq*l;{&O}65OOG&hT_^)xDufi`S$5}tm~ULz_h-!CO^|ii%=z?iS+>v`mp!Up}~afZB@I z`b~%X+QHJb==`mXwWAGH-IRCnB#L4TK@lrK8mbSYtH_89VtwW67~~pisY=hY0en5P zP}l6Bbh2?%^}%raH7%3KrxaPoWMuRmcKH3LUKwW~xCKpJ!vsBVe)UEogV_8`BRN=`bjJ1(n& zp=P3#h4DQ}kGAH_79k+J3Sxe|<(#Gc@NZt=A_z<;wprPrpINE=(K_l|qBfXzP9tvP zd7^1hMKW4GV~B6pGsgfeYeH!7l4;twG5)nkFtlK2uW^QolMg?c+p*5(lYf9LR)Dr*y8bU8e#RU`LlE| zfkiyKb3yk9WX}?|{7mhGrSq&k6D@wU=M=o@W<4winjq&&os%^d9gc=NBBU#Wlaob) z@ueF0(jj+Gyab71-6pSp0DC0KVb!R}v!BjIads6P@aa8QA={Niqn0XWq*FG1d3@O| zR<5xTIP>9!P&E>J1Eefi>G>=4g*FXaFPfskb~!Tc**6r0o3RHj8{qG+S+xdBNQTRb zjr;bZ(56GYVany-CsOYS&;%quTbD{rlUpgKa811RH!~$UbI_6M@L75h@#Ch1@JroeDc|^=f zBG#k0z^o`Hqf2Kj;y5eo#OlT_+Mu_Q&Xrog_u^?5a^}Q4lUPChiHPDOY4G#)h}tTYup6YB;*n&-Q7+MP zf(u{1`Q!(TjV{k^SmO~l^p@8crwu)f&49!0-Wz*qrXi(3hc+mh;ph5&CpaGDn-b9M(M>m`zcfrTF308x#Tqa}*d0Wl|p(Pf8Zl<`Vk`0W&k zMC1QupWR$PdwU@an6mquyXUp^iN9W>9$tv=;OA1;f3T{PLpN{$i)Im6+2}=R!k~8r zEJyeV#wr~~%@?v*++UiyaB zJ+Gb((gO45=84#AUL7prOYbOZ*1pKcNdvgjjuxx+*F5vhO~N#sMfPVer3y$ePAz$& zom#@(?~sx_G~Zp;oT2(Gu}`4xwJV)-vekcs2+)itwQ$!bbZ{nk>+7XI>CFPJrU;Jz zovvKWmI_-W#iTD#NvD^Dn$s?0&KPu(&_jRJwkw$r@!1u2-6hj278SloE-U3`fQ zBGF!w1-7y7=U^%?cELOo!c6w7SJ2#iCs_pYEJ?!SlM%WnIi} z%YzsGI{W57SD1`@e)8xa_qMM6>aLk1uNxlp9)02XpZ1@<>-)d@)|<-;ADEv1?pp(G zU;o+fp7`7HuRMF; zV?R9o^H<(7tXkXXz5T8)>_2q;$uqzB?O%=WyJr1Ocig?}fv2J$Quieo4 Q@q6wc82N^=NMPxCx_;{X5v literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/pprof-test.gif b/src/thirdparty/gperftools-2.0/doc/pprof-test.gif new file mode 100644 index 0000000000000000000000000000000000000000..9eeab8ad2305f48acdd8a1c94e52f47240a3237c GIT binary patch literal 56995 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 AzW@LL literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/pprof-vsnprintf-big.gif b/src/thirdparty/gperftools-2.0/doc/pprof-vsnprintf-big.gif new file mode 100644 index 0000000000000000000000000000000000000000..2ab292abac5594335f9931dacbe020adedf8de30 GIT binary patch literal 100721 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%0A+pPT|Fj zKvA`FOBI(-S91)1X!Wlh3?^WC=e|C84botYy2>T*@Z!g;L2ObIVL{@|zR>@Z#l7EU zil-ixp_IxS%GipxnCURmI@%BUj;R=xdj`c|)dL2I9c^aRSv_U$D@4^v3+S`eZOo-W zq3iRzND37z4>@FSz@km-$NMEy0C05DL0an=9!_0qH#rCVauuaeLRfBZ)RCkkpBx$> zS)-6ST}$AGMJfFSp%d)C0NTddA3loDRiYu8^fTLTJ59A?t1bVTpY;L$12CB>-E9m-@x?JQ;e8wJC^JTWjuG@l239qGkEw*|5gsDf4i zO0m1m)6h!rq{0-iqksWhtVe}_ISoYWXa|Us|7s5g?CAyg#QG`l7#TV1@GS8EZCaJA zjS>pOnH4>~K~6<8bQUR_N!Uf77p6qs^I>$l%O))##)N)?#*`_{?L$m{*KKm@?u2ec z;&){YDitvZP5G3*MuD@SHJ;`X5l<_lDsUY#cDn zxTi2|^sd1GozF0MKBsEAJ%W7By|h}BN}*Y-{st9XnQq`J;&}9~96Ay{^PJIU#Udqe z3E%gzPC2PfSpGlFkds56Ed}9dbls2K=CQDCZ-z#4SK zkqRshalu-;TO`y!p}bR%;lB0jMZVI@Y1#adt~q%fy0>hma>O4A26?s3=an253ZE{Z z&)+i_D45>qf0&vosH&MyT`pU`)#+P7j4=ubkrvQWydLfS#Apq6GXd{R1AfomfJcnc z2NwG6T0HfO<-Sj<>-&-LAYTDW6KrYcQTUCq_5|<#e6u=wRsP{OiZW7&j^iWolUm1X1RB}Mut*ry z_N#~nh#6bo`;`{$St50eV!d{!VdGwOjN=;=4?6~r*QC4T*&i@VNF|y}VaLQv{6hVs zh(3R3YBAmGtYf{g#%+;S|6@z!Ed=t}?D^yhLZ{80xYBy+EyaN#J$z5Ps!Ma%0Udc@ z3C1!?upzQa3}vPs!&-U6aClvOzvfJ|8XxO6Je$pXIegmY$68jHg$%;jeS+g4^=Es& z7+B8hEF#h@U)L-cF@ftOo!=9i2~fOi&E&CKvL8$R5w99Z@9aNd zWZ80@8oEwWEEE>_aGM;FuNIht(FrbNZ?4~?BGi{LL0@7f`$QbCOZ39!7ytO9(Ya%R zDZkc6&BUgcKA~3@XR{(n+OIwT$T#qQKYRY6c~6gd)X#rBLEQ3R(ocUCKb1Cntj+o6 z_3$r*hV@arm0=wJjokGsG#Z8R_)Dm7>j`L>1bZGq-ry9RMx;dPh(o(weSKpaG zqkZv%=l?CRu)BKQh3~%lVDJ6kzW7D*t(ck>J_4Jj-@BZ@-PLKX! z^AFw&r)n~DOtXsS%`ad2x2wOo@q2-7p^mO&Cw~6Q**D+0{JY=(yCQAUl-${K?_RKE z+1Km7^~m>Ie$>9NyQlZ$t8ZNR=PMum;m^tGlc&!3o3DIzVMWaY4}Sa6A53lCzH9%X lpFIDIQ$r)~Uj6uw|B-Urm%f~L$DQ{qy7z0N%};Q5{U3`G#lHXm literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/pprof-vsnprintf.gif b/src/thirdparty/gperftools-2.0/doc/pprof-vsnprintf.gif new file mode 100644 index 0000000000000000000000000000000000000000..42a85472caee7aee2846e9dd09800588f4e7d041 GIT binary patch literal 31054 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 literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/pprof.1 b/src/thirdparty/gperftools-2.0/doc/pprof.1 new file mode 100644 index 000000000..466228120 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/pprof.1 @@ -0,0 +1,131 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. +.TH PPROF "1" "February 2005" "pprof (part of gperftools)" Google +.SH NAME +pprof \- manual page for pprof (part of gperftools) +.SH SYNOPSIS +.B pprof +[\fIoptions\fR] \fI \fR +.SH DESCRIPTION +.IP +Prints specified cpu- or heap-profile +.SH OPTIONS +.TP +\fB\-\-cum\fR +Sort by cumulative data +.TP +\fB\-\-base=\fR +Subtract from before display +.SS "Reporting Granularity:" +.TP +\fB\-\-addresses\fR +Report at address level +.TP +\fB\-\-lines\fR +Report at source line level +.TP +\fB\-\-functions\fR +Report at function level [default] +.TP +\fB\-\-files\fR +Report at source file level +.SS "Output type:" +.TP +\fB\-\-text\fR +Generate text report [default] +.TP +\fB\-\-gv\fR +Generate Postscript and display +.TP +\fB\-\-list=\fR +Generate source listing of matching routines +.TP +\fB\-\-disasm=\fR +Generate disassembly of matching routines +.TP +\fB\-\-dot\fR +Generate DOT file to stdout +.TP +\fB\-\-ps\fR +Generate Postcript to stdout +.TP +\fB\-\-pdf\fR +Generate PDF to stdout +.TP +\fB\-\-gif\fR +Generate GIF to stdout +.SS "Heap-Profile Options:" +.TP +\fB\-\-inuse_space\fR +Display in-use (mega)bytes [default] +.TP +\fB\-\-inuse_objects\fR +Display in-use objects +.TP +\fB\-\-alloc_space\fR +Display allocated (mega)bytes +.TP +\fB\-\-alloc_objects\fR +Display allocated objects +.TP +\fB\-\-show_bytes\fR +Display space in bytes +.TP +\fB\-\-drop_negative\fR +Ignore negaive differences +.SS "Call-graph Options:" +.TP +\fB\-\-nodecount=\fR +Show at most so many nodes [default=80] +.TP +\fB\-\-nodefraction=\fR +Hide nodes below *total [default=.005] +.TP +\fB\-\-edgefraction=\fR +Hide edges below *total [default=.001] +.TP +\fB\-\-focus=\fR +Focus on nodes matching +.TP +\fB\-\-ignore=\fR +Ignore nodes matching +.TP +\fB\-\-scale=\fR +Set GV scaling [default=0] +.SH EXAMPLES + +pprof /bin/ls ls.prof +.IP +Outputs one line per procedure +.PP +pprof \fB\-\-gv\fR /bin/ls ls.prof +.IP +Displays annotated call-graph via 'gv' +.PP +pprof \fB\-\-gv\fR \fB\-\-focus\fR=\fIMutex\fR /bin/ls ls.prof +.IP +Restricts to code paths including a .*Mutex.* entry +.PP +pprof \fB\-\-gv\fR \fB\-\-focus\fR=\fIMutex\fR \fB\-\-ignore\fR=\fIstring\fR /bin/ls ls.prof +.IP +Code paths including Mutex but not string +.PP +pprof \fB\-\-list\fR=\fIgetdir\fR /bin/ls ls.prof +.IP +Dissassembly (with per-line annotations) for getdir() +.PP +pprof \fB\-\-disasm\fR=\fIgetdir\fR /bin/ls ls.prof +.IP +Dissassembly (with per-PC annotations) for getdir() +.SH COPYRIGHT +Copyright \(co 2005 Google Inc. +.SH "SEE ALSO" +Further documentation for +.B pprof +is maintained as a web page called +.B cpu_profiler.html +and is likely installed at one of the following locations: +.IP +.B /usr/share/gperftools/cpu_profiler.html +.br +.B /usr/local/share/gperftools/cpu_profiler.html +.PP diff --git a/src/thirdparty/gperftools-2.0/doc/pprof.see_also b/src/thirdparty/gperftools-2.0/doc/pprof.see_also new file mode 100644 index 000000000..f2caf5212 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/pprof.see_also @@ -0,0 +1,11 @@ +[see also] +Further documentation for +.B pprof +is maintained as a web page called +.B cpu_profiler.html +and is likely installed at one of the following locations: +.IP +.B /usr/share/gperftools/cpu_profiler.html +.br +.B /usr/local/share/gperftools/cpu_profiler.html +.PP diff --git a/src/thirdparty/gperftools-2.0/doc/pprof_remote_servers.html b/src/thirdparty/gperftools-2.0/doc/pprof_remote_servers.html new file mode 100644 index 000000000..dd29dfb96 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/pprof_remote_servers.html @@ -0,0 +1,260 @@ + + + +pprof and Remote Servers + + + + +

pprof and Remote Servers

+ +

In mid-2006, we added an experimental facility to pprof, the tool that analyzes CPU and +heap profiles. This facility allows you to collect profile +information from running applications. It makes it easy to collect +profile information without having to stop the program first, and +without having to log into the machine where the application is +running. This is meant to be used on webservers, but will work on any +application that can be modified to accept TCP connections on a port +of its choosing, and to respond to HTTP requests on that port.

+ +

We do not currently have infrastructure, such as apache modules, +that you can pop into a webserver or other application to get the +necessary functionality "for free." However, it's easy to generate +the necessary data, which should allow the interested developer to add +the necessary support into his or her applications.

+ +

To use pprof in this experimental "server" mode, you +give the script a host and port it should query, replacing the normal +commandline arguments of application + profile file:

+
+   % pprof internalweb.mycompany.com:80
+
+ +

The host must be listening on that port, and be able to accept HTTP/1.0 +requests -- sent via wget and curl -- for +several urls. The following sections list the urls that +pprof can send, and the responses it expects in +return.

+ +

Here are examples that pprof will recognize, when you give them +on the commandline, are urls. In general, you +specify the host and a port (the port-number is required), and put +the service-name at the end of the url.:

+
+http://myhost:80/pprof/heap            # retrieves a heap profile
+http://myhost:8008/pprof/profile       # retrieves a CPU profile
+http://myhost:80                       # retrieves a CPU profile (the default)
+http://myhost:8080/                    # retrieves a CPU profile (the default)
+myhost:8088/pprof/growth               # "http://" is optional, but port is not
+http://myhost:80/myservice/pprof/heap  # /pprof/heap just has to come at the end
+http://myhost:80/pprof/pmuprofile      # CPU profile using performance counters
+
+ +

/pprof/heap

+ +

pprof asks for the url /pprof/heap to +get heap information. The actual url is controlled via the variable +HEAP_PAGE in the pprof script, so you +can change it if you'd like.

+ +

There are two ways to get this data. The first is to call

+
+    MallocExtension::instance()->GetHeapSample(&output);
+
+

and have the server send output back as an HTTP +response to pprof. MallocExtension is +defined in the header file gperftools/malloc_extension.h.

+ +

Note this will only only work if the binary is being run with +sampling turned on (which is not the default). To do this, set the +environment variable TCMALLOC_SAMPLE_PARAMETER to a +positive value, such as 524288, before running.

+ +

The other way is to call HeapProfileStart(filename) +(from heap-profiler.h), continue to do work, and then, +some number of seconds later, call GetHeapProfile() +(followed by HeapProfilerStop()). The server can send +the output of GetHeapProfile back as the HTTP response to +pprof. (Note you must free() this data after using it.) +This is similar to how profile requests are +handled, below. This technique does not require the application to +run with sampling turned on.

+ +

Here's an example of what the output should look like:

+
+heap profile:   1923: 127923432 [  1923: 127923432] @ heap_v2/524288
+     1:      312 [     1:      312] @ 0x2aaaabaf5ccc 0x2aaaaba4cd2c 0x2aaaac08c09a
+   928: 122586016 [   928: 122586016] @ 0x2aaaabaf682c 0x400680 0x400bdd 0x2aaaab1c368a 0x2aaaab1c8f77 0x2aaaab1c0396 0x2aaaab1c86ed 0x4007ff 0x2aaaaca62afa
+     1:       16 [     1:       16] @ 0x2aaaabaf5ccc 0x2aaaabb04bac 0x2aaaabc1b262 0x2aaaabc21496 0x2aaaabc214bb
+[...]
+
+ + +

Older code may produce "version 1" heap profiles which look like this:

+

+heap profile:  14933: 791700132 [ 14933: 791700132] @ heap
+     1:   848688 [     1:   848688] @ 0xa4b142 0x7f5bfc 0x87065e 0x4056e9 0x4125f8 0x42b4f1 0x45b1ba 0x463248 0x460871 0x45cb7c 0x5f1744 0x607cee 0x5f4a5e 0x40080f 0x2aaaabad7afa
+     1:  1048576 [     1:  1048576] @ 0xa4a9b2 0x7fd025 0x4ca6d8 0x4ca814 0x4caa88 0x2aaaab104cf0 0x404e20 0x4125f8 0x42b4f1 0x45b1ba 0x463248 0x460871 0x45cb7c 0x5f1744 0x607cee 0x5f4a5e 0x40080f 0x2aaaabad7afa
+  2942: 388629374 [  2942: 388629374] @ 0xa4b142 0x4006a0 0x400bed 0x5f0cfa 0x5f1744 0x607cee 0x5f4a5e 0x40080f 0x2aaaabad7afa
+[...]
+
+

pprof accepts both old and new heap profiles and automatically +detects which one you are using.

+ +

/pprof/growth

+ +

pprof asks for the url /pprof/growth to +get heap-profiling delta (growth) information. The actual url is +controlled via the variable GROWTH_PAGE in the +pprof script, so you can change it if you'd like.

+ +

The server should respond by calling

+
+    MallocExtension::instance()->GetHeapGrowthStacks(&output);
+
+

and sending output back as an HTTP response to +pprof. MallocExtension is defined in the +header file gperftools/malloc_extension.h.

+ +

Here's an example, from an actual Google webserver, of what the +output should look like:

+
+heap profile:    741: 812122112 [   741: 812122112] @ growth
+     1:  1572864 [     1:  1572864] @ 0x87da564 0x87db8a3 0x84787a4 0x846e851 0x836d12f 0x834cd1c 0x8349ba5 0x10a3177 0x8349961
+     1:  1048576 [     1:  1048576] @ 0x87d92e8 0x87d9213 0x87d9178 0x87d94d3 0x87da9da 0x8a364ff 0x8a437e7 0x8ab7d23 0x8ab7da9 0x8ac7454 0x8348465 0x10a3161 0x8349961
+[...]
+
+ + +

/pprof/profile

+ +

pprof asks for the url +/pprof/profile?seconds=XX to get cpu-profiling +information. The actual url is controlled via the variable +PROFILE_PAGE in the pprof script, so you can +change it if you'd like.

+ +

The server should respond by calling +ProfilerStart(filename), continuing to do its work, and +then, XX seconds later, calling ProfilerStop(). (These +functions are declared in gperftools/profiler.h.) The +application is responsible for picking a unique filename for +ProfilerStart(). After calling +ProfilerStop(), the server should read the contents of +filename and send them back as an HTTP response to +pprof.

+ +

Obviously, to get useful profile information the application must +continue to run in the XX seconds that the profiler is running. Thus, +the profile start-stop calls should be done in a separate thread, or +be otherwise non-blocking.

+ +

The profiler output file is binary, but near the end of it, it +should have lines of text somewhat like this:

+
+01016000-01017000 rw-p 00015000 03:01 59314      /lib/ld-2.2.2.so
+
+ +

/pprof/pmuprofile

+ +pprof asks for a url of the form +/pprof/pmuprofile?event=hw_event:unit_mask&period=nnn&seconds=xxx +to get cpu-profiling information. The actual url is controlled via the variable +PMUPROFILE_PAGE in the pprof script, so you can +change it if you'd like.

+ +

+This is similar to pprof, but is meant to be used with your CPU's hardware +performance counters. The server could be implemented on top of a library +such as +libpfm. It should collect a sample every nnn occurences +of the event and stop the sampling after xxx seconds. Much of the code +for /pprof/profile can be reused for this purpose. +

+ +

The server side routines (the equivalent of +ProfilerStart/ProfilerStart) are not available as part of perftools, +so this URL is unlikely to be that useful.

+ +

/pprof/contention

+ +

This is intended to be able to profile (thread) lock contention in +addition to CPU and memory use. It's not yet usable.

+ + +

/pprof/cmdline

+ +

pprof asks for the url /pprof/cmdline to +figure out what application it's profiling. The actual url is +controlled via the variable PROGRAM_NAME_PAGE in the +pprof script, so you can change it if you'd like.

+ +

The server should respond by reading the contents of +/proc/self/cmdline, converting all internal NUL (\0) +characters to newlines, and sending the result back as an HTTP +response to pprof.

+ +

Here's an example return value:

+

+/root/server/custom_webserver
+80
+--configfile=/root/server/ws.config
+
+ + +

/pprof/symbol

+ +

pprof asks for the url /pprof/symbol to +map from hex addresses to variable names. The actual url is +controlled via the variable SYMBOL_PAGE in the +pprof script, so you can change it if you'd like.

+ +

When the server receives a GET request for +/pprof/symbol, it should return a line formatted like +so:

+
+   num_symbols: ###
+
+

where ### is the number of symbols found in the +binary. (For now, the only important distinction is whether the value +is 0, which it is for executables that lack debug information, or +not-0).

+ +

This is perhaps the hardest request to write code for, because in +addition to the GET request for this url, the server must accept POST +requests. This means that after the HTTP headers, pprof will pass in +a list of hex addresses connected by +, like so:

+
+   curl -d '0x0824d061+0x0824d1cf' http://remote_host:80/pprof/symbol
+
+ +

The server should read the POST data, which will be in one line, +and for each hex value, should write one line of output to the output +stream, like so:

+
+<hex address><tab><function name>
+
+

For instance:

+
+0x08b2dabd    _Update
+
+ +

The other reason this is the most difficult request to implement, +is that the application will have to figure out for itself how to map +from address to function name. One possibility is to run nm -C +-n <program name> to get the mappings at +program-compile-time. Another, at least on Linux, is to call out to +addr2line for every pprof/symbol call, for instance +addr2line -Cfse /proc//exe 0x12345678 0x876543210 +(presumably with some caching!)

+ +

pprof itself does just this for local profiles (not +ones that talk to remote servers); look at the subroutine +GetProcedureBoundaries.

+ + +
+Last modified: Mon Jun 12 21:30:14 PDT 2006 + + diff --git a/src/thirdparty/gperftools-2.0/doc/spanmap.dot b/src/thirdparty/gperftools-2.0/doc/spanmap.dot new file mode 100644 index 000000000..3cb42abe5 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/spanmap.dot @@ -0,0 +1,22 @@ +digraph SpanMap { +node [shape=box, width=0.3, height=0.3] +nodesep=.05 + +map [shape=record, width=6, label="||||||||||"] +S0 [label="a"] +S1 [label="b"] +S2 [label="c"] +S3 [label="d"] +map:f0 -> S0 +map:f1 -> S0 +map:f2 -> S1 +map:f3 -> S2 +map:f4 -> S2 +map:f5 -> S2 +map:f6 -> S2 +map:f7 -> S2 +map:f8 -> S3 +map:f9 -> S3 +map:f10 -> S3 + +} diff --git a/src/thirdparty/gperftools-2.0/doc/spanmap.gif b/src/thirdparty/gperftools-2.0/doc/spanmap.gif new file mode 100644 index 0000000000000000000000000000000000000000..a0627f6a71a0e2ad21b3043f9d5fc9047afd5fb4 GIT binary patch literal 8482 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 literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/t-test1.times.txt b/src/thirdparty/gperftools-2.0/doc/t-test1.times.txt new file mode 100644 index 000000000..016369385 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/t-test1.times.txt @@ -0,0 +1,480 @@ +time.1.ptmalloc.64:0.56 user 0.02 system 0.57 elapsed 100% CPU +time.1.tcmalloc.64:0.38 user 0.02 system 0.40 elapsed 98% CPU +time.1.ptmalloc.128:0.61 user 0.01 system 0.61 elapsed 101% CPU +time.1.tcmalloc.128:0.35 user 0.00 system 0.35 elapsed 99% CPU +time.1.ptmalloc.256:0.59 user 0.01 system 0.60 elapsed 100% CPU +time.1.tcmalloc.256:0.27 user 0.02 system 0.28 elapsed 102% CPU +time.1.ptmalloc.512:0.57 user 0.00 system 0.57 elapsed 100% CPU +time.1.tcmalloc.512:0.25 user 0.01 system 0.25 elapsed 101% CPU +time.1.ptmalloc.1024:0.52 user 0.00 system 0.52 elapsed 99% CPU +time.1.tcmalloc.1024:0.22 user 0.02 system 0.24 elapsed 97% CPU +time.1.ptmalloc.2048:0.47 user 0.00 system 0.47 elapsed 99% CPU +time.1.tcmalloc.2048:0.22 user 0.02 system 0.25 elapsed 95% CPU +time.1.ptmalloc.4096:0.48 user 0.01 system 0.48 elapsed 100% CPU +time.1.tcmalloc.4096:0.25 user 0.01 system 0.25 elapsed 100% CPU +time.1.ptmalloc.8192:0.49 user 0.02 system 0.49 elapsed 102% CPU +time.1.tcmalloc.8192:0.27 user 0.02 system 0.28 elapsed 101% CPU +time.1.ptmalloc.16384:0.51 user 0.04 system 0.55 elapsed 99% CPU +time.1.tcmalloc.16384:0.35 user 0.02 system 0.37 elapsed 100% CPU +time.1.ptmalloc.32768:0.53 user 0.14 system 0.66 elapsed 100% CPU +time.1.tcmalloc.32768:0.67 user 0.02 system 0.69 elapsed 99% CPU +time.1.ptmalloc.65536:0.68 user 0.31 system 0.98 elapsed 100% CPU +time.1.tcmalloc.65536:0.71 user 0.01 system 0.72 elapsed 99% CPU +time.1.ptmalloc.131072:0.90 user 0.72 system 1.62 elapsed 99% CPU +time.1.tcmalloc.131072:0.94 user 0.03 system 0.97 elapsed 99% CPU +time.2.ptmalloc.64:1.05 user 0.00 system 0.53 elapsed 196% CPU +time.2.tcmalloc.64:0.66 user 0.03 system 0.37 elapsed 185% CPU +time.2.ptmalloc.128:1.77 user 0.01 system 0.89 elapsed 198% CPU +time.2.tcmalloc.128:0.53 user 0.01 system 0.29 elapsed 184% CPU +time.2.ptmalloc.256:1.14 user 0.01 system 0.62 elapsed 182% CPU +time.2.tcmalloc.256:0.45 user 0.02 system 0.26 elapsed 180% CPU +time.2.ptmalloc.512:1.26 user 0.40 system 1.79 elapsed 92% CPU +time.2.tcmalloc.512:0.43 user 0.02 system 0.27 elapsed 166% CPU +time.2.ptmalloc.1024:0.98 user 0.03 system 0.56 elapsed 179% CPU +time.2.tcmalloc.1024:0.44 user 0.02 system 0.34 elapsed 134% CPU +time.2.ptmalloc.2048:0.87 user 0.02 system 0.44 elapsed 199% CPU +time.2.tcmalloc.2048:0.49 user 0.02 system 0.34 elapsed 148% CPU +time.2.ptmalloc.4096:0.92 user 0.03 system 0.48 elapsed 196% CPU +time.2.tcmalloc.4096:0.50 user 0.02 system 0.49 elapsed 105% CPU +time.2.ptmalloc.8192:1.05 user 0.04 system 0.55 elapsed 196% CPU +time.2.tcmalloc.8192:0.59 user 0.01 system 0.51 elapsed 116% CPU +time.2.ptmalloc.16384:1.30 user 0.14 system 0.72 elapsed 198% CPU +time.2.tcmalloc.16384:0.63 user 0.03 system 0.68 elapsed 96% CPU +time.2.ptmalloc.32768:1.33 user 0.56 system 1.00 elapsed 189% CPU +time.2.tcmalloc.32768:1.16 user 0.01 system 1.17 elapsed 99% CPU +time.2.ptmalloc.65536:1.86 user 1.79 system 2.01 elapsed 181% CPU +time.2.tcmalloc.65536:1.35 user 0.01 system 1.35 elapsed 100% CPU +time.2.ptmalloc.131072:2.61 user 5.19 system 4.81 elapsed 162% CPU +time.2.tcmalloc.131072:1.86 user 0.04 system 1.90 elapsed 100% CPU +time.3.ptmalloc.64:1.79 user 0.03 system 0.67 elapsed 268% CPU +time.3.tcmalloc.64:1.58 user 0.04 system 0.62 elapsed 260% CPU +time.3.ptmalloc.128:2.77 user 1.34 system 3.07 elapsed 133% CPU +time.3.tcmalloc.128:1.19 user 0.01 system 0.50 elapsed 236% CPU +time.3.ptmalloc.256:2.14 user 0.02 system 0.85 elapsed 252% CPU +time.3.tcmalloc.256:0.96 user 0.01 system 0.41 elapsed 236% CPU +time.3.ptmalloc.512:3.37 user 1.31 system 3.33 elapsed 140% CPU +time.3.tcmalloc.512:0.93 user 0.04 system 0.39 elapsed 243% CPU +time.3.ptmalloc.1024:1.66 user 0.01 system 0.64 elapsed 260% CPU +time.3.tcmalloc.1024:0.81 user 0.02 system 0.44 elapsed 187% CPU +time.3.ptmalloc.2048:2.07 user 0.01 system 0.82 elapsed 252% CPU +time.3.tcmalloc.2048:1.10 user 0.04 system 0.59 elapsed 191% CPU +time.3.ptmalloc.4096:2.01 user 0.03 system 0.79 elapsed 258% CPU +time.3.tcmalloc.4096:0.87 user 0.03 system 0.65 elapsed 137% CPU +time.3.ptmalloc.8192:2.22 user 0.11 system 0.83 elapsed 280% CPU +time.3.tcmalloc.8192:0.96 user 0.06 system 0.75 elapsed 135% CPU +time.3.ptmalloc.16384:2.56 user 0.47 system 1.02 elapsed 295% CPU +time.3.tcmalloc.16384:0.99 user 0.04 system 1.03 elapsed 99% CPU +time.3.ptmalloc.32768:3.29 user 1.75 system 1.96 elapsed 256% CPU +time.3.tcmalloc.32768:1.67 user 0.02 system 1.69 elapsed 99% CPU +time.3.ptmalloc.65536:4.04 user 6.62 system 4.92 elapsed 216% CPU +time.3.tcmalloc.65536:1.91 user 0.02 system 1.98 elapsed 97% CPU +time.3.ptmalloc.131072:5.55 user 17.86 system 12.44 elapsed 188% CPU +time.3.tcmalloc.131072:2.78 user 0.02 system 2.82 elapsed 99% CPU +time.4.ptmalloc.64:3.42 user 1.36 system 3.20 elapsed 149% CPU +time.4.tcmalloc.64:2.42 user 0.02 system 0.71 elapsed 341% CPU +time.4.ptmalloc.128:3.98 user 1.79 system 3.89 elapsed 148% CPU +time.4.tcmalloc.128:1.87 user 0.02 system 0.58 elapsed 325% CPU +time.4.ptmalloc.256:4.06 user 2.14 system 4.12 elapsed 150% CPU +time.4.tcmalloc.256:1.69 user 0.02 system 0.51 elapsed 331% CPU +time.4.ptmalloc.512:4.48 user 2.15 system 4.39 elapsed 150% CPU +time.4.tcmalloc.512:1.62 user 0.03 system 0.52 elapsed 314% CPU +time.4.ptmalloc.1024:3.18 user 0.03 system 0.84 elapsed 381% CPU +time.4.tcmalloc.1024:1.53 user 0.02 system 0.56 elapsed 274% CPU +time.4.ptmalloc.2048:3.24 user 0.02 system 0.84 elapsed 384% CPU +time.4.tcmalloc.2048:1.44 user 0.04 system 0.66 elapsed 221% CPU +time.4.ptmalloc.4096:3.50 user 0.04 system 0.91 elapsed 389% CPU +time.4.tcmalloc.4096:1.31 user 0.01 system 0.89 elapsed 148% CPU +time.4.ptmalloc.8192:6.77 user 3.85 system 4.14 elapsed 256% CPU +time.4.tcmalloc.8192:1.20 user 0.05 system 0.97 elapsed 127% CPU +time.4.ptmalloc.16384:7.08 user 5.06 system 4.63 elapsed 262% CPU +time.4.tcmalloc.16384:1.27 user 0.03 system 1.25 elapsed 103% CPU +time.4.ptmalloc.32768:5.57 user 4.22 system 3.31 elapsed 295% CPU +time.4.tcmalloc.32768:2.17 user 0.03 system 2.25 elapsed 97% CPU +time.4.ptmalloc.65536:6.11 user 15.05 system 9.19 elapsed 230% CPU +time.4.tcmalloc.65536:2.51 user 0.02 system 2.57 elapsed 98% CPU +time.4.ptmalloc.131072:7.58 user 33.15 system 21.28 elapsed 191% CPU +time.4.tcmalloc.131072:3.57 user 0.07 system 3.66 elapsed 99% CPU +time.5.ptmalloc.64:4.44 user 2.08 system 4.37 elapsed 148% CPU +time.5.tcmalloc.64:2.87 user 0.02 system 0.79 elapsed 361% CPU +time.5.ptmalloc.128:4.77 user 2.77 system 5.14 elapsed 146% CPU +time.5.tcmalloc.128:2.65 user 0.03 system 0.72 elapsed 367% CPU +time.5.ptmalloc.256:5.82 user 2.88 system 5.49 elapsed 158% CPU +time.5.tcmalloc.256:2.33 user 0.01 system 0.66 elapsed 352% CPU +time.5.ptmalloc.512:6.27 user 3.11 system 5.34 elapsed 175% CPU +time.5.tcmalloc.512:2.14 user 0.03 system 0.70 elapsed 307% CPU +time.5.ptmalloc.1024:6.82 user 3.18 system 5.23 elapsed 191% CPU +time.5.tcmalloc.1024:2.20 user 0.02 system 0.70 elapsed 313% CPU +time.5.ptmalloc.2048:6.57 user 3.46 system 5.22 elapsed 192% CPU +time.5.tcmalloc.2048:2.15 user 0.03 system 0.82 elapsed 264% CPU +time.5.ptmalloc.4096:8.75 user 5.09 system 5.26 elapsed 263% CPU +time.5.tcmalloc.4096:1.68 user 0.03 system 1.08 elapsed 158% CPU +time.5.ptmalloc.8192:4.48 user 0.61 system 1.51 elapsed 335% CPU +time.5.tcmalloc.8192:1.47 user 0.07 system 1.18 elapsed 129% CPU +time.5.ptmalloc.16384:5.71 user 1.98 system 2.14 elapsed 358% CPU +time.5.tcmalloc.16384:1.58 user 0.03 system 1.52 elapsed 105% CPU +time.5.ptmalloc.32768:7.19 user 7.81 system 5.53 elapsed 270% CPU +time.5.tcmalloc.32768:2.63 user 0.05 system 2.72 elapsed 98% CPU +time.5.ptmalloc.65536:8.45 user 23.51 system 14.30 elapsed 223% CPU +time.5.tcmalloc.65536:3.12 user 0.05 system 3.21 elapsed 98% CPU +time.5.ptmalloc.131072:10.22 user 43.63 system 27.84 elapsed 193% CPU +time.5.tcmalloc.131072:4.42 user 0.07 system 4.51 elapsed 99% CPU +time.6.ptmalloc.64:5.57 user 2.56 system 5.08 elapsed 159% CPU +time.6.tcmalloc.64:3.20 user 0.01 system 0.89 elapsed 360% CPU +time.6.ptmalloc.128:5.98 user 3.52 system 5.71 elapsed 166% CPU +time.6.tcmalloc.128:2.76 user 0.02 system 0.78 elapsed 355% CPU +time.6.ptmalloc.256:4.61 user 0.02 system 1.19 elapsed 389% CPU +time.6.tcmalloc.256:2.65 user 0.02 system 0.74 elapsed 356% CPU +time.6.ptmalloc.512:8.28 user 3.88 system 6.61 elapsed 183% CPU +time.6.tcmalloc.512:2.60 user 0.02 system 0.72 elapsed 362% CPU +time.6.ptmalloc.1024:4.75 user 0.00 system 1.22 elapsed 387% CPU +time.6.tcmalloc.1024:2.56 user 0.02 system 0.79 elapsed 325% CPU +time.6.ptmalloc.2048:8.90 user 4.59 system 6.15 elapsed 219% CPU +time.6.tcmalloc.2048:2.37 user 0.06 system 0.96 elapsed 250% CPU +time.6.ptmalloc.4096:11.41 user 7.02 system 6.31 elapsed 291% CPU +time.6.tcmalloc.4096:1.82 user 0.03 system 1.19 elapsed 154% CPU +time.6.ptmalloc.8192:11.64 user 8.25 system 5.97 elapsed 332% CPU +time.6.tcmalloc.8192:1.83 user 0.07 system 1.38 elapsed 136% CPU +time.6.ptmalloc.16384:7.44 user 2.98 system 3.01 elapsed 345% CPU +time.6.tcmalloc.16384:1.83 user 0.08 system 1.80 elapsed 105% CPU +time.6.ptmalloc.32768:8.69 user 12.35 system 8.04 elapsed 261% CPU +time.6.tcmalloc.32768:3.14 user 0.06 system 3.24 elapsed 98% CPU +time.6.ptmalloc.65536:10.52 user 35.43 system 20.75 elapsed 221% CPU +time.6.tcmalloc.65536:3.62 user 0.03 system 3.72 elapsed 98% CPU +time.6.ptmalloc.131072:11.74 user 59.00 system 36.93 elapsed 191% CPU +time.6.tcmalloc.131072:5.33 user 0.04 system 5.42 elapsed 98% CPU +time.7.ptmalloc.64:6.60 user 3.45 system 6.01 elapsed 167% CPU +time.7.tcmalloc.64:3.50 user 0.04 system 0.94 elapsed 376% CPU +time.7.ptmalloc.128:7.09 user 4.25 system 6.69 elapsed 169% CPU +time.7.tcmalloc.128:3.13 user 0.03 system 0.84 elapsed 374% CPU +time.7.ptmalloc.256:9.28 user 4.85 system 7.20 elapsed 196% CPU +time.7.tcmalloc.256:3.06 user 0.02 system 0.82 elapsed 375% CPU +time.7.ptmalloc.512:9.13 user 4.78 system 6.79 elapsed 204% CPU +time.7.tcmalloc.512:2.99 user 0.03 system 0.83 elapsed 359% CPU +time.7.ptmalloc.1024:10.85 user 6.41 system 7.52 elapsed 229% CPU +time.7.tcmalloc.1024:3.05 user 0.04 system 0.89 elapsed 345% CPU +time.7.ptmalloc.2048:5.65 user 0.08 system 1.47 elapsed 388% CPU +time.7.tcmalloc.2048:3.01 user 0.01 system 0.98 elapsed 306% CPU +time.7.ptmalloc.4096:6.09 user 0.08 system 1.58 elapsed 389% CPU +time.7.tcmalloc.4096:2.25 user 0.03 system 1.32 elapsed 171% CPU +time.7.ptmalloc.8192:6.73 user 0.85 system 1.99 elapsed 379% CPU +time.7.tcmalloc.8192:2.22 user 0.08 system 1.61 elapsed 142% CPU +time.7.ptmalloc.16384:8.87 user 4.66 system 4.04 elapsed 334% CPU +time.7.tcmalloc.16384:2.07 user 0.07 system 2.07 elapsed 103% CPU +time.7.ptmalloc.32768:10.61 user 17.85 system 11.22 elapsed 253% CPU +time.7.tcmalloc.32768:3.68 user 0.06 system 3.79 elapsed 98% CPU +time.7.ptmalloc.65536:13.05 user 45.97 system 27.28 elapsed 216% CPU +time.7.tcmalloc.65536:4.16 user 0.07 system 4.31 elapsed 98% CPU +time.7.ptmalloc.131072:13.22 user 62.67 system 41.33 elapsed 183% CPU +time.7.tcmalloc.131072:6.10 user 0.06 system 6.25 elapsed 98% CPU +time.8.ptmalloc.64:7.31 user 3.92 system 6.39 elapsed 175% CPU +time.8.tcmalloc.64:4.00 user 0.01 system 1.04 elapsed 383% CPU +time.8.ptmalloc.128:9.40 user 5.41 system 7.67 elapsed 192% CPU +time.8.tcmalloc.128:3.61 user 0.02 system 0.94 elapsed 386% CPU +time.8.ptmalloc.256:10.61 user 6.35 system 7.96 elapsed 212% CPU +time.8.tcmalloc.256:3.30 user 0.02 system 0.99 elapsed 335% CPU +time.8.ptmalloc.512:12.42 user 7.10 system 8.79 elapsed 221% CPU +time.8.tcmalloc.512:3.35 user 0.04 system 0.94 elapsed 358% CPU +time.8.ptmalloc.1024:13.63 user 8.54 system 8.95 elapsed 247% CPU +time.8.tcmalloc.1024:3.44 user 0.02 system 0.96 elapsed 359% CPU +time.8.ptmalloc.2048:6.45 user 0.03 system 1.67 elapsed 386% CPU +time.8.tcmalloc.2048:3.55 user 0.05 system 1.09 elapsed 328% CPU +time.8.ptmalloc.4096:6.83 user 0.26 system 1.80 elapsed 393% CPU +time.8.tcmalloc.4096:2.78 user 0.06 system 1.53 elapsed 185% CPU +time.8.ptmalloc.8192:7.59 user 1.29 system 2.36 elapsed 376% CPU +time.8.tcmalloc.8192:2.57 user 0.07 system 1.84 elapsed 142% CPU +time.8.ptmalloc.16384:10.15 user 6.20 system 5.20 elapsed 314% CPU +time.8.tcmalloc.16384:2.40 user 0.05 system 2.42 elapsed 101% CPU +time.8.ptmalloc.32768:11.82 user 24.48 system 14.60 elapsed 248% CPU +time.8.tcmalloc.32768:4.37 user 0.05 system 4.47 elapsed 98% CPU +time.8.ptmalloc.65536:15.41 user 58.94 system 34.42 elapsed 215% CPU +time.8.tcmalloc.65536:4.90 user 0.04 system 4.96 elapsed 99% CPU +time.8.ptmalloc.131072:16.07 user 82.93 system 52.51 elapsed 188% CPU +time.8.tcmalloc.131072:7.13 user 0.04 system 7.19 elapsed 99% CPU +time.9.ptmalloc.64:8.44 user 4.59 system 6.92 elapsed 188% CPU +time.9.tcmalloc.64:4.00 user 0.02 system 1.05 elapsed 382% CPU +time.9.ptmalloc.128:10.92 user 6.14 system 8.31 elapsed 205% CPU +time.9.tcmalloc.128:3.88 user 0.02 system 1.01 elapsed 382% CPU +time.9.ptmalloc.256:13.01 user 7.75 system 9.12 elapsed 227% CPU +time.9.tcmalloc.256:3.89 user 0.01 system 1.00 elapsed 386% CPU +time.9.ptmalloc.512:14.96 user 8.89 system 9.73 elapsed 244% CPU +time.9.tcmalloc.512:3.80 user 0.03 system 1.01 elapsed 377% CPU +time.9.ptmalloc.1024:15.42 user 10.20 system 9.80 elapsed 261% CPU +time.9.tcmalloc.1024:3.86 user 0.03 system 1.19 elapsed 325% CPU +time.9.ptmalloc.2048:7.24 user 0.02 system 1.87 elapsed 388% CPU +time.9.tcmalloc.2048:3.98 user 0.05 system 1.26 elapsed 319% CPU +time.9.ptmalloc.4096:7.96 user 0.18 system 2.06 elapsed 394% CPU +time.9.tcmalloc.4096:3.27 user 0.04 system 1.69 elapsed 195% CPU +time.9.ptmalloc.8192:9.00 user 1.63 system 2.79 elapsed 380% CPU +time.9.tcmalloc.8192:3.00 user 0.06 system 2.05 elapsed 148% CPU +time.9.ptmalloc.16384:12.07 user 8.13 system 6.55 elapsed 308% CPU +time.9.tcmalloc.16384:2.85 user 0.05 system 2.75 elapsed 105% CPU +time.9.ptmalloc.32768:13.99 user 29.65 system 18.02 elapsed 242% CPU +time.9.tcmalloc.32768:4.98 user 0.06 system 5.13 elapsed 98% CPU +time.9.ptmalloc.65536:16.89 user 70.42 system 42.11 elapsed 207% CPU +time.9.tcmalloc.65536:5.55 user 0.04 system 5.65 elapsed 98% CPU +time.9.ptmalloc.131072:18.53 user 94.11 system 61.17 elapsed 184% CPU +time.9.tcmalloc.131072:8.06 user 0.04 system 8.16 elapsed 99% CPU +time.10.ptmalloc.64:9.81 user 5.70 system 7.42 elapsed 208% CPU +time.10.tcmalloc.64:4.43 user 0.03 system 1.20 elapsed 370% CPU +time.10.ptmalloc.128:12.69 user 7.81 system 9.02 elapsed 227% CPU +time.10.tcmalloc.128:4.27 user 0.02 system 1.13 elapsed 378% CPU +time.10.ptmalloc.256:15.04 user 9.53 system 9.92 elapsed 247% CPU +time.10.tcmalloc.256:4.23 user 0.02 system 1.09 elapsed 388% CPU +time.10.ptmalloc.512:17.30 user 10.46 system 10.61 elapsed 261% CPU +time.10.tcmalloc.512:4.14 user 0.05 system 1.10 elapsed 379% CPU +time.10.ptmalloc.1024:16.96 user 9.38 system 9.30 elapsed 283% CPU +time.10.tcmalloc.1024:4.27 user 0.06 system 1.18 elapsed 366% CPU +time.10.ptmalloc.2048:8.07 user 0.03 system 2.06 elapsed 393% CPU +time.10.tcmalloc.2048:4.49 user 0.07 system 1.33 elapsed 342% CPU +time.10.ptmalloc.4096:8.66 user 0.25 system 2.25 elapsed 394% CPU +time.10.tcmalloc.4096:3.61 user 0.05 system 1.78 elapsed 205% CPU +time.10.ptmalloc.8192:21.52 user 17.43 system 10.41 elapsed 374% CPU +time.10.tcmalloc.8192:3.59 user 0.10 system 2.33 elapsed 158% CPU +time.10.ptmalloc.16384:20.55 user 24.85 system 12.55 elapsed 361% CPU +time.10.tcmalloc.16384:3.29 user 0.04 system 3.22 elapsed 103% CPU +time.10.ptmalloc.32768:15.23 user 38.13 system 22.49 elapsed 237% CPU +time.10.tcmalloc.32768:5.62 user 0.05 system 5.72 elapsed 99% CPU +time.10.ptmalloc.65536:19.80 user 85.42 system 49.98 elapsed 210% CPU +time.10.tcmalloc.65536:6.23 user 0.09 system 6.36 elapsed 99% CPU +time.10.ptmalloc.131072:20.91 user 106.97 system 69.08 elapsed 185% CPU +time.10.tcmalloc.131072:8.94 user 0.09 system 9.09 elapsed 99% CPU +time.11.ptmalloc.64:10.82 user 6.34 system 7.92 elapsed 216% CPU +time.11.tcmalloc.64:4.80 user 0.03 system 1.24 elapsed 387% CPU +time.11.ptmalloc.128:14.58 user 8.61 system 9.81 elapsed 236% CPU +time.11.tcmalloc.128:4.65 user 0.03 system 1.21 elapsed 384% CPU +time.11.ptmalloc.256:17.38 user 10.98 system 10.75 elapsed 263% CPU +time.11.tcmalloc.256:4.51 user 0.03 system 1.18 elapsed 384% CPU +time.11.ptmalloc.512:19.18 user 11.71 system 10.95 elapsed 282% CPU +time.11.tcmalloc.512:4.57 user 0.02 system 1.19 elapsed 384% CPU +time.11.ptmalloc.1024:19.94 user 12.41 system 10.48 elapsed 308% CPU +time.11.tcmalloc.1024:4.71 user 0.05 system 1.29 elapsed 367% CPU +time.11.ptmalloc.2048:8.70 user 0.04 system 2.35 elapsed 371% CPU +time.11.tcmalloc.2048:4.97 user 0.07 system 1.43 elapsed 350% CPU +time.11.ptmalloc.4096:22.47 user 18.43 system 10.82 elapsed 377% CPU +time.11.tcmalloc.4096:4.22 user 0.03 system 1.91 elapsed 221% CPU +time.11.ptmalloc.8192:11.61 user 2.38 system 3.73 elapsed 374% CPU +time.11.tcmalloc.8192:3.74 user 0.09 system 2.46 elapsed 155% CPU +time.11.ptmalloc.16384:14.13 user 13.38 system 9.60 elapsed 286% CPU +time.11.tcmalloc.16384:3.61 user 0.03 system 3.63 elapsed 100% CPU +time.11.ptmalloc.32768:17.92 user 43.84 system 26.74 elapsed 230% CPU +time.11.tcmalloc.32768:6.31 user 0.03 system 6.45 elapsed 98% CPU +time.11.ptmalloc.65536:22.40 user 96.38 system 58.30 elapsed 203% CPU +time.11.tcmalloc.65536:6.92 user 0.12 system 6.98 elapsed 100% CPU +time.11.ptmalloc.131072:21.03 user 108.04 system 72.78 elapsed 177% CPU +time.11.tcmalloc.131072:9.79 user 0.08 system 9.94 elapsed 99% CPU +time.12.ptmalloc.64:12.23 user 7.16 system 8.38 elapsed 231% CPU +time.12.tcmalloc.64:5.21 user 0.05 system 1.41 elapsed 371% CPU +time.12.ptmalloc.128:16.97 user 10.19 system 10.47 elapsed 259% CPU +time.12.tcmalloc.128:5.10 user 0.02 system 1.31 elapsed 390% CPU +time.12.ptmalloc.256:19.99 user 12.10 system 11.57 elapsed 277% CPU +time.12.tcmalloc.256:5.01 user 0.03 system 1.29 elapsed 390% CPU +time.12.ptmalloc.512:21.85 user 12.66 system 11.46 elapsed 300% CPU +time.12.tcmalloc.512:5.05 user 0.00 system 1.32 elapsed 379% CPU +time.12.ptmalloc.1024:9.40 user 0.04 system 2.40 elapsed 393% CPU +time.12.tcmalloc.1024:5.14 user 0.02 system 1.39 elapsed 369% CPU +time.12.ptmalloc.2048:9.72 user 0.04 system 2.49 elapsed 391% CPU +time.12.tcmalloc.2048:5.74 user 0.05 system 1.62 elapsed 355% CPU +time.12.ptmalloc.4096:10.64 user 0.20 system 2.75 elapsed 393% CPU +time.12.tcmalloc.4096:4.45 user 0.03 system 2.04 elapsed 218% CPU +time.12.ptmalloc.8192:12.66 user 3.30 system 4.30 elapsed 371% CPU +time.12.tcmalloc.8192:4.21 user 0.13 system 2.65 elapsed 163% CPU +time.12.ptmalloc.16384:15.73 user 15.68 system 11.14 elapsed 281% CPU +time.12.tcmalloc.16384:4.17 user 0.06 system 4.10 elapsed 102% CPU +time.12.ptmalloc.32768:19.45 user 56.00 system 32.74 elapsed 230% CPU +time.12.tcmalloc.32768:6.96 user 0.08 system 7.14 elapsed 98% CPU +time.12.ptmalloc.65536:23.33 user 110.45 system 65.06 elapsed 205% CPU +time.12.tcmalloc.65536:7.77 user 0.15 system 7.72 elapsed 102% CPU +time.12.ptmalloc.131072:24.03 user 124.74 system 82.94 elapsed 179% CPU +time.12.tcmalloc.131072:10.81 user 0.06 system 10.94 elapsed 99% CPU +time.13.ptmalloc.64:14.08 user 7.60 system 8.85 elapsed 244% CPU +time.13.tcmalloc.64:5.51 user 0.01 system 1.47 elapsed 375% CPU +time.13.ptmalloc.128:18.20 user 10.98 system 10.99 elapsed 265% CPU +time.13.tcmalloc.128:5.34 user 0.01 system 1.39 elapsed 382% CPU +time.13.ptmalloc.256:21.48 user 13.94 system 12.25 elapsed 289% CPU +time.13.tcmalloc.256:5.33 user 0.01 system 1.39 elapsed 381% CPU +time.13.ptmalloc.512:24.22 user 14.84 system 12.97 elapsed 301% CPU +time.13.tcmalloc.512:5.49 user 0.02 system 1.41 elapsed 389% CPU +time.13.ptmalloc.1024:25.26 user 17.03 system 12.85 elapsed 328% CPU +time.13.tcmalloc.1024:5.65 user 0.04 system 1.50 elapsed 378% CPU +time.13.ptmalloc.2048:10.41 user 0.03 system 2.69 elapsed 387% CPU +time.13.tcmalloc.2048:5.93 user 0.10 system 1.77 elapsed 339% CPU +time.13.ptmalloc.4096:11.37 user 0.52 system 3.04 elapsed 391% CPU +time.13.tcmalloc.4096:5.08 user 0.11 system 2.22 elapsed 233% CPU +time.13.ptmalloc.8192:21.76 user 18.54 system 10.58 elapsed 380% CPU +time.13.tcmalloc.8192:5.04 user 0.16 system 2.93 elapsed 177% CPU +time.13.ptmalloc.16384:26.35 user 34.47 system 17.01 elapsed 357% CPU +time.13.tcmalloc.16384:4.66 user 0.04 system 4.66 elapsed 100% CPU +time.13.ptmalloc.32768:21.41 user 63.59 system 38.14 elapsed 222% CPU +time.13.tcmalloc.32768:7.71 user 0.03 system 7.83 elapsed 98% CPU +time.13.ptmalloc.65536:24.99 user 120.80 system 71.59 elapsed 203% CPU +time.13.tcmalloc.65536:8.87 user 0.64 system 8.37 elapsed 113% CPU +time.13.ptmalloc.131072:25.97 user 142.27 system 96.00 elapsed 175% CPU +time.13.tcmalloc.131072:11.48 user 0.06 system 11.67 elapsed 98% CPU +time.14.ptmalloc.64:15.01 user 9.11 system 9.41 elapsed 256% CPU +time.14.tcmalloc.64:5.98 user 0.02 system 1.58 elapsed 378% CPU +time.14.ptmalloc.128:20.34 user 12.72 system 11.62 elapsed 284% CPU +time.14.tcmalloc.128:5.88 user 0.04 system 1.51 elapsed 392% CPU +time.14.ptmalloc.256:24.26 user 14.95 system 12.92 elapsed 303% CPU +time.14.tcmalloc.256:5.72 user 0.02 system 1.50 elapsed 381% CPU +time.14.ptmalloc.512:27.28 user 16.45 system 13.89 elapsed 314% CPU +time.14.tcmalloc.512:5.99 user 0.02 system 1.54 elapsed 388% CPU +time.14.ptmalloc.1024:25.84 user 16.99 system 12.61 elapsed 339% CPU +time.14.tcmalloc.1024:5.94 user 0.06 system 1.59 elapsed 375% CPU +time.14.ptmalloc.2048:11.96 user 0.01 system 3.12 elapsed 382% CPU +time.14.tcmalloc.2048:6.39 user 0.07 system 1.79 elapsed 359% CPU +time.14.ptmalloc.4096:20.19 user 11.77 system 8.26 elapsed 386% CPU +time.14.tcmalloc.4096:5.65 user 0.05 system 2.32 elapsed 244% CPU +time.14.ptmalloc.8192:22.01 user 16.39 system 9.89 elapsed 387% CPU +time.14.tcmalloc.8192:5.44 user 0.11 system 3.07 elapsed 180% CPU +time.14.ptmalloc.16384:18.15 user 22.40 system 15.02 elapsed 269% CPU +time.14.tcmalloc.16384:5.29 user 0.08 system 5.34 elapsed 100% CPU +time.14.ptmalloc.32768:24.29 user 72.07 system 42.63 elapsed 225% CPU +time.14.tcmalloc.32768:8.47 user 0.02 system 8.62 elapsed 98% CPU +time.14.ptmalloc.65536:27.63 user 130.56 system 78.64 elapsed 201% CPU +time.14.tcmalloc.65536:9.85 user 1.61 system 9.04 elapsed 126% CPU +time.14.ptmalloc.131072:28.87 user 146.38 system 100.54 elapsed 174% CPU +time.14.tcmalloc.131072:12.46 user 0.11 system 12.71 elapsed 98% CPU +time.15.ptmalloc.64:16.25 user 10.05 system 9.82 elapsed 267% CPU +time.15.tcmalloc.64:6.30 user 0.02 system 1.64 elapsed 385% CPU +time.15.ptmalloc.128:22.33 user 13.23 system 12.24 elapsed 290% CPU +time.15.tcmalloc.128:6.08 user 0.03 system 1.59 elapsed 384% CPU +time.15.ptmalloc.256:26.56 user 16.57 system 13.70 elapsed 314% CPU +time.15.tcmalloc.256:6.14 user 0.03 system 1.61 elapsed 382% CPU +time.15.ptmalloc.512:29.68 user 18.08 system 14.56 elapsed 327% CPU +time.15.tcmalloc.512:6.12 user 0.04 system 1.68 elapsed 364% CPU +time.15.ptmalloc.1024:17.07 user 6.22 system 6.26 elapsed 371% CPU +time.15.tcmalloc.1024:6.38 user 0.02 system 1.75 elapsed 364% CPU +time.15.ptmalloc.2048:26.64 user 17.25 system 11.51 elapsed 381% CPU +time.15.tcmalloc.2048:6.77 user 0.18 system 1.92 elapsed 361% CPU +time.15.ptmalloc.4096:13.21 user 0.74 system 3.57 elapsed 390% CPU +time.15.tcmalloc.4096:6.03 user 0.09 system 2.36 elapsed 258% CPU +time.15.ptmalloc.8192:22.92 user 17.51 system 10.50 elapsed 385% CPU +time.15.tcmalloc.8192:5.96 user 0.12 system 3.36 elapsed 180% CPU +time.15.ptmalloc.16384:19.37 user 24.87 system 16.69 elapsed 264% CPU +time.15.tcmalloc.16384:5.88 user 0.07 system 5.84 elapsed 101% CPU +time.15.ptmalloc.32768:25.43 user 82.30 system 48.98 elapsed 219% CPU +time.15.tcmalloc.32768:9.11 user 0.05 system 9.30 elapsed 98% CPU +time.15.ptmalloc.65536:29.31 user 140.07 system 83.78 elapsed 202% CPU +time.15.tcmalloc.65536:8.51 user 1.59 system 9.75 elapsed 103% CPU +time.15.ptmalloc.131072:30.22 user 163.15 system 109.50 elapsed 176% CPU +time.15.tcmalloc.131072:13.35 user 0.10 system 13.54 elapsed 99% CPU +time.16.ptmalloc.64:17.69 user 10.11 system 10.11 elapsed 274% CPU +time.16.tcmalloc.64:6.63 user 0.04 system 1.72 elapsed 387% CPU +time.16.ptmalloc.128:23.05 user 14.37 system 12.75 elapsed 293% CPU +time.16.tcmalloc.128:6.61 user 0.02 system 1.71 elapsed 387% CPU +time.16.ptmalloc.256:29.11 user 19.35 system 14.57 elapsed 332% CPU +time.16.tcmalloc.256:6.62 user 0.03 system 1.73 elapsed 382% CPU +time.16.ptmalloc.512:31.65 user 18.71 system 14.71 elapsed 342% CPU +time.16.tcmalloc.512:6.63 user 0.04 system 1.73 elapsed 383% CPU +time.16.ptmalloc.1024:31.99 user 21.22 system 14.87 elapsed 357% CPU +time.16.tcmalloc.1024:6.81 user 0.04 system 1.79 elapsed 382% CPU +time.16.ptmalloc.2048:30.35 user 21.36 system 13.30 elapsed 388% CPU +time.16.tcmalloc.2048:6.91 user 0.50 system 2.01 elapsed 367% CPU +time.16.ptmalloc.4096:18.85 user 7.18 system 6.61 elapsed 393% CPU +time.16.tcmalloc.4096:6.70 user 0.10 system 2.62 elapsed 259% CPU +time.16.ptmalloc.8192:22.19 user 14.30 system 9.37 elapsed 389% CPU +time.16.tcmalloc.8192:6.18 user 0.19 system 3.58 elapsed 177% CPU +time.16.ptmalloc.16384:31.22 user 46.78 system 22.92 elapsed 340% CPU +time.16.tcmalloc.16384:6.79 user 0.07 system 6.86 elapsed 99% CPU +time.16.ptmalloc.32768:27.31 user 87.32 system 52.00 elapsed 220% CPU +time.16.tcmalloc.32768:9.85 user 0.06 system 10.07 elapsed 98% CPU +time.16.ptmalloc.65536:32.83 user 160.62 system 95.67 elapsed 202% CPU +time.16.tcmalloc.65536:10.18 user 0.09 system 10.41 elapsed 98% CPU +time.16.ptmalloc.131072:31.99 user 173.41 system 115.98 elapsed 177% CPU +time.16.tcmalloc.131072:14.52 user 0.05 system 14.67 elapsed 99% CPU +time.17.ptmalloc.64:19.38 user 11.61 system 10.61 elapsed 291% CPU +time.17.tcmalloc.64:7.11 user 0.02 system 1.84 elapsed 386% CPU +time.17.ptmalloc.128:26.25 user 16.15 system 13.53 elapsed 313% CPU +time.17.tcmalloc.128:6.97 user 0.02 system 1.78 elapsed 390% CPU +time.17.ptmalloc.256:30.66 user 18.36 system 14.97 elapsed 327% CPU +time.17.tcmalloc.256:6.94 user 0.04 system 1.80 elapsed 387% CPU +time.17.ptmalloc.512:33.71 user 22.79 system 15.95 elapsed 354% CPU +time.17.tcmalloc.512:7.00 user 0.02 system 1.83 elapsed 381% CPU +time.17.ptmalloc.1024:33.49 user 22.47 system 15.00 elapsed 373% CPU +time.17.tcmalloc.1024:7.20 user 0.03 system 1.90 elapsed 380% CPU +time.17.ptmalloc.2048:23.87 user 11.92 system 9.26 elapsed 386% CPU +time.17.tcmalloc.2048:6.01 user 1.83 system 2.15 elapsed 363% CPU +time.17.ptmalloc.4096:14.69 user 0.95 system 3.98 elapsed 392% CPU +time.17.tcmalloc.4096:7.25 user 0.10 system 2.62 elapsed 279% CPU +time.17.ptmalloc.8192:22.44 user 13.52 system 9.39 elapsed 382% CPU +time.17.tcmalloc.8192:7.21 user 0.24 system 3.95 elapsed 188% CPU +time.17.ptmalloc.16384:23.33 user 33.67 system 21.89 elapsed 260% CPU +time.17.tcmalloc.16384:7.28 user 0.06 system 7.10 elapsed 103% CPU +time.17.ptmalloc.32768:29.35 user 103.11 system 60.36 elapsed 219% CPU +time.17.tcmalloc.32768:10.53 user 0.07 system 10.71 elapsed 98% CPU +time.17.ptmalloc.65536:33.21 user 170.89 system 100.84 elapsed 202% CPU +time.17.tcmalloc.65536:10.85 user 0.05 system 11.04 elapsed 98% CPU +time.17.ptmalloc.131072:34.98 user 182.87 system 122.05 elapsed 178% CPU +time.17.tcmalloc.131072:15.27 user 0.09 system 15.49 elapsed 99% CPU +time.18.ptmalloc.64:21.08 user 12.15 system 11.43 elapsed 290% CPU +time.18.tcmalloc.64:7.45 user 0.03 system 1.95 elapsed 383% CPU +time.18.ptmalloc.128:27.65 user 17.26 system 14.03 elapsed 320% CPU +time.18.tcmalloc.128:7.46 user 0.03 system 1.92 elapsed 389% CPU +time.18.ptmalloc.256:32.78 user 20.55 system 15.70 elapsed 339% CPU +time.18.tcmalloc.256:7.31 user 0.02 system 1.88 elapsed 389% CPU +time.18.ptmalloc.512:33.31 user 20.06 system 15.05 elapsed 354% CPU +time.18.tcmalloc.512:7.33 user 0.02 system 1.91 elapsed 383% CPU +time.18.ptmalloc.1024:35.46 user 24.83 system 16.30 elapsed 369% CPU +time.18.tcmalloc.1024:7.60 user 0.06 system 2.05 elapsed 373% CPU +time.18.ptmalloc.2048:19.98 user 6.80 system 6.76 elapsed 395% CPU +time.18.tcmalloc.2048:6.89 user 1.29 system 2.28 elapsed 357% CPU +time.18.ptmalloc.4096:15.99 user 0.93 system 4.32 elapsed 391% CPU +time.18.tcmalloc.4096:7.70 user 0.10 system 2.77 elapsed 280% CPU +time.18.ptmalloc.8192:23.51 user 14.84 system 9.97 elapsed 384% CPU +time.18.tcmalloc.8192:8.16 user 0.27 system 4.25 elapsed 197% CPU +time.18.ptmalloc.16384:35.79 user 52.41 system 26.47 elapsed 333% CPU +time.18.tcmalloc.16384:7.81 user 0.07 system 7.61 elapsed 103% CPU +time.18.ptmalloc.32768:33.17 user 116.07 system 68.64 elapsed 217% CPU +time.18.tcmalloc.32768:11.34 user 0.13 system 11.57 elapsed 99% CPU +time.18.ptmalloc.65536:35.91 user 177.82 system 106.75 elapsed 200% CPU +time.18.tcmalloc.65536:11.54 user 0.06 system 11.74 elapsed 98% CPU +time.18.ptmalloc.131072:36.38 user 187.18 system 126.91 elapsed 176% CPU +time.18.tcmalloc.131072:16.34 user 0.05 system 16.43 elapsed 99% CPU +time.19.ptmalloc.64:22.90 user 13.23 system 11.82 elapsed 305% CPU +time.19.tcmalloc.64:7.81 user 0.02 system 2.01 elapsed 388% CPU +time.19.ptmalloc.128:30.13 user 18.58 system 14.77 elapsed 329% CPU +time.19.tcmalloc.128:7.74 user 0.02 system 2.01 elapsed 386% CPU +time.19.ptmalloc.256:35.33 user 21.41 system 16.35 elapsed 347% CPU +time.19.tcmalloc.256:7.79 user 0.04 system 2.04 elapsed 382% CPU +time.19.ptmalloc.512:39.30 user 26.22 system 17.84 elapsed 367% CPU +time.19.tcmalloc.512:7.80 user 0.06 system 2.05 elapsed 381% CPU +time.19.ptmalloc.1024:35.70 user 23.90 system 15.66 elapsed 380% CPU +time.19.tcmalloc.1024:8.08 user 0.06 system 2.16 elapsed 376% CPU +time.19.ptmalloc.2048:18.33 user 3.28 system 5.47 elapsed 394% CPU +time.19.tcmalloc.2048:8.71 user 0.05 system 2.40 elapsed 363% CPU +time.19.ptmalloc.4096:16.94 user 0.89 system 4.64 elapsed 383% CPU +time.19.tcmalloc.4096:8.21 user 0.07 system 2.85 elapsed 289% CPU +time.19.ptmalloc.8192:25.61 user 17.15 system 11.33 elapsed 377% CPU +time.19.tcmalloc.8192:8.79 user 0.30 system 4.58 elapsed 198% CPU +time.19.ptmalloc.16384:27.11 user 46.66 system 29.67 elapsed 248% CPU +time.19.tcmalloc.16384:8.64 user 0.05 system 8.58 elapsed 101% CPU +time.19.ptmalloc.32768:33.80 user 117.69 system 70.65 elapsed 214% CPU +time.19.tcmalloc.32768:11.88 user 0.07 system 12.04 elapsed 99% CPU +time.19.ptmalloc.65536:36.90 user 180.21 system 109.01 elapsed 199% CPU +time.19.tcmalloc.65536:12.17 user 0.07 system 12.40 elapsed 98% CPU +time.19.ptmalloc.131072:38.50 user 195.15 system 132.81 elapsed 175% CPU +time.19.tcmalloc.131072:17.44 user 0.10 system 17.65 elapsed 99% CPU +time.20.ptmalloc.64:23.37 user 13.74 system 11.86 elapsed 312% CPU +time.20.tcmalloc.64:8.18 user 0.02 system 2.10 elapsed 389% CPU +time.20.ptmalloc.128:31.29 user 19.97 system 15.53 elapsed 329% CPU +time.20.tcmalloc.128:8.03 user 0.02 system 2.12 elapsed 378% CPU +time.20.ptmalloc.256:38.40 user 25.65 system 18.25 elapsed 350% CPU +time.20.tcmalloc.256:8.05 user 0.05 system 2.12 elapsed 380% CPU +time.20.ptmalloc.512:40.60 user 27.70 system 18.46 elapsed 369% CPU +time.20.tcmalloc.512:8.22 user 0.08 system 2.20 elapsed 375% CPU +time.20.ptmalloc.1024:40.02 user 28.52 system 17.56 elapsed 390% CPU +time.20.tcmalloc.1024:8.50 user 0.07 system 2.19 elapsed 391% CPU +time.20.ptmalloc.2048:16.13 user 0.23 system 4.23 elapsed 386% CPU +time.20.tcmalloc.2048:8.98 user 0.03 system 2.45 elapsed 367% CPU +time.20.ptmalloc.4096:17.14 user 0.87 system 4.60 elapsed 391% CPU +time.20.tcmalloc.4096:8.93 user 0.20 system 2.97 elapsed 306% CPU +time.20.ptmalloc.8192:25.24 user 17.16 system 11.14 elapsed 380% CPU +time.20.tcmalloc.8192:9.78 user 0.30 system 5.14 elapsed 195% CPU +time.20.ptmalloc.16384:39.93 user 60.36 system 30.24 elapsed 331% CPU +time.20.tcmalloc.16384:9.57 user 0.09 system 9.43 elapsed 102% CPU +time.20.ptmalloc.32768:36.44 user 130.23 system 76.79 elapsed 217% CPU +time.20.tcmalloc.32768:12.71 user 0.09 system 12.97 elapsed 98% CPU +time.20.ptmalloc.65536:39.79 user 202.09 system 120.34 elapsed 200% CPU +time.20.tcmalloc.65536:12.93 user 0.06 system 13.15 elapsed 98% CPU +time.20.ptmalloc.131072:41.91 user 202.76 system 138.51 elapsed 176% CPU +time.20.tcmalloc.131072:18.23 user 0.07 system 18.42 elapsed 99% CPU diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.1024.bytes.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.1024.bytes.png new file mode 100644 index 0000000000000000000000000000000000000000..8c0ae6b59c2950c54db6f0c4f9b7fd585bcfdb71 GIT binary patch literal 1882 zcmV-g2c`IlP)aBOdMAa-SPb7^mGATusEAaG%HV`yw;c4cfJGazqnAWUg)b$B2$E;KGO zGA(CkIctq$djJ3i*hxe|RCt{2o6m3CHWbG_1VwMleJiSeVA#$>h6(#4jNX>NVEu7v zvSup_6j*P`A5fsVH^X}9AqBFQ3wH3SFoqq1p>UWXK#SIBxPzL^kphPe`bMN&o z1w6Xef;IWW@|*4E>U#gny?xkiw#3WU?X~$5@MarAxw3gP46a}4MNtcOe_0UETfz0R zHeLF?!sAfE?rYGBZ4s1!S6guB;#bR^ zUSl;lUe;|~yWokJe}}6jiW5>aeu4__bHPG71K&9?o-Zvn0c0zBOb~)j%`KhJz{I~O z+{moz$#9r*KB+1f1dj_&EAW4U4#@$GKVFcBFBl*^{>$$r#d@w__faowtZ7&849b;o zYw1|q%|~uv?~w)tL-E-rD!RAv$-<*+``AWs1as-b1mg>z@=PuczE4fg8N892oGa+v zNKCGK|Ni|AClFRrlXF#smDJ?i!84Qlz(K_YA8^4-T<{Af*l#kyLx---flV&x_jq6* znBZY?hCl-2CKHT&mzPKb>`EpW2>`(XQH}*-k~0UDGpM-W`T!iCv6q93OfXg*KRu+S z_H21xZ*Cj*;V)Y=u? z$l~Ofq!S2iaD6ZfAcKQhK*Lm24vJv5(G4_u)dk!H<319-Rn|GD2@<_k0zTt{x$ulHTF+qS;QExcd- zn%C~vY62BCd(O5{BH`ROdbgMTXh8ftAHm!rB;n$ujj7@|xYLPaPjx=Y6hY^I8!fU! z*2V((YF^8sO4dew=ofpq2>yYaxm>yK7-t9DxXBO8f`7My>5ZP6tRN+w5-7N!d_<067F?~qQQG4Ei9yV=2Kw=k(0KyU)t@l_LaQrs~>=>p#3DuMwj zF6g9a-VW*oPS&d?=oDUKE1GR|ijo0WF$W4dIQ~vfR}>~F9l-TU6cruhw-HRxC7zQ5 z*@`Z)j%pOyAq%!5JJw-KiUbOhEKSieQMZ5+(n(nbikl=*=}%8qqqsx@lNar36l06w zTR_YOsuIP>V)zyi>!nKlKnBXGiWUpZKz{^AW!IrA_NFMx(JTN<$uiHA%>t$?hL$Ih zt*W||DD^y~xm93!64?v@X9Hx#sg@I1oQ@5|Fi5G>At@@NVu0ovT@=+&D>vFFfkj1S z9#9nrHg9y#WKb3^kgEelQI5VIv6I1_@e_GlnhZvZ$*vCBdN>z_E8PzBKDVJ3eL z^_U?0pR;k33qD}}J2<`q?rG3QCP-Y%w}71V-hq9gH*YYPyi+BA+4A%!#K5G&oRqrv z@dwTk7Ta&6U=lJoz}z8j@F=-QFEA8(4|Be+FOOG!i^W=78R$c5QOQE7$iVO+q*LZ6 zsE8IAAs9VO!LH1zic1PGKdkCTR@KJ{c7|2mNWr%VCib(9o28-RUA@`GQ@?tsC{jgr z*KA`j?3@v}m4Qj;jKD3kSNDeCT2|G4?A2AQxu?PYvd$c1Rks`OpXHo^vjSt;LAN={ z15N{@fCcuw=;fb{wa-0<;`66l|32j?9;n+t9rz5z10}CF6$@CW~x&QzG literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.128.bytes.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.128.bytes.png new file mode 100644 index 0000000000000000000000000000000000000000..24b2a27410fdd5b14b0b59ab74eaef125e097108 GIT binary patch literal 1731 zcmV;!20ZzRP)aBOdMAa-SPb7^mGATusEAaG%HV`yw;c4cfJGazqnAWUg)b$B2$E;KGO zGA(CkIctq$djJ3iK}keGRCt{2oK0&RM;OOdObN6k`T%v=V=tx0P{={_3p6L;Lrc|D zkA1n=ZcM!?f#w!}fIxgL_Q8ix5|ERL$w7w_d?+E5;Es!+A-HHAg1fS%-KR6NGpm)f zFY`Q-*Kw;c8jqL#?f;pXXWmz?05Mc%;0!!#a7lb#zYx)?{EGtwuiD^>pCa%B@#*;@ zGPfRg_N>5#_j$MHx7Oz8yD#DKolCVK+=Ea5o?mv0zz%~Izq#bC`dX?3XX*t_{M=@l?sv-9U=(cVFed17*KXGvR?vV z#`Hi&IoFk`R1h30n0Lczf{1_s!%J6~8W^x3Jovq)1_tP1!IS%PU;sEmgG>$#UEw!x z;lSQ~IWQ0upWl;;_&h$ma$gP%VD3NldOSy9IR75aZDpHac427_K%U`vBNEC>b+$^sv2(8q$z zfQVhTA<)BuoC@AB;MlHx0jLu~xh&9l4#R@RSD7l`GC>y$nmoFQF(6s0A!hKH4Agy2 zka9GU4>r#V>|w^`WOd*{o$$*8ccWeF$XX1z8SRsM1Q5vJx>yBpy_0PdqE$dEQpAAq zx7$pL{Vw6w?!%!fHxIvW< z@;4lW0chQ^P6W!fkO*rkF;ZvM@2Xpev= zc`65Siox5-wUr1#hN2o99?3|mz~`0r=yIN=gVK`l-MLUMP6O!9ja5fhgOqz=fBOB4 z?)6IbWdA}V0+$kCdh-b1c?1s~!B^a^!-^y9Ql;9<1?3cPCxE$6KotRx3UCY@byn3; z|11pcS7G!3dI%i$IR*#)=nNmAG4eo>$3*KG8Iv3Pl{ulf6+L7OOqw_}LWULRAY&Rk z1`Z87-9}~u9S4&ZwT8{h2l?Q4zn00RfTkjaYqhhv6i_EZ;aUzJ4B7wKYzAfp`a__c zOENnU%)2Wp$j;og1@+r9DuhfsxB=7ZXrVxG#_}XTg zWWeO5oj|@N~}9@A+=ObA2j

52$?VnwDv!cl2$GDYn9 zqXda>1ZhR=5!(Q?4O>Hro?Su( zP99{67PgLhJ>3OunpLXbTeZhP$d1}<-;nE3aM7R+PqjL&>k#b1*{sTE;0*l#fLull zO8IiALj=j+oDFxW;1==Q!6D+c-Z(^gB!c7LsJ8_v;oO1hMWRga{s3cVv!wVHUmeCn~hZLev-8fcGFXAiCc z{ku|8rXDi=Zge2Q;I0PMt4qpMd87c<*wjs9>H`TL#-?s+@K}P%e|BWF6f52q(I4{C zwj&i?t;laD^XSEeGXR?gRE0ADo5@n$kHIx#YFn1-Eor$U!2YsGbfu{~t@GzOGq5Z$ zWQVfb%<2L2z`!GceJ6PNTWjqjhoJb^ljc89D2g3^#>R literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.131072.bytes.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.131072.bytes.png new file mode 100644 index 0000000000000000000000000000000000000000..183a77b9c9f2c969793de0185503e6c6daf2806c GIT binary patch literal 1314 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 FV1iolL~;NC literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.2048.bytes.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.2048.bytes.png new file mode 100644 index 0000000000000000000000000000000000000000..169546f2406351f10c7c227524cb0f938561b3bb GIT binary patch literal 1877 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 literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.32768.bytes.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.32768.bytes.png new file mode 100644 index 0000000000000000000000000000000000000000..18715e3a5abfbb2d8534c2ee3809057a39a872b4 GIT binary patch literal 1516 zcmVaBOdMAa-SPb7^mGATusEAaG%HV`yw;c4cfJGazqnAWUg)b$B2$E;KGO zGA(CkIctq$djJ3hYDq*vRCt{2oX>0AMij@ln6l7Ad~XZ-2TFSlq(#U63q2I}4=5oC zl&)(xl_3z{>_d;C@v%i)>Vpp(Q0>9^pi}UnhqeUoY*=V$Osx&3mAzWc>x@=fOS}3p z^P(!=L=Sct@9MMPd2il~G_#T$fV4&p*5E4!E&jSV;{`Ez;Q)+R`e!x+Rs?>>U%n^6 z@C~o~tz$`molR$a*BjWI*S`4@o*p$dAa|+7zW@FDumE&hu;(3HE?L_(sB`MD74Ohy zH+$}_0v|WX_!IA#Y>>6CF>rdz&~=Y3_IGc1rvPlXJfYa$;h^vAa~~ZJ-t2W*0eIgT zUw<*MH+mnpjYGSsjc?x?*zBRU@-!dJGCK3OEXZ^uIA=9@(%=tP@Ic0D)OgU9h zTMbffWSVA2352yUOKa?J z0odT+LG-T=<%|wj-1$Q#z}a=j3HS!=NPx4efOT;P){-(v`dBR`gj=&+4XGa2QkJ>J9BA<6b&9xq-mmNq*ewHvAulHiYe$^riEr5%{-8aJ_@^J!Y67;w>1D!3kjAEklZc7~1F zu1Q3drT7vUo$s0in3H3dT|;AF)E#HpAWXX^7&RmrRVNn=x<=f8#v9g3f>|zJ`o$H0 zZma?ya|uu{0Ab?edILUh3}QaY-rzYB&3-!;)!cy_v*5Tv49pMejK!|WS$C`DrQ95VOp0000aBOdMAa-SPb7^mGATusEAaG%HV`yw;c4cfJGazqnAWUg)b$B2$E;KGO zGA(CkIctq$djJ3jQ%OWYRCt{2n@wvRHyFn^1nNVfKDN-3IrdW8b4ke_@)=BT^*6}N zC3fR9Dg^4A{Q*L|$AAsVA%_H}+1x2YW_4tDpXQd8Cmvvo#=EZ30ffcMJwh9!|(Z;LAWH|NUbpm=Asx_*#Knf!UP@ zFI!*%?wxJHGQTkYYJFp=(ffXD8?N5pgy*eG%hMI$#T^Lv!i|f8f9`Y`MJ+gW^$Yf- z<)5o6!CD@jr-}@z8hfhv#^4*p{c)=Fjrh-E@0pB|?p012m0+JOyA_#uF=4MkF zsK*zf4m``c?hYfa>#R~i@TlOZ2yYW~Fb6RH>^Oh(lmNo*$MsN03thqP%`j*#%c0&G zdr$0p`nk}&OQYCmcoN&OwZlA6<7e- z7!Y~RU@``DpO(b$2a7RBRtwXYD?Mnaa*`gok?>BSNa%($sM~`%uCJ6AB~Nn=*bvNX7n?OJP_O;WjH0j_5I% zu?o1wK!r!UK(Y#G_9?<*(i?fTBA8_a=P8lc26HicaW@d z`oJB196j!!pv}D!1ygHOf}1$_vJy11XWDBj_%Evh1rBycJw6)+Ms56hB?vIh(>8Sl z+p}9oNMKy^o~g4a0ig_(!$?q2)dJWzAjM=M}cu279UeU zc+g?U_+tUSn!-9tbs3>k2jmu1QLD<-L}GXtu>jQ&GF(Uv)<=Tce#gLARD=Ie!L~Or zvfF~)t*P0;kq#wzPjU5P-BMdB$z8EQ)|LD zsYiVlkQC2-n>405K>qZBzQ0NanHxB`?yv@nRRE`gWJSmQ)sl5bH3&Iqj~}cZiwy+w z#;l_vc}MpVRq@vxbleICs-gihC$Min#|1Q+gHu7WqT5z5xr|VN*8G9m(VUZ8caPve zbAUzxT6d2FDfX>9n2RD175hLjc17C+4o}gxA%_(i6(lQ)u`61paEOYQ?Qw{TmJM01 z_;6-s24L?;dyp63&dki}^NZnavMZ&EDX)h;(Ou22>+Oel1yK}O&f+}IofQD%HB>&N z$dXeukb7w>D^QfNUV!+0N2T-9NU&5fn+-%pWYco6SOws&pmO^cj<8;>EY-+6q-v<-`0QX-B+!sJdpNsPj@^%`?pL%p)K^Eeljug2Jy#70toR zQW5Wvq52C8?<-aGjR58n7|4-$s;<>bLwN<1Dhfjpb9)RFNIWGad6qYFsUkOGU@2i> zS%(znyK1G1EDMBqZDC+phm^eU8<9}O!tWy7BQUV6LrOl(b6u?%<6e(}c!vxWUp%!h zQ#4?9K*g}X=w*sVEQTh8f%p&*^(S4XX!bI+c~FpHG2?z0E>kpO3DgBqkYh2`qi_pF zVThyM3CrNzjAY! z)6PLFz0tnAw}L0&`vwYi;4qdShk8Vi{L9&Rg9=_F{yI254epkdkqClE1u6EyfjuS< zuT)6S74%D1p8OBg#-vaowX%wPG7za~+szczcZgjTdZP~NlWwD@YAf^)6{^=|@+#GR z6|J?FfpthdO0S+-1_sxaq6*znipm2c1xD9Xu*i6BI^Q^9BS-q{mcAnMM6x>&! z_Mdfin9CI}L$XwbTb@#6siL@SmeJ2ErvTS7P*+X?u9>yEm4nM!R<~8HE~%V*670>( zKu2YDz4_sJ&IBA681uFoHp@o9QDEegz@8U9|FgOLtw&INa)0f=`xM1pap||+Ize$) n@N*l21U47HaaOFb@q_;Z1{uC=B3MJY00000NkvXXu0mjfT!NvR literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.512.bytes.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.512.bytes.png new file mode 100644 index 0000000000000000000000000000000000000000..aea1d676471c03d918d78838004355f524d1e74c GIT binary patch literal 1683 zcmV;E25k9>P)aBOdMAa-SPb7^mGATusEAaG%HV`yw;c4cfJGazqnAWUg)b$B2$E;KGO zGA(CkIctq$djJ3i5lKWrRCt{2o6l<-M-<05nBqgI^#{~tkG+&0Lm>xIdT&p{hnDKr zW7=M9*P>oSpt;3=Kp?)`P#|$SC+K#T0L@ArEcKTLexm-nj*7xZ zo%1s-aOq>&?mD&2#l`k3c=~Xm*zCIS)jx}?RvOq4P;sg&_PX;u2ze$!W%ZU_*-N#t zV6_!!71o_QP?HBHR3t3htDmQV%MIZuaM}J&fnE6vI10RFe=}m`1jP?!`=@$svv9E5 zfP42BitRT?@O9zf$27&s!5;lW7c{xxShxnS9OxCeAY0L7f?zidT9^+(>|(HA0uW)= zU5paG_p{0c!Q_HT54=r~5D1{Ra9j8T0~LhFe-!6Lbk)kPX<)9dx=((9Ru{Zr-5C z9kdAZ-8kq`Cd!$BE(er8IJWRk2e%x5`a%cGj-Mujo@^E|Ep$0=K3wTI{vuc#94Z_( zC^=wYpv)EYEGFo3!H$@)EupK(0Q2f=$45S>J4G4;b(=?q zpdf&d2`KeJY|Sh%JZk9&&E}CIsM$QmZ6tuh&ucc1>A+$f)NCHUjWQEZvt4n(=%_Td zw!%EM%o zfs6z(^l2g(tAb0zM9|T2*omM{_}_pQ7ZhAjazUF5I$RK9^Hm}^m?2XY*`OJ&0yIN( z7QihWK3JHM))8NKkihsV;EIFsbq5KA+`;|^0`0P$GqPpD0xdFl%2nLxCnOmJu40fN z+&>tq4u)b-sw6g(dL$g`Pite4AUW$)^%%{`Evll$RD`Vn6nQB|HcF}@Fcl+^0%xO0 zan@`U3HL!VQlvDGj0PQ%yQ0ipk$abnugJYF#aHBBUg9VUA7or5Do&@!xGf`?tAJ2Z z(iNv%Td}X8&=muaeanKa$iDNyRwUj)$Uu>J$ex9w%w3Uoa-D@D?Qk{=MYqgVY%MWC zUCjwL>YWHrDx6a;=;}yLtd0{6a&kSMl$jv3N~IL`a?fdT!Gx{-6fjvb$;lHXlfYII znb@q796q@{x|dfS9iea4B>;V)%_~84Me%H~LE?H2r&~|d4bAr-tskAg>`{dW) z)dVF*0&;md)MSF}H)p+LF1X8lJJ=(>6J`$VSt@#iDSsY#jFGAS z9o(3dm=Z#jK3-CD@v(X>0K4jIXkh9bBmCso(M#M4eTb=IQT;sr>IFV_Rt>=-1RnJo zBP#@*N2rLYLsUc$bP;qP1t7k_(9bF!DL^60>Q0!|#|So~tnLKh1%kf+9AUH)DLzoq zpZL{*iHcUBC?CXaw4=fqfYlK63ugdU5x;6{!neMCKYnz{$48^~nRsVg)QEbS&zcz{t#fB8i$C3rs?tMyD dObPje{{dYTv%BVIT4?|P002ovPDHLkV1fWh2Rr}( literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.64.bytes.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.64.bytes.png new file mode 100644 index 0000000000000000000000000000000000000000..3a080de753381d204783087f8a7f387ea25e2d0c GIT binary patch literal 1656 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 A(f|Me literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.8192.bytes.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspercpusec.vs.threads.8192.bytes.png new file mode 100644 index 0000000000000000000000000000000000000000..3a99cbc8b1fa25b069a6cb0e5f701bfdae71d215 GIT binary patch literal 1912 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 literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.12.threads.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.12.threads.png new file mode 100644 index 0000000000000000000000000000000000000000..d45458ac1a0280496a5b47a63d9deac91661c0bb GIT binary patch literal 2216 zcmV;Z2v_%sP)aBOdMAa-SPb7^mGATusEAaG%HV`yw;c4cfJGazqnAWUg)b$B2$E;KGO zGA(CkIctq$djJ3kCP_p=RCt{2o6m0)Hx$QHAvK4p$*CvOz7t ztzwBVJN9S3&wk&Tv1fM2z_W~16be1R1Zuo(tZi_VphZkAUVbfE0n<`q$DR>G3Y_&YW1>p&9uKI%Q-LXbx zJOdwyzWf_Pe7%q*4m^)hM`#FE%7*|( zzTk)vO{1x^M$7HCD6oGuvm6TUe*P5+Udt?}gCRVeiQo(Y&Rk0@ce1v&cDn{1KaArX zPU0XeWtP(wv;Mtq2^`EUr-M(jHV^L*ij?K%@TL<|uX@!hNAPjI>evyyU9U1?TCg)eBlo0veObxdIB3yyq2 zVBRZ~99Gb`Z> z8uDQV4f!yGh7-#S8cr-TXh@`GzRG+-?h6WEkWQopq;EVH@Wfk@y>CTwNnl;Dc!S&* z6uuzo02@f2$~KTZmERdiUIT0(c@40xSeY-#4PbP}01A`hQ(v%S04eKOLCQJ_xNQI_ z2Utgya)1@29FTyIeL-#jDeKrlZUBV|6bA6R38eFDd7eW!;NO8J=TO$MdX=({9V8rJ z2MGt*`$#yz;qjU`C}=Rg=AiRc!x8hriH!Fp1302V+yOZ_#8v@mK^>5;0=B8idsE_5@3r^EC&dE zhB_7rv@Y4(E}FT6Dxo{T0P^@xmU`U**0og{tL^~9sB$${)&R_cOcCwXSpqJiU?w7x zzfUnRGM*i2Dz!HS29T-$dnl%{YA-*MKB8wwk%1&u%>gdgoH$m^0W?@`syQG5nORZf zvKq+kirO{6zM9KwP_U1IwQ&>}7?>5&G#8`Fks8Ct5~L@(X(~`~J)X^46zkT>=Q$%z zt^!c&q^kf44rl6$wa<0y6f-L=RHcYqwhneNP$2QvK`b=2VAi3*x?=6K%bXmw4!uUM zg@!oEwz$TvLq8>}E7q)&fInIkG3(Hy%CLA{K(z?{NMt(n8yf=JMl~H#?gr|L!b1_U z4%tWau3rbirifUF1oa6@b&qw{kroE^;K`egu2>!C1YET$3LL}~k@-8TgARSvtwW9~ zavb3VR*P<(CW@6Qi=$#PqLtTXBq(%x-$OAOQE$b{Ycp5HNS7@(Z@~dPFKY=bY=(fr{mm1Q51iC6qPp4iv6s$4a6TD zD|?+46GrI(1)@(l)kHcgree%fQAwn;Vk#yyu>RDVI83=a2My23)hNpz6rlO^ z^#y%@9Xu4q44@_JqbF$nDHsL%l>ZzUEz6-j+=FO#9^kr|0a)SyH)P_&_={hQ3`TEz z5Y5Ytot}U#xsigSA;8;%9*nxuAp93OL0e(~mj%Glx`cm|wLw?b$_@TAhXuKjf}vcB zjG`XEABzA##m>DZ_r8&;ukOg&d$P9wRC-Zvu7HJ zRfc*=*1p&Qn3o$9&p?KHDObEJd(oGn!a9TSIi!lqQt?r)cpw$K$1?s;8El5RVz>n< z7)r1cgK;01Wgo+=kE4UQk8c1Ldt8EfABS>O2fKSPoVp?>l{Y3Knv-fDE2BC%l%qO( zj=_o?)v2j`RK4?f3jROAv_OA_q=fUNH*#dGY% q_R949mxp_uXnNMUj}GPigZ}_aBOdMAa-SPb7^mGATusEAaG%HV`yw;c4cfJGazqnAWUg)b$B2$E;KGO zGA(CkIctq$djJ3jSV=@dRCt{2o6T<9Mi9qU1gH;1?FWcqzeQspc6I0j^aWb@6$$~E&lNm`;LaDl z_9b_ZUeH>dzPQN)2kpA&2==c*(DLSHAG&%p*g1F(0𝔏F8Y-x7NAf@?Oo!riS1X zzlVQAd`0ocIPd^pgZP7oFR4_drKv|QI9F$ag`&zp2Xg?U>C58XYX%5gzt_V!{v>86 z@N_c_cGdunok6h@v>GR)5X?dHCT01@^8FC0Fn`Jo9uoq7dMXq2y#RYmPze z@h%0<-$*2P+H5xO6JT1$83Kfrq2y?fsU4EwP;xpD=1GqhlG`u4luQXmWtVm!><6Wb z?ZD_WCJ4{D;2SRZHy2EXeikUW;4T-`Hlz;J4qZC1&jqz<)q;Wx>e8wOb!pXty0mJ+ z0T+xsCa6oR9`w23YvP<0s7b3H)TC7pYSNm4QJtJT2qQS~Nzmtle;C22zUL9erz$R* z(tA9nzRf07rAJd%)x(ZyF6VJUQ90;yLFFuVVxV$_G=a*lJTXu?2AIHz3o11?IZ$vx zzj9EeIU}gj+~h!&=8T|9bCUyAVl^*yy~;tM2BQl)(ARi;!3A47P^~BfsL)&j?r=d} zNGh?KL51cL@K-JBHI1oX9_P=mL)AZS6K3o8HP8kD00wOUnZ&H|)0cQ#O8 zM_O|hS*2(6HlR>~@t8x;S7RG2E5TOW2RI&EaR$_zmRgT}dKHkEPlYixY!1a_J~6Vy zunNeoQG<$AKw_kH5^z@;P-3KX67c?nKysY30m*UBqIb~4mDP5)|Ixt>14tEFC5MuZ z6-Y_P3ZxW}fNd@a29T1D-Om;t7ZhC3uN?}Y+I(8r-oil;alnErHlXwhGAR!$) zkdTfgC`iy;M+KN3X+fV0lAGu?s2jnubdoyyMzE}aNrPqSnAcW`m8D~u)v|PKK|z8I zGx&f4BePc1l_Cec|4}`Hxp$Oz%x$w;lFr#c&kU9{XR(?~tfV=M)tm3DG(Jr5b9MxVukNbR{;q2=M5f<#iN;(Db(V~I+|IrKr)ts z6;*Bx7FBLFCs%^{HF9c2m7fjN?viEZ5#UWO2sWVLf<6J-GzSUVWVKjc0T`4%TGp|k za{H{Z!Gg*yXB{+X^G~Ow@&sJB0SjWa_eg+tbu6gdKC67tuN;&wZ~%kir-_5I%Buin zl{@|@zHDJzHoez5lpLB&W>eA&ayMUnaK!-xq#8? zjvhy)zBO1l{imzPQ3vsCL6N>?**UF2@o9^L5<}U*tJS<^*<)#wDDNrn`R0ras_#@w zigU+b$sl>7Jo%f|6Hf-UE~Rf+D`b^$N$2{g0P0*yQ-`QtXveZkK^#Fm_{iX?RI0I~ zqH+!jWG+Cdwo$z(xdNHn$CDdor=-<9dD>LQdQukoK{LDjK+08N!E%A>9nI9_s0*ur z=MIwx$+{Ix=4Gp5YR#YMvO&QG*^@xYTtF$UE}(QPf>WsZOPs*`nBmKLae7>pBe>uwJ+5GsjeO1`&&FCt?`S?KgLcn&p2kBi2gKAKH1A2P0LD|L z=_-H&u5&@|)4_dT+XSQy>&OIg0>T41_MZczRZQ(s7ovqlfLs1Nz={C4jSU~hH-0rd z7<}kJw1@}09Ur#wAO#1w7WweD1A{gSMEu-?XvG7#>f`EW1L0q=G-zWf9*Ca=Ea5>4 zhByulq7J}s4S*kG<=()v@6qcU?0?}SEbYBOE#iUqtp}q0Xb7HM9fn$eh}XrTUdOYy z(QA7hL%o8f`?z3T#DnRVfT3Q=JU+x)^e|M|@F08zsmE3H_$>4I7Cp9)G5*gz*a|a` z;WngTh+r!Q<2tTl9m8QA2XEs#z6WS@1cF%|`?7D;3Og;BUp=%2+mE4xV0&u?!QKzWUv)Je sFM0brYjcZV9(7yM+=6u-Ev$O*ABX<5^a%U>egFUf07*qoM6N<$g4lYn`Tzg` literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.2.threads.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.2.threads.png new file mode 100644 index 0000000000000000000000000000000000000000..52d7aee49039dda55cd45704f04de7ec060406b1 GIT binary patch literal 2163 zcmV-(2#oiMP)aBOdMAa-SPb7^mGATusEAaG%HV`yw;c4cfJGazqnAWUg)b$B2$E;KGO zGA(CkIctq$djJ3j@kvBMRCt{2o6m0)Hx$P~QOltMjy*I={tTj$bSv>^v{n9uwn8O9 z)VLJ~ZsZTB+8isv0WLHVVPhdw<P=u<2$R-M5lFZJ$KF_bUJ$^G|)24;) zld_r_`!nC?=Qm#4vpE5tc47z)!T$`n8lT3`$Q@jUwjUTm`@_q-Paisit8jl~ac+Y< zgB;qOoiDnpUSP1j5jum{5Iop39IyaKrFVE9Gfvs^|-jwLC$i=-5C9a{%Kr=lR|r9w4+gTA}nm@!1JHS_*^J zd4PRqkk1CoGY6PAC*8ns2|?ze*jbc{?rmH-zx3snY$G^=n!TN1JoLvRQV!M6~MTb^JfjvI_yo6Loa zPyLIozA*_f0ApV;VxHhp%M(1j;0eC!HTR=>s0hkF&xZOs2p) zx81?D&{?QTy_Na(i36}uL8_kN^Nk`;6i#*|4^DB%dRt9#~puw69P}`_?T}=k4 zQPrzDfVy)vsZ)$OIA7JnQIk4(aAL%SUc?%K5rSMV;J0*WRGe=Tm_hS|5a`>vofN9$!w};_ILxuTM1|;r#$bMiFz=xYFAUx z`W*2}Fnv0NJD6C{TE}`f17x;xavVs&MR~MMl~;gCa9;eqAUO^Uz~|O-GRqUNBaiIw zwX4CzZduF80b~FYZ_-&UNc5OD$bCU^>>!n_wIG#qwIG#q$wc>*CzuuzAeD2qAeD2k z1y;6^%DMV&8U9azttwE^U@WRYI-_bpBIjNYEY?;wBXX`jszlDc9ymjS5t(yI8!K{k zn##EvFxdA51!9~8q3Y>aCvvVPsth9L1In&gx4V*ntin}@>^Y~c=4_<^pU|MFQiNR^ z)b~deOYUgja81B~0uv;jCP8VObTwYA1Z~^h>4OoyWAiniS;aQRv?JoB5emc!N5tuO z0qo^SDFW##0KxvaMN#A~_fMAg6pNXa&DFvO7Qbf&I|Qgm+Z7WlgM-m#AO3U!6=S85 zN8isWl?{AlHn7-1(oLwaF-m(D}yJWhl-Z9HM=mdNtk4jT(Z3q|US4hLC zLSTLqRIEER=c1UEO3Cif%v=a7-64#s#+{7fs(#ctqg(+^QkMw!^wP#{jEt}!(JVH|<9ZYpVoivkvpgVfv{MWkuFR(WsDs3+eS#A|LTh2Le6K%Zk*rKRPUd`OHeB zmv~muBgbG!$92VmK(*!Ss$1>2!Z^)h(*&x{n5>L);3seHBGD$bkyeU}}8yL`gTwEBS zb=_gHoU`|1M1S`b`}dBS1Lf{e!I-|yQ66qr#V8M}9c1JfQv6=XS@C001#)r+IEE2F zMcLyOVChwq>TLRg%Uu!R+i4OEs@~|a_^h9zfD0rTR=<3_&%6{7nWw<0>OE#L8V90gVhP}IQ(K8i_pjQDg1!@r+>K!JZ-K41Wz znG^YfvXOqE@C5^3F!BYlk)ELN1p{9&@&#eq7YuyC$QP8unIE|B3wpcy{{xTnpF`7C zfCrea0(`&)U(olzgOvqdW6Rp;3F17$5A?A&4vgn8w7XjnPfP+_6XO809N-3ad?_R+=2WwpcD|nECQ6J!Ny9-eV6NLZJgLsw!ToM3#iwOUOr9lTv@qmBNVG0jY zFg%jm?_Gf3aNxTxGxsW9eTAyeahet0#nK**YyuD1XAF4fZU!D)%3N*T!FtlwD|qz= zs&*F8)r(mAWDQ^v56(OSboFAccn4e2LswyuLHHO_#W_@bkSlJZVrL)yKh2;W=8EA8 zq+p2PvIJ!t=dg`o*2ZXCw(%7X;$4nl-o`#g^Q5$t_!*{7it&#@<~ p^J9}A?QSi{V-t@-qMc literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.20.threads.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.20.threads.png new file mode 100644 index 0000000000000000000000000000000000000000..da0328a6a7bf899533096001d79f9a2608a02660 GIT binary patch literal 2147 zcmV-p2%PtcP)aBOdMAa-SPb7^mGATusEAaG%HV`yw;c4cfJGazqnAWUg)b$B2$E;KGO zGA(CkIctq$djJ3j;Ymb6RCt{2+)Zy2M;HKLS5=!+lT%Mb$xrC5L?WpV{Q*5iTw3KX zv_d67)J!D~y^$Y)TK9%z4sd})m}G>i%D3i7D`O_es;EH4L=e_wz590d!|~3?J74*r ztuj)Q{d)4w%)YbUSvJ%lu+&cBDg3v<;U#!L`A_N#<8=}RLAXnz8(+-KZxBy7{FX%5 zKkawU`bLajk*Kvgd1k{KMj1>xb>ayJa}c%2%=B&Fh?a5+Pa(ioJrFLiK)Bfmg-bg% zuQE}>`>fBu$NVeJR;2>%lH(qeBBF%-_!1EI9*#Gpsn4^Hk+bY0K8RjcV4(r+X=Q4zqGUd>S&}INHKTu(rayT4(vQwMVMbxF7 zFgj|p0I$JR5O^#5MgkzqzR>_U)*@mmlJ z#LvgLsyo_W&JdSQSR!K3T2*vlS$Y*8Shm|vbYR&a`uSml=!MRDhfG2t4TUTeVkh$W zAeI4Eh-H8kVi{nCSO(aqNF)@}P{=|dewvO8A{k(ZNCwy;k^y#zWPrmQnS??b3Rx&b zuhcfEKam+s-w%ZF&OYkoU`kQgHb-1SA($i91EGH2lEYujkfM;9Av=1= z%uu^0hgU-(zI$}cQA2a)=(F4*SKk5DURhn*h(j<#?IrneFuUd;_p5m!7;I&~H4r8y zNDXj^%mOf2%mUi@&3s-M77-2su~~o_Zf8pdh)mdPaPzpJZX_QLT1JO;Q%2IQe&IuRN%wn5EEK4z#H$!={# zV6kL^ngMw@ShqpVfXv&-jvkJBg?dL^GD3WAHTp+9JuH@xr(`7m!F*v{5(F;e5%YgN z)$PpNi05ilc8@oNaxAI?(gOQs_vj&*M+XDlfOL4kz83=XLUaQ%hr}2$D+r|Kh!lkk zg|z&sj^rHn%@G+2BNP&4L4bLs%=1Sa>Th%pj;C6W6?C zQV}cAWf~~woViyk5#^k7o(Ae5e%C?9i*n9cK6EOGh}&}5K%fvs2W=7a1E>noHVP4$ zCL-7(Qgy!(3a7va3e}Wy&In_4#b;9H1BKcp%09m|KYlctnikHJ7(Z3CO8qgj87bfa0$ZbIu5fuqNi5V?^c$iDA_-V!o5QLiytD z48_Bwd@w=zb4EDAF=Br5U%5j0vvf}fjZdx1TK}bky65C_#MeYuRnr6Z^322yZB^A- zfHF<3-0hCv2r~C-k#5yDlp_OFx71Z=ns;P{=HDx`57T*6w^UNVF>}g19TF$VRNwH9 zSe}}v)eR`5svn<_F??o>I2vMgO++Ptuz?gme$znt6=`kRC7}GZg)%20)fHC!7}RRT zBc5vK+;WJR5UACrBq+Vdr(A#!HhwNa^UKwha-T?0?4AT)Ta%#ijb&0<-jy>)=pMrx z(`j9T_-l?*%5TfL+N|s}z1+R4B)Kx*KPbYbE3L~gy`?`=E^TF4?T_TXlt^M<4b<_t z-^?2NtZ7NW_jLog*=$nvP$I1T>Uik@`4ZG~hhlNPSV7>u+@T_R+>#wp#GpH?ys%Ix z6dxE#E6z~pR=>mO^1vS@43% z`9KKCq7FL!jpyPL4TG@v@#5m*d0`e1@K>e9EFc6nLSg7%2M?Ly6ddyvk}16*aZ04o&W8b9%I_Ttwvf#hu$(s{nH-DR-F7YdjR0p7moLek+0 zLVxN*x);B!rbAHDY z-{E`v{8GjE0{Myn?c6Eh;9^op#=)8JLT!1q4kleu}mF!>00RWFPp z-sY|7^Qyu+f%q{L5m$M{2cw8Dc*G8$nqT~gz-By(7;ixVV-8yx%-Xohvj0P)Xk+ps zYvUV$U|c7rcyo&%fUkQ?YT)7%V+_~kO`_1Vn)*B5#>VDi$OGhDjIN6X{C*=F3mo&s4` zD~rHK3-E-);X>SP!R+cwXV|$1T@E{&D;)N}(@fE@h-b-@_S($+XS=;tIy2|oMu&3p Z@E;<6pkY}U^P>O&002ovPDHLkV1hVe1f~E0 literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.3.threads.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.3.threads.png new file mode 100644 index 0000000000000000000000000000000000000000..1093e81ca6b7c9507b2c79497928fe39c6921275 GIT binary patch literal 2270 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 AO8@`> literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.5.threads.png b/src/thirdparty/gperftools-2.0/doc/tcmalloc-opspersec.vs.size.5.threads.png new file mode 100644 index 0000000000000000000000000000000000000000..779eec60bc04f7e23ebb4804f66c0bb72ca5b5e5 GIT binary patch literal 1995 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 iczV`(j1J}a!M_32oUZ3qtF3SV0000 + + + +TCMalloc : Thread-Caching Malloc + + + + + +

TCMalloc : Thread-Caching Malloc

+ +
Sanjay Ghemawat
+ +

Motivation

+ +

TCMalloc is faster than the glibc 2.3 malloc (available as a +separate library called ptmalloc2) and other mallocs that I have +tested. ptmalloc2 takes approximately 300 nanoseconds to execute a +malloc/free pair on a 2.8 GHz P4 (for small objects). The TCMalloc +implementation takes approximately 50 nanoseconds for the same +operation pair. Speed is important for a malloc implementation +because if malloc is not fast enough, application writers are inclined +to write their own custom free lists on top of malloc. This can lead +to extra complexity, and more memory usage unless the application +writer is very careful to appropriately size the free lists and +scavenge idle objects out of the free list.

+ +

TCMalloc also reduces lock contention for multi-threaded programs. +For small objects, there is virtually zero contention. For large +objects, TCMalloc tries to use fine grained and efficient spinlocks. +ptmalloc2 also reduces lock contention by using per-thread arenas but +there is a big problem with ptmalloc2's use of per-thread arenas. In +ptmalloc2 memory can never move from one arena to another. This can +lead to huge amounts of wasted space. For example, in one Google +application, the first phase would allocate approximately 300MB of +memory for its URL canonicalization data structures. When the first +phase finished, a second phase would be started in the same address +space. If this second phase was assigned a different arena than the +one used by the first phase, this phase would not reuse any of the +memory left after the first phase and would add another 300MB to the +address space. Similar memory blowup problems were also noticed in +other applications.

+ +

Another benefit of TCMalloc is space-efficient representation of +small objects. For example, N 8-byte objects can be allocated while +using space approximately 8N * 1.01 bytes. I.e., a +one-percent space overhead. ptmalloc2 uses a four-byte header for +each object and (I think) rounds up the size to a multiple of 8 bytes +and ends up using 16N bytes.

+ + +

Usage

+ +

To use TCMalloc, just link TCMalloc into your application via the +"-ltcmalloc" linker flag.

+ +

You can use TCMalloc in applications you didn't compile yourself, +by using LD_PRELOAD:

+
+   $ LD_PRELOAD="/usr/lib/libtcmalloc.so" 
+
+

LD_PRELOAD is tricky, and we don't necessarily recommend this mode +of usage.

+ +

TCMalloc includes a heap checker +and heap profiler as well.

+ +

If you'd rather link in a version of TCMalloc that does not include +the heap profiler and checker (perhaps to reduce binary size for a +static binary), you can link in libtcmalloc_minimal +instead.

+ + +

Overview

+ +

TCMalloc assigns each thread a thread-local cache. Small +allocations are satisfied from the thread-local cache. Objects are +moved from central data structures into a thread-local cache as +needed, and periodic garbage collections are used to migrate memory +back from a thread-local cache into the central data structures.

+
+ +

TCMalloc treats objects with size <= 32K ("small" objects) +differently from larger objects. Large objects are allocated directly +from the central heap using a page-level allocator (a page is a 4K +aligned region of memory). I.e., a large object is always +page-aligned and occupies an integral number of pages.

+ +

A run of pages can be carved up into a sequence of small objects, +each equally sized. For example a run of one page (4K) can be carved +up into 32 objects of size 128 bytes each.

+ + +

Small Object Allocation

+ +

Each small object size maps to one of approximately 60 allocatable +size-classes. For example, all allocations in the range 833 to 1024 +bytes are rounded up to 1024. The size-classes are spaced so that +small sizes are separated by 8 bytes, larger sizes by 16 bytes, even +larger sizes by 32 bytes, and so forth. The maximal spacing is +controlled so that not too much space is wasted when an allocation +request falls just past the end of a size class and has to be rounded +up to the next class.

+ +

A thread cache contains a singly linked list of free objects per +size-class.

+
+ +

When allocating a small object: (1) We map its size to the +corresponding size-class. (2) Look in the corresponding free list in +the thread cache for the current thread. (3) If the free list is not +empty, we remove the first object from the list and return it. When +following this fast path, TCMalloc acquires no locks at all. This +helps speed-up allocation significantly because a lock/unlock pair +takes approximately 100 nanoseconds on a 2.8 GHz Xeon.

+ +

If the free list is empty: (1) We fetch a bunch of objects from a +central free list for this size-class (the central free list is shared +by all threads). (2) Place them in the thread-local free list. (3) +Return one of the newly fetched objects to the applications.

+ +

If the central free list is also empty: (1) We allocate a run of +pages from the central page allocator. (2) Split the run into a set +of objects of this size-class. (3) Place the new objects on the +central free list. (4) As before, move some of these objects to the +thread-local free list.

+ +

+ Sizing Thread Cache Free Lists

+ +

It is important to size the thread cache free lists correctly. If +the free list is too small, we'll need to go to the central free list +too often. If the free list is too big, we'll waste memory as objects +sit idle in the free list.

+ +

Note that the thread caches are just as important for deallocation +as they are for allocation. Without a cache, each deallocation would +require moving the memory to the central free list. Also, some threads +have asymmetric alloc/free behavior (e.g. producer and consumer threads), +so sizing the free list correctly gets trickier.

+ +

To size the free lists appropriately, we use a slow-start algorithm +to determine the maximum length of each individual free list. As the +free list is used more frequently, its maximum length grows. However, +if a free list is used more for deallocation than allocation, its +maximum length will grow only up to a point where the whole list can +be efficiently moved to the central free list at once.

+ +

The psuedo-code below illustrates this slow-start algorithm. Note +that num_objects_to_move is specific to each size class. +By moving a list of objects with a well-known length, the central +cache can efficiently pass these lists between thread caches. If +a thread cache wants fewer than num_objects_to_move, +the operation on the central free list has linear time complexity. +The downside of always using num_objects_to_move as +the number of objects to transfer to and from the central cache is +that it wastes memory in threads that don't need all of those objects. + +

+Start each freelist max_length at 1.
+
+Allocation
+  if freelist empty {
+    fetch min(max_length, num_objects_to_move) from central list;
+    if max_length < num_objects_to_move {  // slow-start
+      max_length++;
+    } else {
+      max_length += num_objects_to_move;
+    }
+  }
+
+Deallocation
+  if length > max_length {
+    // Don't try to release num_objects_to_move if we don't have that many.
+    release min(max_length, num_objects_to_move) objects to central list
+    if max_length < num_objects_to_move {
+      // Slow-start up to num_objects_to_move.
+      max_length++;
+    } else if max_length > num_objects_to_move {
+      // If we consistently go over max_length, shrink max_length.
+      overages++;
+      if overages > kMaxOverages {
+        max_length -= num_objects_to_move;
+        overages = 0;
+      }
+    }
+  }
+
+ +See also the section on Garbage Collection +to see how it affects the max_length. + +

Large Object Allocation

+ +

A large object size (> 32K) is rounded up to a page size (4K) +and is handled by a central page heap. The central page heap is again +an array of free lists. For i < 256, the +kth entry is a free list of runs that consist of +k pages. The 256th entry is a free list of +runs that have length >= 256 pages:

+
+ +

An allocation for k pages is satisfied by looking in +the kth free list. If that free list is empty, we look +in the next free list, and so forth. Eventually, we look in the last +free list if necessary. If that fails, we fetch memory from the +system (using sbrk, mmap, or by mapping in +portions of /dev/mem).

+ +

If an allocation for k pages is satisfied by a run +of pages of length > k, the remainder of the +run is re-inserted back into the appropriate free list in the +page heap.

+ + +

Spans

+ +

The heap managed by TCMalloc consists of a set of pages. A run of +contiguous pages is represented by a Span object. A span +can either be allocated, or free. If free, the span +is one of the entries in a page heap linked-list. If allocated, it is +either a large object that has been handed off to the application, or +a run of pages that have been split up into a sequence of small +objects. If split into small objects, the size-class of the objects +is recorded in the span.

+ +

A central array indexed by page number can be used to find the span to +which a page belongs. For example, span a below occupies 2 +pages, span b occupies 1 page, span c occupies 5 +pages and span d occupies 3 pages.

+
+ +

In a 32-bit address space, the central array is represented by a a +2-level radix tree where the root contains 32 entries and each leaf +contains 2^15 entries (a 32-bit address spave has 2^20 4K pages, and +the first level of tree divides the 2^20 pages by 2^5). This leads to +a starting memory usage of 128KB of space (2^15*4 bytes) for the +central array, which seems acceptable.

+ +

On 64-bit machines, we use a 3-level radix tree.

+ + +

Deallocation

+ +

When an object is deallocated, we compute its page number and look +it up in the central array to find the corresponding span object. The +span tells us whether or not the object is small, and its size-class +if it is small. If the object is small, we insert it into the +appropriate free list in the current thread's thread cache. If the +thread cache now exceeds a predetermined size (2MB by default), we run +a garbage collector that moves unused objects from the thread cache +into central free lists.

+ +

If the object is large, the span tells us the range of pages covered +by the object. Suppose this range is [p,q]. We also +lookup the spans for pages p-1 and q+1. If +either of these neighboring spans are free, we coalesce them with the +[p,q] span. The resulting span is inserted into the +appropriate free list in the page heap.

+ + +

Central Free Lists for Small Objects

+ +

As mentioned before, we keep a central free list for each +size-class. Each central free list is organized as a two-level data +structure: a set of spans, and a linked list of free objects per +span.

+ +

An object is allocated from a central free list by removing the +first entry from the linked list of some span. (If all spans have +empty linked lists, a suitably sized span is first allocated from the +central page heap.)

+ +

An object is returned to a central free list by adding it to the +linked list of its containing span. If the linked list length now +equals the total number of small objects in the span, this span is now +completely free and is returned to the page heap.

+ + +

Garbage Collection of Thread Caches

+ +

Garbage collecting objects from a thread cache keeps the size of +the cache under control and returns unused objects to the central free +lists. Some threads need large caches to perform well while others +can get by with little or no cache at all. When a thread cache goes +over its max_size, garbage collection kicks in and then the +thread competes with the other threads for a larger cache.

+ +

Garbage collection is run only during a deallocation. We walk over +all free lists in the cache and move some number of objects from the +free list to the corresponding central list.

+ +

The number of objects to be moved from a free list is determined +using a per-list low-water-mark L. L +records the minimum length of the list since the last garbage +collection. Note that we could have shortened the list by +L objects at the last garbage collection without +requiring any extra accesses to the central list. We use this past +history as a predictor of future accesses and move L/2 +objects from the thread cache free list to the corresponding central +free list. This algorithm has the nice property that if a thread +stops using a particular size, all objects of that size will quickly +move from the thread cache to the central free list where they can be +used by other threads.

+ +

If a thread consistently deallocates more objects of a certain size +than it allocates, this L/2 behavior will cause at least +L/2 objects to always sit in the free list. To avoid +wasting memory this way, we shrink the maximum length of the freelist +to converge on num_objects_to_move (see also +Sizing Thread Cache Free Lists). + +

+Garbage Collection
+  if (L != 0 && max_length > num_objects_to_move) {
+    max_length = max(max_length - num_objects_to_move, num_objects_to_move)
+  }
+
+ +

The fact that the thread cache went over its max_size is +an indication that the thread would benefit from a larger cache. Simply +increasing max_size would use an inordinate amount of memory +in programs that have lots of active threads. Developers can bound the +memory used with the flag --tcmalloc_max_total_thread_cache_bytes.

+ +

Each thread cache starts with a small max_size +(e.g. 64KB) so that idle threads won't pre-allocate memory they don't +need. Each time the cache runs a garbage collection, it will also try +to grow its max_size. If the sum of the thread cache +sizes is less than --tcmalloc_max_total_thread_cache_bytes, +max_size grows easily. If not, thread cache 1 will try +to steal from thread cache 2 (picked round-robin) by decreasing thread +cache 2's max_size. In this way, threads that are more +active will steal memory from other threads more often than they are +have memory stolen from themselves. Mostly idle threads end up with +small caches and active threads end up with big caches. Note that +this stealing can cause the sum of the thread cache sizes to be +greater than --tcmalloc_max_total_thread_cache_bytes until thread +cache 2 deallocates some memory to trigger a garbage collection.

+ +

Performance Notes

+ +

PTMalloc2 unittest

+ +

The PTMalloc2 package (now part of glibc) contains a unittest +program t-test1.c. This forks a number of threads and +performs a series of allocations and deallocations in each thread; the +threads do not communicate other than by synchronization in the memory +allocator.

+ +

t-test1 (included in +tests/tcmalloc/, and compiled as +ptmalloc_unittest1) was run with a varying numbers of +threads (1-20) and maximum allocation sizes (64 bytes - +32Kbytes). These tests were run on a 2.4GHz dual Xeon system with +hyper-threading enabled, using Linux glibc-2.3.2 from RedHat 9, with +one million operations per thread in each test. In each case, the test +was run once normally, and once with +LD_PRELOAD=libtcmalloc.so. + +

The graphs below show the performance of TCMalloc vs PTMalloc2 for +several different metrics. Firstly, total operations (millions) per +elapsed second vs max allocation size, for varying numbers of +threads. The raw data used to generate these graphs (the output of the +time utility) is available in +t-test1.times.txt.

+ + + + + + + + + + + + + + + + + +
+ + +
    +
  • TCMalloc is much more consistently scalable than PTMalloc2 - for + all thread counts >1 it achieves ~7-9 million ops/sec for small + allocations, falling to ~2 million ops/sec for larger + allocations. The single-thread case is an obvious outlier, + since it is only able to keep a single processor busy and hence + can achieve fewer ops/sec. PTMalloc2 has a much higher variance + on operations/sec - peaking somewhere around 4 million ops/sec + for small allocations and falling to <1 million ops/sec for + larger allocations. + +
  • TCMalloc is faster than PTMalloc2 in the vast majority of + cases, and particularly for small allocations. Contention + between threads is less of a problem in TCMalloc. + +
  • TCMalloc's performance drops off as the allocation size + increases. This is because the per-thread cache is + garbage-collected when it hits a threshold (defaulting to + 2MB). With larger allocation sizes, fewer objects can be stored + in the cache before it is garbage-collected. + +
  • There is a noticeable drop in TCMalloc's performance at ~32K + maximum allocation size; at larger sizes performance drops less + quickly. This is due to the 32K maximum size of objects in the + per-thread caches; for objects larger than this TCMalloc + allocates from the central page heap. +
+ +

Next, operations (millions) per second of CPU time vs number of +threads, for max allocation size 64 bytes - 128 Kbytes.

+ + + + + + + + + + + + + + + + + +
+ +

Here we see again that TCMalloc is both more consistent and more +efficient than PTMalloc2. For max allocation sizes <32K, TCMalloc +typically achieves ~2-2.5 million ops per second of CPU time with a +large number of threads, whereas PTMalloc achieves generally 0.5-1 +million ops per second of CPU time, with a lot of cases achieving much +less than this figure. Above 32K max allocation size, TCMalloc drops +to 1-1.5 million ops per second of CPU time, and PTMalloc drops almost +to zero for large numbers of threads (i.e. with PTMalloc, lots of CPU +time is being burned spinning waiting for locks in the heavily +multi-threaded case).

+ + +

Modifying Runtime Behavior

+ +

You can more finely control the behavior of the tcmalloc via +environment variables.

+ +

Generally useful flags:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
TCMALLOC_SAMPLE_PARAMETERdefault: 0 + The approximate gap between sampling actions. That is, we + take one sample approximately once every + tcmalloc_sample_parmeter bytes of allocation. + This sampled heap information is available via + MallocExtension::GetHeapSample() or + MallocExtension::ReadStackTraces(). A reasonable + value is 524288. +
TCMALLOC_RELEASE_RATEdefault: 1.0 + Rate at which we release unused memory to the system, via + madvise(MADV_DONTNEED), on systems that support + it. Zero means we never release memory back to the system. + Increase this flag to return memory faster; decrease it + to return memory slower. Reasonable rates are in the + range [0,10]. +
TCMALLOC_LARGE_ALLOC_REPORT_THRESHOLDdefault: 1073741824 + Allocations larger than this value cause a stack trace to be + dumped to stderr. The threshold for dumping stack traces is + increased by a factor of 1.125 every time we print a message so + that the threshold automatically goes up by a factor of ~1000 + every 60 messages. This bounds the amount of extra logging + generated by this flag. Default value of this flag is very large + and therefore you should see no extra logging unless the flag is + overridden. +
TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTESdefault: 16777216 + Bound on the total amount of bytes allocated to thread caches. This + bound is not strict, so it is possible for the cache to go over this + bound in certain circumstances. This value defaults to 16MB. For + applications with many threads, this may not be a large enough cache, + which can affect performance. If you suspect your application is not + scaling to many threads due to lock contention in TCMalloc, you can + try increasing this value. This may improve performance, at a cost + of extra memory use by TCMalloc. See + Garbage Collection for more details. +
+ +

Advanced "tweaking" flags, that control more precisely how tcmalloc +tries to allocate memory from the kernel.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TCMALLOC_SKIP_MMAPdefault: false + If true, do not try to use mmap to obtain memory + from the kernel. +
TCMALLOC_SKIP_SBRKdefault: false + If true, do not try to use sbrk to obtain memory + from the kernel. +
TCMALLOC_DEVMEM_STARTdefault: 0 + Physical memory starting location in MB for /dev/mem + allocation. Setting this to 0 disables /dev/mem + allocation. +
TCMALLOC_DEVMEM_LIMITdefault: 0 + Physical memory limit location in MB for /dev/mem + allocation. Setting this to 0 means no limit. +
TCMALLOC_DEVMEM_DEVICEdefault: /dev/mem + Device to use for allocating unmanaged memory. +
TCMALLOC_MEMFS_MALLOC_PATHdefault: "" + If set, specify a path where hugetlbfs or tmpfs is mounted. + This may allow for speedier allocations. +
TCMALLOC_MEMFS_LIMIT_MBdefault: 0 + Limit total memfs allocation size to specified number of MB. + 0 means "no limit". +
TCMALLOC_MEMFS_ABORT_ON_FAILdefault: false + If true, abort() whenever memfs_malloc fails to satisfy an allocation. +
TCMALLOC_MEMFS_IGNORE_MMAP_FAILdefault: false + If true, ignore failures from mmap. +
TCMALLOC_MEMFS_MAP_PRVIATEdefault: false + If true, use MAP_PRIVATE when mapping via memfs, not MAP_SHARED. +
+ + +

Modifying Behavior In Code

+ +

The MallocExtension class, in +malloc_extension.h, provides a few knobs that you can +tweak in your program, to affect tcmalloc's behavior.

+ +

Releasing Memory Back to the System

+ +

By default, tcmalloc will release no-longer-used memory back to the +kernel gradually, over time. The tcmalloc_release_rate flag controls how quickly +this happens. You can also force a release at a given point in the +progam execution like so:

+
+   MallocExtension::instance()->ReleaseFreeMemory();
+
+ +

You can also call SetMemoryReleaseRate() to change the +tcmalloc_release_rate value at runtime, or +GetMemoryReleaseRate to see what the current release rate +is.

+ +

Memory Introspection

+ +

There are several routines for getting a human-readable form of the +current memory usage:

+
+   MallocExtension::instance()->GetStats(buffer, buffer_length);
+   MallocExtension::instance()->GetHeapSample(&string);
+   MallocExtension::instance()->GetHeapGrowthStacks(&string);
+
+ +

The last two create files in the same format as the heap-profiler, +and can be passed as data files to pprof. The first is human-readable +and is meant for debugging.

+ +

Generic Tcmalloc Status

+ +

TCMalloc has support for setting and retrieving arbitrary +'properties':

+
+   MallocExtension::instance()->SetNumericProperty(property_name, value);
+   MallocExtension::instance()->GetNumericProperty(property_name, &value);
+
+ +

It is possible for an application to set and get these properties, +but the most useful is when a library sets the properties so the +application can read them. Here are the properties TCMalloc defines; +you can access them with a call like +MallocExtension::instance()->GetNumericProperty("generic.heap_size", +&value);:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
generic.current_allocated_bytes + Number of bytes used by the application. This will not typically + match the memory use reported by the OS, because it does not + include TCMalloc overhead or memory fragmentation. +
generic.heap_size + Bytes of system memory reserved by TCMalloc. +
tcmalloc.pageheap_free_bytes + Number of bytes in free, mapped pages in page heap. These bytes + can be used to fulfill allocation requests. They always count + towards virtual memory usage, and unless the underlying memory is + swapped out by the OS, they also count towards physical memory + usage. +
tcmalloc.pageheap_unmapped_bytes + Number of bytes in free, unmapped pages in page heap. These are + bytes that have been released back to the OS, possibly by one of + the MallocExtension "Release" calls. They can be used to fulfill + allocation requests, but typically incur a page fault. They + always count towards virtual memory usage, and depending on the + OS, typically do not count towards physical memory usage. +
tcmalloc.slack_bytes + Sum of pageheap_free_bytes and pageheap_unmapped_bytes. Provided + for backwards compatibility only. Do not use. +
tcmalloc.max_total_thread_cache_bytes + A limit to how much memory TCMalloc dedicates for small objects. + Higher numbers trade off more memory use for -- in some situations + -- improved efficiency. +
tcmalloc.current_total_thread_cache_bytes + A measure of some of the memory TCMalloc is using (for + small objects). +
+ +

Caveats

+ +

For some systems, TCMalloc may not work correctly with +applications that aren't linked against libpthread.so (or +the equivalent on your OS). It should work on Linux using glibc 2.3, +but other OS/libc combinations have not been tested.

+ +

TCMalloc may be somewhat more memory hungry than other mallocs, +(but tends not to have the huge blowups that can happen with other +mallocs). In particular, at startup TCMalloc allocates approximately +240KB of internal memory.

+ +

Don't try to load TCMalloc into a running binary (e.g., using JNI +in Java programs). The binary will have allocated some objects using +the system malloc, and may try to pass them to TCMalloc for +deallocation. TCMalloc will not be able to handle such objects.

+ +
+ +
Sanjay Ghemawat, Paul Menage
+ + +Last modified: Sat Feb 24 13:11:38 PST 2007 (csilvers) + +
+ + + diff --git a/src/thirdparty/gperftools-2.0/doc/threadheap.dot b/src/thirdparty/gperftools-2.0/doc/threadheap.dot new file mode 100644 index 000000000..b2dba7203 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/doc/threadheap.dot @@ -0,0 +1,21 @@ +digraph ThreadHeap { +rankdir=LR +node [shape=box, width=0.3, height=0.3] +nodesep=.05 + +heap [shape=record, height=2, label="class 0|class 1|class 2|..."] +O0 [label=""] +O1 [label=""] +O2 [label=""] +O3 [label=""] +O4 [label=""] +O5 [label=""] +sep1 [shape=plaintext, label="..."] +sep2 [shape=plaintext, label="..."] +sep3 [shape=plaintext, label="..."] + +heap:f0 -> O0 -> O1 -> sep1 +heap:f1 -> O2 -> O3 -> sep2 +heap:f2 -> O4 -> O5 -> sep3 + +} diff --git a/src/thirdparty/gperftools-2.0/doc/threadheap.gif b/src/thirdparty/gperftools-2.0/doc/threadheap.gif new file mode 100644 index 0000000000000000000000000000000000000000..c43d0a31018143264bd5ab8b3d7e36a03e833ff9 GIT binary patch literal 7571 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 literal 0 HcmV?d00001 diff --git a/src/thirdparty/gperftools-2.0/install-sh b/src/thirdparty/gperftools-2.0/install-sh new file mode 100755 index 000000000..a5897de6e --- /dev/null +++ b/src/thirdparty/gperftools-2.0/install-sh @@ -0,0 +1,519 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2006-12-25.00 + +# 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. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# 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_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +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 the last 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. + -s $stripprog installed files. + -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 +" + +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 + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +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 + 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 + trap '(exit $?); exit' 1 2 13 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 starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + 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 + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # 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 + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/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-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or 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 + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && 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=$dstdir/_inst.$$_ + rmtmp=$dstdir/_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 && $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` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # 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 -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$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 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/src/thirdparty/gperftools-2.0/m4/ac_have_attribute.m4 b/src/thirdparty/gperftools-2.0/m4/ac_have_attribute.m4 new file mode 100644 index 000000000..19f4021e9 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/m4/ac_have_attribute.m4 @@ -0,0 +1,16 @@ +AC_DEFUN([AX_C___ATTRIBUTE__], [ + AC_MSG_CHECKING(for __attribute__) + AC_CACHE_VAL(ac_cv___attribute__, [ + AC_TRY_COMPILE( + [#include + static void foo(void) __attribute__ ((unused)); + void foo(void) { exit(1); }], + [], + ac_cv___attribute__=yes, + ac_cv___attribute__=no + )]) + if test "$ac_cv___attribute__" = "yes"; then + AC_DEFINE(HAVE___ATTRIBUTE__, 1, [define if your compiler has __attribute__]) + fi + AC_MSG_RESULT($ac_cv___attribute__) +]) diff --git a/src/thirdparty/gperftools-2.0/m4/acx_nanosleep.m4 b/src/thirdparty/gperftools-2.0/m4/acx_nanosleep.m4 new file mode 100644 index 000000000..1d443926f --- /dev/null +++ b/src/thirdparty/gperftools-2.0/m4/acx_nanosleep.m4 @@ -0,0 +1,35 @@ +# Check for support for nanosleep. It's defined in , but on +# some systems, such as solaris, you need to link in a library to use it. +# We set acx_nanosleep_ok if nanosleep is supported; in that case, +# NANOSLEEP_LIBS is set to whatever libraries are needed to support +# nanosleep. + +AC_DEFUN([ACX_NANOSLEEP], +[AC_MSG_CHECKING(if nanosleep requires any libraries) + AC_LANG_SAVE + AC_LANG_C + acx_nanosleep_ok="no" + NANOSLEEP_LIBS= + # For most folks, this should just work + AC_TRY_LINK([#include ], + [static struct timespec ts; nanosleep(&ts, NULL);], + [acx_nanosleep_ok=yes]) + # For solaris, we may need -lrt + if test "x$acx_nanosleep_ok" != "xyes"; then + OLD_LIBS="$LIBS" + LIBS="-lrt $LIBS" + AC_TRY_LINK([#include ], + [static struct timespec ts; nanosleep(&ts, NULL);], + [acx_nanosleep_ok=yes]) + if test "x$acx_nanosleep_ok" = "xyes"; then + NANOSLEEP_LIBS="-lrt" + fi + LIBS="$OLD_LIBS" + fi + if test "x$acx_nanosleep_ok" != "xyes"; then + AC_MSG_ERROR([cannot find the nanosleep function]) + else + AC_MSG_RESULT(${NANOSLEEP_LIBS:-no}) + fi + AC_LANG_RESTORE +]) diff --git a/src/thirdparty/gperftools-2.0/m4/acx_pthread.m4 b/src/thirdparty/gperftools-2.0/m4/acx_pthread.m4 new file mode 100644 index 000000000..89d42c744 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/m4/acx_pthread.m4 @@ -0,0 +1,397 @@ +# This was retrieved from +# http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?revision=1277&root=avahi +# See also (perhaps for new versions?) +# http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?root=avahi +# +# We've rewritten the inconsistency check code (from avahi), to work +# more broadly. In particular, it no longer assumes ld accepts -zdefs. +# This caused a restructing of the code, but the functionality has only +# changed a little. + +dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +dnl +dnl @summary figure out how to build C programs using POSIX threads +dnl +dnl This macro figures out how to build C programs using POSIX threads. +dnl It sets the PTHREAD_LIBS output variable to the threads library and +dnl linker flags, and the PTHREAD_CFLAGS output variable to any special +dnl C compiler flags that are needed. (The user can also force certain +dnl compiler flags/libs to be tested by setting these environment +dnl variables.) +dnl +dnl Also sets PTHREAD_CC to any special C compiler that is needed for +dnl multi-threaded programs (defaults to the value of CC otherwise). +dnl (This is necessary on AIX to use the special cc_r compiler alias.) +dnl +dnl NOTE: You are assumed to not only compile your program with these +dnl flags, but also link it with them as well. e.g. you should link +dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS +dnl $LIBS +dnl +dnl If you are only building threads programs, you may wish to use +dnl these variables in your default LIBS, CFLAGS, and CC: +dnl +dnl LIBS="$PTHREAD_LIBS $LIBS" +dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +dnl CC="$PTHREAD_CC" +dnl +dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute +dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to +dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +dnl +dnl ACTION-IF-FOUND is a list of shell commands to run if a threads +dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to +dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the +dnl default action will define HAVE_PTHREAD. +dnl +dnl Please let the authors know if this macro fails on any platform, or +dnl if you have any other suggestions or comments. This macro was based +dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with +dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros +dnl posted by Alejandro Forero Cuervo to the autoconf macro repository. +dnl We are also grateful for the helpful feedback of numerous users. +dnl +dnl @category InstalledPackages +dnl @author Steven G. Johnson +dnl @version 2006-05-29 +dnl @license GPLWithACException +dnl +dnl Checks for GCC shared/pthread inconsistency based on work by +dnl Marcin Owsiany + + +AC_DEFUN([ACX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_SAVE +AC_LANG_C +acx_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) + AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) + AC_MSG_RESULT($acx_pthread_ok) + if test x"$acx_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case "${host_cpu}-${host_os}" in + *solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" + ;; +esac + +if test x"$acx_pthread_ok" = xno; then +for flag in $acx_pthread_flags; do + + case $flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $flag]) + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) + if test x"$acx_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$flag]) + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + AC_TRY_LINK([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], + [acx_pthread_ok=yes]) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + AC_MSG_RESULT($acx_pthread_ok) + if test "x$acx_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$acx_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_MSG_CHECKING([for joinable pthread attribute]) + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_TRY_LINK([#include ], [int attr=$attr; return attr;], + [attr_name=$attr; break]) + done + AC_MSG_RESULT($attr_name) + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) + fi + + AC_MSG_CHECKING([if more special flags are required for pthreads]) + flag=no + case "${host_cpu}-${host_os}" in + *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; + *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; + esac + AC_MSG_RESULT(${flag}) + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + # More AIX lossage: must compile with xlc_r or cc_r + if test x"$GCC" != xyes; then + AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) + else + PTHREAD_CC=$CC + fi + + # The next part tries to detect GCC inconsistency with -shared on some + # architectures and systems. The problem is that in certain + # configurations, when -shared is specified, GCC "forgets" to + # internally use various flags which are still necessary. + + # + # Prepare the flags + # + save_CFLAGS="$CFLAGS" + save_LIBS="$LIBS" + save_CC="$CC" + + # Try with the flags determined by the earlier checks. + # + # -Wl,-z,defs forces link-time symbol resolution, so that the + # linking checks with -shared actually have any value + # + # FIXME: -fPIC is required for -shared on many architectures, + # so we specify it here, but the right way would probably be to + # properly detect whether it is actually required. + CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CC="$PTHREAD_CC" + + # In order not to create several levels of indentation, we test + # the value of "$done" until we find the cure or run out of ideas. + done="no" + + # First, make sure the CFLAGS we added are actually accepted by our + # compiler. If not (and OS X's ld, for instance, does not accept -z), + # then we can't do this test. + if test x"$done" = xno; then + AC_MSG_CHECKING([whether to check for GCC pthread/shared inconsistencies]) + AC_TRY_LINK(,, , [done=yes]) + + if test "x$done" = xyes ; then + AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([yes]) + fi + fi + + if test x"$done" = xno; then + AC_MSG_CHECKING([whether -pthread is sufficient with -shared]) + AC_TRY_LINK([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], + [done=yes]) + + if test "x$done" = xyes; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + fi + + # + # Linux gcc on some architectures such as mips/mipsel forgets + # about -lpthread + # + if test x"$done" = xno; then + AC_MSG_CHECKING([whether -lpthread fixes that]) + LIBS="-lpthread $PTHREAD_LIBS $save_LIBS" + AC_TRY_LINK([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], + [done=yes]) + + if test "x$done" = xyes; then + AC_MSG_RESULT([yes]) + PTHREAD_LIBS="-lpthread $PTHREAD_LIBS" + else + AC_MSG_RESULT([no]) + fi + fi + # + # FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc + # + if test x"$done" = xno; then + AC_MSG_CHECKING([whether -lc_r fixes that]) + LIBS="-lc_r $PTHREAD_LIBS $save_LIBS" + AC_TRY_LINK([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], + [done=yes]) + + if test "x$done" = xyes; then + AC_MSG_RESULT([yes]) + PTHREAD_LIBS="-lc_r $PTHREAD_LIBS" + else + AC_MSG_RESULT([no]) + fi + fi + if test x"$done" = xno; then + # OK, we have run out of ideas + AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries]) + + # so it's not safe to assume that we may use pthreads + acx_pthread_ok=no + fi + + AC_MSG_CHECKING([whether what we have so far is sufficient with -nostdlib]) + CFLAGS="-nostdlib $CFLAGS" + # we need c with nostdlib + LIBS="$LIBS -lc" + AC_TRY_LINK([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], + [done=yes],[done=no]) + + if test "x$done" = xyes; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + + if test x"$done" = xno; then + AC_MSG_CHECKING([whether -lpthread saves the day]) + LIBS="-lpthread $LIBS" + AC_TRY_LINK([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], + [done=yes],[done=no]) + + if test "x$done" = xyes; then + AC_MSG_RESULT([yes]) + PTHREAD_LIBS="$PTHREAD_LIBS -lpthread" + else + AC_MSG_RESULT([no]) + AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries and -nostdlib]) + fi + fi + + CFLAGS="$save_CFLAGS" + LIBS="$save_LIBS" + CC="$save_CC" +else + PTHREAD_CC="$CC" +fi + +AC_SUBST(PTHREAD_LIBS) +AC_SUBST(PTHREAD_CFLAGS) +AC_SUBST(PTHREAD_CC) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$acx_pthread_ok" = xyes; then + ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) + : +else + acx_pthread_ok=no + $2 +fi +AC_LANG_RESTORE +])dnl ACX_PTHREAD diff --git a/src/thirdparty/gperftools-2.0/m4/compiler_characteristics.m4 b/src/thirdparty/gperftools-2.0/m4/compiler_characteristics.m4 new file mode 100644 index 000000000..2b628930e --- /dev/null +++ b/src/thirdparty/gperftools-2.0/m4/compiler_characteristics.m4 @@ -0,0 +1,24 @@ +# Check compiler characteristics (e.g. type sizes, PRIxx macros, ...) + +# If types $1 and $2 are compatible, perform action $3 +AC_DEFUN([AC_TYPES_COMPATIBLE], + [AC_TRY_COMPILE([#include ], [$1 v1 = 0; $2 v2 = 0; return (&v1 - &v2)], $3)]) + +define(AC_PRIUS_COMMENT, [printf format code for printing a size_t and ssize_t]) + +AC_DEFUN([AC_COMPILER_CHARACTERISTICS], + [AC_CACHE_CHECK(AC_PRIUS_COMMENT, ac_cv_formatting_prius_prefix, + [AC_TYPES_COMPATIBLE(unsigned int, size_t, + ac_cv_formatting_prius_prefix=; ac_cv_prius_defined=1) + AC_TYPES_COMPATIBLE(unsigned long, size_t, + ac_cv_formatting_prius_prefix=l; ac_cv_prius_defined=1) + AC_TYPES_COMPATIBLE(unsigned long long, size_t, + ac_cv_formatting_prius_prefix=ll; ac_cv_prius_defined=1 + )]) + if test -z "$ac_cv_prius_defined"; then + ac_cv_formatting_prius_prefix=z; + fi + AC_DEFINE_UNQUOTED(PRIuS, "${ac_cv_formatting_prius_prefix}u", AC_PRIUS_COMMENT) + AC_DEFINE_UNQUOTED(PRIxS, "${ac_cv_formatting_prius_prefix}x", AC_PRIUS_COMMENT) + AC_DEFINE_UNQUOTED(PRIdS, "${ac_cv_formatting_prius_prefix}d", AC_PRIUS_COMMENT) +]) diff --git a/src/thirdparty/gperftools-2.0/m4/install_prefix.m4 b/src/thirdparty/gperftools-2.0/m4/install_prefix.m4 new file mode 100644 index 000000000..ef33f42e6 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/m4/install_prefix.m4 @@ -0,0 +1,8 @@ +AC_DEFUN([AC_INSTALL_PREFIX], + [ac_cv_install_prefix="$prefix"; + if test x"$ac_cv_install_prefix" = x"NONE" ; then + ac_cv_install_prefix="$ac_default_prefix"; + fi + AC_DEFINE_UNQUOTED(INSTALL_PREFIX, "$ac_cv_install_prefix", + [prefix where we look for installed files]) + ]) diff --git a/src/thirdparty/gperftools-2.0/m4/ltsugar.m4 b/src/thirdparty/gperftools-2.0/m4/ltsugar.m4 new file mode 100644 index 000000000..9000a057d --- /dev/null +++ b/src/thirdparty/gperftools-2.0/m4/ltsugar.m4 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# 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. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/src/thirdparty/gperftools-2.0/m4/namespaces.m4 b/src/thirdparty/gperftools-2.0/m4/namespaces.m4 new file mode 100644 index 000000000..d78dbe4cc --- /dev/null +++ b/src/thirdparty/gperftools-2.0/m4/namespaces.m4 @@ -0,0 +1,15 @@ +# Checks whether the compiler implements namespaces +AC_DEFUN([AC_CXX_NAMESPACES], + [AC_CACHE_CHECK(whether the compiler implements namespaces, + ac_cv_cxx_namespaces, + [AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([namespace Outer { + namespace Inner { int i = 0; }}], + [using namespace Outer::Inner; return i;], + ac_cv_cxx_namespaces=yes, + ac_cv_cxx_namespaces=no) + AC_LANG_RESTORE]) + if test "$ac_cv_cxx_namespaces" = yes; then + AC_DEFINE(HAVE_NAMESPACES, 1, [define if the compiler implements namespaces]) + fi]) diff --git a/src/thirdparty/gperftools-2.0/m4/pc_from_ucontext.m4 b/src/thirdparty/gperftools-2.0/m4/pc_from_ucontext.m4 new file mode 100644 index 000000000..dee73a1d6 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/m4/pc_from_ucontext.m4 @@ -0,0 +1,96 @@ +# We want to access the "PC" (Program Counter) register from a struct +# ucontext. Every system has its own way of doing that. We try all the +# possibilities we know about. Note REG_PC should come first (REG_RIP +# is also defined on solaris, but does the wrong thing). + +# OpenBSD doesn't have ucontext.h, but we can get PC from ucontext_t +# by using signal.h. + +# The first argument of AC_PC_FROM_UCONTEXT will be invoked when we +# cannot find a way to obtain PC from ucontext. + +AC_DEFUN([AC_PC_FROM_UCONTEXT], + [AC_CHECK_HEADERS(ucontext.h) + # Redhat 7 has , but it barfs if we #include it directly + # (this was fixed in later redhats). works fine, so use that. + if grep "Red Hat Linux release 7" /etc/redhat-release >/dev/null 2>&1; then + AC_DEFINE(HAVE_SYS_UCONTEXT_H, 0, [ is broken on redhat 7]) + ac_cv_header_sys_ucontext_h=no + else + AC_CHECK_HEADERS(sys/ucontext.h) # ucontext on OS X 10.6 (at least) + fi + AC_CHECK_HEADERS(cygwin/signal.h) # ucontext on cywgin + AC_MSG_CHECKING([how to access the program counter from a struct ucontext]) + pc_fields=" uc_mcontext.gregs[[REG_PC]]" # Solaris x86 (32 + 64 bit) + pc_fields="$pc_fields uc_mcontext.gregs[[REG_EIP]]" # Linux (i386) + pc_fields="$pc_fields uc_mcontext.gregs[[REG_RIP]]" # Linux (x86_64) + pc_fields="$pc_fields uc_mcontext.sc_ip" # Linux (ia64) + pc_fields="$pc_fields uc_mcontext.uc_regs->gregs[[PT_NIP]]" # Linux (ppc) + pc_fields="$pc_fields uc_mcontext.gregs[[R15]]" # Linux (arm old [untested]) + pc_fields="$pc_fields uc_mcontext.arm_pc" # Linux (arm arch 5) + pc_fields="$pc_fields uc_mcontext.gp_regs[[PT_NIP]]" # Suse SLES 11 (ppc64) + pc_fields="$pc_fields uc_mcontext.mc_eip" # FreeBSD (i386) + pc_fields="$pc_fields uc_mcontext.mc_rip" # FreeBSD (x86_64 [untested]) + pc_fields="$pc_fields uc_mcontext.__gregs[[_REG_EIP]]" # NetBSD (i386) + pc_fields="$pc_fields uc_mcontext.__gregs[[_REG_RIP]]" # NetBSD (x86_64) + pc_fields="$pc_fields uc_mcontext->ss.eip" # OS X (i386, <=10.4) + pc_fields="$pc_fields uc_mcontext->__ss.__eip" # OS X (i386, >=10.5) + pc_fields="$pc_fields uc_mcontext->ss.rip" # OS X (x86_64) + pc_fields="$pc_fields uc_mcontext->__ss.__rip" # OS X (>=10.5 [untested]) + pc_fields="$pc_fields uc_mcontext->ss.srr0" # OS X (ppc, ppc64 [untested]) + pc_fields="$pc_fields uc_mcontext->__ss.__srr0" # OS X (>=10.5 [untested]) + pc_field_found=false + for pc_field in $pc_fields; do + if ! $pc_field_found; then + # Prefer sys/ucontext.h to ucontext.h, for OS X's sake. + if test "x$ac_cv_header_cygwin_signal_h" = xyes; then + AC_TRY_COMPILE([#define _GNU_SOURCE 1 + #include ], + [ucontext_t u; return u.$pc_field == 0;], + AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field, + How to access the PC from a struct ucontext) + AC_MSG_RESULT([$pc_field]) + pc_field_found=true) + elif test "x$ac_cv_header_sys_ucontext_h" = xyes; then + AC_TRY_COMPILE([#define _GNU_SOURCE 1 + #include ], + [ucontext_t u; return u.$pc_field == 0;], + AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field, + How to access the PC from a struct ucontext) + AC_MSG_RESULT([$pc_field]) + pc_field_found=true) + elif test "x$ac_cv_header_ucontext_h" = xyes; then + AC_TRY_COMPILE([#define _GNU_SOURCE 1 + #include ], + [ucontext_t u; return u.$pc_field == 0;], + AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field, + How to access the PC from a struct ucontext) + AC_MSG_RESULT([$pc_field]) + pc_field_found=true) + else # hope some standard header gives it to us + AC_TRY_COMPILE([], + [ucontext_t u; return u.$pc_field == 0;], + AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field, + How to access the PC from a struct ucontext) + AC_MSG_RESULT([$pc_field]) + pc_field_found=true) + fi + fi + done + if ! $pc_field_found; then + pc_fields=" sc_eip" # OpenBSD (i386) + pc_fields="$pc_fields sc_rip" # OpenBSD (x86_64) + for pc_field in $pc_fields; do + if ! $pc_field_found; then + AC_TRY_COMPILE([#include ], + [ucontext_t u; return u.$pc_field == 0;], + AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field, + How to access the PC from a struct ucontext) + AC_MSG_RESULT([$pc_field]) + pc_field_found=true) + fi + done + fi + if ! $pc_field_found; then + [$1] + fi]) diff --git a/src/thirdparty/gperftools-2.0/m4/program_invocation_name.m4 b/src/thirdparty/gperftools-2.0/m4/program_invocation_name.m4 new file mode 100644 index 000000000..6161f66d2 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/m4/program_invocation_name.m4 @@ -0,0 +1,19 @@ +# We need to be careful to avoid having the reference to +# program_invocation_name optimized out. We do that by +# returning the value. + +AC_DEFUN([AC_PROGRAM_INVOCATION_NAME], + [AC_CACHE_CHECK( + for program_invocation_name, + ac_cv_have_program_invocation_name, + AC_TRY_LINK([extern char* program_invocation_name;], + [return *program_invocation_name;], + [ac_cv_have_program_invocation_name=yes], + [ac_cv_have_program_invocation_name=no]) + ) + if test "$ac_cv_have_program_invocation_name" = "yes"; then + AC_DEFINE(HAVE_PROGRAM_INVOCATION_NAME, 1, + [define if libc has program_invocation_name]) + fi + ]) + diff --git a/src/thirdparty/gperftools-2.0/m4/stl_namespace.m4 b/src/thirdparty/gperftools-2.0/m4/stl_namespace.m4 new file mode 100644 index 000000000..989ad8069 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/m4/stl_namespace.m4 @@ -0,0 +1,25 @@ +# We check what namespace stl code like vector expects to be executed in + +AC_DEFUN([AC_CXX_STL_NAMESPACE], + [AC_CACHE_CHECK( + what namespace STL code is in, + ac_cv_cxx_stl_namespace, + [AC_REQUIRE([AC_CXX_NAMESPACES]) + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([#include ], + [vector t; return 0;], + ac_cv_cxx_stl_namespace=none) + AC_TRY_COMPILE([#include ], + [std::vector t; return 0;], + ac_cv_cxx_stl_namespace=std) + AC_LANG_RESTORE]) + if test "$ac_cv_cxx_stl_namespace" = none; then + AC_DEFINE(STL_NAMESPACE,, + [the namespace where STL code like vector<> is defined]) + fi + if test "$ac_cv_cxx_stl_namespace" = std; then + AC_DEFINE(STL_NAMESPACE,std, + [the namespace where STL code like vector<> is defined]) + fi +]) diff --git a/src/thirdparty/gperftools-2.0/missing b/src/thirdparty/gperftools-2.0/missing new file mode 100755 index 000000000..1c8ff7049 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/missing @@ -0,0 +1,367 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2006-05-10.23 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# 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. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). +case $1 in + lex|yacc) + # Not GNU programs, they don't have --version. + ;; + + tar) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $1 in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/src/thirdparty/gperftools-2.0/mkinstalldirs b/src/thirdparty/gperftools-2.0/mkinstalldirs new file mode 100755 index 000000000..ef7e16fda --- /dev/null +++ b/src/thirdparty/gperftools-2.0/mkinstalldirs @@ -0,0 +1,161 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy + +scriptversion=2006-05-11.19 + +# Original author: Noah Friedman +# Created: 1993-05-16 +# Public domain. +# +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' +IFS=" "" $nl" +errstatus=0 +dirmode= + +usage="\ +Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... + +Create each directory DIR (with mode MODE, if specified), including all +leading file name components. + +Report bugs to ." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" + exit $? + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --version) + echo "$0 $scriptversion" + exit $? + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and +# mkdir -p a/c at the same time, both will detect that a is missing, +# one will create a, then the other will try to create a and die with +# a "File exists" error. This is a problem when calling mkinstalldirs +# from a parallel make. We use --version in the probe to restrict +# ourselves to GNU mkdir, which is thread-safe. +case $dirmode in + '') + if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + test -d ./-p && rmdir ./-p + test -d ./--version && rmdir ./--version + fi + ;; + *) + if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && + test ! -d ./--version; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + else + # Clean up after NextStep and OpenStep mkdir. + for d in ./-m ./-p ./--version "./$dirmode"; + do + test -d $d && rmdir $d + done + fi + ;; +esac + +for file +do + case $file in + /*) pathcomp=/ ;; + *) pathcomp= ;; + esac + oIFS=$IFS + IFS=/ + set fnord $file + shift + IFS=$oIFS + + for d + do + test "x$d" = x && continue + + 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: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/src/thirdparty/gperftools-2.0/packages/deb.sh b/src/thirdparty/gperftools-2.0/packages/deb.sh new file mode 100755 index 000000000..31b423c12 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb.sh @@ -0,0 +1,74 @@ +#!/bin/bash -e + +# This takes one commandline argument, the name of the package. If no +# name is given, then we'll end up just using the name associated with +# an arbitrary .tar.gz file in the rootdir. That's fine: there's probably +# only one. +# +# Run this from the 'packages' directory, just under rootdir + +## Set LIB to lib if exporting a library, empty-string else +LIB= +#LIB=lib + +PACKAGE="$1" +VERSION="$2" + +# We can only build Debian packages, if the Debian build tools are installed +if [ \! -x /usr/bin/debuild ]; then + echo "Cannot find /usr/bin/debuild. Not building Debian packages." 1>&2 + exit 0 +fi + +# Double-check we're in the packages directory, just under rootdir +if [ \! -r ../Makefile -a \! -r ../INSTALL ]; then + echo "Must run $0 in the 'packages' directory, under the root directory." 1>&2 + echo "Also, you must run \"make dist\" before running this script." 1>&2 + exit 0 +fi + +# Find the top directory for this package +topdir="${PWD%/*}" + +# Find the tar archive built by "make dist" +archive="${PACKAGE}-${VERSION}" +archive_with_underscore="${PACKAGE}_${VERSION}" +if [ -z "${archive}" ]; then + echo "Cannot find ../$PACKAGE*.tar.gz. Run \"make dist\" first." 1>&2 + exit 0 +fi + +# Create a pristine directory for building the Debian package files +trap 'rm -rf '`pwd`/tmp'; exit $?' EXIT SIGHUP SIGINT SIGTERM + +rm -rf tmp +mkdir -p tmp +cd tmp + +# Debian has very specific requirements about the naming of build +# directories, and tar archives. It also wants to write all generated +# packages to the parent of the source directory. We accommodate these +# requirements by building directly from the tar file. +ln -s "${topdir}/${archive}.tar.gz" "${LIB}${archive}.orig.tar.gz" +# Some version of debuilder want foo.orig.tar.gz with _ between versions. +ln -s "${topdir}/${archive}.tar.gz" "${LIB}${archive_with_underscore}.orig.tar.gz" +tar zfx "${LIB}${archive}.orig.tar.gz" +[ -n "${LIB}" ] && mv "${archive}" "${LIB}${archive}" +cd "${LIB}${archive}" +# This is one of those 'specific requirements': where the deb control files live +cp -a "packages/deb" "debian" + +# Now, we can call Debian's standard build tool +debuild -uc -us +cd ../.. # get back to the original top-level dir + +# We'll put the result in a subdirectory that's named after the OS version +# we've made this .deb file for. +destdir="debian-$(cat /etc/debian_version 2>/dev/null || echo UNKNOWN)" + +rm -rf "$destdir" +mkdir -p "$destdir" +mv $(find tmp -mindepth 1 -maxdepth 1 -type f) "$destdir" + +echo +echo "The Debian package files are located in $PWD/$destdir" diff --git a/src/thirdparty/gperftools-2.0/packages/deb/README b/src/thirdparty/gperftools-2.0/packages/deb/README new file mode 100644 index 000000000..57becfda7 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb/README @@ -0,0 +1,7 @@ +The list of files here isn't complete. For a step-by-step guide on +how to set this package up correctly, check out + http://www.debian.org/doc/maint-guide/ + +Most of the files that are in this directory are boilerplate. +However, you may need to change the list of binary-arch dependencies +in 'rules'. diff --git a/src/thirdparty/gperftools-2.0/packages/deb/changelog b/src/thirdparty/gperftools-2.0/packages/deb/changelog new file mode 100644 index 000000000..dad1d5f30 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb/changelog @@ -0,0 +1,196 @@ +gperftools (2.0-1) unstable; urgency=low + + * New upstream release. + * Package renamed from google-perftools to gperftools. + + -- Google Inc. and others Fri, 03 Feb 2012 15:40:45 -0800 + +google-perftools (1.10-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Tue, 31 Jan 2012 10:43:50 -0800 + +google-perftools (1.9-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Thu, 22 Dec 2011 16:22:45 -0800 + +google-perftools (1.8-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Fri, 15 Jul 2011 16:10:51 -0700 + +google-perftools (1.7-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Fri, 04 Feb 2011 15:54:31 -0800 + +google-perftools (1.6-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Thu, 05 Aug 2010 12:48:03 -0700 + +google-perftools (1.5-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Tue, 19 Jan 2010 14:46:12 -0800 + +google-perftools (1.4-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Thu, 10 Sep 2009 13:51:15 -0700 + +google-perftools (1.3-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Tue, 09 Jun 2009 18:19:06 -0700 + +google-perftools (1.2-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Fri, 17 Apr 2009 16:40:48 -0700 + +google-perftools (1.1-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Wed, 11 Mar 2009 11:25:34 -0700 + +google-perftools (1.0-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Tue, 06 Jan 2009 13:58:56 -0800 + +google-perftools (1.0rc1-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Thu, 11 Dec 2008 16:01:32 -0800 + +google-perftools (0.99.1-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Sat, 20 Sep 2008 09:37:18 -0700 + +google-perftools (0.99-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Thu, 18 Sep 2008 16:00:27 -0700 + +google-perftools (0.98-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Mon, 09 Jun 2008 16:47:03 -0700 + +google-perftools (0.97-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Mon, 21 Apr 2008 15:20:52 -0700 + +google-perftools (0.96-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Tue, 18 Mar 2008 14:30:44 -0700 + +google-perftools (0.95-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Tue, 12 Feb 2008 12:28:32 -0800 + +google-perftools (0.94-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Thu, 29 Nov 2007 07:59:43 -0800 + +google-perftools (0.93-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Fri, 17 Aug 2007 12:32:56 -0700 + +google-perftools (0.92-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Tue, 17 Jul 2007 22:26:27 -0700 + +google-perftools (0.91-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Wed, 18 Apr 2007 16:43:55 -0700 + +google-perftools (0.90-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Fri, 13 Apr 2007 14:50:51 -0700 + +google-perftools (0.8-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Wed, 14 Jun 2006 15:11:14 -0700 + +google-perftools (0.7-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Thu, 13 Apr 2006 20:59:09 -0700 + +google-perftools (0.6-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Fri, 27 Jan 2006 14:04:27 -0800 + +google-perftools (0.5-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Mon, Nov 14 17:28:59 2005 -0800 + +google-perftools (0.4-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Wed, 26 Oct 2005 15:19:16 -0700 + +google-perftools (0.3-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Fri, 24 Jun 2005 18:02:26 -0700 + +google-perftools (0.2-1) unstable; urgency=low + + * New upstream release. + + -- Google Inc. Tue, 31 May 2005 08:14:38 -0700 + +google-perftools (0.1-1) unstable; urgency=low + + * Initial release. + The google-perftools package contains some utilities to improve + and analyze the performance of C++ programs. This includes an + optimized thread-caching malloc() and cpu and heap profiling + utilities. + + -- Google Inc. Fri, 11 Mar 2005 08:07:33 -0800 diff --git a/src/thirdparty/gperftools-2.0/packages/deb/compat b/src/thirdparty/gperftools-2.0/packages/deb/compat new file mode 100644 index 000000000..b8626c4cf --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb/compat @@ -0,0 +1 @@ +4 diff --git a/src/thirdparty/gperftools-2.0/packages/deb/control b/src/thirdparty/gperftools-2.0/packages/deb/control new file mode 100644 index 000000000..a5535946e --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb/control @@ -0,0 +1,25 @@ +Source: gperftools +Priority: optional +Maintainer: Google Inc. and others +Build-Depends: debhelper (>= 4.0.0), binutils +Standards-Version: 3.6.1 + +Package: libgperftools-dev +Section: libdevel +Architecture: any +Depends: libgperftools0 (= ${Source-Version}) +Description: libraries for CPU and heap analysis, plus an efficient thread-caching malloc + The gperftools package contains some utilities to improve and + analyze the performance of C++ programs. This includes an optimized + thread-caching malloc() and cpu and heap profiling utilities. The + devel package contains static and debug libraries and header files + for developing applications that use the gperftools package. + +Package: libgperftools0 +Section: libs +Architecture: any +Depends: ${shlibs:Depends} +Description: libraries for CPU and heap analysis, plus an efficient thread-caching malloc + The gperftools package contains some utilities to improve and + analyze the performance of C++ programs. This includes an optimized + thread-caching malloc() and cpu and heap profiling utilities. diff --git a/src/thirdparty/gperftools-2.0/packages/deb/copyright b/src/thirdparty/gperftools-2.0/packages/deb/copyright new file mode 100644 index 000000000..1a11eb73c --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb/copyright @@ -0,0 +1,35 @@ +This package was debianized by Craig Silverstein +on Fri, 03 Feb 2012 15:40:45 -0800. + +It was downloaded from http://code.google.com/p/gperftools/downloads/list + +Upstream Author: google-perftools@googlegroups.com + +Copyright (c) 2005, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/thirdparty/gperftools-2.0/packages/deb/docs b/src/thirdparty/gperftools-2.0/packages/deb/docs new file mode 100644 index 000000000..df891c962 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb/docs @@ -0,0 +1,47 @@ +AUTHORS +COPYING +ChangeLog +INSTALL +NEWS +README +TODO +doc/cpuprofile.html +doc/cpuprofile-fileformat.html +doc/designstyle.css +doc/heap-example1.png +doc/heap_checker.html +doc/heapprofile.html +doc/index.html +doc/overview.gif +doc/pageheap.gif +doc/pprof-test-big.gif +doc/pprof-test.gif +doc/pprof-vsnprintf-big.gif +doc/pprof-vsnprintf.gif +doc/pprof.1 +doc/pprof_remote_servers.html +doc/spanmap.gif +doc/t-test1.times.txt +doc/tcmalloc-opspercpusec.vs.threads.1024.bytes.png +doc/tcmalloc-opspercpusec.vs.threads.128.bytes.png +doc/tcmalloc-opspercpusec.vs.threads.131072.bytes.png +doc/tcmalloc-opspercpusec.vs.threads.16384.bytes.png +doc/tcmalloc-opspercpusec.vs.threads.2048.bytes.png +doc/tcmalloc-opspercpusec.vs.threads.256.bytes.png +doc/tcmalloc-opspercpusec.vs.threads.32768.bytes.png +doc/tcmalloc-opspercpusec.vs.threads.4096.bytes.png +doc/tcmalloc-opspercpusec.vs.threads.512.bytes.png +doc/tcmalloc-opspercpusec.vs.threads.64.bytes.png +doc/tcmalloc-opspercpusec.vs.threads.65536.bytes.png +doc/tcmalloc-opspercpusec.vs.threads.8192.bytes.png +doc/tcmalloc-opspersec.vs.size.1.threads.png +doc/tcmalloc-opspersec.vs.size.12.threads.png +doc/tcmalloc-opspersec.vs.size.16.threads.png +doc/tcmalloc-opspersec.vs.size.2.threads.png +doc/tcmalloc-opspersec.vs.size.20.threads.png +doc/tcmalloc-opspersec.vs.size.3.threads.png +doc/tcmalloc-opspersec.vs.size.4.threads.png +doc/tcmalloc-opspersec.vs.size.5.threads.png +doc/tcmalloc-opspersec.vs.size.8.threads.png +doc/tcmalloc.html +doc/threadheap.gif diff --git a/src/thirdparty/gperftools-2.0/packages/deb/libgperftools-dev.dirs b/src/thirdparty/gperftools-2.0/packages/deb/libgperftools-dev.dirs new file mode 100644 index 000000000..8f883479b --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb/libgperftools-dev.dirs @@ -0,0 +1,5 @@ +usr/lib +usr/lib/pkgconfig +usr/include +usr/include/google +usr/include/gperftools diff --git a/src/thirdparty/gperftools-2.0/packages/deb/libgperftools-dev.install b/src/thirdparty/gperftools-2.0/packages/deb/libgperftools-dev.install new file mode 100644 index 000000000..e863529f3 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb/libgperftools-dev.install @@ -0,0 +1,12 @@ +usr/include/google/* +usr/include/gperftools/* +usr/lib/lib*.so +usr/lib/lib*.a +usr/lib/*.la +usr/lib/pkgconfig/*.pc +debian/tmp/usr/include/google/* +debian/tmp/usr/include/gperftools/* +debian/tmp/usr/lib/lib*.so +debian/tmp/usr/lib/lib*.a +debian/tmp/usr/lib/*.la +debian/tmp/usr/lib/pkgconfig/*.pc diff --git a/src/thirdparty/gperftools-2.0/packages/deb/libgperftools0.dirs b/src/thirdparty/gperftools-2.0/packages/deb/libgperftools0.dirs new file mode 100644 index 000000000..14f5b95d7 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb/libgperftools0.dirs @@ -0,0 +1,2 @@ +usr/lib +usr/bin diff --git a/src/thirdparty/gperftools-2.0/packages/deb/libgperftools0.install b/src/thirdparty/gperftools-2.0/packages/deb/libgperftools0.install new file mode 100644 index 000000000..047eed5c6 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb/libgperftools0.install @@ -0,0 +1,4 @@ +usr/lib/lib*.so.* +usr/bin/pprof* +debian/tmp/usr/lib/lib*.so.* +debian/tmp/usr/bin/pprof* diff --git a/src/thirdparty/gperftools-2.0/packages/deb/libgperftools0.manpages b/src/thirdparty/gperftools-2.0/packages/deb/libgperftools0.manpages new file mode 100644 index 000000000..08d1476b8 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb/libgperftools0.manpages @@ -0,0 +1 @@ +doc/pprof.1 diff --git a/src/thirdparty/gperftools-2.0/packages/deb/rules b/src/thirdparty/gperftools-2.0/packages/deb/rules new file mode 100755 index 000000000..f520befd2 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/deb/rules @@ -0,0 +1,117 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + + +CFLAGS = -Wall -g + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif +ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) + INSTALL_PROGRAM += -s +endif + +# shared library versions, option 1 +#version=2.0.5 +#major=2 +# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so +version=`ls src/.libs/lib*.so.* | \ + awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'` +major=`ls src/.libs/lib*.so.* | \ + awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'` + +config.status: configure + dh_testdir + # Add here commands to configure the package. + CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info + + +build: build-stamp +build-stamp: config.status + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) distclean +ifneq "$(wildcard /usr/share/misc/config.sub)" "" + cp -f /usr/share/misc/config.sub config.sub +endif +ifneq "$(wildcard /usr/share/misc/config.guess)" "" + cp -f /usr/share/misc/config.guess config.guess +endif + + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/tmp + $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs ChangeLog + dh_installdocs + dh_installexamples + dh_install --sourcedir=debian/tmp +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_python + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install diff --git a/src/thirdparty/gperftools-2.0/packages/rpm.sh b/src/thirdparty/gperftools-2.0/packages/rpm.sh new file mode 100755 index 000000000..448a0327f --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/rpm.sh @@ -0,0 +1,86 @@ +#!/bin/sh -e + +# Run this from the 'packages' directory, just under rootdir + +# We can only build rpm packages, if the rpm build tools are installed +if [ \! -x /usr/bin/rpmbuild ] +then + echo "Cannot find /usr/bin/rpmbuild. Not building an rpm." 1>&2 + exit 0 +fi + +# Check the commandline flags +PACKAGE="$1" +VERSION="$2" +fullname="${PACKAGE}-${VERSION}" +archive=../$fullname.tar.gz + +if [ -z "$1" -o -z "$2" ] +then + echo "Usage: $0 " 1>&2 + exit 0 +fi + +# Double-check we're in the packages directory, just under rootdir +if [ \! -r ../Makefile -a \! -r ../INSTALL ] +then + echo "Must run $0 in the 'packages' directory, under the root directory." 1>&2 + echo "Also, you must run \"make dist\" before running this script." 1>&2 + exit 0 +fi + +if [ \! -r "$archive" ] +then + echo "Cannot find $archive. Run \"make dist\" first." 1>&2 + exit 0 +fi + +# Create the directory where the input lives, and where the output should live +RPM_SOURCE_DIR="/tmp/rpmsource-$fullname" +RPM_BUILD_DIR="/tmp/rpmbuild-$fullname" + +trap 'rm -rf $RPM_SOURCE_DIR $RPM_BUILD_DIR; exit $?' EXIT SIGHUP SIGINT SIGTERM + +rm -rf "$RPM_SOURCE_DIR" "$RPM_BUILD_DIR" +mkdir "$RPM_SOURCE_DIR" +mkdir "$RPM_BUILD_DIR" + +cp "$archive" "$RPM_SOURCE_DIR" + +# rpmbuild -- as far as I can tell -- asks the OS what CPU it has. +# This may differ from what kind of binaries gcc produces. dpkg +# does a better job of this, so if we can run 'dpkg --print-architecture' +# to get the build CPU, we use that in preference of the rpmbuild +# default. +target=`dpkg --print-architecture 2>/dev/null || echo ""` +if [ -n "$target" ] +then + target=" --target $target" +fi + +rpmbuild -bb rpm/rpm.spec $target \ + --define "NAME $PACKAGE" \ + --define "VERSION $VERSION" \ + --define "_sourcedir $RPM_SOURCE_DIR" \ + --define "_builddir $RPM_BUILD_DIR" \ + --define "_rpmdir $RPM_SOURCE_DIR" + +# We put the output in a directory based on what system we've built for +destdir=rpm-unknown +if [ -r /etc/issue ] +then + grep "Red Hat.*release 7" /etc/issue >/dev/null 2>&1 && destdir=rh7 + grep "Red Hat.*release 8" /etc/issue >/dev/null 2>&1 && destdir=rh8 + grep "Red Hat.*release 9" /etc/issue >/dev/null 2>&1 && destdir=rh9 + grep "Fedora Core.*release 1" /etc/issue >/dev/null 2>&1 && destdir=fc1 + grep "Fedora Core.*release 2" /etc/issue >/dev/null 2>&1 && destdir=fc2 + grep "Fedora Core.*release 3" /etc/issue >/dev/null 2>&1 && destdir=fc3 +fi + +rm -rf "$destdir" +mkdir -p "$destdir" +# We want to get not only the main package but devel etc, hence the middle * +mv "$RPM_SOURCE_DIR"/*/"${PACKAGE}"-*"${VERSION}"*.rpm "$destdir" + +echo +echo "The rpm package file(s) are located in $PWD/$destdir" diff --git a/src/thirdparty/gperftools-2.0/packages/rpm/rpm.spec b/src/thirdparty/gperftools-2.0/packages/rpm/rpm.spec new file mode 100644 index 000000000..bb9a4ee8d --- /dev/null +++ b/src/thirdparty/gperftools-2.0/packages/rpm/rpm.spec @@ -0,0 +1,77 @@ +%define RELEASE 1 +%define rel %{?CUSTOM_RELEASE} %{!?CUSTOM_RELEASE:%RELEASE} +%define prefix /usr + +Name: %NAME +Summary: Performance tools for C++ +Version: %VERSION +Release: %rel +Group: Development/Libraries +URL: http://code.google.com/p/gperftools/ +License: BSD +Vendor: Google Inc. and others +Packager: Google Inc. and others +Source: http://%{NAME}.googlecode.com/files/%{NAME}-%{VERSION}.tar.gz +Distribution: Redhat 7 and above. +Buildroot: %{_tmppath}/%{name}-root +Prefix: %prefix + +%description +The %name packages contains some utilities to improve and analyze the +performance of C++ programs. This includes an optimized thread-caching +malloc() and cpu and heap profiling utilities. + +%package devel +Summary: Performance tools for C++ +Group: Development/Libraries +Requires: %{NAME} = %{VERSION} + +%description devel +The %name-devel package contains static and debug libraries and header +files for developing applications that use the %name package. + +%changelog + * Mon Apr 20 2009 + - Change build rule to use a configure line more like '%configure' + - Change install to use DESTDIR instead of prefix for configure + - Use wildcards for doc/ and lib/ directories + + * Fri Mar 11 2005 + - First draft + +%prep +%setup + +%build +# I can't use '% configure', because it defines -m32 which breaks some +# of the low-level atomicops files in this package. But I do take +# as much from % configure (in /usr/lib/rpm/macros) as I can. +./configure --prefix=%{_prefix} --exec-prefix=%{_exec_prefix} --bindir=%{_bindir} --sbindir=%{_sbindir} --sysconfdir=%{_sysconfdir} --datadir=%{_datadir} --includedir=%{_includedir} --libdir=%{_libdir} --libexecdir=%{_libexecdir} --localstatedir=%{_localstatedir} --sharedstatedir=%{_sharedstatedir} --mandir=%{_mandir} --infodir=%{_infodir} +make + +%install +rm -rf $RPM_BUILD_ROOT +make DESTDIR=$RPM_BUILD_ROOT install + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root) + +%docdir %{prefix}/share/doc/%{NAME}-%{VERSION} +%{prefix}/share/doc/%{NAME}-%{VERSION}/* + +%{_libdir}/*.so.* +%{_bindir}/pprof +%{_mandir}/man1/pprof.1* + +%files devel +%defattr(-,root,root) + +%{_includedir}/google +%{_includedir}/gperftools +%{_libdir}/*.a +%{_libdir}/*.la +%{_libdir}/*.so +%{_libdir}/pkgconfig/*.pc diff --git a/src/thirdparty/gperftools-2.0/src/addressmap-inl.h b/src/thirdparty/gperftools-2.0/src/addressmap-inl.h new file mode 100644 index 000000000..b122f17b8 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/addressmap-inl.h @@ -0,0 +1,421 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// A fast map from addresses to values. Assumes that addresses are +// clustered. The main use is intended to be for heap-profiling. +// May be too memory-hungry for other uses. +// +// We use a user-defined allocator/de-allocator so that we can use +// this data structure during heap-profiling. +// +// IMPLEMENTATION DETAIL: +// +// Some default definitions/parameters: +// * Block -- aligned 128-byte region of the address space +// * Cluster -- aligned 1-MB region of the address space +// * Block-ID -- block-number within a cluster +// * Cluster-ID -- Starting address of cluster divided by cluster size +// +// We use a three-level map to represent the state: +// 1. A hash-table maps from a cluster-ID to the data for that cluster. +// 2. For each non-empty cluster we keep an array indexed by +// block-ID tht points to the first entry in the linked-list +// for the block. +// 3. At the bottom, we keep a singly-linked list of all +// entries in a block (for non-empty blocks). +// +// hash table +// +-------------+ +// | id->cluster |---> ... +// | ... | +// | id->cluster |---> Cluster +// +-------------+ +-------+ Data for one block +// | nil | +------------------------------------+ +// | ----+---|->[addr/value]-->[addr/value]-->... | +// | nil | +------------------------------------+ +// | ----+--> ... +// | nil | +// | ... | +// +-------+ +// +// Note that we require zero-bytes of overhead for completely empty +// clusters. The minimum space requirement for a cluster is the size +// of the hash-table entry plus a pointer value for each block in +// the cluster. Empty blocks impose no extra space requirement. +// +// The cost of a lookup is: +// a. A hash-table lookup to find the cluster +// b. An array access in the cluster structure +// c. A traversal over the linked-list for a block + +#ifndef BASE_ADDRESSMAP_INL_H_ +#define BASE_ADDRESSMAP_INL_H_ + +#include "config.h" +#include +#include +#if defined HAVE_STDINT_H +#include // to get uint16_t (ISO naming madness) +#elif defined HAVE_INTTYPES_H +#include // another place uint16_t might be defined +#else +#include // our last best hope +#endif + +// This class is thread-unsafe -- that is, instances of this class can +// not be accessed concurrently by multiple threads -- because the +// callback function for Iterate() may mutate contained values. If the +// callback functions you pass do not mutate their Value* argument, +// AddressMap can be treated as thread-compatible -- that is, it's +// safe for multiple threads to call "const" methods on this class, +// but not safe for one thread to call const methods on this class +// while another thread is calling non-const methods on the class. +template +class AddressMap { + public: + typedef void* (*Allocator)(size_t size); + typedef void (*DeAllocator)(void* ptr); + typedef const void* Key; + + // Create an AddressMap that uses the specified allocator/deallocator. + // The allocator/deallocator should behave like malloc/free. + // For instance, the allocator does not need to return initialized memory. + AddressMap(Allocator alloc, DeAllocator dealloc); + ~AddressMap(); + + // If the map contains an entry for "key", return it. Else return NULL. + inline const Value* Find(Key key) const; + inline Value* FindMutable(Key key); + + // Insert into the map. Any old value associated + // with key is forgotten. + void Insert(Key key, Value value); + + // Remove any entry for key in the map. If an entry was found + // and removed, stores the associated value in "*removed_value" + // and returns true. Else returns false. + bool FindAndRemove(Key key, Value* removed_value); + + // Similar to Find but we assume that keys are addresses of non-overlapping + // memory ranges whose sizes are given by size_func. + // If the map contains a range into which "key" points + // (at its start or inside of it, but not at the end), + // return the address of the associated value + // and store its key in "*res_key". + // Else return NULL. + // max_size specifies largest range size possibly in existence now. + typedef size_t (*ValueSizeFunc)(const Value& v); + const Value* FindInside(ValueSizeFunc size_func, size_t max_size, + Key key, Key* res_key); + + // Iterate over the address map calling 'callback' + // for all stored key-value pairs and passing 'arg' to it. + // We don't use full Closure/Callback machinery not to add + // unnecessary dependencies to this class with low-level uses. + template + inline void Iterate(void (*callback)(Key, Value*, Type), Type arg) const; + + private: + typedef uintptr_t Number; + + // The implementation assumes that addresses inserted into the map + // will be clustered. We take advantage of this fact by splitting + // up the address-space into blocks and using a linked-list entry + // for each block. + + // Size of each block. There is one linked-list for each block, so + // do not make the block-size too big. Oterwise, a lot of time + // will be spent traversing linked lists. + static const int kBlockBits = 7; + static const int kBlockSize = 1 << kBlockBits; + + // Entry kept in per-block linked-list + struct Entry { + Entry* next; + Key key; + Value value; + }; + + // We further group a sequence of consecutive blocks into a cluster. + // The data for a cluster is represented as a dense array of + // linked-lists, one list per contained block. + static const int kClusterBits = 13; + static const Number kClusterSize = 1 << (kBlockBits + kClusterBits); + static const int kClusterBlocks = 1 << kClusterBits; + + // We use a simple chaining hash-table to represent the clusters. + struct Cluster { + Cluster* next; // Next cluster in hash table chain + Number id; // Cluster ID + Entry* blocks[kClusterBlocks]; // Per-block linked-lists + }; + + // Number of hash-table entries. With the block-size/cluster-size + // defined above, each cluster covers 1 MB, so an 4K entry + // hash-table will give an average hash-chain length of 1 for 4GB of + // in-use memory. + static const int kHashBits = 12; + static const int kHashSize = 1 << 12; + + // Number of entry objects allocated at a time + static const int ALLOC_COUNT = 64; + + Cluster** hashtable_; // The hash-table + Entry* free_; // Free list of unused Entry objects + + // Multiplicative hash function: + // The value "kHashMultiplier" is the bottom 32 bits of + // int((sqrt(5)-1)/2 * 2^32) + // This is a good multiplier as suggested in CLR, Knuth. The hash + // value is taken to be the top "k" bits of the bottom 32 bits + // of the muliplied value. + static const uint32_t kHashMultiplier = 2654435769u; + static int HashInt(Number x) { + // Multiply by a constant and take the top bits of the result. + const uint32_t m = static_cast(x) * kHashMultiplier; + return static_cast(m >> (32 - kHashBits)); + } + + // Find cluster object for specified address. If not found + // and "create" is true, create the object. If not found + // and "create" is false, return NULL. + // + // This method is bitwise-const if create is false. + Cluster* FindCluster(Number address, bool create) { + // Look in hashtable + const Number cluster_id = address >> (kBlockBits + kClusterBits); + const int h = HashInt(cluster_id); + for (Cluster* c = hashtable_[h]; c != NULL; c = c->next) { + if (c->id == cluster_id) { + return c; + } + } + + // Create cluster if necessary + if (create) { + Cluster* c = New(1); + c->id = cluster_id; + c->next = hashtable_[h]; + hashtable_[h] = c; + return c; + } + return NULL; + } + + // Return the block ID for an address within its cluster + static int BlockID(Number address) { + return (address >> kBlockBits) & (kClusterBlocks - 1); + } + + //-------------------------------------------------------------- + // Memory management -- we keep all objects we allocate linked + // together in a singly linked list so we can get rid of them + // when we are all done. Furthermore, we allow the client to + // pass in custom memory allocator/deallocator routines. + //-------------------------------------------------------------- + struct Object { + Object* next; + // The real data starts here + }; + + Allocator alloc_; // The allocator + DeAllocator dealloc_; // The deallocator + Object* allocated_; // List of allocated objects + + // Allocates a zeroed array of T with length "num". Also inserts + // the allocated block into a linked list so it can be deallocated + // when we are all done. + template T* New(int num) { + void* ptr = (*alloc_)(sizeof(Object) + num*sizeof(T)); + memset(ptr, 0, sizeof(Object) + num*sizeof(T)); + Object* obj = reinterpret_cast(ptr); + obj->next = allocated_; + allocated_ = obj; + return reinterpret_cast(reinterpret_cast(ptr) + 1); + } +}; + +// More implementation details follow: + +template +AddressMap::AddressMap(Allocator alloc, DeAllocator dealloc) + : free_(NULL), + alloc_(alloc), + dealloc_(dealloc), + allocated_(NULL) { + hashtable_ = New(kHashSize); +} + +template +AddressMap::~AddressMap() { + // De-allocate all of the objects we allocated + for (Object* obj = allocated_; obj != NULL; /**/) { + Object* next = obj->next; + (*dealloc_)(obj); + obj = next; + } +} + +template +inline const Value* AddressMap::Find(Key key) const { + return const_cast(this)->FindMutable(key); +} + +template +inline Value* AddressMap::FindMutable(Key key) { + const Number num = reinterpret_cast(key); + const Cluster* const c = FindCluster(num, false/*do not create*/); + if (c != NULL) { + for (Entry* e = c->blocks[BlockID(num)]; e != NULL; e = e->next) { + if (e->key == key) { + return &e->value; + } + } + } + return NULL; +} + +template +void AddressMap::Insert(Key key, Value value) { + const Number num = reinterpret_cast(key); + Cluster* const c = FindCluster(num, true/*create*/); + + // Look in linked-list for this block + const int block = BlockID(num); + for (Entry* e = c->blocks[block]; e != NULL; e = e->next) { + if (e->key == key) { + e->value = value; + return; + } + } + + // Create entry + if (free_ == NULL) { + // Allocate a new batch of entries and add to free-list + Entry* array = New(ALLOC_COUNT); + for (int i = 0; i < ALLOC_COUNT-1; i++) { + array[i].next = &array[i+1]; + } + array[ALLOC_COUNT-1].next = free_; + free_ = &array[0]; + } + Entry* e = free_; + free_ = e->next; + e->key = key; + e->value = value; + e->next = c->blocks[block]; + c->blocks[block] = e; +} + +template +bool AddressMap::FindAndRemove(Key key, Value* removed_value) { + const Number num = reinterpret_cast(key); + Cluster* const c = FindCluster(num, false/*do not create*/); + if (c != NULL) { + for (Entry** p = &c->blocks[BlockID(num)]; *p != NULL; p = &(*p)->next) { + Entry* e = *p; + if (e->key == key) { + *removed_value = e->value; + *p = e->next; // Remove e from linked-list + e->next = free_; // Add e to free-list + free_ = e; + return true; + } + } + } + return false; +} + +template +const Value* AddressMap::FindInside(ValueSizeFunc size_func, + size_t max_size, + Key key, + Key* res_key) { + const Number key_num = reinterpret_cast(key); + Number num = key_num; // we'll move this to move back through the clusters + while (1) { + const Cluster* c = FindCluster(num, false/*do not create*/); + if (c != NULL) { + while (1) { + const int block = BlockID(num); + bool had_smaller_key = false; + for (const Entry* e = c->blocks[block]; e != NULL; e = e->next) { + const Number e_num = reinterpret_cast(e->key); + if (e_num <= key_num) { + if (e_num == key_num || // to handle 0-sized ranges + key_num < e_num + (*size_func)(e->value)) { + *res_key = e->key; + return &e->value; + } + had_smaller_key = true; + } + } + if (had_smaller_key) return NULL; // got a range before 'key' + // and it did not contain 'key' + if (block == 0) break; + // try address-wise previous block + num |= kBlockSize - 1; // start at the last addr of prev block + num -= kBlockSize; + if (key_num - num > max_size) return NULL; + } + } + if (num < kClusterSize) return NULL; // first cluster + // go to address-wise previous cluster to try + num |= kClusterSize - 1; // start at the last block of previous cluster + num -= kClusterSize; + if (key_num - num > max_size) return NULL; + // Having max_size to limit the search is crucial: else + // we have to traverse a lot of empty clusters (or blocks). + // We can avoid needing max_size if we put clusters into + // a search tree, but performance suffers considerably + // if we use this approach by using stl::set. + } +} + +template +template +inline void AddressMap::Iterate(void (*callback)(Key, Value*, Type), + Type arg) const { + // We could optimize this by traversing only non-empty clusters and/or blocks + // but it does not speed up heap-checker noticeably. + for (int h = 0; h < kHashSize; ++h) { + for (const Cluster* c = hashtable_[h]; c != NULL; c = c->next) { + for (int b = 0; b < kClusterBlocks; ++b) { + for (Entry* e = c->blocks[b]; e != NULL; e = e->next) { + callback(e->key, &e->value, arg); + } + } + } + } +} + +#endif // BASE_ADDRESSMAP_INL_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/arm_instruction_set_select.h b/src/thirdparty/gperftools-2.0/src/base/arm_instruction_set_select.h new file mode 100644 index 000000000..a47e6bbd2 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/arm_instruction_set_select.h @@ -0,0 +1,79 @@ +// Copyright (c) 2011, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: Alexander Levitskiy +// +// Generalizes the plethora of ARM flavors available to an easier to manage set +// Defs reference is at https://wiki.edubuntu.org/ARM/Thumb2PortingHowto + +#ifndef ARM_INSTRUCTION_SET_SELECT_H_ +#define ARM_INSTRUCTION_SET_SELECT_H_ + +#if defined(__ARM_ARCH_7__) || \ + defined(__ARM_ARCH_7R__) || \ + defined(__ARM_ARCH_7A__) +# define ARMV7 1 +#endif + +#if defined(ARMV7) || \ + defined(__ARM_ARCH_6__) || \ + defined(__ARM_ARCH_6J__) || \ + defined(__ARM_ARCH_6K__) || \ + defined(__ARM_ARCH_6Z__) || \ + defined(__ARM_ARCH_6T2__) || \ + defined(__ARM_ARCH_6ZK__) +# define ARMV6 1 +#endif + +#if defined(ARMV6) || \ + defined(__ARM_ARCH_5T__) || \ + defined(__ARM_ARCH_5E__) || \ + defined(__ARM_ARCH_5TE__) || \ + defined(__ARM_ARCH_5TEJ__) +# define ARMV5 1 +#endif + +#if defined(ARMV5) || \ + defined(__ARM_ARCH_4__) || \ + defined(__ARM_ARCH_4T__) +# define ARMV4 1 +#endif + +#if defined(ARMV4) || \ + defined(__ARM_ARCH_3__) || \ + defined(__ARM_ARCH_3M__) +# define ARMV3 1 +#endif + +#if defined(ARMV3) || \ + defined(__ARM_ARCH_2__) +# define ARMV2 1 +#endif + +#endif // ARM_INSTRUCTION_SET_SELECT_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-arm-generic.h b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-arm-generic.h new file mode 100644 index 000000000..4acb76afd --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-arm-generic.h @@ -0,0 +1,235 @@ +// Copyright (c) 2003, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// --- +// +// Author: Lei Zhang, Sasha Levitskiy +// +// This file is an internal atomic implementation, use base/atomicops.h instead. +// +// LinuxKernelCmpxchg and Barrier_AtomicIncrement are from Google Gears. + +#ifndef BASE_ATOMICOPS_INTERNALS_ARM_GENERIC_H_ +#define BASE_ATOMICOPS_INTERNALS_ARM_GENERIC_H_ + +#include +#include +#include "base/basictypes.h" + +typedef int32_t Atomic32; + +namespace base { +namespace subtle { + +typedef int64_t Atomic64; + +// 0xffff0fc0 is the hard coded address of a function provided by +// the kernel which implements an atomic compare-exchange. On older +// ARM architecture revisions (pre-v6) this may be implemented using +// a syscall. This address is stable, and in active use (hard coded) +// by at least glibc-2.7 and the Android C library. +// pLinuxKernelCmpxchg has both acquire and release barrier sematincs. +typedef Atomic32 (*LinuxKernelCmpxchgFunc)(Atomic32 old_value, + Atomic32 new_value, + volatile Atomic32* ptr); +LinuxKernelCmpxchgFunc pLinuxKernelCmpxchg ATTRIBUTE_WEAK = + (LinuxKernelCmpxchgFunc) 0xffff0fc0; + +typedef void (*LinuxKernelMemoryBarrierFunc)(void); +LinuxKernelMemoryBarrierFunc pLinuxKernelMemoryBarrier ATTRIBUTE_WEAK = + (LinuxKernelMemoryBarrierFunc) 0xffff0fa0; + + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev_value = *ptr; + do { + if (!pLinuxKernelCmpxchg(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + Atomic32 old_value; + do { + old_value = *ptr; + } while (pLinuxKernelCmpxchg(old_value, new_value, + const_cast(ptr))); + return old_value; +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + for (;;) { + // Atomic exchange the old value with an incremented one. + Atomic32 old_value = *ptr; + Atomic32 new_value = old_value + increment; + if (pLinuxKernelCmpxchg(old_value, new_value, + const_cast(ptr)) == 0) { + // The exchange took place as expected. + return new_value; + } + // Otherwise, *ptr changed mid-loop and we need to retry. + } +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + return Barrier_AtomicIncrement(ptr, increment); +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +inline void MemoryBarrier() { + pLinuxKernelMemoryBarrier(); +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + MemoryBarrier(); + *ptr = value; +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 value = *ptr; + MemoryBarrier(); + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + MemoryBarrier(); + return *ptr; +} + + +// 64-bit versions are not implemented yet. + +inline void NotImplementedFatalError(const char *function_name) { + fprintf(stderr, "64-bit %s() not implemented on this platform\n", + function_name); + abort(); +} + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + NotImplementedFatalError("NoBarrier_CompareAndSwap"); + return 0; +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, + Atomic64 new_value) { + NotImplementedFatalError("NoBarrier_AtomicExchange"); + return 0; +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + NotImplementedFatalError("NoBarrier_AtomicIncrement"); + return 0; +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + NotImplementedFatalError("Barrier_AtomicIncrement"); + return 0; +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + NotImplementedFatalError("NoBarrier_Store"); +} + +inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { + NotImplementedFatalError("Acquire_Store64"); +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + NotImplementedFatalError("Release_Store"); +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + NotImplementedFatalError("NoBarrier_Load"); + return 0; +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + NotImplementedFatalError("Atomic64 Acquire_Load"); + return 0; +} + +inline Atomic64 Release_Load(volatile const Atomic64* ptr) { + NotImplementedFatalError("Atomic64 Release_Load"); + return 0; +} + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + NotImplementedFatalError("Atomic64 Acquire_CompareAndSwap"); + return 0; +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + NotImplementedFatalError("Atomic64 Release_CompareAndSwap"); + return 0; +} + +} // namespace base::subtle +} // namespace base + +#endif // BASE_ATOMICOPS_INTERNALS_ARM_GENERIC_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-arm-v6plus.h b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-arm-v6plus.h new file mode 100644 index 000000000..8d5b9b534 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-arm-v6plus.h @@ -0,0 +1,368 @@ +// Copyright (c) 2011, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// --- +// +// Author: Sasha Levitskiy +// based on atomicops-internals by Sanjay Ghemawat +// +// This file is an internal atomic implementation, use base/atomicops.h instead. +// +// This code implements ARM atomics for architectures V6 and newer. + +#ifndef BASE_ATOMICOPS_INTERNALS_ARM_V6PLUS_H_ +#define BASE_ATOMICOPS_INTERNALS_ARM_V6PLUS_H_ + +#include +#include +#include "base/basictypes.h" // For COMPILE_ASSERT + +// The LDREXD and STREXD instructions in ARM all v7 variants or above. In v6, +// only some variants support it. For simplicity, we only use exclusive +// 64-bit load/store in V7 or above. +#if defined(ARMV7) +# define BASE_ATOMICOPS_HAS_LDREXD_AND_STREXD +#endif + +typedef int32_t Atomic32; + +namespace base { +namespace subtle { + +typedef int64_t Atomic64; + +// 32-bit low-level ops + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 oldval, res; + do { + __asm__ __volatile__( + "ldrex %1, [%3]\n" + "mov %0, #0\n" + "teq %1, %4\n" + // The following IT (if-then) instruction is needed for the subsequent + // conditional instruction STREXEQ when compiling in THUMB mode. + // In ARM mode, the compiler/assembler will not generate any code for it. + "it eq\n" + "strexeq %0, %5, [%3]\n" + : "=&r" (res), "=&r" (oldval), "+Qo" (*ptr) + : "r" (ptr), "Ir" (old_value), "r" (new_value) + : "cc"); + } while (res); + return oldval; +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + Atomic32 tmp, old; + __asm__ __volatile__( + "1:\n" + "ldrex %1, [%2]\n" + "strex %0, %3, [%2]\n" + "teq %0, #0\n" + "bne 1b" + : "=&r" (tmp), "=&r" (old) + : "r" (ptr), "r" (new_value) + : "cc", "memory"); + return old; +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + Atomic32 tmp, res; + __asm__ __volatile__( + "1:\n" + "ldrex %1, [%2]\n" + "add %1, %1, %3\n" + "strex %0, %1, [%2]\n" + "teq %0, #0\n" + "bne 1b" + : "=&r" (tmp), "=&r"(res) + : "r" (ptr), "r"(increment) + : "cc", "memory"); + return res; +} + +inline void MemoryBarrier() { + __asm__ __volatile__("dmb" : : : "memory"); +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + Atomic32 tmp, res; + __asm__ __volatile__( + "1:\n" + "ldrex %1, [%2]\n" + "add %1, %1, %3\n" + "dmb\n" + "strex %0, %1, [%2]\n" + "teq %0, #0\n" + "bne 1b" + : "=&r" (tmp), "=&r"(res) + : "r" (ptr), "r"(increment) + : "cc", "memory"); + return res; +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 value = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + MemoryBarrier(); + return value; +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + MemoryBarrier(); + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + MemoryBarrier(); + *ptr = value; +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 value = *ptr; + MemoryBarrier(); + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + MemoryBarrier(); + return *ptr; +} + +// 64-bit versions are only available if LDREXD and STREXD instructions +// are available. +#ifdef BASE_ATOMICOPS_HAS_LDREXD_AND_STREXD + +#define BASE_HAS_ATOMIC64 1 + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 oldval, res; + do { + __asm__ __volatile__( + "ldrexd %1, [%3]\n" + "mov %0, #0\n" + "teq %Q1, %Q4\n" + // The following IT (if-then) instructions are needed for the subsequent + // conditional instructions when compiling in THUMB mode. + // In ARM mode, the compiler/assembler will not generate any code for it. + "it eq\n" + "teqeq %R1, %R4\n" + "it eq\n" + "strexdeq %0, %5, [%3]\n" + : "=&r" (res), "=&r" (oldval), "+Q" (*ptr) + : "r" (ptr), "Ir" (old_value), "r" (new_value) + : "cc"); + } while (res); + return oldval; +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, + Atomic64 new_value) { + int store_failed; + Atomic64 old; + __asm__ __volatile__( + "1:\n" + "ldrexd %1, [%2]\n" + "strexd %0, %3, [%2]\n" + "teq %0, #0\n" + "bne 1b" + : "=&r" (store_failed), "=&r" (old) + : "r" (ptr), "r" (new_value) + : "cc", "memory"); + return old; +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + int store_failed; + Atomic64 res; + __asm__ __volatile__( + "1:\n" + "ldrexd %1, [%2]\n" + "adds %Q1, %Q1, %Q3\n" + "adc %R1, %R1, %R3\n" + "strexd %0, %1, [%2]\n" + "teq %0, #0\n" + "bne 1b" + : "=&r" (store_failed), "=&r"(res) + : "r" (ptr), "r"(increment) + : "cc", "memory"); + return res; +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + int store_failed; + Atomic64 res; + __asm__ __volatile__( + "1:\n" + "ldrexd %1, [%2]\n" + "adds %Q1, %Q1, %Q3\n" + "adc %R1, %R1, %R3\n" + "dmb\n" + "strexd %0, %1, [%2]\n" + "teq %0, #0\n" + "bne 1b" + : "=&r" (store_failed), "=&r"(res) + : "r" (ptr), "r"(increment) + : "cc", "memory"); + return res; +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + int store_failed; + Atomic64 dummy; + __asm__ __volatile__( + "1:\n" + // Dummy load to lock cache line. + "ldrexd %1, [%3]\n" + "strexd %0, %2, [%3]\n" + "teq %0, #0\n" + "bne 1b" + : "=&r" (store_failed), "=&r"(dummy) + : "r"(value), "r" (ptr) + : "cc", "memory"); +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + Atomic64 res; + __asm__ __volatile__( + "ldrexd %0, [%1]\n" + "clrex\n" + : "=r" (res) + : "r"(ptr), "Q"(*ptr)); + return res; +} + +#else // BASE_ATOMICOPS_HAS_LDREXD_AND_STREXD + +inline void NotImplementedFatalError(const char *function_name) { + fprintf(stderr, "64-bit %s() not implemented on this platform\n", + function_name); + abort(); +} + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + NotImplementedFatalError("NoBarrier_CompareAndSwap"); + return 0; +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, + Atomic64 new_value) { + NotImplementedFatalError("NoBarrier_AtomicExchange"); + return 0; +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + NotImplementedFatalError("NoBarrier_AtomicIncrement"); + return 0; +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + NotImplementedFatalError("Barrier_AtomicIncrement"); + return 0; +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + NotImplementedFatalError("NoBarrier_Store"); +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + NotImplementedFatalError("NoBarrier_Load"); + return 0; +} + +#endif // BASE_ATOMICOPS_HAS_LDREXD_AND_STREXD + +inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { + NoBarrier_Store(ptr, value); + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + MemoryBarrier(); + NoBarrier_Store(ptr, value); +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + Atomic64 value = NoBarrier_Load(ptr); + MemoryBarrier(); + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64* ptr) { + MemoryBarrier(); + return NoBarrier_Load(ptr); +} + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 value = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + MemoryBarrier(); + return value; +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + MemoryBarrier(); + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +} // namespace subtle ends +} // namespace base ends + +#endif // BASE_ATOMICOPS_INTERNALS_ARM_V6PLUS_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-linuxppc.h b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-linuxppc.h new file mode 100644 index 000000000..7e49560dc --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-linuxppc.h @@ -0,0 +1,416 @@ +/* Copyright (c) 2008, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + */ + +// Implementation of atomic operations for ppc-linux. This file should not +// be included directly. Clients should instead include +// "base/atomicops.h". + +#ifndef BASE_ATOMICOPS_INTERNALS_LINUXPPC_H_ +#define BASE_ATOMICOPS_INTERNALS_LINUXPPC_H_ + +typedef int32_t Atomic32; + +#ifdef __PPC64__ +#define BASE_HAS_ATOMIC64 1 +#endif + +namespace base { +namespace subtle { + +static inline void _sync(void) { + __asm__ __volatile__("sync": : : "memory"); +} + +static inline void _lwsync(void) { + // gcc defines __NO_LWSYNC__ when appropriate; see + // http://gcc.gnu.org/ml/gcc-patches/2006-11/msg01238.html +#ifdef __NO_LWSYNC__ + __asm__ __volatile__("msync": : : "memory"); +#else + __asm__ __volatile__("lwsync": : : "memory"); +#endif +} + +static inline void _isync(void) { + __asm__ __volatile__("isync": : : "memory"); +} + +static inline Atomic32 OSAtomicAdd32(Atomic32 amount, Atomic32 *value) { + Atomic32 t; + __asm__ __volatile__( +"1: lwarx %0,0,%3\n\ + add %0,%2,%0\n\ + stwcx. %0,0,%3 \n\ + bne- 1b" + : "=&r" (t), "+m" (*value) + : "r" (amount), "r" (value) + : "cc"); + return t; +} + +static inline Atomic32 OSAtomicAdd32Barrier(Atomic32 amount, Atomic32 *value) { + Atomic32 t; + _lwsync(); + t = OSAtomicAdd32(amount, value); + // This is based on the code snippet in the architecture manual (Vol + // 2, Appendix B). It's a little tricky: correctness depends on the + // fact that the code right before this (in OSAtomicAdd32) has a + // conditional branch with a data dependency on the update. + // Otherwise, we'd have to use sync. + _isync(); + return t; +} + +static inline bool OSAtomicCompareAndSwap32(Atomic32 old_value, + Atomic32 new_value, + Atomic32 *value) { + Atomic32 prev; + __asm__ __volatile__( +"1: lwarx %0,0,%2\n\ + cmpw 0,%0,%3\n\ + bne- 2f\n\ + stwcx. %4,0,%2\n\ + bne- 1b\n\ +2:" + : "=&r" (prev), "+m" (*value) + : "r" (value), "r" (old_value), "r" (new_value) + : "cc"); + return prev == old_value; +} + +static inline Atomic32 OSAtomicCompareAndSwap32Acquire(Atomic32 old_value, + Atomic32 new_value, + Atomic32 *value) { + Atomic32 t; + t = OSAtomicCompareAndSwap32(old_value, new_value, value); + // This is based on the code snippet in the architecture manual (Vol + // 2, Appendix B). It's a little tricky: correctness depends on the + // fact that the code right before this (in + // OSAtomicCompareAndSwap32) has a conditional branch with a data + // dependency on the update. Otherwise, we'd have to use sync. + _isync(); + return t; +} + +static inline Atomic32 OSAtomicCompareAndSwap32Release(Atomic32 old_value, + Atomic32 new_value, + Atomic32 *value) { + _lwsync(); + return OSAtomicCompareAndSwap32(old_value, new_value, value); +} + +typedef int64_t Atomic64; + +inline void MemoryBarrier() { + // This can't be _lwsync(); we need to order the immediately + // preceding stores against any load that may follow, but lwsync + // doesn't guarantee that. + _sync(); +} + +// 32-bit Versions. + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32 *ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev_value; + do { + if (OSAtomicCompareAndSwap32(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32 *ptr, + Atomic32 new_value) { + Atomic32 old_value; + do { + old_value = *ptr; + } while (!OSAtomicCompareAndSwap32(old_value, new_value, + const_cast(ptr))); + return old_value; +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32 *ptr, + Atomic32 increment) { + return OSAtomicAdd32(increment, const_cast(ptr)); +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32 *ptr, + Atomic32 increment) { + return OSAtomicAdd32Barrier(increment, const_cast(ptr)); +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32 *ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev_value; + do { + if (OSAtomicCompareAndSwap32Acquire(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32 *ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev_value; + do { + if (OSAtomicCompareAndSwap32Release(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +#ifdef __PPC64__ + +// 64-bit Versions. + +static inline Atomic64 OSAtomicAdd64(Atomic64 amount, Atomic64 *value) { + Atomic64 t; + __asm__ __volatile__( +"1: ldarx %0,0,%3\n\ + add %0,%2,%0\n\ + stdcx. %0,0,%3 \n\ + bne- 1b" + : "=&r" (t), "+m" (*value) + : "r" (amount), "r" (value) + : "cc"); + return t; +} + +static inline Atomic64 OSAtomicAdd64Barrier(Atomic64 amount, Atomic64 *value) { + Atomic64 t; + _lwsync(); + t = OSAtomicAdd64(amount, value); + // This is based on the code snippet in the architecture manual (Vol + // 2, Appendix B). It's a little tricky: correctness depends on the + // fact that the code right before this (in OSAtomicAdd64) has a + // conditional branch with a data dependency on the update. + // Otherwise, we'd have to use sync. + _isync(); + return t; +} + +static inline bool OSAtomicCompareAndSwap64(Atomic64 old_value, + Atomic64 new_value, + Atomic64 *value) { + Atomic64 prev; + __asm__ __volatile__( +"1: ldarx %0,0,%2\n\ + cmpw 0,%0,%3\n\ + bne- 2f\n\ + stdcx. %4,0,%2\n\ + bne- 1b\n\ +2:" + : "=&r" (prev), "+m" (*value) + : "r" (value), "r" (old_value), "r" (new_value) + : "cc"); + return prev == old_value; +} + +static inline Atomic64 OSAtomicCompareAndSwap64Acquire(Atomic64 old_value, + Atomic64 new_value, + Atomic64 *value) { + Atomic64 t; + t = OSAtomicCompareAndSwap64(old_value, new_value, value); + // This is based on the code snippet in the architecture manual (Vol + // 2, Appendix B). It's a little tricky: correctness depends on the + // fact that the code right before this (in + // OSAtomicCompareAndSwap64) has a conditional branch with a data + // dependency on the update. Otherwise, we'd have to use sync. + _isync(); + return t; +} + +static inline Atomic64 OSAtomicCompareAndSwap64Release(Atomic64 old_value, + Atomic64 new_value, + Atomic64 *value) { + _lwsync(); + return OSAtomicCompareAndSwap64(old_value, new_value, value); +} + + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64 *ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev_value; + do { + if (OSAtomicCompareAndSwap64(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64 *ptr, + Atomic64 new_value) { + Atomic64 old_value; + do { + old_value = *ptr; + } while (!OSAtomicCompareAndSwap64(old_value, new_value, + const_cast(ptr))); + return old_value; +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64 *ptr, + Atomic64 increment) { + return OSAtomicAdd64(increment, const_cast(ptr)); +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64 *ptr, + Atomic64 increment) { + return OSAtomicAdd64Barrier(increment, const_cast(ptr)); +} + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64 *ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev_value; + do { + if (OSAtomicCompareAndSwap64Acquire(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64 *ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev_value; + do { + if (OSAtomicCompareAndSwap64Release(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +#endif + +inline void NoBarrier_Store(volatile Atomic32 *ptr, Atomic32 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic32 *ptr, Atomic32 value) { + *ptr = value; + // This can't be _lwsync(); we need to order the immediately + // preceding stores against any load that may follow, but lwsync + // doesn't guarantee that. + _sync(); +} + +inline void Release_Store(volatile Atomic32 *ptr, Atomic32 value) { + _lwsync(); + *ptr = value; +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32 *ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32 *ptr) { + Atomic32 value = *ptr; + _lwsync(); + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32 *ptr) { + // This can't be _lwsync(); we need to order the immediately + // preceding stores against any load that may follow, but lwsync + // doesn't guarantee that. + _sync(); + return *ptr; +} + +#ifdef __PPC64__ + +// 64-bit Versions. + +inline void NoBarrier_Store(volatile Atomic64 *ptr, Atomic64 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic64 *ptr, Atomic64 value) { + *ptr = value; + // This can't be _lwsync(); we need to order the immediately + // preceding stores against any load that may follow, but lwsync + // doesn't guarantee that. + _sync(); +} + +inline void Release_Store(volatile Atomic64 *ptr, Atomic64 value) { + _lwsync(); + *ptr = value; +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64 *ptr) { + return *ptr; +} + +inline Atomic64 Acquire_Load(volatile const Atomic64 *ptr) { + Atomic64 value = *ptr; + _lwsync(); + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64 *ptr) { + // This can't be _lwsync(); we need to order the immediately + // preceding stores against any load that may follow, but lwsync + // doesn't guarantee that. + _sync(); + return *ptr; +} + +#endif + +} // namespace base::subtle +} // namespace base + +#endif // BASE_ATOMICOPS_INTERNALS_LINUXPPC_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-macosx.h b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-macosx.h new file mode 100644 index 000000000..430b9ee0b --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-macosx.h @@ -0,0 +1,359 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Implementation of atomic operations for Mac OS X. This file should not +// be included directly. Clients should instead include +// "base/atomicops.h". + +#ifndef BASE_ATOMICOPS_INTERNALS_MACOSX_H_ +#define BASE_ATOMICOPS_INTERNALS_MACOSX_H_ + +typedef int32_t Atomic32; + +// MacOS uses long for intptr_t, AtomicWord and Atomic32 are always different +// on the Mac, even when they are the same size. Similarly, on __ppc64__, +// AtomicWord and Atomic64 are always different. Thus, we need explicit +// casting. +#ifdef __LP64__ +#define AtomicWordCastType base::subtle::Atomic64 +#else +#define AtomicWordCastType Atomic32 +#endif + +#if defined(__LP64__) || defined(__i386__) +#define BASE_HAS_ATOMIC64 1 // Use only in tests and base/atomic* +#endif + +#include + +namespace base { +namespace subtle { + +#if !defined(__LP64__) && defined(__ppc__) + +// The Mac 64-bit OSAtomic implementations are not available for 32-bit PowerPC, +// while the underlying assembly instructions are available only some +// implementations of PowerPC. + +// The following inline functions will fail with the error message at compile +// time ONLY IF they are called. So it is safe to use this header if user +// code only calls AtomicWord and Atomic32 operations. +// +// NOTE(vchen): Implementation notes to implement the atomic ops below may +// be found in "PowerPC Virtual Environment Architecture, Book II, +// Version 2.02", January 28, 2005, Appendix B, page 46. Unfortunately, +// extra care must be taken to ensure data are properly 8-byte aligned, and +// that data are returned correctly according to Mac OS X ABI specs. + +inline int64_t OSAtomicCompareAndSwap64( + int64_t oldValue, int64_t newValue, int64_t *theValue) { + __asm__ __volatile__( + "_OSAtomicCompareAndSwap64_not_supported_for_32_bit_ppc\n\t"); + return 0; +} + +inline int64_t OSAtomicAdd64(int64_t theAmount, int64_t *theValue) { + __asm__ __volatile__( + "_OSAtomicAdd64_not_supported_for_32_bit_ppc\n\t"); + return 0; +} + +inline int64_t OSAtomicCompareAndSwap64Barrier( + int64_t oldValue, int64_t newValue, int64_t *theValue) { + int64_t prev = OSAtomicCompareAndSwap64(oldValue, newValue, theValue); + OSMemoryBarrier(); + return prev; +} + +inline int64_t OSAtomicAdd64Barrier( + int64_t theAmount, int64_t *theValue) { + int64_t new_val = OSAtomicAdd64(theAmount, theValue); + OSMemoryBarrier(); + return new_val; +} +#endif + +typedef int64_t Atomic64; + +inline void MemoryBarrier() { + OSMemoryBarrier(); +} + +// 32-bit Versions. + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32 *ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev_value; + do { + if (OSAtomicCompareAndSwap32(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32 *ptr, + Atomic32 new_value) { + Atomic32 old_value; + do { + old_value = *ptr; + } while (!OSAtomicCompareAndSwap32(old_value, new_value, + const_cast(ptr))); + return old_value; +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32 *ptr, + Atomic32 increment) { + return OSAtomicAdd32(increment, const_cast(ptr)); +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32 *ptr, + Atomic32 increment) { + return OSAtomicAdd32Barrier(increment, const_cast(ptr)); +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32 *ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev_value; + do { + if (OSAtomicCompareAndSwap32Barrier(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32 *ptr, + Atomic32 old_value, + Atomic32 new_value) { + return Acquire_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic32 *ptr, Atomic32 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic32 *ptr, Atomic32 value) { + MemoryBarrier(); + *ptr = value; +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32 *ptr) { + Atomic32 value = *ptr; + MemoryBarrier(); + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32 *ptr) { + MemoryBarrier(); + return *ptr; +} + +// 64-bit version + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64 *ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev_value; + do { + if (OSAtomicCompareAndSwap64(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64 *ptr, + Atomic64 new_value) { + Atomic64 old_value; + do { + old_value = *ptr; + } while (!OSAtomicCompareAndSwap64(old_value, new_value, + const_cast(ptr))); + return old_value; +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64 *ptr, + Atomic64 increment) { + return OSAtomicAdd64(increment, const_cast(ptr)); +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64 *ptr, + Atomic64 increment) { + return OSAtomicAdd64Barrier(increment, const_cast(ptr)); +} + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64 *ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev_value; + do { + if (OSAtomicCompareAndSwap64Barrier(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64 *ptr, + Atomic64 old_value, + Atomic64 new_value) { + // The lib kern interface does not distinguish between + // Acquire and Release memory barriers; they are equivalent. + return Acquire_CompareAndSwap(ptr, old_value, new_value); +} + +#ifdef __LP64__ + +// 64-bit implementation on 64-bit platform + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic64 *ptr, Atomic64 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic64 *ptr, Atomic64 value) { + MemoryBarrier(); + *ptr = value; +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + return *ptr; +} + +inline Atomic64 Acquire_Load(volatile const Atomic64 *ptr) { + Atomic64 value = *ptr; + MemoryBarrier(); + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64 *ptr) { + MemoryBarrier(); + return *ptr; +} + +#else + +// 64-bit implementation on 32-bit platform + +#if defined(__ppc__) + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + __asm__ __volatile__( + "_NoBarrier_Store_not_supported_for_32_bit_ppc\n\t"); +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + __asm__ __volatile__( + "_NoBarrier_Load_not_supported_for_32_bit_ppc\n\t"); + return 0; +} + +#elif defined(__i386__) + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + __asm__ __volatile__("movq %1, %%mm0\n\t" // Use mmx reg for 64-bit atomic + "movq %%mm0, %0\n\t" // moves (ptr could be read-only) + "emms\n\t" // Reset FP registers + : "=m" (*ptr) + : "m" (value) + : // mark the FP stack and mmx registers as clobbered + "st", "st(1)", "st(2)", "st(3)", "st(4)", + "st(5)", "st(6)", "st(7)", "mm0", "mm1", + "mm2", "mm3", "mm4", "mm5", "mm6", "mm7"); + +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + Atomic64 value; + __asm__ __volatile__("movq %1, %%mm0\n\t" // Use mmx reg for 64-bit atomic + "movq %%mm0, %0\n\t" // moves (ptr could be read-only) + "emms\n\t" // Reset FP registers + : "=m" (value) + : "m" (*ptr) + : // mark the FP stack and mmx registers as clobbered + "st", "st(1)", "st(2)", "st(3)", "st(4)", + "st(5)", "st(6)", "st(7)", "mm0", "mm1", + "mm2", "mm3", "mm4", "mm5", "mm6", "mm7"); + + return value; +} +#endif + + +inline void Acquire_Store(volatile Atomic64 *ptr, Atomic64 value) { + NoBarrier_Store(ptr, value); + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic64 *ptr, Atomic64 value) { + MemoryBarrier(); + NoBarrier_Store(ptr, value); +} + +inline Atomic64 Acquire_Load(volatile const Atomic64 *ptr) { + Atomic64 value = NoBarrier_Load(ptr); + MemoryBarrier(); + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64 *ptr) { + MemoryBarrier(); + return NoBarrier_Load(ptr); +} +#endif // __LP64__ + +} // namespace base::subtle +} // namespace base + +#endif // BASE_ATOMICOPS_INTERNALS_MACOSX_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-windows.h b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-windows.h new file mode 100644 index 000000000..bd42c820a --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-windows.h @@ -0,0 +1,501 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Sanjay Ghemawat + */ + +// Implementation of atomic operations using Windows API +// functions. This file should not be included directly. Clients +// should instead include "base/atomicops.h". + +#ifndef BASE_ATOMICOPS_INTERNALS_WINDOWS_H_ +#define BASE_ATOMICOPS_INTERNALS_WINDOWS_H_ + +#include +#include +#include "base/basictypes.h" // For COMPILE_ASSERT + +typedef int32 Atomic32; + +#if defined(_WIN64) +#define BASE_HAS_ATOMIC64 1 // Use only in tests and base/atomic* +#endif + +namespace base { +namespace subtle { + +typedef int64 Atomic64; + +// 32-bit low-level operations on any platform + +extern "C" { +// We use windows intrinsics when we can (they seem to be supported +// well on MSVC 8.0 and above). Unfortunately, in some +// environments, and have conflicting +// declarations of some other intrinsics, breaking compilation: +// http://connect.microsoft.com/VisualStudio/feedback/details/262047 +// Therefore, we simply declare the relevant intrinsics ourself. + +// MinGW has a bug in the header files where it doesn't indicate the +// first argument is volatile -- they're not up to date. See +// http://readlist.com/lists/lists.sourceforge.net/mingw-users/0/3861.html +// We have to const_cast away the volatile to avoid compiler warnings. +// TODO(csilvers): remove this once MinGW has updated MinGW/include/winbase.h +#if defined(__MINGW32__) +inline LONG FastInterlockedCompareExchange(volatile LONG* ptr, + LONG newval, LONG oldval) { + return ::InterlockedCompareExchange(const_cast(ptr), newval, oldval); +} +inline LONG FastInterlockedExchange(volatile LONG* ptr, LONG newval) { + return ::InterlockedExchange(const_cast(ptr), newval); +} +inline LONG FastInterlockedExchangeAdd(volatile LONG* ptr, LONG increment) { + return ::InterlockedExchangeAdd(const_cast(ptr), increment); +} + +#elif _MSC_VER >= 1400 // intrinsics didn't work so well before MSVC 8.0 +// Unfortunately, in some environments, and +// have conflicting declarations of some intrinsics, breaking +// compilation. So we declare the intrinsics we need ourselves. See +// http://connect.microsoft.com/VisualStudio/feedback/details/262047 +LONG _InterlockedCompareExchange(volatile LONG* ptr, LONG newval, LONG oldval); +#pragma intrinsic(_InterlockedCompareExchange) +inline LONG FastInterlockedCompareExchange(volatile LONG* ptr, + LONG newval, LONG oldval) { + return _InterlockedCompareExchange(ptr, newval, oldval); +} + +LONG _InterlockedExchange(volatile LONG* ptr, LONG newval); +#pragma intrinsic(_InterlockedExchange) +inline LONG FastInterlockedExchange(volatile LONG* ptr, LONG newval) { + return _InterlockedExchange(ptr, newval); +} + +LONG _InterlockedExchangeAdd(volatile LONG* ptr, LONG increment); +#pragma intrinsic(_InterlockedExchangeAdd) +inline LONG FastInterlockedExchangeAdd(volatile LONG* ptr, LONG increment) { + return _InterlockedExchangeAdd(ptr, increment); +} + +#else +inline LONG FastInterlockedCompareExchange(volatile LONG* ptr, + LONG newval, LONG oldval) { + return ::InterlockedCompareExchange(ptr, newval, oldval); +} +inline LONG FastInterlockedExchange(volatile LONG* ptr, LONG newval) { + return ::InterlockedExchange(ptr, newval); +} +inline LONG FastInterlockedExchangeAdd(volatile LONG* ptr, LONG increment) { + return ::InterlockedExchangeAdd(ptr, increment); +} + +#endif // ifdef __MINGW32__ +} // extern "C" + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + LONG result = FastInterlockedCompareExchange( + reinterpret_cast(ptr), + static_cast(new_value), + static_cast(old_value)); + return static_cast(result); +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + LONG result = FastInterlockedExchange( + reinterpret_cast(ptr), + static_cast(new_value)); + return static_cast(result); +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + return FastInterlockedExchangeAdd( + reinterpret_cast(ptr), + static_cast(increment)) + increment; +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + return Barrier_AtomicIncrement(ptr, increment); +} + +} // namespace base::subtle +} // namespace base + + +// In msvc8/vs2005, winnt.h already contains a definition for +// MemoryBarrier in the global namespace. Add it there for earlier +// versions and forward to it from within the namespace. +#if !(defined(_MSC_VER) && _MSC_VER >= 1400) +inline void MemoryBarrier() { + Atomic32 value = 0; + base::subtle::NoBarrier_AtomicExchange(&value, 0); + // actually acts as a barrier in thisd implementation +} +#endif + +namespace base { +namespace subtle { + +inline void MemoryBarrier() { + ::MemoryBarrier(); +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + NoBarrier_AtomicExchange(ptr, value); + // acts as a barrier in this implementation +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; // works w/o barrier for current Intel chips as of June 2005 + // See comments in Atomic64 version of Release_Store() below. +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 value = *ptr; + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + MemoryBarrier(); + return *ptr; +} + +// 64-bit operations + +#if defined(_WIN64) || defined(__MINGW64__) + +// 64-bit low-level operations on 64-bit platform. + +COMPILE_ASSERT(sizeof(Atomic64) == sizeof(PVOID), atomic_word_is_atomic); + +// These are the intrinsics needed for 64-bit operations. Similar to the +// 32-bit case above. + +extern "C" { +#if defined(__MINGW64__) +inline PVOID FastInterlockedCompareExchangePointer(volatile PVOID* ptr, + PVOID newval, PVOID oldval) { + return ::InterlockedCompareExchangePointer(const_cast(ptr), + newval, oldval); +} +inline PVOID FastInterlockedExchangePointer(volatile PVOID* ptr, PVOID newval) { + return ::InterlockedExchangePointer(const_cast(ptr), newval); +} +inline LONGLONG FastInterlockedExchangeAdd64(volatile LONGLONG* ptr, + LONGLONG increment) { + return ::InterlockedExchangeAdd64(const_cast(ptr), increment); +} + +#elif _MSC_VER >= 1400 // intrinsics didn't work so well before MSVC 8.0 +// Like above, we need to declare the intrinsics ourselves. +PVOID _InterlockedCompareExchangePointer(volatile PVOID* ptr, + PVOID newval, PVOID oldval); +#pragma intrinsic(_InterlockedCompareExchangePointer) +inline PVOID FastInterlockedCompareExchangePointer(volatile PVOID* ptr, + PVOID newval, PVOID oldval) { + return _InterlockedCompareExchangePointer(const_cast(ptr), + newval, oldval); +} + +PVOID _InterlockedExchangePointer(volatile PVOID* ptr, PVOID newval); +#pragma intrinsic(_InterlockedExchangePointer) +inline PVOID FastInterlockedExchangePointer(volatile PVOID* ptr, PVOID newval) { + return _InterlockedExchangePointer(const_cast(ptr), newval); +} + +LONGLONG _InterlockedExchangeAdd64(volatile LONGLONG* ptr, LONGLONG increment); +#pragma intrinsic(_InterlockedExchangeAdd64) +inline LONGLONG FastInterlockedExchangeAdd64(volatile LONGLONG* ptr, + LONGLONG increment) { + return _InterlockedExchangeAdd64(const_cast(ptr), increment); +} + +#else +inline PVOID FastInterlockedCompareExchangePointer(volatile PVOID* ptr, + PVOID newval, PVOID oldval) { + return ::InterlockedCompareExchangePointer(ptr, newval, oldval); +} +inline PVOID FastInterlockedExchangePointer(volatile PVOID* ptr, PVOID newval) { + return ::InterlockedExchangePointer(ptr, newval); +} +inline LONGLONG FastInterlockedExchangeAdd64(volatile LONGLONG* ptr, + LONGLONG increment) { + return ::InterlockedExchangeAdd64(ptr, increment); +} + +#endif // ifdef __MINGW64__ +} // extern "C" + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + PVOID result = FastInterlockedCompareExchangePointer( + reinterpret_cast(ptr), + reinterpret_cast(new_value), reinterpret_cast(old_value)); + return reinterpret_cast(result); +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, + Atomic64 new_value) { + PVOID result = FastInterlockedExchangePointer( + reinterpret_cast(ptr), + reinterpret_cast(new_value)); + return reinterpret_cast(result); +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + return FastInterlockedExchangeAdd64( + reinterpret_cast(ptr), + static_cast(increment)) + increment; +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + return Barrier_AtomicIncrement(ptr, increment); +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { + NoBarrier_AtomicExchange(ptr, value); + // acts as a barrier in this implementation +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; // works w/o barrier for current Intel chips as of June 2005 + + // When new chips come out, check: + // IA-32 Intel Architecture Software Developer's Manual, Volume 3: + // System Programming Guide, Chatper 7: Multiple-processor management, + // Section 7.2, Memory Ordering. + // Last seen at: + // http://developer.intel.com/design/pentium4/manuals/index_new.htm +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + return *ptr; +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + Atomic64 value = *ptr; + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64* ptr) { + MemoryBarrier(); + return *ptr; +} + +#else // defined(_WIN64) || defined(__MINGW64__) + +// 64-bit low-level operations on 32-bit platform + +// TODO(vchen): The GNU assembly below must be converted to MSVC inline +// assembly. Then the file should be renamed to ...-x86-msvc.h, probably. + +inline void NotImplementedFatalError(const char *function_name) { + fprintf(stderr, "64-bit %s() not implemented on this platform\n", + function_name); + abort(); +} + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { +#if 0 // Not implemented + Atomic64 prev; + __asm__ __volatile__("movl (%3), %%ebx\n\t" // Move 64-bit new_value into + "movl 4(%3), %%ecx\n\t" // ecx:ebx + "lock; cmpxchg8b %1\n\t" // If edx:eax (old_value) same + : "=A" (prev) // as contents of ptr: + : "m" (*ptr), // ecx:ebx => ptr + "0" (old_value), // else: + "r" (&new_value) // old *ptr => edx:eax + : "memory", "%ebx", "%ecx"); + return prev; +#else + NotImplementedFatalError("NoBarrier_CompareAndSwap"); + return 0; +#endif +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, + Atomic64 new_value) { +#if 0 // Not implemented + __asm__ __volatile__( + "movl (%2), %%ebx\n\t" // Move 64-bit new_value into + "movl 4(%2), %%ecx\n\t" // ecx:ebx + "0:\n\t" + "movl %1, %%eax\n\t" // Read contents of ptr into + "movl 4%1, %%edx\n\t" // edx:eax + "lock; cmpxchg8b %1\n\t" // Attempt cmpxchg; if *ptr + "jnz 0b\n\t" // is no longer edx:eax, loop + : "=A" (new_value) + : "m" (*ptr), + "r" (&new_value) + : "memory", "%ebx", "%ecx"); + return new_value; // Now it's the previous value. +#else + NotImplementedFatalError("NoBarrier_AtomicExchange"); + return 0; +#endif +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { +#if 0 // Not implemented + Atomic64 temp = increment; + __asm__ __volatile__( + "0:\n\t" + "movl (%3), %%ebx\n\t" // Move 64-bit increment into + "movl 4(%3), %%ecx\n\t" // ecx:ebx + "movl (%2), %%eax\n\t" // Read contents of ptr into + "movl 4(%2), %%edx\n\t" // edx:eax + "add %%eax, %%ebx\n\t" // sum => ecx:ebx + "adc %%edx, %%ecx\n\t" // edx:eax still has old *ptr + "lock; cmpxchg8b (%2)\n\t"// Attempt cmpxchg; if *ptr + "jnz 0b\n\t" // is no longer edx:eax, loop + : "=A"(temp), "+m"(*ptr) + : "D" (ptr), "S" (&increment) + : "memory", "%ebx", "%ecx"); + // temp now contains the previous value of *ptr + return temp + increment; +#else + NotImplementedFatalError("NoBarrier_AtomicIncrement"); + return 0; +#endif +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { +#if 0 // Not implemented + Atomic64 new_val = NoBarrier_AtomicIncrement(ptr, increment); + if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { + __asm__ __volatile__("lfence" : : : "memory"); + } + return new_val; +#else + NotImplementedFatalError("Barrier_AtomicIncrement"); + return 0; +#endif +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { +#if 0 // Not implemented + __asm { + mov mm0, value; // Use mmx reg for 64-bit atomic moves + mov ptr, mm0; + emms; // Empty mmx state to enable FP registers + } +#else + NotImplementedFatalError("NoBarrier_Store"); +#endif +} + +inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { + NoBarrier_AtomicExchange(ptr, value); + // acts as a barrier in this implementation +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + NoBarrier_Store(ptr, value); +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { +#if 0 // Not implemented + Atomic64 value; + __asm { + mov mm0, ptr; // Use mmx reg for 64-bit atomic moves + mov value, mm0; + emms; // Empty mmx state to enable FP registers + } + return value; +#else + NotImplementedFatalError("NoBarrier_Store"); + return 0; +#endif +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + Atomic64 value = NoBarrier_Load(ptr); + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64* ptr) { + MemoryBarrier(); + return NoBarrier_Load(ptr); +} + +#endif // defined(_WIN64) || defined(__MINGW64__) + + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +} // namespace base::subtle +} // namespace base + +#endif // BASE_ATOMICOPS_INTERNALS_WINDOWS_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-x86.cc b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-x86.cc new file mode 100644 index 000000000..4f75d4724 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-x86.cc @@ -0,0 +1,125 @@ +/* Copyright (c) 2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * This module gets enough CPU information to optimize the + * atomicops module on x86. + */ + +#include "base/atomicops.h" +#include "base/basictypes.h" +#include "base/googleinit.h" +#include "base/logging.h" +#include + +// This file only makes sense with atomicops-internals-x86.h -- it +// depends on structs that are defined in that file. If atomicops.h +// doesn't sub-include that file, then we aren't needed, and shouldn't +// try to do anything. +#ifdef BASE_ATOMICOPS_INTERNALS_X86_H_ + +// Inline cpuid instruction. In PIC compilations, %ebx contains the address +// of the global offset table. To avoid breaking such executables, this code +// must preserve that register's value across cpuid instructions. +#if defined(__i386__) +#define cpuid(a, b, c, d, inp) \ + asm ("mov %%ebx, %%edi\n" \ + "cpuid\n" \ + "xchg %%edi, %%ebx\n" \ + : "=a" (a), "=D" (b), "=c" (c), "=d" (d) : "a" (inp)) +#elif defined (__x86_64__) +#define cpuid(a, b, c, d, inp) \ + asm ("mov %%rbx, %%rdi\n" \ + "cpuid\n" \ + "xchg %%rdi, %%rbx\n" \ + : "=a" (a), "=D" (b), "=c" (c), "=d" (d) : "a" (inp)) +#endif + +#if defined(cpuid) // initialize the struct only on x86 + +// Set the flags so that code will run correctly and conservatively +// until InitGoogle() is called. +struct AtomicOps_x86CPUFeatureStruct AtomicOps_Internalx86CPUFeatures = { + false, // bug can't exist before process spawns multiple threads + false, // no SSE2 + false, // no cmpxchg16b +}; + +// Initialize the AtomicOps_Internalx86CPUFeatures struct. +static void AtomicOps_Internalx86CPUFeaturesInit() { + uint32 eax; + uint32 ebx; + uint32 ecx; + uint32 edx; + + // Get vendor string (issue CPUID with eax = 0) + cpuid(eax, ebx, ecx, edx, 0); + char vendor[13]; + memcpy(vendor, &ebx, 4); + memcpy(vendor + 4, &edx, 4); + memcpy(vendor + 8, &ecx, 4); + vendor[12] = 0; + + // get feature flags in ecx/edx, and family/model in eax + cpuid(eax, ebx, ecx, edx, 1); + + int family = (eax >> 8) & 0xf; // family and model fields + int model = (eax >> 4) & 0xf; + if (family == 0xf) { // use extended family and model fields + family += (eax >> 20) & 0xff; + model += ((eax >> 16) & 0xf) << 4; + } + + // Opteron Rev E has a bug in which on very rare occasions a locked + // instruction doesn't act as a read-acquire barrier if followed by a + // non-locked read-modify-write instruction. Rev F has this bug in + // pre-release versions, but not in versions released to customers, + // so we test only for Rev E, which is family 15, model 32..63 inclusive. + if (strcmp(vendor, "AuthenticAMD") == 0 && // AMD + family == 15 && + 32 <= model && model <= 63) { + AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug = true; + } else { + AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug = false; + } + + // edx bit 26 is SSE2 which we use to tell use whether we can use mfence + AtomicOps_Internalx86CPUFeatures.has_sse2 = ((edx >> 26) & 1); + + // ecx bit 13 indicates whether the cmpxchg16b instruction is supported + AtomicOps_Internalx86CPUFeatures.has_cmpxchg16b = ((ecx >> 13) & 1); +} + +REGISTER_MODULE_INITIALIZER(atomicops_x86, { + AtomicOps_Internalx86CPUFeaturesInit(); +}); + +#endif + +#endif /* ifdef BASE_ATOMICOPS_INTERNALS_X86_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-x86.h b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-x86.h new file mode 100644 index 000000000..c34aa5c08 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/atomicops-internals-x86.h @@ -0,0 +1,428 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Sanjay Ghemawat + */ + +// Implementation of atomic operations for x86. This file should not +// be included directly. Clients should instead include +// "base/atomicops.h". + +#ifndef BASE_ATOMICOPS_INTERNALS_X86_H_ +#define BASE_ATOMICOPS_INTERNALS_X86_H_ + +typedef int32_t Atomic32; +#define BASE_HAS_ATOMIC64 1 // Use only in tests and base/atomic* + + +// NOTE(vchen): x86 does not need to define AtomicWordCastType, because it +// already matches Atomic32 or Atomic64, depending on the platform. + + +// This struct is not part of the public API of this module; clients may not +// use it. +// Features of this x86. Values may not be correct before main() is run, +// but are set conservatively. +struct AtomicOps_x86CPUFeatureStruct { + bool has_amd_lock_mb_bug; // Processor has AMD memory-barrier bug; do lfence + // after acquire compare-and-swap. + bool has_sse2; // Processor has SSE2. + bool has_cmpxchg16b; // Processor supports cmpxchg16b instruction. +}; +extern struct AtomicOps_x86CPUFeatureStruct AtomicOps_Internalx86CPUFeatures; + + +#define ATOMICOPS_COMPILER_BARRIER() __asm__ __volatile__("" : : : "memory") + + +namespace base { +namespace subtle { + +typedef int64_t Atomic64; + +// 32-bit low-level operations on any platform. + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev; + __asm__ __volatile__("lock; cmpxchgl %1,%2" + : "=a" (prev) + : "q" (new_value), "m" (*ptr), "0" (old_value) + : "memory"); + return prev; +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + __asm__ __volatile__("xchgl %1,%0" // The lock prefix is implicit for xchg. + : "=r" (new_value) + : "m" (*ptr), "0" (new_value) + : "memory"); + return new_value; // Now it's the previous value. +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + Atomic32 temp = increment; + __asm__ __volatile__("lock; xaddl %0,%1" + : "+r" (temp), "+m" (*ptr) + : : "memory"); + // temp now holds the old value of *ptr + return temp + increment; +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + Atomic32 temp = increment; + __asm__ __volatile__("lock; xaddl %0,%1" + : "+r" (temp), "+m" (*ptr) + : : "memory"); + // temp now holds the old value of *ptr + if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { + __asm__ __volatile__("lfence" : : : "memory"); + } + return temp + increment; +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 x = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { + __asm__ __volatile__("lfence" : : : "memory"); + } + return x; +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +#if defined(__x86_64__) + +// 64-bit implementations of memory barrier can be simpler, because it +// "mfence" is guaranteed to exist. +inline void MemoryBarrier() { + __asm__ __volatile__("mfence" : : : "memory"); +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; + MemoryBarrier(); +} + +#else + +inline void MemoryBarrier() { + if (AtomicOps_Internalx86CPUFeatures.has_sse2) { + __asm__ __volatile__("mfence" : : : "memory"); + } else { // mfence is faster but not present on PIII + Atomic32 x = 0; + NoBarrier_AtomicExchange(&x, 0); // acts as a barrier on PIII + } +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + if (AtomicOps_Internalx86CPUFeatures.has_sse2) { + *ptr = value; + __asm__ __volatile__("mfence" : : : "memory"); + } else { + NoBarrier_AtomicExchange(ptr, value); + // acts as a barrier on PIII + } +} +#endif + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + ATOMICOPS_COMPILER_BARRIER(); + *ptr = value; // An x86 store acts as a release barrier. + // See comments in Atomic64 version of Release_Store(), below. +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 value = *ptr; // An x86 load acts as a acquire barrier. + // See comments in Atomic64 version of Release_Store(), below. + ATOMICOPS_COMPILER_BARRIER(); + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + MemoryBarrier(); + return *ptr; +} + +#if defined(__x86_64__) + +// 64-bit low-level operations on 64-bit platform. + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev; + __asm__ __volatile__("lock; cmpxchgq %1,%2" + : "=a" (prev) + : "q" (new_value), "m" (*ptr), "0" (old_value) + : "memory"); + return prev; +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, + Atomic64 new_value) { + __asm__ __volatile__("xchgq %1,%0" // The lock prefix is implicit for xchg. + : "=r" (new_value) + : "m" (*ptr), "0" (new_value) + : "memory"); + return new_value; // Now it's the previous value. +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + Atomic64 temp = increment; + __asm__ __volatile__("lock; xaddq %0,%1" + : "+r" (temp), "+m" (*ptr) + : : "memory"); + // temp now contains the previous value of *ptr + return temp + increment; +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + Atomic64 temp = increment; + __asm__ __volatile__("lock; xaddq %0,%1" + : "+r" (temp), "+m" (*ptr) + : : "memory"); + // temp now contains the previous value of *ptr + if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { + __asm__ __volatile__("lfence" : : : "memory"); + } + return temp + increment; +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + ATOMICOPS_COMPILER_BARRIER(); + + *ptr = value; // An x86 store acts as a release barrier + // for current AMD/Intel chips as of Jan 2008. + // See also Acquire_Load(), below. + + // When new chips come out, check: + // IA-32 Intel Architecture Software Developer's Manual, Volume 3: + // System Programming Guide, Chatper 7: Multiple-processor management, + // Section 7.2, Memory Ordering. + // Last seen at: + // http://developer.intel.com/design/pentium4/manuals/index_new.htm + // + // x86 stores/loads fail to act as barriers for a few instructions (clflush + // maskmovdqu maskmovq movntdq movnti movntpd movntps movntq) but these are + // not generated by the compiler, and are rare. Users of these instructions + // need to know about cache behaviour in any case since all of these involve + // either flushing cache lines or non-temporal cache hints. +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + return *ptr; +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + Atomic64 value = *ptr; // An x86 load acts as a acquire barrier, + // for current AMD/Intel chips as of Jan 2008. + // See also Release_Store(), above. + ATOMICOPS_COMPILER_BARRIER(); + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64* ptr) { + MemoryBarrier(); + return *ptr; +} + +#else // defined(__x86_64__) + +// 64-bit low-level operations on 32-bit platform. + +#if !((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) +// For compilers older than gcc 4.1, we use inline asm. +// +// Potential pitfalls: +// +// 1. %ebx points to Global offset table (GOT) with -fPIC. +// We need to preserve this register. +// 2. When explicit registers are used in inline asm, the +// compiler may not be aware of it and might try to reuse +// the same register for another argument which has constraints +// that allow it ("r" for example). + +inline Atomic64 __sync_val_compare_and_swap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev; + __asm__ __volatile__("push %%ebx\n\t" + "movl (%3), %%ebx\n\t" // Move 64-bit new_value into + "movl 4(%3), %%ecx\n\t" // ecx:ebx + "lock; cmpxchg8b (%1)\n\t"// If edx:eax (old_value) same + "pop %%ebx\n\t" + : "=A" (prev) // as contents of ptr: + : "D" (ptr), // ecx:ebx => ptr + "0" (old_value), // else: + "S" (&new_value) // old *ptr => edx:eax + : "memory", "%ecx"); + return prev; +} +#endif // Compiler < gcc-4.1 + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_val, + Atomic64 new_val) { + return __sync_val_compare_and_swap(ptr, old_val, new_val); +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, + Atomic64 new_val) { + Atomic64 old_val; + + do { + old_val = *ptr; + } while (__sync_val_compare_and_swap(ptr, old_val, new_val) != old_val); + + return old_val; +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + Atomic64 old_val, new_val; + + do { + old_val = *ptr; + new_val = old_val + increment; + } while (__sync_val_compare_and_swap(ptr, old_val, new_val) != old_val); + + return old_val + increment; +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + Atomic64 new_val = NoBarrier_AtomicIncrement(ptr, increment); + if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { + __asm__ __volatile__("lfence" : : : "memory"); + } + return new_val; +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + __asm__ __volatile__("movq %1, %%mm0\n\t" // Use mmx reg for 64-bit atomic + "movq %%mm0, %0\n\t" // moves (ptr could be read-only) + "emms\n\t" // Empty mmx state/Reset FP regs + : "=m" (*ptr) + : "m" (value) + : // mark the FP stack and mmx registers as clobbered + "st", "st(1)", "st(2)", "st(3)", "st(4)", + "st(5)", "st(6)", "st(7)", "mm0", "mm1", + "mm2", "mm3", "mm4", "mm5", "mm6", "mm7"); +} + +inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { + NoBarrier_Store(ptr, value); + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + ATOMICOPS_COMPILER_BARRIER(); + NoBarrier_Store(ptr, value); +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + Atomic64 value; + __asm__ __volatile__("movq %1, %%mm0\n\t" // Use mmx reg for 64-bit atomic + "movq %%mm0, %0\n\t" // moves (ptr could be read-only) + "emms\n\t" // Empty mmx state/Reset FP regs + : "=m" (value) + : "m" (*ptr) + : // mark the FP stack and mmx registers as clobbered + "st", "st(1)", "st(2)", "st(3)", "st(4)", + "st(5)", "st(6)", "st(7)", "mm0", "mm1", + "mm2", "mm3", "mm4", "mm5", "mm6", "mm7"); + return value; +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + Atomic64 value = NoBarrier_Load(ptr); + ATOMICOPS_COMPILER_BARRIER(); + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64* ptr) { + MemoryBarrier(); + return NoBarrier_Load(ptr); +} + +#endif // defined(__x86_64__) + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 x = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { + __asm__ __volatile__("lfence" : : : "memory"); + } + return x; +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +} // namespace base::subtle +} // namespace base + +#undef ATOMICOPS_COMPILER_BARRIER + +#endif // BASE_ATOMICOPS_INTERNALS_X86_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/atomicops.h b/src/thirdparty/gperftools-2.0/src/base/atomicops.h new file mode 100644 index 000000000..17e8a27f0 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/atomicops.h @@ -0,0 +1,391 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Sanjay Ghemawat + */ + +// For atomic operations on statistics counters, see atomic_stats_counter.h. +// For atomic operations on sequence numbers, see atomic_sequence_num.h. +// For atomic operations on reference counts, see atomic_refcount.h. + +// Some fast atomic operations -- typically with machine-dependent +// implementations. This file may need editing as Google code is +// ported to different architectures. + +// The routines exported by this module are subtle. If you use them, even if +// you get the code right, it will depend on careful reasoning about atomicity +// and memory ordering; it will be less readable, and harder to maintain. If +// you plan to use these routines, you should have a good reason, such as solid +// evidence that performance would otherwise suffer, or there being no +// alternative. You should assume only properties explicitly guaranteed by the +// specifications in this file. You are almost certainly _not_ writing code +// just for the x86; if you assume x86 semantics, x86 hardware bugs and +// implementations on other archtectures will cause your code to break. If you +// do not know what you are doing, avoid these routines, and use a Mutex. +// +// It is incorrect to make direct assignments to/from an atomic variable. +// You should use one of the Load or Store routines. The NoBarrier +// versions are provided when no barriers are needed: +// NoBarrier_Store() +// NoBarrier_Load() +// Although there are currently no compiler enforcement, you are encouraged +// to use these. Moreover, if you choose to use base::subtle::Atomic64 type, +// you MUST use one of the Load or Store routines to get correct behavior +// on 32-bit platforms. +// +// The intent is eventually to put all of these routines in namespace +// base::subtle + +#ifndef THREAD_ATOMICOPS_H_ +#define THREAD_ATOMICOPS_H_ + +#include +#ifdef HAVE_STDINT_H +#include +#endif + +// ------------------------------------------------------------------------ +// Include the platform specific implementations of the types +// and operations listed below. Implementations are to provide Atomic32 +// and Atomic64 operations. If there is a mismatch between intptr_t and +// the Atomic32 or Atomic64 types for a platform, the platform-specific header +// should define the macro, AtomicWordCastType in a clause similar to the +// following: +// #if ...pointers are 64 bits... +// # define AtomicWordCastType base::subtle::Atomic64 +// #else +// # define AtomicWordCastType Atomic32 +// #endif +// TODO(csilvers): figure out ARCH_PIII/ARCH_K8 (perhaps via ./configure?) +// ------------------------------------------------------------------------ + +#include "base/arm_instruction_set_select.h" + +// TODO(csilvers): match piii, not just __i386. Also, match k8 +#if defined(__MACH__) && defined(__APPLE__) +#include "base/atomicops-internals-macosx.h" +#elif defined(__GNUC__) && defined(ARMV6) +#include "base/atomicops-internals-arm-v6plus.h" +#elif defined(ARMV3) +#include "base/atomicops-internals-arm-generic.h" +#elif defined(_WIN32) +#include "base/atomicops-internals-windows.h" +#elif defined(__GNUC__) && (defined(__i386) || defined(__x86_64__)) +#include "base/atomicops-internals-x86.h" +#elif defined(__linux__) && defined(__PPC__) +#include "base/atomicops-internals-linuxppc.h" +#else +// Assume x86 for now. If you need to support a new architecture and +// don't know how to implement atomic ops, you can probably get away +// with using pthreads, since atomicops is only used by spinlock.h/cc +//#error You need to implement atomic operations for this architecture +#include "base/atomicops-internals-x86.h" +#endif + +// Signed type that can hold a pointer and supports the atomic ops below, as +// well as atomic loads and stores. Instances must be naturally-aligned. +typedef intptr_t AtomicWord; + +#ifdef AtomicWordCastType +// ------------------------------------------------------------------------ +// This section is needed only when explicit type casting is required to +// cast AtomicWord to one of the basic atomic types (Atomic64 or Atomic32). +// It also serves to document the AtomicWord interface. +// ------------------------------------------------------------------------ + +namespace base { +namespace subtle { + +// Atomically execute: +// result = *ptr; +// if (*ptr == old_value) +// *ptr = new_value; +// return result; +// +// I.e., replace "*ptr" with "new_value" if "*ptr" used to be "old_value". +// Always return the old value of "*ptr" +// +// This routine implies no memory barriers. +inline AtomicWord NoBarrier_CompareAndSwap(volatile AtomicWord* ptr, + AtomicWord old_value, + AtomicWord new_value) { + return NoBarrier_CompareAndSwap( + reinterpret_cast(ptr), + old_value, new_value); +} + +// Atomically store new_value into *ptr, returning the previous value held in +// *ptr. This routine implies no memory barriers. +inline AtomicWord NoBarrier_AtomicExchange(volatile AtomicWord* ptr, + AtomicWord new_value) { + return NoBarrier_AtomicExchange( + reinterpret_cast(ptr), new_value); +} + +// Atomically increment *ptr by "increment". Returns the new value of +// *ptr with the increment applied. This routine implies no memory +// barriers. +inline AtomicWord NoBarrier_AtomicIncrement(volatile AtomicWord* ptr, + AtomicWord increment) { + return NoBarrier_AtomicIncrement( + reinterpret_cast(ptr), increment); +} + +inline AtomicWord Barrier_AtomicIncrement(volatile AtomicWord* ptr, + AtomicWord increment) { + return Barrier_AtomicIncrement( + reinterpret_cast(ptr), increment); +} + +// ------------------------------------------------------------------------ +// These following lower-level operations are typically useful only to people +// implementing higher-level synchronization operations like spinlocks, +// mutexes, and condition-variables. They combine CompareAndSwap(), a load, or +// a store with appropriate memory-ordering instructions. "Acquire" operations +// ensure that no later memory access can be reordered ahead of the operation. +// "Release" operations ensure that no previous memory access can be reordered +// after the operation. "Barrier" operations have both "Acquire" and "Release" +// semantics. A MemoryBarrier() has "Barrier" semantics, but does no memory +// access. +// ------------------------------------------------------------------------ +inline AtomicWord Acquire_CompareAndSwap(volatile AtomicWord* ptr, + AtomicWord old_value, + AtomicWord new_value) { + return base::subtle::Acquire_CompareAndSwap( + reinterpret_cast(ptr), + old_value, new_value); +} + +inline AtomicWord Release_CompareAndSwap(volatile AtomicWord* ptr, + AtomicWord old_value, + AtomicWord new_value) { + return base::subtle::Release_CompareAndSwap( + reinterpret_cast(ptr), + old_value, new_value); +} + +inline void NoBarrier_Store(volatile AtomicWord *ptr, AtomicWord value) { + NoBarrier_Store( + reinterpret_cast(ptr), value); +} + +inline void Acquire_Store(volatile AtomicWord* ptr, AtomicWord value) { + return base::subtle::Acquire_Store( + reinterpret_cast(ptr), value); +} + +inline void Release_Store(volatile AtomicWord* ptr, AtomicWord value) { + return base::subtle::Release_Store( + reinterpret_cast(ptr), value); +} + +inline AtomicWord NoBarrier_Load(volatile const AtomicWord *ptr) { + return NoBarrier_Load( + reinterpret_cast(ptr)); +} + +inline AtomicWord Acquire_Load(volatile const AtomicWord* ptr) { + return base::subtle::Acquire_Load( + reinterpret_cast(ptr)); +} + +inline AtomicWord Release_Load(volatile const AtomicWord* ptr) { + return base::subtle::Release_Load( + reinterpret_cast(ptr)); +} + +} // namespace base::subtle +} // namespace base +#endif // AtomicWordCastType + +// ------------------------------------------------------------------------ +// Commented out type definitions and method declarations for documentation +// of the interface provided by this module. +// ------------------------------------------------------------------------ + +#if 0 + +// Signed 32-bit type that supports the atomic ops below, as well as atomic +// loads and stores. Instances must be naturally aligned. This type differs +// from AtomicWord in 64-bit binaries where AtomicWord is 64-bits. +typedef int32_t Atomic32; + +// Corresponding operations on Atomic32 +namespace base { +namespace subtle { + +// Signed 64-bit type that supports the atomic ops below, as well as atomic +// loads and stores. Instances must be naturally aligned. This type differs +// from AtomicWord in 32-bit binaries where AtomicWord is 32-bits. +typedef int64_t Atomic64; + +Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value); +Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, Atomic32 new_value); +Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, Atomic32 increment); +Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment); +Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value); +Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value); +void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value); +void Acquire_Store(volatile Atomic32* ptr, Atomic32 value); +void Release_Store(volatile Atomic32* ptr, Atomic32 value); +Atomic32 NoBarrier_Load(volatile const Atomic32* ptr); +Atomic32 Acquire_Load(volatile const Atomic32* ptr); +Atomic32 Release_Load(volatile const Atomic32* ptr); + +// Corresponding operations on Atomic64 +Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value); +Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, Atomic64 new_value); +Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, Atomic64 increment); +Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, Atomic64 increment); + +Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value); +Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value); +void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value); +void Acquire_Store(volatile Atomic64* ptr, Atomic64 value); +void Release_Store(volatile Atomic64* ptr, Atomic64 value); +Atomic64 NoBarrier_Load(volatile const Atomic64* ptr); +Atomic64 Acquire_Load(volatile const Atomic64* ptr); +Atomic64 Release_Load(volatile const Atomic64* ptr); +} // namespace base::subtle +} // namespace base + +void MemoryBarrier(); + +#endif // 0 + + +// ------------------------------------------------------------------------ +// The following are to be deprecated when all uses have been changed to +// use the base::subtle namespace. +// ------------------------------------------------------------------------ + +#ifdef AtomicWordCastType +// AtomicWord versions to be deprecated +inline AtomicWord Acquire_CompareAndSwap(volatile AtomicWord* ptr, + AtomicWord old_value, + AtomicWord new_value) { + return base::subtle::Acquire_CompareAndSwap(ptr, old_value, new_value); +} + +inline AtomicWord Release_CompareAndSwap(volatile AtomicWord* ptr, + AtomicWord old_value, + AtomicWord new_value) { + return base::subtle::Release_CompareAndSwap(ptr, old_value, new_value); +} + +inline void Acquire_Store(volatile AtomicWord* ptr, AtomicWord value) { + return base::subtle::Acquire_Store(ptr, value); +} + +inline void Release_Store(volatile AtomicWord* ptr, AtomicWord value) { + return base::subtle::Release_Store(ptr, value); +} + +inline AtomicWord Acquire_Load(volatile const AtomicWord* ptr) { + return base::subtle::Acquire_Load(ptr); +} + +inline AtomicWord Release_Load(volatile const AtomicWord* ptr) { + return base::subtle::Release_Load(ptr); +} +#endif // AtomicWordCastType + +// 32-bit Acquire/Release operations to be deprecated. + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return base::subtle::Acquire_CompareAndSwap(ptr, old_value, new_value); +} +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return base::subtle::Release_CompareAndSwap(ptr, old_value, new_value); +} +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + base::subtle::Acquire_Store(ptr, value); +} +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + return base::subtle::Release_Store(ptr, value); +} +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + return base::subtle::Acquire_Load(ptr); +} +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + return base::subtle::Release_Load(ptr); +} + +#ifdef BASE_HAS_ATOMIC64 + +// 64-bit Acquire/Release operations to be deprecated. + +inline base::subtle::Atomic64 Acquire_CompareAndSwap( + volatile base::subtle::Atomic64* ptr, + base::subtle::Atomic64 old_value, base::subtle::Atomic64 new_value) { + return base::subtle::Acquire_CompareAndSwap(ptr, old_value, new_value); +} +inline base::subtle::Atomic64 Release_CompareAndSwap( + volatile base::subtle::Atomic64* ptr, + base::subtle::Atomic64 old_value, base::subtle::Atomic64 new_value) { + return base::subtle::Release_CompareAndSwap(ptr, old_value, new_value); +} +inline void Acquire_Store( + volatile base::subtle::Atomic64* ptr, base::subtle::Atomic64 value) { + base::subtle::Acquire_Store(ptr, value); +} +inline void Release_Store( + volatile base::subtle::Atomic64* ptr, base::subtle::Atomic64 value) { + return base::subtle::Release_Store(ptr, value); +} +inline base::subtle::Atomic64 Acquire_Load( + volatile const base::subtle::Atomic64* ptr) { + return base::subtle::Acquire_Load(ptr); +} +inline base::subtle::Atomic64 Release_Load( + volatile const base::subtle::Atomic64* ptr) { + return base::subtle::Release_Load(ptr); +} + +#endif // BASE_HAS_ATOMIC64 + +#endif // THREAD_ATOMICOPS_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/basictypes.h b/src/thirdparty/gperftools-2.0/src/base/basictypes.h new file mode 100644 index 000000000..75b7b5ae7 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/basictypes.h @@ -0,0 +1,357 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef _BASICTYPES_H_ +#define _BASICTYPES_H_ + +#include +#include // for memcpy() +#ifdef HAVE_INTTYPES_H +#include // gets us PRId64, etc +#endif + +// To use this in an autoconf setting, make sure you run the following +// autoconf macros: +// AC_HEADER_STDC /* for stdint_h and inttypes_h */ +// AC_CHECK_TYPES([__int64]) /* defined in some windows platforms */ + +#ifdef HAVE_INTTYPES_H +#include // uint16_t might be here; PRId64 too. +#endif +#ifdef HAVE_STDINT_H +#include // to get uint16_t (ISO naming madness) +#endif +#include // our last best hope for uint16_t + +// Standard typedefs +// All Google code is compiled with -funsigned-char to make "char" +// unsigned. Google code therefore doesn't need a "uchar" type. +// TODO(csilvers): how do we make sure unsigned-char works on non-gcc systems? +typedef signed char schar; +typedef int8_t int8; +typedef int16_t int16; +typedef int32_t int32; +typedef int64_t int64; + +// NOTE: unsigned types are DANGEROUS in loops and other arithmetical +// places. Use the signed types unless your variable represents a bit +// pattern (eg a hash value) or you really need the extra bit. Do NOT +// use 'unsigned' to express "this value should always be positive"; +// use assertions for this. + +typedef uint8_t uint8; +typedef uint16_t uint16; +typedef uint32_t uint32; +typedef uint64_t uint64; + +const uint16 kuint16max = ( (uint16) 0xFFFF); +const uint32 kuint32max = ( (uint32) 0xFFFFFFFF); +const uint64 kuint64max = ( (((uint64) kuint32max) << 32) | kuint32max ); + +const int8 kint8max = ( ( int8) 0x7F); +const int16 kint16max = ( ( int16) 0x7FFF); +const int32 kint32max = ( ( int32) 0x7FFFFFFF); +const int64 kint64max = ( ((( int64) kint32max) << 32) | kuint32max ); + +const int8 kint8min = ( ( int8) 0x80); +const int16 kint16min = ( ( int16) 0x8000); +const int32 kint32min = ( ( int32) 0x80000000); +const int64 kint64min = ( ((( int64) kint32min) << 32) | 0 ); + +// Define the "portable" printf and scanf macros, if they're not +// already there (via the inttypes.h we #included above, hopefully). +// Mostly it's old systems that don't support inttypes.h, so we assume +// they're 32 bit. +#ifndef PRIx64 +#define PRIx64 "llx" +#endif +#ifndef SCNx64 +#define SCNx64 "llx" +#endif +#ifndef PRId64 +#define PRId64 "lld" +#endif +#ifndef SCNd64 +#define SCNd64 "lld" +#endif +#ifndef PRIu64 +#define PRIu64 "llu" +#endif +#ifndef PRIxPTR +#define PRIxPTR "lx" +#endif + +// Also allow for printing of a pthread_t. +#define GPRIuPTHREAD "lu" +#define GPRIxPTHREAD "lx" +#if defined(__CYGWIN__) || defined(__CYGWIN32__) || defined(__APPLE__) || defined(__FreeBSD__) +#define PRINTABLE_PTHREAD(pthreadt) reinterpret_cast(pthreadt) +#else +#define PRINTABLE_PTHREAD(pthreadt) pthreadt +#endif + +// A macro to disallow the evil copy constructor and operator= functions +// This should be used in the private: declarations for a class +#define DISALLOW_EVIL_CONSTRUCTORS(TypeName) \ + TypeName(const TypeName&); \ + void operator=(const TypeName&) + +// An alternate name that leaves out the moral judgment... :-) +#define DISALLOW_COPY_AND_ASSIGN(TypeName) DISALLOW_EVIL_CONSTRUCTORS(TypeName) + +// The COMPILE_ASSERT macro can be used to verify that a compile time +// expression is true. For example, you could use it to verify the +// size of a static array: +// +// COMPILE_ASSERT(sizeof(num_content_type_names) == sizeof(int), +// content_type_names_incorrect_size); +// +// or to make sure a struct is smaller than a certain size: +// +// COMPILE_ASSERT(sizeof(foo) < 128, foo_too_large); +// +// The second argument to the macro is the name of the variable. If +// the expression is false, most compilers will issue a warning/error +// containing the name of the variable. +// +// Implementation details of COMPILE_ASSERT: +// +// - COMPILE_ASSERT works by defining an array type that has -1 +// elements (and thus is invalid) when the expression is false. +// +// - The simpler definition +// +// #define COMPILE_ASSERT(expr, msg) typedef char msg[(expr) ? 1 : -1] +// +// does not work, as gcc supports variable-length arrays whose sizes +// are determined at run-time (this is gcc's extension and not part +// of the C++ standard). As a result, gcc fails to reject the +// following code with the simple definition: +// +// int foo; +// COMPILE_ASSERT(foo, msg); // not supposed to compile as foo is +// // not a compile-time constant. +// +// - By using the type CompileAssert<(bool(expr))>, we ensures that +// expr is a compile-time constant. (Template arguments must be +// determined at compile-time.) +// +// - The outter parentheses in CompileAssert<(bool(expr))> are necessary +// to work around a bug in gcc 3.4.4 and 4.0.1. If we had written +// +// CompileAssert +// +// instead, these compilers will refuse to compile +// +// COMPILE_ASSERT(5 > 0, some_message); +// +// (They seem to think the ">" in "5 > 0" marks the end of the +// template argument list.) +// +// - The array size is (bool(expr) ? 1 : -1), instead of simply +// +// ((expr) ? 1 : -1). +// +// This is to avoid running into a bug in MS VC 7.1, which +// causes ((0.0) ? 1 : -1) to incorrectly evaluate to 1. + +template +struct CompileAssert { +}; + +#define COMPILE_ASSERT(expr, msg) \ + typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1] + +#define arraysize(a) (sizeof(a) / sizeof(*(a))) + +#define OFFSETOF_MEMBER(strct, field) \ + (reinterpret_cast(&reinterpret_cast(16)->field) - \ + reinterpret_cast(16)) + +// bit_cast implements the equivalent of +// "*reinterpret_cast(&source)". +// +// The reinterpret_cast method would produce undefined behavior +// according to ISO C++ specification section 3.10 -15 -. +// bit_cast<> calls memcpy() which is blessed by the standard, +// especially by the example in section 3.9. +// +// Fortunately memcpy() is very fast. In optimized mode, with a +// constant size, gcc 2.95.3, gcc 4.0.1, and msvc 7.1 produce inline +// code with the minimal amount of data movement. On a 32-bit system, +// memcpy(d,s,4) compiles to one load and one store, and memcpy(d,s,8) +// compiles to two loads and two stores. + +template +inline Dest bit_cast(const Source& source) { + COMPILE_ASSERT(sizeof(Dest) == sizeof(Source), bitcasting_unequal_sizes); + Dest dest; + memcpy(&dest, &source, sizeof(dest)); + return dest; +} + +#ifdef HAVE___ATTRIBUTE__ +# define ATTRIBUTE_WEAK __attribute__((weak)) +# define ATTRIBUTE_NOINLINE __attribute__((noinline)) +#else +# define ATTRIBUTE_WEAK +# define ATTRIBUTE_NOINLINE +#endif + +// Section attributes are supported for both ELF and Mach-O, but in +// very different ways. Here's the API we provide: +// 1) ATTRIBUTE_SECTION: put this with the declaration of all functions +// you want to be in the same linker section +// 2) DEFINE_ATTRIBUTE_SECTION_VARS: must be called once per unique +// name. You want to make sure this is executed before any +// DECLARE_ATTRIBUTE_SECTION_VARS; the easiest way is to put them +// in the same .cc file. Put this call at the global level. +// 3) INIT_ATTRIBUTE_SECTION_VARS: you can scatter calls to this in +// multiple places to help ensure execution before any +// DECLARE_ATTRIBUTE_SECTION_VARS. You must have at least one +// DEFINE, but you can have many INITs. Put each in its own scope. +// 4) DECLARE_ATTRIBUTE_SECTION_VARS: must be called before using +// ATTRIBUTE_SECTION_START or ATTRIBUTE_SECTION_STOP on a name. +// Put this call at the global level. +// 5) ATTRIBUTE_SECTION_START/ATTRIBUTE_SECTION_STOP: call this to say +// where in memory a given section is. All functions declared with +// ATTRIBUTE_SECTION are guaranteed to be between START and STOP. + +#if defined(HAVE___ATTRIBUTE__) && defined(__ELF__) +# define ATTRIBUTE_SECTION(name) __attribute__ ((section (#name))) + + // Weak section declaration to be used as a global declaration + // for ATTRIBUTE_SECTION_START|STOP(name) to compile and link + // even without functions with ATTRIBUTE_SECTION(name). +# define DECLARE_ATTRIBUTE_SECTION_VARS(name) \ + extern char __start_##name[] ATTRIBUTE_WEAK; \ + extern char __stop_##name[] ATTRIBUTE_WEAK +# define INIT_ATTRIBUTE_SECTION_VARS(name) // no-op for ELF +# define DEFINE_ATTRIBUTE_SECTION_VARS(name) // no-op for ELF + + // Return void* pointers to start/end of a section of code with functions + // having ATTRIBUTE_SECTION(name), or 0 if no such function exists. + // One must DECLARE_ATTRIBUTE_SECTION(name) for this to compile and link. +# define ATTRIBUTE_SECTION_START(name) (reinterpret_cast(__start_##name)) +# define ATTRIBUTE_SECTION_STOP(name) (reinterpret_cast(__stop_##name)) +# define HAVE_ATTRIBUTE_SECTION_START 1 + +#elif defined(HAVE___ATTRIBUTE__) && defined(__MACH__) +# define ATTRIBUTE_SECTION(name) __attribute__ ((section ("__TEXT, " #name))) + +#include +#include +class AssignAttributeStartEnd { + public: + AssignAttributeStartEnd(const char* name, char** pstart, char** pend) { + // Find out what dynamic library name is defined in + if (_dyld_present()) { + for (int i = _dyld_image_count() - 1; i >= 0; --i) { + const mach_header* hdr = _dyld_get_image_header(i); +#ifdef MH_MAGIC_64 + if (hdr->magic == MH_MAGIC_64) { + uint64_t len; + *pstart = getsectdatafromheader_64((mach_header_64*)hdr, + "__TEXT", name, &len); + if (*pstart) { // NULL if not defined in this dynamic library + *pstart += _dyld_get_image_vmaddr_slide(i); // correct for reloc + *pend = *pstart + len; + return; + } + } +#endif + if (hdr->magic == MH_MAGIC) { + uint32_t len; + *pstart = getsectdatafromheader(hdr, "__TEXT", name, &len); + if (*pstart) { // NULL if not defined in this dynamic library + *pstart += _dyld_get_image_vmaddr_slide(i); // correct for reloc + *pend = *pstart + len; + return; + } + } + } + } + // If we get here, not defined in a dll at all. See if defined statically. + unsigned long len; // don't ask me why this type isn't uint32_t too... + *pstart = getsectdata("__TEXT", name, &len); + *pend = *pstart + len; + } +}; + +#define DECLARE_ATTRIBUTE_SECTION_VARS(name) \ + extern char* __start_##name; \ + extern char* __stop_##name + +#define INIT_ATTRIBUTE_SECTION_VARS(name) \ + DECLARE_ATTRIBUTE_SECTION_VARS(name); \ + static const AssignAttributeStartEnd __assign_##name( \ + #name, &__start_##name, &__stop_##name) + +#define DEFINE_ATTRIBUTE_SECTION_VARS(name) \ + char* __start_##name, *__stop_##name; \ + INIT_ATTRIBUTE_SECTION_VARS(name) + +# define ATTRIBUTE_SECTION_START(name) (reinterpret_cast(__start_##name)) +# define ATTRIBUTE_SECTION_STOP(name) (reinterpret_cast(__stop_##name)) +# define HAVE_ATTRIBUTE_SECTION_START 1 + +#else // not HAVE___ATTRIBUTE__ && __ELF__, nor HAVE___ATTRIBUTE__ && __MACH__ +# define ATTRIBUTE_SECTION(name) +# define DECLARE_ATTRIBUTE_SECTION_VARS(name) +# define INIT_ATTRIBUTE_SECTION_VARS(name) +# define DEFINE_ATTRIBUTE_SECTION_VARS(name) +# define ATTRIBUTE_SECTION_START(name) (reinterpret_cast(0)) +# define ATTRIBUTE_SECTION_STOP(name) (reinterpret_cast(0)) + +#endif // HAVE___ATTRIBUTE__ and __ELF__ or __MACH__ + +#if defined(HAVE___ATTRIBUTE__) && (defined(__i386__) || defined(__x86_64__)) +# define CACHELINE_ALIGNED __attribute__((aligned(64))) +#else +# define CACHELINE_ALIGNED +#endif // defined(HAVE___ATTRIBUTE__) && (__i386__ || __x86_64__) + + +// The following enum should be used only as a constructor argument to indicate +// that the variable has static storage class, and that the constructor should +// do nothing to its state. It indicates to the reader that it is legal to +// declare a static nistance of the class, provided the constructor is given +// the base::LINKER_INITIALIZED argument. Normally, it is unsafe to declare a +// static variable that has a constructor or a destructor because invocation +// order is undefined. However, IF the type can be initialized by filling with +// zeroes (which the loader does for static variables), AND the destructor also +// does nothing to the storage, then a constructor declared as +// explicit MyClass(base::LinkerInitialized x) {} +// and invoked as +// static MyClass my_variable_name(base::LINKER_INITIALIZED); +namespace base { +enum LinkerInitialized { LINKER_INITIALIZED }; +} + +#endif // _BASICTYPES_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/commandlineflags.h b/src/thirdparty/gperftools-2.0/src/base/commandlineflags.h new file mode 100644 index 000000000..54bf94faf --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/commandlineflags.h @@ -0,0 +1,131 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// This file is a compatibility layer that defines Google's version of +// command line flags that are used for configuration. +// +// We put flags into their own namespace. It is purposefully +// named in an opaque way that people should have trouble typing +// directly. The idea is that DEFINE puts the flag in the weird +// namespace, and DECLARE imports the flag from there into the +// current namespace. The net result is to force people to use +// DECLARE to get access to a flag, rather than saying +// extern bool FLAGS_logtostderr; +// or some such instead. We want this so we can put extra +// functionality (like sanity-checking) in DECLARE if we want, +// and make sure it is picked up everywhere. +// +// We also put the type of the variable in the namespace, so that +// people can't DECLARE_int32 something that they DEFINE_bool'd +// elsewhere. +#ifndef BASE_COMMANDLINEFLAGS_H_ +#define BASE_COMMANDLINEFLAGS_H_ + +#include +#include +#include // for memchr +#include // for getenv +#include "base/basictypes.h" + +#define DECLARE_VARIABLE(type, name) \ + namespace FLAG__namespace_do_not_use_directly_use_DECLARE_##type##_instead { \ + extern PERFTOOLS_DLL_DECL type FLAGS_##name; \ + } \ + using FLAG__namespace_do_not_use_directly_use_DECLARE_##type##_instead::FLAGS_##name + +#define DEFINE_VARIABLE(type, name, value, meaning) \ + namespace FLAG__namespace_do_not_use_directly_use_DECLARE_##type##_instead { \ + PERFTOOLS_DLL_DECL type FLAGS_##name(value); \ + char FLAGS_no##name; \ + } \ + using FLAG__namespace_do_not_use_directly_use_DECLARE_##type##_instead::FLAGS_##name + +// bool specialization +#define DECLARE_bool(name) \ + DECLARE_VARIABLE(bool, name) +#define DEFINE_bool(name, value, meaning) \ + DEFINE_VARIABLE(bool, name, value, meaning) + +// int32 specialization +#define DECLARE_int32(name) \ + DECLARE_VARIABLE(int32, name) +#define DEFINE_int32(name, value, meaning) \ + DEFINE_VARIABLE(int32, name, value, meaning) + +// int64 specialization +#define DECLARE_int64(name) \ + DECLARE_VARIABLE(int64, name) +#define DEFINE_int64(name, value, meaning) \ + DEFINE_VARIABLE(int64, name, value, meaning) + +#define DECLARE_uint64(name) \ + DECLARE_VARIABLE(uint64, name) +#define DEFINE_uint64(name, value, meaning) \ + DEFINE_VARIABLE(uint64, name, value, meaning) + +// double specialization +#define DECLARE_double(name) \ + DECLARE_VARIABLE(double, name) +#define DEFINE_double(name, value, meaning) \ + DEFINE_VARIABLE(double, name, value, meaning) + +// Special case for string, because we have to specify the namespace +// std::string, which doesn't play nicely with our FLAG__namespace hackery. +#define DECLARE_string(name) \ + namespace FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead { \ + extern std::string FLAGS_##name; \ + } \ + using FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead::FLAGS_##name +#define DEFINE_string(name, value, meaning) \ + namespace FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead { \ + std::string FLAGS_##name(value); \ + char FLAGS_no##name; \ + } \ + using FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead::FLAGS_##name + +// These macros (could be functions, but I don't want to bother with a .cc +// file), make it easier to initialize flags from the environment. + +#define EnvToString(envname, dflt) \ + (!getenv(envname) ? (dflt) : getenv(envname)) + +#define EnvToBool(envname, dflt) \ + (!getenv(envname) ? (dflt) : memchr("tTyY1\0", getenv(envname)[0], 6) != NULL) + +#define EnvToInt(envname, dflt) \ + (!getenv(envname) ? (dflt) : strtol(getenv(envname), NULL, 10)) + +#define EnvToInt64(envname, dflt) \ + (!getenv(envname) ? (dflt) : strtoll(getenv(envname), NULL, 10)) + +#define EnvToDouble(envname, dflt) \ + (!getenv(envname) ? (dflt) : strtod(getenv(envname), NULL)) + +#endif // BASE_COMMANDLINEFLAGS_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/cycleclock.h b/src/thirdparty/gperftools-2.0/src/base/cycleclock.h new file mode 100644 index 000000000..c704e1dae --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/cycleclock.h @@ -0,0 +1,163 @@ +// Copyright (c) 2004, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// ---------------------------------------------------------------------- +// CycleClock +// A CycleClock tells you the current time in Cycles. The "time" +// is actually time since power-on. This is like time() but doesn't +// involve a system call and is much more precise. +// +// NOTE: Not all cpu/platform/kernel combinations guarantee that this +// clock increments at a constant rate or is synchronized across all logical +// cpus in a system. +// +// Also, in some out of order CPU implementations, the CycleClock is not +// serializing. So if you're trying to count at cycles granularity, your +// data might be inaccurate due to out of order instruction execution. +// ---------------------------------------------------------------------- + +#ifndef GOOGLE_BASE_CYCLECLOCK_H_ +#define GOOGLE_BASE_CYCLECLOCK_H_ + +#include "base/basictypes.h" // make sure we get the def for int64 +#include "base/arm_instruction_set_select.h" +// base/sysinfo.h is really big and we don't want to include it unless +// it is necessary. +#if defined(__arm__) || defined(__mips__) +# include "base/sysinfo.h" +#endif +#if defined(__MACH__) && defined(__APPLE__) +# include +#endif +// For MSVC, we want to use '_asm rdtsc' when possible (since it works +// with even ancient MSVC compilers), and when not possible the +// __rdtsc intrinsic, declared in . Unfortunately, in some +// environments, and have conflicting +// declarations of some other intrinsics, breaking compilation. +// Therefore, we simply declare __rdtsc ourselves. See also +// http://connect.microsoft.com/VisualStudio/feedback/details/262047 +#if defined(_MSC_VER) && !defined(_M_IX86) +extern "C" uint64 __rdtsc(); +#pragma intrinsic(__rdtsc) +#endif +#if defined(ARMV3) || defined(__mips__) +#include +#endif + +// NOTE: only i386 and x86_64 have been well tested. +// PPC, sparc, alpha, and ia64 are based on +// http://peter.kuscsik.com/wordpress/?p=14 +// with modifications by m3b. See also +// https://setisvn.ssl.berkeley.edu/svn/lib/fftw-3.0.1/kernel/cycle.h +struct CycleClock { + // This should return the number of cycles since power-on. Thread-safe. + static inline int64 Now() { +#if defined(__MACH__) && defined(__APPLE__) + // this goes at the top because we need ALL Macs, regardless of + // architecture, to return the number of "mach time units" that + // have passed since startup. See sysinfo.cc where + // InitializeSystemInfo() sets the supposed cpu clock frequency of + // macs to the number of mach time units per second, not actual + // CPU clock frequency (which can change in the face of CPU + // frequency scaling). Also note that when the Mac sleeps, this + // counter pauses; it does not continue counting, nor does it + // reset to zero. + return mach_absolute_time(); +#elif defined(__i386__) + int64 ret; + __asm__ volatile ("rdtsc" : "=A" (ret) ); + return ret; +#elif defined(__x86_64__) || defined(__amd64__) + uint64 low, high; + __asm__ volatile ("rdtsc" : "=a" (low), "=d" (high)); + return (high << 32) | low; +#elif defined(__powerpc__) || defined(__ppc__) + // This returns a time-base, which is not always precisely a cycle-count. + int64 tbl, tbu0, tbu1; + asm("mftbu %0" : "=r" (tbu0)); + asm("mftb %0" : "=r" (tbl)); + asm("mftbu %0" : "=r" (tbu1)); + tbl &= -static_cast(tbu0 == tbu1); + // high 32 bits in tbu1; low 32 bits in tbl (tbu0 is garbage) + return (tbu1 << 32) | tbl; +#elif defined(__sparc__) + int64 tick; + asm(".byte 0x83, 0x41, 0x00, 0x00"); + asm("mov %%g1, %0" : "=r" (tick)); + return tick; +#elif defined(__ia64__) + int64 itc; + asm("mov %0 = ar.itc" : "=r" (itc)); + return itc; +#elif defined(_MSC_VER) && defined(_M_IX86) + // Older MSVC compilers (like 7.x) don't seem to support the + // __rdtsc intrinsic properly, so I prefer to use _asm instead + // when I know it will work. Otherwise, I'll use __rdtsc and hope + // the code is being compiled with a non-ancient compiler. + _asm rdtsc +#elif defined(_MSC_VER) + return __rdtsc(); +#elif defined(ARMV3) +#if defined(ARMV6) // V6 is the earliest arch that has a standard cyclecount + uint32 pmccntr; + uint32 pmuseren; + uint32 pmcntenset; + // Read the user mode perf monitor counter access permissions. + asm volatile ("mrc p15, 0, %0, c9, c14, 0" : "=r" (pmuseren)); + if (pmuseren & 1) { // Allows reading perfmon counters for user mode code. + asm volatile ("mrc p15, 0, %0, c9, c12, 1" : "=r" (pmcntenset)); + if (pmcntenset & 0x80000000ul) { // Is it counting? + asm volatile ("mrc p15, 0, %0, c9, c13, 0" : "=r" (pmccntr)); + // The counter is set up to count every 64th cycle + return static_cast(pmccntr) * 64; // Should optimize to << 6 + } + } +#endif + struct timeval tv; + gettimeofday(&tv, NULL); + return static_cast((tv.tv_sec + tv.tv_usec * 0.000001) + * CyclesPerSecond()); +#elif defined(__mips__) + // mips apparently only allows rdtsc for superusers, so we fall + // back to gettimeofday. It's possible clock_gettime would be better. + struct timeval tv; + gettimeofday(&tv, NULL); + return static_cast((tv.tv_sec + tv.tv_usec * 0.000001) + * CyclesPerSecond()); +#else +// The soft failover to a generic implementation is automatic only for ARM. +// For other platforms the developer is expected to make an attempt to create +// a fast implementation and use generic version if nothing better is available. +#error You need to define CycleTimer for your O/S and CPU +#endif + } +}; + + +#endif // GOOGLE_BASE_CYCLECLOCK_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/dynamic_annotations.c b/src/thirdparty/gperftools-2.0/src/base/dynamic_annotations.c new file mode 100644 index 000000000..c8b61bed2 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/dynamic_annotations.c @@ -0,0 +1,190 @@ +/* Copyright (c) 2008-2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Kostya Serebryany + */ + +#ifdef __cplusplus +# error "This file should be built as pure C to avoid name mangling" +#endif + +#include "config.h" +#include +#include + +#include "base/dynamic_annotations.h" + +#ifdef __GNUC__ +/* valgrind.h uses gcc extensions so it won't build with other compilers */ +# ifdef HAVE_VALGRIND_H /* prefer the user's copy if they have it */ +# include +# else /* otherwise just use the copy that we have */ +# include "third_party/valgrind.h" +# endif +#endif + +/* Compiler-based ThreadSanitizer defines + DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL = 1 + and provides its own definitions of the functions. */ + +#ifndef DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL +# define DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL 0 +#endif + +/* Each function is empty and called (via a macro) only in debug mode. + The arguments are captured by dynamic tools at runtime. */ + +#if DYNAMIC_ANNOTATIONS_ENABLED == 1 \ + && DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL == 0 + +void AnnotateRWLockCreate(const char *file, int line, + const volatile void *lock){} +void AnnotateRWLockDestroy(const char *file, int line, + const volatile void *lock){} +void AnnotateRWLockAcquired(const char *file, int line, + const volatile void *lock, long is_w){} +void AnnotateRWLockReleased(const char *file, int line, + const volatile void *lock, long is_w){} +void AnnotateBarrierInit(const char *file, int line, + const volatile void *barrier, long count, + long reinitialization_allowed) {} +void AnnotateBarrierWaitBefore(const char *file, int line, + const volatile void *barrier) {} +void AnnotateBarrierWaitAfter(const char *file, int line, + const volatile void *barrier) {} +void AnnotateBarrierDestroy(const char *file, int line, + const volatile void *barrier) {} + +void AnnotateCondVarWait(const char *file, int line, + const volatile void *cv, + const volatile void *lock){} +void AnnotateCondVarSignal(const char *file, int line, + const volatile void *cv){} +void AnnotateCondVarSignalAll(const char *file, int line, + const volatile void *cv){} +void AnnotatePublishMemoryRange(const char *file, int line, + const volatile void *address, + long size){} +void AnnotateUnpublishMemoryRange(const char *file, int line, + const volatile void *address, + long size){} +void AnnotatePCQCreate(const char *file, int line, + const volatile void *pcq){} +void AnnotatePCQDestroy(const char *file, int line, + const volatile void *pcq){} +void AnnotatePCQPut(const char *file, int line, + const volatile void *pcq){} +void AnnotatePCQGet(const char *file, int line, + const volatile void *pcq){} +void AnnotateNewMemory(const char *file, int line, + const volatile void *mem, + long size){} +void AnnotateExpectRace(const char *file, int line, + const volatile void *mem, + const char *description){} +void AnnotateBenignRace(const char *file, int line, + const volatile void *mem, + const char *description){} +void AnnotateBenignRaceSized(const char *file, int line, + const volatile void *mem, + long size, + const char *description) {} +void AnnotateMutexIsUsedAsCondVar(const char *file, int line, + const volatile void *mu){} +void AnnotateTraceMemory(const char *file, int line, + const volatile void *arg){} +void AnnotateThreadName(const char *file, int line, + const char *name){} +void AnnotateIgnoreReadsBegin(const char *file, int line){} +void AnnotateIgnoreReadsEnd(const char *file, int line){} +void AnnotateIgnoreWritesBegin(const char *file, int line){} +void AnnotateIgnoreWritesEnd(const char *file, int line){} +void AnnotateEnableRaceDetection(const char *file, int line, int enable){} +void AnnotateNoOp(const char *file, int line, + const volatile void *arg){} +void AnnotateFlushState(const char *file, int line){} + +#endif /* DYNAMIC_ANNOTATIONS_ENABLED == 1 + && DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL == 0 */ + +#if DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL == 0 + +static int GetRunningOnValgrind(void) { +#ifdef RUNNING_ON_VALGRIND + if (RUNNING_ON_VALGRIND) return 1; +#endif +#ifdef _MSC_VER + /* Visual Studio can complain about getenv, so use a windows equivalent. */ + char value[100] = "1"; /* something that is not "0" */ + int res = GetEnvironmentVariableA("RUNNING_ON_VALGRIND", + value, sizeof(value)); + /* value will remain "1" if the called failed for some reason. */ + return (res > 0 && strcmp(value, "0") != 0); +#else + /* TODO(csilvers): use GetenvBeforeMain() instead? Will need to + * change it to be extern "C". + */ + char *running_on_valgrind_str = getenv("RUNNING_ON_VALGRIND"); + if (running_on_valgrind_str) { + return strcmp(running_on_valgrind_str, "0") != 0; + } + return 0; +#endif +} + +/* See the comments in dynamic_annotations.h */ +int RunningOnValgrind(void) { + static volatile int running_on_valgrind = -1; + int local_running_on_valgrind = running_on_valgrind; + /* C doesn't have thread-safe initialization of statics, and we + don't want to depend on pthread_once here, so hack it. */ + ANNOTATE_BENIGN_RACE(&running_on_valgrind, "safe hack"); + if (local_running_on_valgrind == -1) + running_on_valgrind = local_running_on_valgrind = GetRunningOnValgrind(); + return local_running_on_valgrind; +} + +#endif /* DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL == 0 */ + +/* See the comments in dynamic_annotations.h */ +double ValgrindSlowdown(void) { + /* Same initialization hack as in RunningOnValgrind(). */ + static volatile double slowdown = 0.0; + double local_slowdown = slowdown; + ANNOTATE_BENIGN_RACE(&slowdown, "safe hack"); + if (RunningOnValgrind() == 0) { + return 1.0; + } + if (local_slowdown == 0.0) { + char *env = getenv("VALGRIND_SLOWDOWN"); + slowdown = local_slowdown = env ? atof(env) : 50.0; + } + return local_slowdown; +} diff --git a/src/thirdparty/gperftools-2.0/src/base/dynamic_annotations.h b/src/thirdparty/gperftools-2.0/src/base/dynamic_annotations.h new file mode 100644 index 000000000..4669315ce --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/dynamic_annotations.h @@ -0,0 +1,627 @@ +/* Copyright (c) 2008, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Kostya Serebryany + */ + +/* This file defines dynamic annotations for use with dynamic analysis + tool such as valgrind, PIN, etc. + + Dynamic annotation is a source code annotation that affects + the generated code (that is, the annotation is not a comment). + Each such annotation is attached to a particular + instruction and/or to a particular object (address) in the program. + + The annotations that should be used by users are macros in all upper-case + (e.g., ANNOTATE_NEW_MEMORY). + + Actual implementation of these macros may differ depending on the + dynamic analysis tool being used. + + See http://code.google.com/p/data-race-test/ for more information. + + This file supports the following dynamic analysis tools: + - None (DYNAMIC_ANNOTATIONS_ENABLED is not defined or zero). + Macros are defined empty. + - ThreadSanitizer, Helgrind, DRD (DYNAMIC_ANNOTATIONS_ENABLED is 1). + Macros are defined as calls to non-inlinable empty functions + that are intercepted by Valgrind. */ + +#ifndef BASE_DYNAMIC_ANNOTATIONS_H_ +#define BASE_DYNAMIC_ANNOTATIONS_H_ + +#ifndef DYNAMIC_ANNOTATIONS_ENABLED +# define DYNAMIC_ANNOTATIONS_ENABLED 0 +#endif + +#if DYNAMIC_ANNOTATIONS_ENABLED != 0 + + /* ------------------------------------------------------------- + Annotations useful when implementing condition variables such as CondVar, + using conditional critical sections (Await/LockWhen) and when constructing + user-defined synchronization mechanisms. + + The annotations ANNOTATE_HAPPENS_BEFORE() and ANNOTATE_HAPPENS_AFTER() can + be used to define happens-before arcs in user-defined synchronization + mechanisms: the race detector will infer an arc from the former to the + latter when they share the same argument pointer. + + Example 1 (reference counting): + + void Unref() { + ANNOTATE_HAPPENS_BEFORE(&refcount_); + if (AtomicDecrementByOne(&refcount_) == 0) { + ANNOTATE_HAPPENS_AFTER(&refcount_); + delete this; + } + } + + Example 2 (message queue): + + void MyQueue::Put(Type *e) { + MutexLock lock(&mu_); + ANNOTATE_HAPPENS_BEFORE(e); + PutElementIntoMyQueue(e); + } + + Type *MyQueue::Get() { + MutexLock lock(&mu_); + Type *e = GetElementFromMyQueue(); + ANNOTATE_HAPPENS_AFTER(e); + return e; + } + + Note: when possible, please use the existing reference counting and message + queue implementations instead of inventing new ones. */ + + /* Report that wait on the condition variable at address "cv" has succeeded + and the lock at address "lock" is held. */ + #define ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) \ + AnnotateCondVarWait(__FILE__, __LINE__, cv, lock) + + /* Report that wait on the condition variable at "cv" has succeeded. Variant + w/o lock. */ + #define ANNOTATE_CONDVAR_WAIT(cv) \ + AnnotateCondVarWait(__FILE__, __LINE__, cv, NULL) + + /* Report that we are about to signal on the condition variable at address + "cv". */ + #define ANNOTATE_CONDVAR_SIGNAL(cv) \ + AnnotateCondVarSignal(__FILE__, __LINE__, cv) + + /* Report that we are about to signal_all on the condition variable at "cv". */ + #define ANNOTATE_CONDVAR_SIGNAL_ALL(cv) \ + AnnotateCondVarSignalAll(__FILE__, __LINE__, cv) + + /* Annotations for user-defined synchronization mechanisms. */ + #define ANNOTATE_HAPPENS_BEFORE(obj) ANNOTATE_CONDVAR_SIGNAL(obj) + #define ANNOTATE_HAPPENS_AFTER(obj) ANNOTATE_CONDVAR_WAIT(obj) + + /* Report that the bytes in the range [pointer, pointer+size) are about + to be published safely. The race checker will create a happens-before + arc from the call ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) to + subsequent accesses to this memory. + Note: this annotation may not work properly if the race detector uses + sampling, i.e. does not observe all memory accesses. + */ + #define ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) \ + AnnotatePublishMemoryRange(__FILE__, __LINE__, pointer, size) + + /* DEPRECATED. Don't use it. */ + #define ANNOTATE_UNPUBLISH_MEMORY_RANGE(pointer, size) \ + AnnotateUnpublishMemoryRange(__FILE__, __LINE__, pointer, size) + + /* DEPRECATED. Don't use it. */ + #define ANNOTATE_SWAP_MEMORY_RANGE(pointer, size) \ + do { \ + ANNOTATE_UNPUBLISH_MEMORY_RANGE(pointer, size); \ + ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size); \ + } while (0) + + /* Instruct the tool to create a happens-before arc between mu->Unlock() and + mu->Lock(). This annotation may slow down the race detector and hide real + races. Normally it is used only when it would be difficult to annotate each + of the mutex's critical sections individually using the annotations above. + This annotation makes sense only for hybrid race detectors. For pure + happens-before detectors this is a no-op. For more details see + http://code.google.com/p/data-race-test/wiki/PureHappensBeforeVsHybrid . */ + #define ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) \ + AnnotateMutexIsUsedAsCondVar(__FILE__, __LINE__, mu) + + /* Deprecated. Use ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX. */ + #define ANNOTATE_MUTEX_IS_USED_AS_CONDVAR(mu) \ + AnnotateMutexIsUsedAsCondVar(__FILE__, __LINE__, mu) + + /* ------------------------------------------------------------- + Annotations useful when defining memory allocators, or when memory that + was protected in one way starts to be protected in another. */ + + /* Report that a new memory at "address" of size "size" has been allocated. + This might be used when the memory has been retrieved from a free list and + is about to be reused, or when a the locking discipline for a variable + changes. */ + #define ANNOTATE_NEW_MEMORY(address, size) \ + AnnotateNewMemory(__FILE__, __LINE__, address, size) + + /* ------------------------------------------------------------- + Annotations useful when defining FIFO queues that transfer data between + threads. */ + + /* Report that the producer-consumer queue (such as ProducerConsumerQueue) at + address "pcq" has been created. The ANNOTATE_PCQ_* annotations + should be used only for FIFO queues. For non-FIFO queues use + ANNOTATE_HAPPENS_BEFORE (for put) and ANNOTATE_HAPPENS_AFTER (for get). */ + #define ANNOTATE_PCQ_CREATE(pcq) \ + AnnotatePCQCreate(__FILE__, __LINE__, pcq) + + /* Report that the queue at address "pcq" is about to be destroyed. */ + #define ANNOTATE_PCQ_DESTROY(pcq) \ + AnnotatePCQDestroy(__FILE__, __LINE__, pcq) + + /* Report that we are about to put an element into a FIFO queue at address + "pcq". */ + #define ANNOTATE_PCQ_PUT(pcq) \ + AnnotatePCQPut(__FILE__, __LINE__, pcq) + + /* Report that we've just got an element from a FIFO queue at address "pcq". */ + #define ANNOTATE_PCQ_GET(pcq) \ + AnnotatePCQGet(__FILE__, __LINE__, pcq) + + /* ------------------------------------------------------------- + Annotations that suppress errors. It is usually better to express the + program's synchronization using the other annotations, but these can + be used when all else fails. */ + + /* Report that we may have a benign race at "pointer", with size + "sizeof(*(pointer))". "pointer" must be a non-void* pointer. Insert at the + point where "pointer" has been allocated, preferably close to the point + where the race happens. See also ANNOTATE_BENIGN_RACE_STATIC. */ + #define ANNOTATE_BENIGN_RACE(pointer, description) \ + AnnotateBenignRaceSized(__FILE__, __LINE__, pointer, \ + sizeof(*(pointer)), description) + + /* Same as ANNOTATE_BENIGN_RACE(address, description), but applies to + the memory range [address, address+size). */ + #define ANNOTATE_BENIGN_RACE_SIZED(address, size, description) \ + AnnotateBenignRaceSized(__FILE__, __LINE__, address, size, description) + + /* Request the analysis tool to ignore all reads in the current thread + until ANNOTATE_IGNORE_READS_END is called. + Useful to ignore intentional racey reads, while still checking + other reads and all writes. + See also ANNOTATE_UNPROTECTED_READ. */ + #define ANNOTATE_IGNORE_READS_BEGIN() \ + AnnotateIgnoreReadsBegin(__FILE__, __LINE__) + + /* Stop ignoring reads. */ + #define ANNOTATE_IGNORE_READS_END() \ + AnnotateIgnoreReadsEnd(__FILE__, __LINE__) + + /* Similar to ANNOTATE_IGNORE_READS_BEGIN, but ignore writes. */ + #define ANNOTATE_IGNORE_WRITES_BEGIN() \ + AnnotateIgnoreWritesBegin(__FILE__, __LINE__) + + /* Stop ignoring writes. */ + #define ANNOTATE_IGNORE_WRITES_END() \ + AnnotateIgnoreWritesEnd(__FILE__, __LINE__) + + /* Start ignoring all memory accesses (reads and writes). */ + #define ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \ + do {\ + ANNOTATE_IGNORE_READS_BEGIN();\ + ANNOTATE_IGNORE_WRITES_BEGIN();\ + }while(0)\ + + /* Stop ignoring all memory accesses. */ + #define ANNOTATE_IGNORE_READS_AND_WRITES_END() \ + do {\ + ANNOTATE_IGNORE_WRITES_END();\ + ANNOTATE_IGNORE_READS_END();\ + }while(0)\ + + /* Enable (enable!=0) or disable (enable==0) race detection for all threads. + This annotation could be useful if you want to skip expensive race analysis + during some period of program execution, e.g. during initialization. */ + #define ANNOTATE_ENABLE_RACE_DETECTION(enable) \ + AnnotateEnableRaceDetection(__FILE__, __LINE__, enable) + + /* ------------------------------------------------------------- + Annotations useful for debugging. */ + + /* Request to trace every access to "address". */ + #define ANNOTATE_TRACE_MEMORY(address) \ + AnnotateTraceMemory(__FILE__, __LINE__, address) + + /* Report the current thread name to a race detector. */ + #define ANNOTATE_THREAD_NAME(name) \ + AnnotateThreadName(__FILE__, __LINE__, name) + + /* ------------------------------------------------------------- + Annotations useful when implementing locks. They are not + normally needed by modules that merely use locks. + The "lock" argument is a pointer to the lock object. */ + + /* Report that a lock has been created at address "lock". */ + #define ANNOTATE_RWLOCK_CREATE(lock) \ + AnnotateRWLockCreate(__FILE__, __LINE__, lock) + + /* Report that the lock at address "lock" is about to be destroyed. */ + #define ANNOTATE_RWLOCK_DESTROY(lock) \ + AnnotateRWLockDestroy(__FILE__, __LINE__, lock) + + /* Report that the lock at address "lock" has been acquired. + is_w=1 for writer lock, is_w=0 for reader lock. */ + #define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \ + AnnotateRWLockAcquired(__FILE__, __LINE__, lock, is_w) + + /* Report that the lock at address "lock" is about to be released. */ + #define ANNOTATE_RWLOCK_RELEASED(lock, is_w) \ + AnnotateRWLockReleased(__FILE__, __LINE__, lock, is_w) + + /* ------------------------------------------------------------- + Annotations useful when implementing barriers. They are not + normally needed by modules that merely use barriers. + The "barrier" argument is a pointer to the barrier object. */ + + /* Report that the "barrier" has been initialized with initial "count". + If 'reinitialization_allowed' is true, initialization is allowed to happen + multiple times w/o calling barrier_destroy() */ + #define ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) \ + AnnotateBarrierInit(__FILE__, __LINE__, barrier, count, \ + reinitialization_allowed) + + /* Report that we are about to enter barrier_wait("barrier"). */ + #define ANNOTATE_BARRIER_WAIT_BEFORE(barrier) \ + AnnotateBarrierWaitBefore(__FILE__, __LINE__, barrier) + + /* Report that we just exited barrier_wait("barrier"). */ + #define ANNOTATE_BARRIER_WAIT_AFTER(barrier) \ + AnnotateBarrierWaitAfter(__FILE__, __LINE__, barrier) + + /* Report that the "barrier" has been destroyed. */ + #define ANNOTATE_BARRIER_DESTROY(barrier) \ + AnnotateBarrierDestroy(__FILE__, __LINE__, barrier) + + /* ------------------------------------------------------------- + Annotations useful for testing race detectors. */ + + /* Report that we expect a race on the variable at "address". + Use only in unit tests for a race detector. */ + #define ANNOTATE_EXPECT_RACE(address, description) \ + AnnotateExpectRace(__FILE__, __LINE__, address, description) + + /* A no-op. Insert where you like to test the interceptors. */ + #define ANNOTATE_NO_OP(arg) \ + AnnotateNoOp(__FILE__, __LINE__, arg) + + /* Force the race detector to flush its state. The actual effect depends on + * the implementation of the detector. */ + #define ANNOTATE_FLUSH_STATE() \ + AnnotateFlushState(__FILE__, __LINE__) + + +#else /* DYNAMIC_ANNOTATIONS_ENABLED == 0 */ + + #define ANNOTATE_RWLOCK_CREATE(lock) /* empty */ + #define ANNOTATE_RWLOCK_DESTROY(lock) /* empty */ + #define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) /* empty */ + #define ANNOTATE_RWLOCK_RELEASED(lock, is_w) /* empty */ + #define ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) /* */ + #define ANNOTATE_BARRIER_WAIT_BEFORE(barrier) /* empty */ + #define ANNOTATE_BARRIER_WAIT_AFTER(barrier) /* empty */ + #define ANNOTATE_BARRIER_DESTROY(barrier) /* empty */ + #define ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) /* empty */ + #define ANNOTATE_CONDVAR_WAIT(cv) /* empty */ + #define ANNOTATE_CONDVAR_SIGNAL(cv) /* empty */ + #define ANNOTATE_CONDVAR_SIGNAL_ALL(cv) /* empty */ + #define ANNOTATE_HAPPENS_BEFORE(obj) /* empty */ + #define ANNOTATE_HAPPENS_AFTER(obj) /* empty */ + #define ANNOTATE_PUBLISH_MEMORY_RANGE(address, size) /* empty */ + #define ANNOTATE_UNPUBLISH_MEMORY_RANGE(address, size) /* empty */ + #define ANNOTATE_SWAP_MEMORY_RANGE(address, size) /* empty */ + #define ANNOTATE_PCQ_CREATE(pcq) /* empty */ + #define ANNOTATE_PCQ_DESTROY(pcq) /* empty */ + #define ANNOTATE_PCQ_PUT(pcq) /* empty */ + #define ANNOTATE_PCQ_GET(pcq) /* empty */ + #define ANNOTATE_NEW_MEMORY(address, size) /* empty */ + #define ANNOTATE_EXPECT_RACE(address, description) /* empty */ + #define ANNOTATE_BENIGN_RACE(address, description) /* empty */ + #define ANNOTATE_BENIGN_RACE_SIZED(address, size, description) /* empty */ + #define ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) /* empty */ + #define ANNOTATE_MUTEX_IS_USED_AS_CONDVAR(mu) /* empty */ + #define ANNOTATE_TRACE_MEMORY(arg) /* empty */ + #define ANNOTATE_THREAD_NAME(name) /* empty */ + #define ANNOTATE_IGNORE_READS_BEGIN() /* empty */ + #define ANNOTATE_IGNORE_READS_END() /* empty */ + #define ANNOTATE_IGNORE_WRITES_BEGIN() /* empty */ + #define ANNOTATE_IGNORE_WRITES_END() /* empty */ + #define ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() /* empty */ + #define ANNOTATE_IGNORE_READS_AND_WRITES_END() /* empty */ + #define ANNOTATE_ENABLE_RACE_DETECTION(enable) /* empty */ + #define ANNOTATE_NO_OP(arg) /* empty */ + #define ANNOTATE_FLUSH_STATE() /* empty */ + +#endif /* DYNAMIC_ANNOTATIONS_ENABLED */ + +/* Macro definitions for GCC attributes that allow static thread safety + analysis to recognize and use some of the dynamic annotations as + escape hatches. + TODO(lcwu): remove the check for __SUPPORT_DYN_ANNOTATION__ once the + default crosstool/GCC supports these GCC attributes. */ + +#define ANNOTALYSIS_STATIC_INLINE +#define ANNOTALYSIS_SEMICOLON_OR_EMPTY_BODY ; +#define ANNOTALYSIS_IGNORE_READS_BEGIN +#define ANNOTALYSIS_IGNORE_READS_END +#define ANNOTALYSIS_IGNORE_WRITES_BEGIN +#define ANNOTALYSIS_IGNORE_WRITES_END +#define ANNOTALYSIS_UNPROTECTED_READ + +#if defined(__GNUC__) && (!defined(SWIG)) && (!defined(__clang__)) && \ + defined(__SUPPORT_TS_ANNOTATION__) && defined(__SUPPORT_DYN_ANNOTATION__) + +#if DYNAMIC_ANNOTATIONS_ENABLED == 0 +#define ANNOTALYSIS_ONLY 1 +#undef ANNOTALYSIS_STATIC_INLINE +#define ANNOTALYSIS_STATIC_INLINE static inline +#undef ANNOTALYSIS_SEMICOLON_OR_EMPTY_BODY +#define ANNOTALYSIS_SEMICOLON_OR_EMPTY_BODY { (void)file; (void)line; } +#endif + +/* Only emit attributes when annotalysis is enabled. */ +#if defined(__SUPPORT_TS_ANNOTATION__) && defined(__SUPPORT_DYN_ANNOTATION__) +#undef ANNOTALYSIS_IGNORE_READS_BEGIN +#define ANNOTALYSIS_IGNORE_READS_BEGIN __attribute__ ((ignore_reads_begin)) +#undef ANNOTALYSIS_IGNORE_READS_END +#define ANNOTALYSIS_IGNORE_READS_END __attribute__ ((ignore_reads_end)) +#undef ANNOTALYSIS_IGNORE_WRITES_BEGIN +#define ANNOTALYSIS_IGNORE_WRITES_BEGIN __attribute__ ((ignore_writes_begin)) +#undef ANNOTALYSIS_IGNORE_WRITES_END +#define ANNOTALYSIS_IGNORE_WRITES_END __attribute__ ((ignore_writes_end)) +#undef ANNOTALYSIS_UNPROTECTED_READ +#define ANNOTALYSIS_UNPROTECTED_READ __attribute__ ((unprotected_read)) +#endif + +#endif // defined(__GNUC__) && (!defined(SWIG)) && (!defined(__clang__)) + +/* Use the macros above rather than using these functions directly. */ +#ifdef __cplusplus +extern "C" { +#endif +void AnnotateRWLockCreate(const char *file, int line, + const volatile void *lock); +void AnnotateRWLockDestroy(const char *file, int line, + const volatile void *lock); +void AnnotateRWLockAcquired(const char *file, int line, + const volatile void *lock, long is_w); +void AnnotateRWLockReleased(const char *file, int line, + const volatile void *lock, long is_w); +void AnnotateBarrierInit(const char *file, int line, + const volatile void *barrier, long count, + long reinitialization_allowed); +void AnnotateBarrierWaitBefore(const char *file, int line, + const volatile void *barrier); +void AnnotateBarrierWaitAfter(const char *file, int line, + const volatile void *barrier); +void AnnotateBarrierDestroy(const char *file, int line, + const volatile void *barrier); +void AnnotateCondVarWait(const char *file, int line, + const volatile void *cv, + const volatile void *lock); +void AnnotateCondVarSignal(const char *file, int line, + const volatile void *cv); +void AnnotateCondVarSignalAll(const char *file, int line, + const volatile void *cv); +void AnnotatePublishMemoryRange(const char *file, int line, + const volatile void *address, + long size); +void AnnotateUnpublishMemoryRange(const char *file, int line, + const volatile void *address, + long size); +void AnnotatePCQCreate(const char *file, int line, + const volatile void *pcq); +void AnnotatePCQDestroy(const char *file, int line, + const volatile void *pcq); +void AnnotatePCQPut(const char *file, int line, + const volatile void *pcq); +void AnnotatePCQGet(const char *file, int line, + const volatile void *pcq); +void AnnotateNewMemory(const char *file, int line, + const volatile void *address, + long size); +void AnnotateExpectRace(const char *file, int line, + const volatile void *address, + const char *description); +void AnnotateBenignRace(const char *file, int line, + const volatile void *address, + const char *description); +void AnnotateBenignRaceSized(const char *file, int line, + const volatile void *address, + long size, + const char *description); +void AnnotateMutexIsUsedAsCondVar(const char *file, int line, + const volatile void *mu); +void AnnotateTraceMemory(const char *file, int line, + const volatile void *arg); +void AnnotateThreadName(const char *file, int line, + const char *name); +ANNOTALYSIS_STATIC_INLINE +void AnnotateIgnoreReadsBegin(const char *file, int line) + ANNOTALYSIS_IGNORE_READS_BEGIN ANNOTALYSIS_SEMICOLON_OR_EMPTY_BODY +ANNOTALYSIS_STATIC_INLINE +void AnnotateIgnoreReadsEnd(const char *file, int line) + ANNOTALYSIS_IGNORE_READS_END ANNOTALYSIS_SEMICOLON_OR_EMPTY_BODY +ANNOTALYSIS_STATIC_INLINE +void AnnotateIgnoreWritesBegin(const char *file, int line) + ANNOTALYSIS_IGNORE_WRITES_BEGIN ANNOTALYSIS_SEMICOLON_OR_EMPTY_BODY +ANNOTALYSIS_STATIC_INLINE +void AnnotateIgnoreWritesEnd(const char *file, int line) + ANNOTALYSIS_IGNORE_WRITES_END ANNOTALYSIS_SEMICOLON_OR_EMPTY_BODY +void AnnotateEnableRaceDetection(const char *file, int line, int enable); +void AnnotateNoOp(const char *file, int line, + const volatile void *arg); +void AnnotateFlushState(const char *file, int line); + +/* Return non-zero value if running under valgrind. + + If "valgrind.h" is included into dynamic_annotations.c, + the regular valgrind mechanism will be used. + See http://valgrind.org/docs/manual/manual-core-adv.html about + RUNNING_ON_VALGRIND and other valgrind "client requests". + The file "valgrind.h" may be obtained by doing + svn co svn://svn.valgrind.org/valgrind/trunk/include + + If for some reason you can't use "valgrind.h" or want to fake valgrind, + there are two ways to make this function return non-zero: + - Use environment variable: export RUNNING_ON_VALGRIND=1 + - Make your tool intercept the function RunningOnValgrind() and + change its return value. + */ +int RunningOnValgrind(void); + +/* ValgrindSlowdown returns: + * 1.0, if (RunningOnValgrind() == 0) + * 50.0, if (RunningOnValgrind() != 0 && getenv("VALGRIND_SLOWDOWN") == NULL) + * atof(getenv("VALGRIND_SLOWDOWN")) otherwise + This function can be used to scale timeout values: + EXAMPLE: + for (;;) { + DoExpensiveBackgroundTask(); + SleepForSeconds(5 * ValgrindSlowdown()); + } + */ +double ValgrindSlowdown(void); + +#ifdef __cplusplus +} +#endif + +#if DYNAMIC_ANNOTATIONS_ENABLED != 0 && defined(__cplusplus) + + /* ANNOTATE_UNPROTECTED_READ is the preferred way to annotate racey reads. + + Instead of doing + ANNOTATE_IGNORE_READS_BEGIN(); + ... = x; + ANNOTATE_IGNORE_READS_END(); + one can use + ... = ANNOTATE_UNPROTECTED_READ(x); */ + template + inline T ANNOTATE_UNPROTECTED_READ(const volatile T &x) + ANNOTALYSIS_UNPROTECTED_READ { + ANNOTATE_IGNORE_READS_BEGIN(); + T res = x; + ANNOTATE_IGNORE_READS_END(); + return res; + } + /* Apply ANNOTATE_BENIGN_RACE_SIZED to a static variable. */ + #define ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \ + namespace { \ + class static_var ## _annotator { \ + public: \ + static_var ## _annotator() { \ + ANNOTATE_BENIGN_RACE_SIZED(&static_var, \ + sizeof(static_var), \ + # static_var ": " description); \ + } \ + }; \ + static static_var ## _annotator the ## static_var ## _annotator;\ + } +#else /* DYNAMIC_ANNOTATIONS_ENABLED == 0 */ + + #define ANNOTATE_UNPROTECTED_READ(x) (x) + #define ANNOTATE_BENIGN_RACE_STATIC(static_var, description) /* empty */ + +#endif /* DYNAMIC_ANNOTATIONS_ENABLED */ + +/* Annotalysis, a GCC based static analyzer, is able to understand and use + some of the dynamic annotations defined in this file. However, dynamic + annotations are usually disabled in the opt mode (to avoid additional + runtime overheads) while Annotalysis only works in the opt mode. + In order for Annotalysis to use these dynamic annotations when they + are disabled, we re-define these annotations here. Note that unlike the + original macro definitions above, these macros are expanded to calls to + static inline functions so that the compiler will be able to remove the + calls after the analysis. */ + +#ifdef ANNOTALYSIS_ONLY + + #undef ANNOTALYSIS_ONLY + + /* Undefine and re-define the macros that the static analyzer understands. */ + #undef ANNOTATE_IGNORE_READS_BEGIN + #define ANNOTATE_IGNORE_READS_BEGIN() \ + AnnotateIgnoreReadsBegin(__FILE__, __LINE__) + + #undef ANNOTATE_IGNORE_READS_END + #define ANNOTATE_IGNORE_READS_END() \ + AnnotateIgnoreReadsEnd(__FILE__, __LINE__) + + #undef ANNOTATE_IGNORE_WRITES_BEGIN + #define ANNOTATE_IGNORE_WRITES_BEGIN() \ + AnnotateIgnoreWritesBegin(__FILE__, __LINE__) + + #undef ANNOTATE_IGNORE_WRITES_END + #define ANNOTATE_IGNORE_WRITES_END() \ + AnnotateIgnoreWritesEnd(__FILE__, __LINE__) + + #undef ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN + #define ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \ + do { \ + ANNOTATE_IGNORE_READS_BEGIN(); \ + ANNOTATE_IGNORE_WRITES_BEGIN(); \ + }while(0) \ + + #undef ANNOTATE_IGNORE_READS_AND_WRITES_END + #define ANNOTATE_IGNORE_READS_AND_WRITES_END() \ + do { \ + ANNOTATE_IGNORE_WRITES_END(); \ + ANNOTATE_IGNORE_READS_END(); \ + }while(0) \ + + #if defined(__cplusplus) + #undef ANNOTATE_UNPROTECTED_READ + template + inline T ANNOTATE_UNPROTECTED_READ(const volatile T &x) + ANNOTALYSIS_UNPROTECTED_READ { + ANNOTATE_IGNORE_READS_BEGIN(); + T res = x; + ANNOTATE_IGNORE_READS_END(); + return res; + } + #endif /* __cplusplus */ + +#endif /* ANNOTALYSIS_ONLY */ + +/* Undefine the macros intended only in this file. */ +#undef ANNOTALYSIS_STATIC_INLINE +#undef ANNOTALYSIS_SEMICOLON_OR_EMPTY_BODY + +#endif /* BASE_DYNAMIC_ANNOTATIONS_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/base/elf_mem_image.cc b/src/thirdparty/gperftools-2.0/src/base/elf_mem_image.cc new file mode 100644 index 000000000..294934370 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/elf_mem_image.cc @@ -0,0 +1,433 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Paul Pluzhnikov +// +// Allow dynamic symbol lookup in an in-memory Elf image. +// + +#include "base/elf_mem_image.h" + +#ifdef HAVE_ELF_MEM_IMAGE // defined in elf_mem_image.h + +#include // for size_t, ptrdiff_t +#include "base/logging.h" + +// From binutils/include/elf/common.h (this doesn't appear to be documented +// anywhere else). +// +// /* This flag appears in a Versym structure. It means that the symbol +// is hidden, and is only visible with an explicit version number. +// This is a GNU extension. */ +// #define VERSYM_HIDDEN 0x8000 +// +// /* This is the mask for the rest of the Versym information. */ +// #define VERSYM_VERSION 0x7fff + +#define VERSYM_VERSION 0x7fff + +namespace base { + +namespace { +template class ElfClass { + public: + static const int kElfClass = -1; + static int ElfBind(const ElfW(Sym) *) { + CHECK(false); // << "Unexpected word size"; + return 0; + } + static int ElfType(const ElfW(Sym) *) { + CHECK(false); // << "Unexpected word size"; + return 0; + } +}; + +template <> class ElfClass<32> { + public: + static const int kElfClass = ELFCLASS32; + static int ElfBind(const ElfW(Sym) *symbol) { + return ELF32_ST_BIND(symbol->st_info); + } + static int ElfType(const ElfW(Sym) *symbol) { + return ELF32_ST_TYPE(symbol->st_info); + } +}; + +template <> class ElfClass<64> { + public: + static const int kElfClass = ELFCLASS64; + static int ElfBind(const ElfW(Sym) *symbol) { + return ELF64_ST_BIND(symbol->st_info); + } + static int ElfType(const ElfW(Sym) *symbol) { + return ELF64_ST_TYPE(symbol->st_info); + } +}; + +typedef ElfClass<__WORDSIZE> CurrentElfClass; + +// Extract an element from one of the ELF tables, cast it to desired type. +// This is just a simple arithmetic and a glorified cast. +// Callers are responsible for bounds checking. +template +const T* GetTableElement(const ElfW(Ehdr) *ehdr, + ElfW(Off) table_offset, + ElfW(Word) element_size, + size_t index) { + return reinterpret_cast(reinterpret_cast(ehdr) + + table_offset + + index * element_size); +} +} // namespace + +const void *const ElfMemImage::kInvalidBase = + reinterpret_cast(~0L); + +ElfMemImage::ElfMemImage(const void *base) { + CHECK(base != kInvalidBase); + Init(base); +} + +int ElfMemImage::GetNumSymbols() const { + if (!hash_) { + return 0; + } + // See http://www.caldera.com/developers/gabi/latest/ch5.dynamic.html#hash + return hash_[1]; +} + +const ElfW(Sym) *ElfMemImage::GetDynsym(int index) const { + CHECK_LT(index, GetNumSymbols()); + return dynsym_ + index; +} + +const ElfW(Versym) *ElfMemImage::GetVersym(int index) const { + CHECK_LT(index, GetNumSymbols()); + return versym_ + index; +} + +const ElfW(Phdr) *ElfMemImage::GetPhdr(int index) const { + CHECK_LT(index, ehdr_->e_phnum); + return GetTableElement(ehdr_, + ehdr_->e_phoff, + ehdr_->e_phentsize, + index); +} + +const char *ElfMemImage::GetDynstr(ElfW(Word) offset) const { + CHECK_LT(offset, strsize_); + return dynstr_ + offset; +} + +const void *ElfMemImage::GetSymAddr(const ElfW(Sym) *sym) const { + if (sym->st_shndx == SHN_UNDEF || sym->st_shndx >= SHN_LORESERVE) { + // Symbol corresponds to "special" (e.g. SHN_ABS) section. + return reinterpret_cast(sym->st_value); + } + CHECK_LT(link_base_, sym->st_value); + return GetTableElement(ehdr_, 0, 1, sym->st_value) - link_base_; +} + +const ElfW(Verdef) *ElfMemImage::GetVerdef(int index) const { + CHECK_LE(index, verdefnum_); + const ElfW(Verdef) *version_definition = verdef_; + while (version_definition->vd_ndx < index && version_definition->vd_next) { + const char *const version_definition_as_char = + reinterpret_cast(version_definition); + version_definition = + reinterpret_cast(version_definition_as_char + + version_definition->vd_next); + } + return version_definition->vd_ndx == index ? version_definition : NULL; +} + +const ElfW(Verdaux) *ElfMemImage::GetVerdefAux( + const ElfW(Verdef) *verdef) const { + return reinterpret_cast(verdef+1); +} + +const char *ElfMemImage::GetVerstr(ElfW(Word) offset) const { + CHECK_LT(offset, strsize_); + return dynstr_ + offset; +} + +void ElfMemImage::Init(const void *base) { + ehdr_ = NULL; + dynsym_ = NULL; + dynstr_ = NULL; + versym_ = NULL; + verdef_ = NULL; + hash_ = NULL; + strsize_ = 0; + verdefnum_ = 0; + link_base_ = ~0L; // Sentinel: PT_LOAD .p_vaddr can't possibly be this. + if (!base) { + return; + } + const intptr_t base_as_uintptr_t = reinterpret_cast(base); + // Fake VDSO has low bit set. + const bool fake_vdso = ((base_as_uintptr_t & 1) != 0); + base = reinterpret_cast(base_as_uintptr_t & ~1); + const char *const base_as_char = reinterpret_cast(base); + if (base_as_char[EI_MAG0] != ELFMAG0 || base_as_char[EI_MAG1] != ELFMAG1 || + base_as_char[EI_MAG2] != ELFMAG2 || base_as_char[EI_MAG3] != ELFMAG3) { + RAW_DCHECK(false, "no ELF magic"); // at %p", base); + return; + } + int elf_class = base_as_char[EI_CLASS]; + if (elf_class != CurrentElfClass::kElfClass) { + DCHECK_EQ(elf_class, CurrentElfClass::kElfClass); + return; + } + switch (base_as_char[EI_DATA]) { + case ELFDATA2LSB: { + if (__LITTLE_ENDIAN != __BYTE_ORDER) { + DCHECK_EQ(__LITTLE_ENDIAN, __BYTE_ORDER); // << ": wrong byte order"; + return; + } + break; + } + case ELFDATA2MSB: { + if (__BIG_ENDIAN != __BYTE_ORDER) { + DCHECK_EQ(__BIG_ENDIAN, __BYTE_ORDER); // << ": wrong byte order"; + return; + } + break; + } + default: { + RAW_DCHECK(false, "unexpected data encoding"); // << base_as_char[EI_DATA]; + return; + } + } + + ehdr_ = reinterpret_cast(base); + const ElfW(Phdr) *dynamic_program_header = NULL; + for (int i = 0; i < ehdr_->e_phnum; ++i) { + const ElfW(Phdr) *const program_header = GetPhdr(i); + switch (program_header->p_type) { + case PT_LOAD: + if (link_base_ == ~0L) { + link_base_ = program_header->p_vaddr; + } + break; + case PT_DYNAMIC: + dynamic_program_header = program_header; + break; + } + } + if (link_base_ == ~0L || !dynamic_program_header) { + RAW_DCHECK(~0L != link_base_, "no PT_LOADs in VDSO"); + RAW_DCHECK(dynamic_program_header, "no PT_DYNAMIC in VDSO"); + // Mark this image as not present. Can not recur infinitely. + Init(0); + return; + } + ptrdiff_t relocation = + base_as_char - reinterpret_cast(link_base_); + ElfW(Dyn) *dynamic_entry = + reinterpret_cast(dynamic_program_header->p_vaddr + + relocation); + for (; dynamic_entry->d_tag != DT_NULL; ++dynamic_entry) { + ElfW(Xword) value = dynamic_entry->d_un.d_val; + if (fake_vdso) { + // A complication: in the real VDSO, dynamic entries are not relocated + // (it wasn't loaded by a dynamic loader). But when testing with a + // "fake" dlopen()ed vdso library, the loader relocates some (but + // not all!) of them before we get here. + if (dynamic_entry->d_tag == DT_VERDEF) { + // The only dynamic entry (of the ones we care about) libc-2.3.6 + // loader doesn't relocate. + value += relocation; + } + } else { + // Real VDSO. Everything needs to be relocated. + value += relocation; + } + switch (dynamic_entry->d_tag) { + case DT_HASH: + hash_ = reinterpret_cast(value); + break; + case DT_SYMTAB: + dynsym_ = reinterpret_cast(value); + break; + case DT_STRTAB: + dynstr_ = reinterpret_cast(value); + break; + case DT_VERSYM: + versym_ = reinterpret_cast(value); + break; + case DT_VERDEF: + verdef_ = reinterpret_cast(value); + break; + case DT_VERDEFNUM: + verdefnum_ = dynamic_entry->d_un.d_val; + break; + case DT_STRSZ: + strsize_ = dynamic_entry->d_un.d_val; + break; + default: + // Unrecognized entries explicitly ignored. + break; + } + } + if (!hash_ || !dynsym_ || !dynstr_ || !versym_ || + !verdef_ || !verdefnum_ || !strsize_) { + RAW_DCHECK(hash_, "invalid VDSO (no DT_HASH)"); + RAW_DCHECK(dynsym_, "invalid VDSO (no DT_SYMTAB)"); + RAW_DCHECK(dynstr_, "invalid VDSO (no DT_STRTAB)"); + RAW_DCHECK(versym_, "invalid VDSO (no DT_VERSYM)"); + RAW_DCHECK(verdef_, "invalid VDSO (no DT_VERDEF)"); + RAW_DCHECK(verdefnum_, "invalid VDSO (no DT_VERDEFNUM)"); + RAW_DCHECK(strsize_, "invalid VDSO (no DT_STRSZ)"); + // Mark this image as not present. Can not recur infinitely. + Init(0); + return; + } +} + +bool ElfMemImage::LookupSymbol(const char *name, + const char *version, + int type, + SymbolInfo *info) const { + for (SymbolIterator it = begin(); it != end(); ++it) { + if (strcmp(it->name, name) == 0 && strcmp(it->version, version) == 0 && + CurrentElfClass::ElfType(it->symbol) == type) { + if (info) { + *info = *it; + } + return true; + } + } + return false; +} + +bool ElfMemImage::LookupSymbolByAddress(const void *address, + SymbolInfo *info_out) const { + for (SymbolIterator it = begin(); it != end(); ++it) { + const char *const symbol_start = + reinterpret_cast(it->address); + const char *const symbol_end = symbol_start + it->symbol->st_size; + if (symbol_start <= address && address < symbol_end) { + if (info_out) { + // Client wants to know details for that symbol (the usual case). + if (CurrentElfClass::ElfBind(it->symbol) == STB_GLOBAL) { + // Strong symbol; just return it. + *info_out = *it; + return true; + } else { + // Weak or local. Record it, but keep looking for a strong one. + *info_out = *it; + } + } else { + // Client only cares if there is an overlapping symbol. + return true; + } + } + } + return false; +} + +ElfMemImage::SymbolIterator::SymbolIterator(const void *const image, int index) + : index_(index), image_(image) { +} + +const ElfMemImage::SymbolInfo *ElfMemImage::SymbolIterator::operator->() const { + return &info_; +} + +const ElfMemImage::SymbolInfo& ElfMemImage::SymbolIterator::operator*() const { + return info_; +} + +bool ElfMemImage::SymbolIterator::operator==(const SymbolIterator &rhs) const { + return this->image_ == rhs.image_ && this->index_ == rhs.index_; +} + +bool ElfMemImage::SymbolIterator::operator!=(const SymbolIterator &rhs) const { + return !(*this == rhs); +} + +ElfMemImage::SymbolIterator &ElfMemImage::SymbolIterator::operator++() { + this->Update(1); + return *this; +} + +ElfMemImage::SymbolIterator ElfMemImage::begin() const { + SymbolIterator it(this, 0); + it.Update(0); + return it; +} + +ElfMemImage::SymbolIterator ElfMemImage::end() const { + return SymbolIterator(this, GetNumSymbols()); +} + +void ElfMemImage::SymbolIterator::Update(int increment) { + const ElfMemImage *image = reinterpret_cast(image_); + CHECK(image->IsPresent() || increment == 0); + if (!image->IsPresent()) { + return; + } + index_ += increment; + if (index_ >= image->GetNumSymbols()) { + index_ = image->GetNumSymbols(); + return; + } + const ElfW(Sym) *symbol = image->GetDynsym(index_); + const ElfW(Versym) *version_symbol = image->GetVersym(index_); + CHECK(symbol && version_symbol); + const char *const symbol_name = image->GetDynstr(symbol->st_name); + const ElfW(Versym) version_index = version_symbol[0] & VERSYM_VERSION; + const ElfW(Verdef) *version_definition = NULL; + const char *version_name = ""; + if (symbol->st_shndx == SHN_UNDEF) { + // Undefined symbols reference DT_VERNEED, not DT_VERDEF, and + // version_index could well be greater than verdefnum_, so calling + // GetVerdef(version_index) may trigger assertion. + } else { + version_definition = image->GetVerdef(version_index); + } + if (version_definition) { + // I am expecting 1 or 2 auxiliary entries: 1 for the version itself, + // optional 2nd if the version has a parent. + CHECK_LE(1, version_definition->vd_cnt); + CHECK_LE(version_definition->vd_cnt, 2); + const ElfW(Verdaux) *version_aux = image->GetVerdefAux(version_definition); + version_name = image->GetVerstr(version_aux->vda_name); + } + info_.name = symbol_name; + info_.version = version_name; + info_.address = image->GetSymAddr(symbol); + info_.symbol = symbol; +} + +} // namespace base + +#endif // HAVE_ELF_MEM_IMAGE diff --git a/src/thirdparty/gperftools-2.0/src/base/elf_mem_image.h b/src/thirdparty/gperftools-2.0/src/base/elf_mem_image.h new file mode 100644 index 000000000..6f1f09773 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/elf_mem_image.h @@ -0,0 +1,134 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Paul Pluzhnikov +// +// Allow dynamic symbol lookup for in-memory Elf images. + +#ifndef BASE_ELF_MEM_IMAGE_H_ +#define BASE_ELF_MEM_IMAGE_H_ + +#include +#ifdef HAVE_FEATURES_H +#include // for __GLIBC__ +#endif + +// Maybe one day we can rewrite this file not to require the elf +// symbol extensions in glibc, but for right now we need them. +#if defined(__ELF__) && defined(__GLIBC__) && !defined(__native_client__) + +#define HAVE_ELF_MEM_IMAGE 1 + +#include +#include // for ElfW + +namespace base { + +// An in-memory ELF image (may not exist on disk). +class ElfMemImage { + public: + // Sentinel: there could never be an elf image at this address. + static const void *const kInvalidBase; + + // Information about a single vdso symbol. + // All pointers are into .dynsym, .dynstr, or .text of the VDSO. + // Do not free() them or modify through them. + struct SymbolInfo { + const char *name; // E.g. "__vdso_getcpu" + const char *version; // E.g. "LINUX_2.6", could be "" + // for unversioned symbol. + const void *address; // Relocated symbol address. + const ElfW(Sym) *symbol; // Symbol in the dynamic symbol table. + }; + + // Supports iteration over all dynamic symbols. + class SymbolIterator { + public: + friend class ElfMemImage; + const SymbolInfo *operator->() const; + const SymbolInfo &operator*() const; + SymbolIterator& operator++(); + bool operator!=(const SymbolIterator &rhs) const; + bool operator==(const SymbolIterator &rhs) const; + private: + SymbolIterator(const void *const image, int index); + void Update(int incr); + SymbolInfo info_; + int index_; + const void *const image_; + }; + + + explicit ElfMemImage(const void *base); + void Init(const void *base); + bool IsPresent() const { return ehdr_ != NULL; } + const ElfW(Phdr)* GetPhdr(int index) const; + const ElfW(Sym)* GetDynsym(int index) const; + const ElfW(Versym)* GetVersym(int index) const; + const ElfW(Verdef)* GetVerdef(int index) const; + const ElfW(Verdaux)* GetVerdefAux(const ElfW(Verdef) *verdef) const; + const char* GetDynstr(ElfW(Word) offset) const; + const void* GetSymAddr(const ElfW(Sym) *sym) const; + const char* GetVerstr(ElfW(Word) offset) const; + int GetNumSymbols() const; + + SymbolIterator begin() const; + SymbolIterator end() const; + + // Look up versioned dynamic symbol in the image. + // Returns false if image is not present, or doesn't contain given + // symbol/version/type combination. + // If info_out != NULL, additional details are filled in. + bool LookupSymbol(const char *name, const char *version, + int symbol_type, SymbolInfo *info_out) const; + + // Find info about symbol (if any) which overlaps given address. + // Returns true if symbol was found; false if image isn't present + // or doesn't have a symbol overlapping given address. + // If info_out != NULL, additional details are filled in. + bool LookupSymbolByAddress(const void *address, SymbolInfo *info_out) const; + + private: + const ElfW(Ehdr) *ehdr_; + const ElfW(Sym) *dynsym_; + const ElfW(Versym) *versym_; + const ElfW(Verdef) *verdef_; + const ElfW(Word) *hash_; + const char *dynstr_; + size_t strsize_; + size_t verdefnum_; + ElfW(Addr) link_base_; // Link-time base (p_vaddr of first PT_LOAD). +}; + +} // namespace base + +#endif // __ELF__ and __GLIBC__ and !__native_client__ + +#endif // BASE_ELF_MEM_IMAGE_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/elfcore.h b/src/thirdparty/gperftools-2.0/src/base/elfcore.h new file mode 100644 index 000000000..34a96dec3 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/elfcore.h @@ -0,0 +1,385 @@ +/* Copyright (c) 2005-2008, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Markus Gutschke, Carl Crous + */ + +#ifndef _ELFCORE_H +#define _ELFCORE_H +#ifdef __cplusplus +extern "C" { +#endif + +/* We currently only support x86-32, x86-64, ARM, and MIPS on Linux. + * Porting to other related platforms should not be difficult. + */ +#if (defined(__i386__) || defined(__x86_64__) || defined(__ARM_ARCH_3__) || \ + defined(__mips__)) && defined(__linux) + +#include +#include +#include +#include + + +/* Define the DUMPER symbol to make sure that there is exactly one + * core dumper built into the library. + */ +#define DUMPER "ELF" + +/* By the time that we get a chance to read CPU registers in the + * calling thread, they are already in a not particularly useful + * state. Besides, there will be multiple frames on the stack that are + * just making the core file confusing. To fix this problem, we take a + * snapshot of the frame pointer, stack pointer, and instruction + * pointer at an earlier time, and then insert these values into the + * core file. + */ + +#if defined(__i386__) || defined(__x86_64__) + typedef struct i386_regs { /* Normal (non-FPU) CPU registers */ + #ifdef __x86_64__ + #define BP rbp + #define SP rsp + #define IP rip + uint64_t r15,r14,r13,r12,rbp,rbx,r11,r10; + uint64_t r9,r8,rax,rcx,rdx,rsi,rdi,orig_rax; + uint64_t rip,cs,eflags; + uint64_t rsp,ss; + uint64_t fs_base, gs_base; + uint64_t ds,es,fs,gs; + #else + #define BP ebp + #define SP esp + #define IP eip + uint32_t ebx, ecx, edx, esi, edi, ebp, eax; + uint16_t ds, __ds, es, __es; + uint16_t fs, __fs, gs, __gs; + uint32_t orig_eax, eip; + uint16_t cs, __cs; + uint32_t eflags, esp; + uint16_t ss, __ss; + #endif + } i386_regs; +#elif defined(__ARM_ARCH_3__) + typedef struct arm_regs { /* General purpose registers */ + #define BP uregs[11] /* Frame pointer */ + #define SP uregs[13] /* Stack pointer */ + #define IP uregs[15] /* Program counter */ + #define LR uregs[14] /* Link register */ + long uregs[18]; + } arm_regs; +#elif defined(__mips__) + typedef struct mips_regs { + unsigned long pad[6]; /* Unused padding to match kernel structures */ + unsigned long uregs[32]; /* General purpose registers. */ + unsigned long hi; /* Used for multiplication and division. */ + unsigned long lo; + unsigned long cp0_epc; /* Program counter. */ + unsigned long cp0_badvaddr; + unsigned long cp0_status; + unsigned long cp0_cause; + unsigned long unused; + } mips_regs; +#endif + +#if defined(__i386__) && defined(__GNUC__) + /* On x86 we provide an optimized version of the FRAME() macro, if the + * compiler supports a GCC-style asm() directive. This results in somewhat + * more accurate values for CPU registers. + */ + typedef struct Frame { + struct i386_regs uregs; + int errno_; + pid_t tid; + } Frame; + #define FRAME(f) Frame f; \ + do { \ + f.errno_ = errno; \ + f.tid = sys_gettid(); \ + __asm__ volatile ( \ + "push %%ebp\n" \ + "push %%ebx\n" \ + "mov %%ebx,0(%%eax)\n" \ + "mov %%ecx,4(%%eax)\n" \ + "mov %%edx,8(%%eax)\n" \ + "mov %%esi,12(%%eax)\n" \ + "mov %%edi,16(%%eax)\n" \ + "mov %%ebp,20(%%eax)\n" \ + "mov %%eax,24(%%eax)\n" \ + "mov %%ds,%%ebx\n" \ + "mov %%ebx,28(%%eax)\n" \ + "mov %%es,%%ebx\n" \ + "mov %%ebx,32(%%eax)\n" \ + "mov %%fs,%%ebx\n" \ + "mov %%ebx,36(%%eax)\n" \ + "mov %%gs,%%ebx\n" \ + "mov %%ebx, 40(%%eax)\n" \ + "call 0f\n" \ + "0:pop %%ebx\n" \ + "add $1f-0b,%%ebx\n" \ + "mov %%ebx,48(%%eax)\n" \ + "mov %%cs,%%ebx\n" \ + "mov %%ebx,52(%%eax)\n" \ + "pushf\n" \ + "pop %%ebx\n" \ + "mov %%ebx,56(%%eax)\n" \ + "mov %%esp,%%ebx\n" \ + "add $8,%%ebx\n" \ + "mov %%ebx,60(%%eax)\n" \ + "mov %%ss,%%ebx\n" \ + "mov %%ebx,64(%%eax)\n" \ + "pop %%ebx\n" \ + "pop %%ebp\n" \ + "1:" \ + : : "a" (&f) : "memory"); \ + } while (0) + #define SET_FRAME(f,r) \ + do { \ + errno = (f).errno_; \ + (r) = (f).uregs; \ + } while (0) +#elif defined(__x86_64__) && defined(__GNUC__) + /* The FRAME and SET_FRAME macros for x86_64. */ + typedef struct Frame { + struct i386_regs uregs; + int errno_; + pid_t tid; + } Frame; + #define FRAME(f) Frame f; \ + do { \ + f.errno_ = errno; \ + f.tid = sys_gettid(); \ + __asm__ volatile ( \ + "push %%rbp\n" \ + "push %%rbx\n" \ + "mov %%r15,0(%%rax)\n" \ + "mov %%r14,8(%%rax)\n" \ + "mov %%r13,16(%%rax)\n" \ + "mov %%r12,24(%%rax)\n" \ + "mov %%rbp,32(%%rax)\n" \ + "mov %%rbx,40(%%rax)\n" \ + "mov %%r11,48(%%rax)\n" \ + "mov %%r10,56(%%rax)\n" \ + "mov %%r9,64(%%rax)\n" \ + "mov %%r8,72(%%rax)\n" \ + "mov %%rax,80(%%rax)\n" \ + "mov %%rcx,88(%%rax)\n" \ + "mov %%rdx,96(%%rax)\n" \ + "mov %%rsi,104(%%rax)\n" \ + "mov %%rdi,112(%%rax)\n" \ + "mov %%ds,%%rbx\n" \ + "mov %%rbx,184(%%rax)\n" \ + "mov %%es,%%rbx\n" \ + "mov %%rbx,192(%%rax)\n" \ + "mov %%fs,%%rbx\n" \ + "mov %%rbx,200(%%rax)\n" \ + "mov %%gs,%%rbx\n" \ + "mov %%rbx,208(%%rax)\n" \ + "call 0f\n" \ + "0:pop %%rbx\n" \ + "add $1f-0b,%%rbx\n" \ + "mov %%rbx,128(%%rax)\n" \ + "mov %%cs,%%rbx\n" \ + "mov %%rbx,136(%%rax)\n" \ + "pushf\n" \ + "pop %%rbx\n" \ + "mov %%rbx,144(%%rax)\n" \ + "mov %%rsp,%%rbx\n" \ + "add $16,%%ebx\n" \ + "mov %%rbx,152(%%rax)\n" \ + "mov %%ss,%%rbx\n" \ + "mov %%rbx,160(%%rax)\n" \ + "pop %%rbx\n" \ + "pop %%rbp\n" \ + "1:" \ + : : "a" (&f) : "memory"); \ + } while (0) + #define SET_FRAME(f,r) \ + do { \ + errno = (f).errno_; \ + (f).uregs.fs_base = (r).fs_base; \ + (f).uregs.gs_base = (r).gs_base; \ + (r) = (f).uregs; \ + } while (0) +#elif defined(__ARM_ARCH_3__) && defined(__GNUC__) + /* ARM calling conventions are a little more tricky. A little assembly + * helps in obtaining an accurate snapshot of all registers. + */ + typedef struct Frame { + struct arm_regs arm; + int errno_; + pid_t tid; + } Frame; + #define FRAME(f) Frame f; \ + do { \ + long cpsr; \ + f.errno_ = errno; \ + f.tid = sys_gettid(); \ + __asm__ volatile( \ + "stmia %0, {r0-r15}\n" /* All integer regs */\ + : : "r"(&f.arm) : "memory"); \ + f.arm.uregs[16] = 0; \ + __asm__ volatile( \ + "mrs %0, cpsr\n" /* Condition code reg */\ + : "=r"(cpsr)); \ + f.arm.uregs[17] = cpsr; \ + } while (0) + #define SET_FRAME(f,r) \ + do { \ + /* Don't override the FPU status register. */\ + /* Use the value obtained from ptrace(). This*/\ + /* works, because our code does not perform */\ + /* any FPU operations, itself. */\ + long fps = (f).arm.uregs[16]; \ + errno = (f).errno_; \ + (r) = (f).arm; \ + (r).uregs[16] = fps; \ + } while (0) +#elif defined(__mips__) && defined(__GNUC__) + typedef struct Frame { + struct mips_regs mips_regs; + int errno_; + pid_t tid; + } Frame; + #define MIPSREG(n) ({ register unsigned long r __asm__("$"#n); r; }) + #define FRAME(f) Frame f = { 0 }; \ + do { \ + unsigned long hi, lo; \ + register unsigned long pc __asm__("$31"); \ + f.mips_regs.uregs[ 0] = MIPSREG( 0); \ + f.mips_regs.uregs[ 1] = MIPSREG( 1); \ + f.mips_regs.uregs[ 2] = MIPSREG( 2); \ + f.mips_regs.uregs[ 3] = MIPSREG( 3); \ + f.mips_regs.uregs[ 4] = MIPSREG( 4); \ + f.mips_regs.uregs[ 5] = MIPSREG( 5); \ + f.mips_regs.uregs[ 6] = MIPSREG( 6); \ + f.mips_regs.uregs[ 7] = MIPSREG( 7); \ + f.mips_regs.uregs[ 8] = MIPSREG( 8); \ + f.mips_regs.uregs[ 9] = MIPSREG( 9); \ + f.mips_regs.uregs[10] = MIPSREG(10); \ + f.mips_regs.uregs[11] = MIPSREG(11); \ + f.mips_regs.uregs[12] = MIPSREG(12); \ + f.mips_regs.uregs[13] = MIPSREG(13); \ + f.mips_regs.uregs[14] = MIPSREG(14); \ + f.mips_regs.uregs[15] = MIPSREG(15); \ + f.mips_regs.uregs[16] = MIPSREG(16); \ + f.mips_regs.uregs[17] = MIPSREG(17); \ + f.mips_regs.uregs[18] = MIPSREG(18); \ + f.mips_regs.uregs[19] = MIPSREG(19); \ + f.mips_regs.uregs[20] = MIPSREG(20); \ + f.mips_regs.uregs[21] = MIPSREG(21); \ + f.mips_regs.uregs[22] = MIPSREG(22); \ + f.mips_regs.uregs[23] = MIPSREG(23); \ + f.mips_regs.uregs[24] = MIPSREG(24); \ + f.mips_regs.uregs[25] = MIPSREG(25); \ + f.mips_regs.uregs[26] = MIPSREG(26); \ + f.mips_regs.uregs[27] = MIPSREG(27); \ + f.mips_regs.uregs[28] = MIPSREG(28); \ + f.mips_regs.uregs[29] = MIPSREG(29); \ + f.mips_regs.uregs[30] = MIPSREG(30); \ + f.mips_regs.uregs[31] = MIPSREG(31); \ + __asm__ volatile ("mfhi %0" : "=r"(hi)); \ + __asm__ volatile ("mflo %0" : "=r"(lo)); \ + __asm__ volatile ("jal 1f; 1:nop" : "=r"(pc)); \ + f.mips_regs.hi = hi; \ + f.mips_regs.lo = lo; \ + f.mips_regs.cp0_epc = pc; \ + f.errno_ = errno; \ + f.tid = sys_gettid(); \ + } while (0) + #define SET_FRAME(f,r) \ + do { \ + errno = (f).errno_; \ + memcpy((r).uregs, (f).mips_regs.uregs, \ + 32*sizeof(unsigned long)); \ + (r).hi = (f).mips_regs.hi; \ + (r).lo = (f).mips_regs.lo; \ + (r).cp0_epc = (f).mips_regs.cp0_epc; \ + } while (0) +#else + /* If we do not have a hand-optimized assembly version of the FRAME() + * macro, we cannot reliably unroll the stack. So, we show a few additional + * stack frames for the coredumper. + */ + typedef struct Frame { + pid_t tid; + } Frame; + #define FRAME(f) Frame f; do { f.tid = sys_gettid(); } while (0) + #define SET_FRAME(f,r) do { } while (0) +#endif + + +/* Internal function for generating a core file. This API can change without + * notice and is only supposed to be used internally by the core dumper. + * + * This function works for both single- and multi-threaded core + * dumps. If called as + * + * FRAME(frame); + * InternalGetCoreDump(&frame, 0, NULL, ap); + * + * it creates a core file that only contains information about the + * calling thread. + * + * Optionally, the caller can provide information about other threads + * by passing their process ids in "thread_pids". The process id of + * the caller should not be included in this array. All of the threads + * must have been attached to with ptrace(), prior to calling this + * function. They will be detached when "InternalGetCoreDump()" returns. + * + * This function either returns a file handle that can be read for obtaining + * a core dump, or "-1" in case of an error. In the latter case, "errno" + * will be set appropriately. + * + * While "InternalGetCoreDump()" is not technically async signal safe, you + * might be tempted to invoke it from a signal handler. The code goes to + * great lengths to make a best effort that this will actually work. But in + * any case, you must make sure that you preserve the value of "errno" + * yourself. It is guaranteed to be clobbered otherwise. + * + * Also, "InternalGetCoreDump" is not strictly speaking re-entrant. Again, + * it makes a best effort to behave reasonably when called in a multi- + * threaded environment, but it is ultimately the caller's responsibility + * to provide locking. + */ +int InternalGetCoreDump(void *frame, int num_threads, pid_t *thread_pids, + va_list ap + /* const struct CoreDumpParameters *params, + const char *file_name, + const char *PATH + */); + +#endif + +#ifdef __cplusplus +} +#endif +#endif /* _ELFCORE_H */ diff --git a/src/thirdparty/gperftools-2.0/src/base/googleinit.h b/src/thirdparty/gperftools-2.0/src/base/googleinit.h new file mode 100644 index 000000000..dbf610cb0 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/googleinit.h @@ -0,0 +1,73 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Jacob Hoffman-Andrews + +#ifndef _GOOGLEINIT_H +#define _GOOGLEINIT_H + +#include "base/logging.h" + +class GoogleInitializer { + public: + typedef void (*VoidFunction)(void); + GoogleInitializer(const char* name, VoidFunction ctor, VoidFunction dtor) + : name_(name), destructor_(dtor) { + RAW_VLOG(10, " constructing: %s\n", name_); + if (ctor) + ctor(); + } + ~GoogleInitializer() { + RAW_VLOG(10, " destroying: %s\n", name_); + if (destructor_) + destructor_(); + } + + private: + const char* const name_; + const VoidFunction destructor_; +}; + +#define REGISTER_MODULE_INITIALIZER(name, body) \ + namespace { \ + static void google_init_module_##name () { body; } \ + GoogleInitializer google_initializer_module_##name(#name, \ + google_init_module_##name, NULL); \ + } + +#define REGISTER_MODULE_DESTRUCTOR(name, body) \ + namespace { \ + static void google_destruct_module_##name () { body; } \ + GoogleInitializer google_destructor_module_##name(#name, \ + NULL, google_destruct_module_##name); \ + } + + +#endif /* _GOOGLEINIT_H */ diff --git a/src/thirdparty/gperftools-2.0/src/base/linux_syscall_support.h b/src/thirdparty/gperftools-2.0/src/base/linux_syscall_support.h new file mode 100644 index 000000000..99dac9e61 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/linux_syscall_support.h @@ -0,0 +1,2183 @@ +/* Copyright (c) 2005-2008, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Markus Gutschke + */ + +/* This file includes Linux-specific support functions common to the + * coredumper and the thread lister; primarily, this is a collection + * of direct system calls, and a couple of symbols missing from + * standard header files. + * There are a few options that the including file can set to control + * the behavior of this file: + * + * SYS_CPLUSPLUS: + * The entire header file will normally be wrapped in 'extern "C" { }", + * making it suitable for compilation as both C and C++ source. If you + * do not want to do this, you can set the SYS_CPLUSPLUS macro to inhibit + * the wrapping. N.B. doing so will suppress inclusion of all prerequisite + * system header files, too. It is the caller's responsibility to provide + * the necessary definitions. + * + * SYS_ERRNO: + * All system calls will update "errno" unless overriden by setting the + * SYS_ERRNO macro prior to including this file. SYS_ERRNO should be + * an l-value. + * + * SYS_INLINE: + * New symbols will be defined "static inline", unless overridden by + * the SYS_INLINE macro. + * + * SYS_LINUX_SYSCALL_SUPPORT_H + * This macro is used to avoid multiple inclusions of this header file. + * If you need to include this file more than once, make sure to + * unset SYS_LINUX_SYSCALL_SUPPORT_H before each inclusion. + * + * SYS_PREFIX: + * New system calls will have a prefix of "sys_" unless overridden by + * the SYS_PREFIX macro. Valid values for this macro are [0..9] which + * results in prefixes "sys[0..9]_". It is also possible to set this + * macro to -1, which avoids all prefixes. + * + * This file defines a few internal symbols that all start with "LSS_". + * Do not access these symbols from outside this file. They are not part + * of the supported API. + * + * NOTE: This is a stripped down version of the official opensource + * version of linux_syscall_support.h, which lives at + * http://code.google.com/p/linux-syscall-support/ + * It includes only the syscalls that are used in perftools, plus a + * few extra. Here's the breakdown: + * 1) Perftools uses these: grep -rho 'sys_[a-z0-9_A-Z]* *(' src | sort -u + * sys__exit( + * sys_clone( + * sys_close( + * sys_fcntl( + * sys_fstat( + * sys_futex( + * sys_futex1( + * sys_getcpu( + * sys_getdents( + * sys_getppid( + * sys_gettid( + * sys_lseek( + * sys_mmap( + * sys_mremap( + * sys_munmap( + * sys_open( + * sys_pipe( + * sys_prctl( + * sys_ptrace( + * sys_ptrace_detach( + * sys_read( + * sys_sched_yield( + * sys_sigaction( + * sys_sigaltstack( + * sys_sigdelset( + * sys_sigfillset( + * sys_sigprocmask( + * sys_socket( + * sys_stat( + * sys_waitpid( + * 2) These are used as subroutines of the above: + * sys_getpid -- gettid + * sys_kill -- ptrace_detach + * sys_restore -- sigaction + * sys_restore_rt -- sigaction + * sys_socketcall -- socket + * sys_wait4 -- waitpid + * 3) I left these in even though they're not used. They either + * complement the above (write vs read) or are variants (rt_sigaction): + * sys_fstat64 + * sys_getdents64 + * sys_llseek + * sys_mmap2 + * sys_openat + * sys_rt_sigaction + * sys_rt_sigprocmask + * sys_sigaddset + * sys_sigemptyset + * sys_stat64 + * sys_write + */ +#ifndef SYS_LINUX_SYSCALL_SUPPORT_H +#define SYS_LINUX_SYSCALL_SUPPORT_H + +/* We currently only support x86-32, x86-64, ARM, MIPS, and PPC on Linux. + * Porting to other related platforms should not be difficult. + */ +#if (defined(__i386__) || defined(__x86_64__) || defined(__arm__) || \ + defined(__mips__) || defined(__PPC__)) && defined(__linux) + +#ifndef SYS_CPLUSPLUS +#ifdef __cplusplus +/* Some system header files in older versions of gcc neglect to properly + * handle being included from C++. As it appears to be harmless to have + * multiple nested 'extern "C"' blocks, just add another one here. + */ +extern "C" { +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __mips__ +/* Include definitions of the ABI currently in use. */ +#include +#endif + +#endif + +/* As glibc often provides subtly incompatible data structures (and implicit + * wrapper functions that convert them), we provide our own kernel data + * structures for use by the system calls. + * These structures have been developed by using Linux 2.6.23 headers for + * reference. Note though, we do not care about exact API compatibility + * with the kernel, and in fact the kernel often does not have a single + * API that works across architectures. Instead, we try to mimic the glibc + * API where reasonable, and only guarantee ABI compatibility with the + * kernel headers. + * Most notably, here are a few changes that were made to the structures + * defined by kernel headers: + * + * - we only define structures, but not symbolic names for kernel data + * types. For the latter, we directly use the native C datatype + * (i.e. "unsigned" instead of "mode_t"). + * - in a few cases, it is possible to define identical structures for + * both 32bit (e.g. i386) and 64bit (e.g. x86-64) platforms by + * standardizing on the 64bit version of the data types. In particular, + * this means that we use "unsigned" where the 32bit headers say + * "unsigned long". + * - overall, we try to minimize the number of cases where we need to + * conditionally define different structures. + * - the "struct kernel_sigaction" class of structures have been + * modified to more closely mimic glibc's API by introducing an + * anonymous union for the function pointer. + * - a small number of field names had to have an underscore appended to + * them, because glibc defines a global macro by the same name. + */ + +/* include/linux/dirent.h */ +struct kernel_dirent64 { + unsigned long long d_ino; + long long d_off; + unsigned short d_reclen; + unsigned char d_type; + char d_name[256]; +}; + +/* include/linux/dirent.h */ +struct kernel_dirent { + long d_ino; + long d_off; + unsigned short d_reclen; + char d_name[256]; +}; + +/* include/linux/time.h */ +struct kernel_timespec { + long tv_sec; + long tv_nsec; +}; + +/* include/linux/time.h */ +struct kernel_timeval { + long tv_sec; + long tv_usec; +}; + +/* include/linux/resource.h */ +struct kernel_rusage { + struct kernel_timeval ru_utime; + struct kernel_timeval ru_stime; + long ru_maxrss; + long ru_ixrss; + long ru_idrss; + long ru_isrss; + long ru_minflt; + long ru_majflt; + long ru_nswap; + long ru_inblock; + long ru_oublock; + long ru_msgsnd; + long ru_msgrcv; + long ru_nsignals; + long ru_nvcsw; + long ru_nivcsw; +}; + +struct siginfo; +#if defined(__i386__) || defined(__arm__) || defined(__PPC__) + +/* include/asm-{arm,i386,mips,ppc}/signal.h */ +struct kernel_old_sigaction { + union { + void (*sa_handler_)(int); + void (*sa_sigaction_)(int, struct siginfo *, void *); + }; + unsigned long sa_mask; + unsigned long sa_flags; + void (*sa_restorer)(void); +} __attribute__((packed,aligned(4))); +#elif (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) + #define kernel_old_sigaction kernel_sigaction +#endif + +/* Some kernel functions (e.g. sigaction() in 2.6.23) require that the + * exactly match the size of the signal set, even though the API was + * intended to be extensible. We define our own KERNEL_NSIG to deal with + * this. + * Please note that glibc provides signals [1.._NSIG-1], whereas the + * kernel (and this header) provides the range [1..KERNEL_NSIG]. The + * actual number of signals is obviously the same, but the constants + * differ by one. + */ +#ifdef __mips__ +#define KERNEL_NSIG 128 +#else +#define KERNEL_NSIG 64 +#endif + +/* include/asm-{arm,i386,mips,x86_64}/signal.h */ +struct kernel_sigset_t { + unsigned long sig[(KERNEL_NSIG + 8*sizeof(unsigned long) - 1)/ + (8*sizeof(unsigned long))]; +}; + +/* include/asm-{arm,i386,mips,x86_64,ppc}/signal.h */ +struct kernel_sigaction { +#ifdef __mips__ + unsigned long sa_flags; + union { + void (*sa_handler_)(int); + void (*sa_sigaction_)(int, struct siginfo *, void *); + }; + struct kernel_sigset_t sa_mask; +#else + union { + void (*sa_handler_)(int); + void (*sa_sigaction_)(int, struct siginfo *, void *); + }; + unsigned long sa_flags; + void (*sa_restorer)(void); + struct kernel_sigset_t sa_mask; +#endif +}; + +/* include/asm-{arm,i386,mips,ppc}/stat.h */ +#ifdef __mips__ +#if _MIPS_SIM == _MIPS_SIM_ABI64 +struct kernel_stat { +#else +struct kernel_stat64 { +#endif + unsigned st_dev; + unsigned __pad0[3]; + unsigned long long st_ino; + unsigned st_mode; + unsigned st_nlink; + unsigned st_uid; + unsigned st_gid; + unsigned st_rdev; + unsigned __pad1[3]; + long long st_size; + unsigned st_atime_; + unsigned st_atime_nsec_; + unsigned st_mtime_; + unsigned st_mtime_nsec_; + unsigned st_ctime_; + unsigned st_ctime_nsec_; + unsigned st_blksize; + unsigned __pad2; + unsigned long long st_blocks; +}; +#elif defined __PPC__ +struct kernel_stat64 { + unsigned long long st_dev; + unsigned long long st_ino; + unsigned st_mode; + unsigned st_nlink; + unsigned st_uid; + unsigned st_gid; + unsigned long long st_rdev; + unsigned short int __pad2; + long long st_size; + long st_blksize; + long long st_blocks; + long st_atime_; + unsigned long st_atime_nsec_; + long st_mtime_; + unsigned long st_mtime_nsec_; + long st_ctime_; + unsigned long st_ctime_nsec_; + unsigned long __unused4; + unsigned long __unused5; +}; +#else +struct kernel_stat64 { + unsigned long long st_dev; + unsigned char __pad0[4]; + unsigned __st_ino; + unsigned st_mode; + unsigned st_nlink; + unsigned st_uid; + unsigned st_gid; + unsigned long long st_rdev; + unsigned char __pad3[4]; + long long st_size; + unsigned st_blksize; + unsigned long long st_blocks; + unsigned st_atime_; + unsigned st_atime_nsec_; + unsigned st_mtime_; + unsigned st_mtime_nsec_; + unsigned st_ctime_; + unsigned st_ctime_nsec_; + unsigned long long st_ino; +}; +#endif + +/* include/asm-{arm,i386,mips,x86_64,ppc}/stat.h */ +#if defined(__i386__) || defined(__arm__) +struct kernel_stat { + /* The kernel headers suggest that st_dev and st_rdev should be 32bit + * quantities encoding 12bit major and 20bit minor numbers in an interleaved + * format. In reality, we do not see useful data in the top bits. So, + * we'll leave the padding in here, until we find a better solution. + */ + unsigned short st_dev; + short pad1; + unsigned st_ino; + unsigned short st_mode; + unsigned short st_nlink; + unsigned short st_uid; + unsigned short st_gid; + unsigned short st_rdev; + short pad2; + unsigned st_size; + unsigned st_blksize; + unsigned st_blocks; + unsigned st_atime_; + unsigned st_atime_nsec_; + unsigned st_mtime_; + unsigned st_mtime_nsec_; + unsigned st_ctime_; + unsigned st_ctime_nsec_; + unsigned __unused4; + unsigned __unused5; +}; +#elif defined(__x86_64__) +struct kernel_stat { + unsigned long st_dev; + unsigned long st_ino; + unsigned long st_nlink; + unsigned st_mode; + unsigned st_uid; + unsigned st_gid; + unsigned __pad0; + unsigned long st_rdev; + long st_size; + long st_blksize; + long st_blocks; + unsigned long st_atime_; + unsigned long st_atime_nsec_; + unsigned long st_mtime_; + unsigned long st_mtime_nsec_; + unsigned long st_ctime_; + unsigned long st_ctime_nsec_; + long __unused[3]; +}; +#elif defined(__PPC__) +struct kernel_stat { + unsigned st_dev; + unsigned long st_ino; // ino_t + unsigned long st_mode; // mode_t + unsigned short st_nlink; // nlink_t + unsigned st_uid; // uid_t + unsigned st_gid; // gid_t + unsigned st_rdev; + long st_size; // off_t + unsigned long st_blksize; + unsigned long st_blocks; + unsigned long st_atime_; + unsigned long st_atime_nsec_; + unsigned long st_mtime_; + unsigned long st_mtime_nsec_; + unsigned long st_ctime_; + unsigned long st_ctime_nsec_; + unsigned long __unused4; + unsigned long __unused5; +}; +#elif (defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI64) +struct kernel_stat { + unsigned st_dev; + int st_pad1[3]; + unsigned st_ino; + unsigned st_mode; + unsigned st_nlink; + unsigned st_uid; + unsigned st_gid; + unsigned st_rdev; + int st_pad2[2]; + long st_size; + int st_pad3; + long st_atime_; + long st_atime_nsec_; + long st_mtime_; + long st_mtime_nsec_; + long st_ctime_; + long st_ctime_nsec_; + int st_blksize; + int st_blocks; + int st_pad4[14]; +}; +#endif + + +/* Definitions missing from the standard header files */ +#ifndef O_DIRECTORY +#if defined(__arm__) +#define O_DIRECTORY 0040000 +#else +#define O_DIRECTORY 0200000 +#endif +#endif +#ifndef PR_GET_DUMPABLE +#define PR_GET_DUMPABLE 3 +#endif +#ifndef PR_SET_DUMPABLE +#define PR_SET_DUMPABLE 4 +#endif +#ifndef AT_FDCWD +#define AT_FDCWD (-100) +#endif +#ifndef AT_SYMLINK_NOFOLLOW +#define AT_SYMLINK_NOFOLLOW 0x100 +#endif +#ifndef AT_REMOVEDIR +#define AT_REMOVEDIR 0x200 +#endif +#ifndef MREMAP_FIXED +#define MREMAP_FIXED 2 +#endif +#ifndef SA_RESTORER +#define SA_RESTORER 0x04000000 +#endif + +#if defined(__i386__) +#ifndef __NR_rt_sigaction +#define __NR_rt_sigaction 174 +#define __NR_rt_sigprocmask 175 +#endif +#ifndef __NR_stat64 +#define __NR_stat64 195 +#endif +#ifndef __NR_fstat64 +#define __NR_fstat64 197 +#endif +#ifndef __NR_getdents64 +#define __NR_getdents64 220 +#endif +#ifndef __NR_gettid +#define __NR_gettid 224 +#endif +#ifndef __NR_futex +#define __NR_futex 240 +#endif +#ifndef __NR_openat +#define __NR_openat 295 +#endif +#ifndef __NR_getcpu +#define __NR_getcpu 318 +#endif +/* End of i386 definitions */ +#elif defined(__arm__) +#ifndef __syscall +#if defined(__thumb__) || defined(__ARM_EABI__) +#define __SYS_REG(name) register long __sysreg __asm__("r6") = __NR_##name; +#define __SYS_REG_LIST(regs...) [sysreg] "r" (__sysreg) , ##regs +#define __syscall(name) "swi\t0" +#define __syscall_safe(name) \ + "push {r7}\n" \ + "mov r7,%[sysreg]\n" \ + __syscall(name)"\n" \ + "pop {r7}" +#else +#define __SYS_REG(name) +#define __SYS_REG_LIST(regs...) regs +#define __syscall(name) "swi\t" __sys1(__NR_##name) "" +#define __syscall_safe(name) __syscall(name) +#endif +#endif +#ifndef __NR_rt_sigaction +#define __NR_rt_sigaction (__NR_SYSCALL_BASE + 174) +#define __NR_rt_sigprocmask (__NR_SYSCALL_BASE + 175) +#endif +#ifndef __NR_stat64 +#define __NR_stat64 (__NR_SYSCALL_BASE + 195) +#endif +#ifndef __NR_fstat64 +#define __NR_fstat64 (__NR_SYSCALL_BASE + 197) +#endif +#ifndef __NR_getdents64 +#define __NR_getdents64 (__NR_SYSCALL_BASE + 217) +#endif +#ifndef __NR_gettid +#define __NR_gettid (__NR_SYSCALL_BASE + 224) +#endif +#ifndef __NR_futex +#define __NR_futex (__NR_SYSCALL_BASE + 240) +#endif +/* End of ARM definitions */ +#elif defined(__x86_64__) +#ifndef __NR_gettid +#define __NR_gettid 186 +#endif +#ifndef __NR_futex +#define __NR_futex 202 +#endif +#ifndef __NR_getdents64 +#define __NR_getdents64 217 +#endif +#ifndef __NR_openat +#define __NR_openat 257 +#endif +/* End of x86-64 definitions */ +#elif defined(__mips__) +#if _MIPS_SIM == _MIPS_SIM_ABI32 +#ifndef __NR_rt_sigaction +#define __NR_rt_sigaction (__NR_Linux + 194) +#define __NR_rt_sigprocmask (__NR_Linux + 195) +#endif +#ifndef __NR_stat64 +#define __NR_stat64 (__NR_Linux + 213) +#endif +#ifndef __NR_fstat64 +#define __NR_fstat64 (__NR_Linux + 215) +#endif +#ifndef __NR_getdents64 +#define __NR_getdents64 (__NR_Linux + 219) +#endif +#ifndef __NR_gettid +#define __NR_gettid (__NR_Linux + 222) +#endif +#ifndef __NR_futex +#define __NR_futex (__NR_Linux + 238) +#endif +#ifndef __NR_openat +#define __NR_openat (__NR_Linux + 288) +#endif +#ifndef __NR_fstatat +#define __NR_fstatat (__NR_Linux + 293) +#endif +#ifndef __NR_getcpu +#define __NR_getcpu (__NR_Linux + 312) +#endif +/* End of MIPS (old 32bit API) definitions */ +#elif _MIPS_SIM == _MIPS_SIM_ABI64 +#ifndef __NR_gettid +#define __NR_gettid (__NR_Linux + 178) +#endif +#ifndef __NR_futex +#define __NR_futex (__NR_Linux + 194) +#endif +#ifndef __NR_openat +#define __NR_openat (__NR_Linux + 247) +#endif +#ifndef __NR_fstatat +#define __NR_fstatat (__NR_Linux + 252) +#endif +#ifndef __NR_getcpu +#define __NR_getcpu (__NR_Linux + 271) +#endif +/* End of MIPS (64bit API) definitions */ +#else +#ifndef __NR_gettid +#define __NR_gettid (__NR_Linux + 178) +#endif +#ifndef __NR_futex +#define __NR_futex (__NR_Linux + 194) +#endif +#ifndef __NR_openat +#define __NR_openat (__NR_Linux + 251) +#endif +#ifndef __NR_fstatat +#define __NR_fstatat (__NR_Linux + 256) +#endif +#ifndef __NR_getcpu +#define __NR_getcpu (__NR_Linux + 275) +#endif +/* End of MIPS (new 32bit API) definitions */ +#endif +/* End of MIPS definitions */ +#elif defined(__PPC__) +#ifndef __NR_rt_sigaction +#define __NR_rt_sigaction 173 +#define __NR_rt_sigprocmask 174 +#endif +#ifndef __NR_stat64 +#define __NR_stat64 195 +#endif +#ifndef __NR_fstat64 +#define __NR_fstat64 197 +#endif +#ifndef __NR_getdents64 +#define __NR_getdents64 202 +#endif +#ifndef __NR_gettid +#define __NR_gettid 207 +#endif +#ifndef __NR_futex +#define __NR_futex 221 +#endif +#ifndef __NR_openat +#define __NR_openat 286 +#endif +#ifndef __NR_getcpu +#define __NR_getcpu 302 +#endif +/* End of powerpc defininitions */ +#endif + + +/* After forking, we must make sure to only call system calls. */ +#if __BOUNDED_POINTERS__ + #error "Need to port invocations of syscalls for bounded ptrs" +#else + /* The core dumper and the thread lister get executed after threads + * have been suspended. As a consequence, we cannot call any functions + * that acquire locks. Unfortunately, libc wraps most system calls + * (e.g. in order to implement pthread_atfork, and to make calls + * cancellable), which means we cannot call these functions. Instead, + * we have to call syscall() directly. + */ + #undef LSS_ERRNO + #ifdef SYS_ERRNO + /* Allow the including file to override the location of errno. This can + * be useful when using clone() with the CLONE_VM option. + */ + #define LSS_ERRNO SYS_ERRNO + #else + #define LSS_ERRNO errno + #endif + + #undef LSS_INLINE + #ifdef SYS_INLINE + #define LSS_INLINE SYS_INLINE + #else + #define LSS_INLINE static inline + #endif + + /* Allow the including file to override the prefix used for all new + * system calls. By default, it will be set to "sys_". + */ + #undef LSS_NAME + #ifndef SYS_PREFIX + #define LSS_NAME(name) sys_##name + #elif SYS_PREFIX < 0 + #define LSS_NAME(name) name + #elif SYS_PREFIX == 0 + #define LSS_NAME(name) sys0_##name + #elif SYS_PREFIX == 1 + #define LSS_NAME(name) sys1_##name + #elif SYS_PREFIX == 2 + #define LSS_NAME(name) sys2_##name + #elif SYS_PREFIX == 3 + #define LSS_NAME(name) sys3_##name + #elif SYS_PREFIX == 4 + #define LSS_NAME(name) sys4_##name + #elif SYS_PREFIX == 5 + #define LSS_NAME(name) sys5_##name + #elif SYS_PREFIX == 6 + #define LSS_NAME(name) sys6_##name + #elif SYS_PREFIX == 7 + #define LSS_NAME(name) sys7_##name + #elif SYS_PREFIX == 8 + #define LSS_NAME(name) sys8_##name + #elif SYS_PREFIX == 9 + #define LSS_NAME(name) sys9_##name + #endif + + #undef LSS_RETURN + #if (defined(__i386__) || defined(__x86_64__) || defined(__arm__)) + /* Failing system calls return a negative result in the range of + * -1..-4095. These are "errno" values with the sign inverted. + */ + #define LSS_RETURN(type, res) \ + do { \ + if ((unsigned long)(res) >= (unsigned long)(-4095)) { \ + LSS_ERRNO = -(res); \ + res = -1; \ + } \ + return (type) (res); \ + } while (0) + #elif defined(__mips__) + /* On MIPS, failing system calls return -1, and set errno in a + * separate CPU register. + */ + #define LSS_RETURN(type, res, err) \ + do { \ + if (err) { \ + LSS_ERRNO = (res); \ + res = -1; \ + } \ + return (type) (res); \ + } while (0) + #elif defined(__PPC__) + /* On PPC, failing system calls return -1, and set errno in a + * separate CPU register. See linux/unistd.h. + */ + #define LSS_RETURN(type, res, err) \ + do { \ + if (err & 0x10000000 ) { \ + LSS_ERRNO = (res); \ + res = -1; \ + } \ + return (type) (res); \ + } while (0) + #endif + #if defined(__i386__) + #if defined(NO_FRAME_POINTER) && (100 * __GNUC__ + __GNUC_MINOR__ >= 404) + /* This only works for GCC-4.4 and above -- the first version to use + .cfi directives for dwarf unwind info. */ + #define CFI_ADJUST_CFA_OFFSET(adjust) \ + ".cfi_adjust_cfa_offset " #adjust "\n" + #else + #define CFI_ADJUST_CFA_OFFSET(adjust) /**/ + #endif + + /* In PIC mode (e.g. when building shared libraries), gcc for i386 + * reserves ebx. Unfortunately, most distribution ship with implementations + * of _syscallX() which clobber ebx. + * Also, most definitions of _syscallX() neglect to mark "memory" as being + * clobbered. This causes problems with compilers, that do a better job + * at optimizing across __asm__ calls. + * So, we just have to redefine all of the _syscallX() macros. + */ + #undef LSS_BODY + #define LSS_BODY(type,args...) \ + long __res; \ + __asm__ __volatile__("push %%ebx\n" \ + CFI_ADJUST_CFA_OFFSET(4) \ + "movl %2,%%ebx\n" \ + "int $0x80\n" \ + "pop %%ebx\n" \ + CFI_ADJUST_CFA_OFFSET(-4) \ + args \ + : "esp", "memory"); \ + LSS_RETURN(type,__res) + #undef _syscall0 + #define _syscall0(type,name) \ + type LSS_NAME(name)(void) { \ + long __res; \ + __asm__ volatile("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name) \ + : "memory"); \ + LSS_RETURN(type,__res); \ + } + #undef _syscall1 + #define _syscall1(type,name,type1,arg1) \ + type LSS_NAME(name)(type1 arg1) { \ + LSS_BODY(type, \ + : "=a" (__res) \ + : "0" (__NR_##name), "ri" ((long)(arg1))); \ + } + #undef _syscall2 + #define _syscall2(type,name,type1,arg1,type2,arg2) \ + type LSS_NAME(name)(type1 arg1,type2 arg2) { \ + LSS_BODY(type, \ + : "=a" (__res) \ + : "0" (__NR_##name),"ri" ((long)(arg1)), "c" ((long)(arg2))); \ + } + #undef _syscall3 + #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ + type LSS_NAME(name)(type1 arg1,type2 arg2,type3 arg3) { \ + LSS_BODY(type, \ + : "=a" (__res) \ + : "0" (__NR_##name), "ri" ((long)(arg1)), "c" ((long)(arg2)), \ + "d" ((long)(arg3))); \ + } + #undef _syscall4 + #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ + LSS_BODY(type, \ + : "=a" (__res) \ + : "0" (__NR_##name), "ri" ((long)(arg1)), "c" ((long)(arg2)), \ + "d" ((long)(arg3)),"S" ((long)(arg4))); \ + } + #undef _syscall5 + #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ + type5,arg5) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5) { \ + long __res; \ + __asm__ __volatile__("push %%ebx\n" \ + "movl %2,%%ebx\n" \ + "movl %1,%%eax\n" \ + "int $0x80\n" \ + "pop %%ebx" \ + : "=a" (__res) \ + : "i" (__NR_##name), "ri" ((long)(arg1)), \ + "c" ((long)(arg2)), "d" ((long)(arg3)), \ + "S" ((long)(arg4)), "D" ((long)(arg5)) \ + : "esp", "memory"); \ + LSS_RETURN(type,__res); \ + } + #undef _syscall6 + #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ + type5,arg5,type6,arg6) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5, type6 arg6) { \ + long __res; \ + struct { long __a1; long __a6; } __s = { (long)arg1, (long) arg6 }; \ + __asm__ __volatile__("push %%ebp\n" \ + "push %%ebx\n" \ + "movl 4(%2),%%ebp\n" \ + "movl 0(%2), %%ebx\n" \ + "movl %1,%%eax\n" \ + "int $0x80\n" \ + "pop %%ebx\n" \ + "pop %%ebp" \ + : "=a" (__res) \ + : "i" (__NR_##name), "0" ((long)(&__s)), \ + "c" ((long)(arg2)), "d" ((long)(arg3)), \ + "S" ((long)(arg4)), "D" ((long)(arg5)) \ + : "esp", "memory"); \ + LSS_RETURN(type,__res); \ + } + LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack, + int flags, void *arg, int *parent_tidptr, + void *newtls, int *child_tidptr) { + long __res; + __asm__ __volatile__(/* if (fn == NULL) + * return -EINVAL; + */ + "movl %3,%%ecx\n" + "jecxz 1f\n" + + /* if (child_stack == NULL) + * return -EINVAL; + */ + "movl %4,%%ecx\n" + "jecxz 1f\n" + + /* Set up alignment of the child stack: + * child_stack = (child_stack & ~0xF) - 20; + */ + "andl $-16,%%ecx\n" + "subl $20,%%ecx\n" + + /* Push "arg" and "fn" onto the stack that will be + * used by the child. + */ + "movl %6,%%eax\n" + "movl %%eax,4(%%ecx)\n" + "movl %3,%%eax\n" + "movl %%eax,(%%ecx)\n" + + /* %eax = syscall(%eax = __NR_clone, + * %ebx = flags, + * %ecx = child_stack, + * %edx = parent_tidptr, + * %esi = newtls, + * %edi = child_tidptr) + * Also, make sure that %ebx gets preserved as it is + * used in PIC mode. + */ + "movl %8,%%esi\n" + "movl %7,%%edx\n" + "movl %5,%%eax\n" + "movl %9,%%edi\n" + "pushl %%ebx\n" + "movl %%eax,%%ebx\n" + "movl %2,%%eax\n" + "int $0x80\n" + + /* In the parent: restore %ebx + * In the child: move "fn" into %ebx + */ + "popl %%ebx\n" + + /* if (%eax != 0) + * return %eax; + */ + "test %%eax,%%eax\n" + "jnz 1f\n" + + /* In the child, now. Terminate frame pointer chain. + */ + "movl $0,%%ebp\n" + + /* Call "fn". "arg" is already on the stack. + */ + "call *%%ebx\n" + + /* Call _exit(%ebx). Unfortunately older versions + * of gcc restrict the number of arguments that can + * be passed to asm(). So, we need to hard-code the + * system call number. + */ + "movl %%eax,%%ebx\n" + "movl $1,%%eax\n" + "int $0x80\n" + + /* Return to parent. + */ + "1:\n" + : "=a" (__res) + : "0"(-EINVAL), "i"(__NR_clone), + "m"(fn), "m"(child_stack), "m"(flags), "m"(arg), + "m"(parent_tidptr), "m"(newtls), "m"(child_tidptr) + : "esp", "memory", "ecx", "edx", "esi", "edi"); + LSS_RETURN(int, __res); + } + + LSS_INLINE void (*LSS_NAME(restore_rt)(void))(void) { + /* On i386, the kernel does not know how to return from a signal + * handler. Instead, it relies on user space to provide a + * restorer function that calls the {rt_,}sigreturn() system call. + * Unfortunately, we cannot just reference the glibc version of this + * function, as glibc goes out of its way to make it inaccessible. + */ + void (*res)(void); + __asm__ __volatile__("call 2f\n" + "0:.align 16\n" + "1:movl %1,%%eax\n" + "int $0x80\n" + "2:popl %0\n" + "addl $(1b-0b),%0\n" + : "=a" (res) + : "i" (__NR_rt_sigreturn)); + return res; + } + LSS_INLINE void (*LSS_NAME(restore)(void))(void) { + /* On i386, the kernel does not know how to return from a signal + * handler. Instead, it relies on user space to provide a + * restorer function that calls the {rt_,}sigreturn() system call. + * Unfortunately, we cannot just reference the glibc version of this + * function, as glibc goes out of its way to make it inaccessible. + */ + void (*res)(void); + __asm__ __volatile__("call 2f\n" + "0:.align 16\n" + "1:pop %%eax\n" + "movl %1,%%eax\n" + "int $0x80\n" + "2:popl %0\n" + "addl $(1b-0b),%0\n" + : "=a" (res) + : "i" (__NR_sigreturn)); + return res; + } + #elif defined(__x86_64__) + /* There are no known problems with any of the _syscallX() macros + * currently shipping for x86_64, but we still need to be able to define + * our own version so that we can override the location of the errno + * location (e.g. when using the clone() system call with the CLONE_VM + * option). + */ + #undef LSS_BODY + #define LSS_BODY(type,name, ...) \ + long __res; \ + __asm__ __volatile__("syscall" : "=a" (__res) : "0" (__NR_##name), \ + ##__VA_ARGS__ : "r11", "rcx", "memory"); \ + LSS_RETURN(type, __res) + #undef _syscall0 + #define _syscall0(type,name) \ + type LSS_NAME(name)() { \ + LSS_BODY(type, name); \ + } + #undef _syscall1 + #define _syscall1(type,name,type1,arg1) \ + type LSS_NAME(name)(type1 arg1) { \ + LSS_BODY(type, name, "D" ((long)(arg1))); \ + } + #undef _syscall2 + #define _syscall2(type,name,type1,arg1,type2,arg2) \ + type LSS_NAME(name)(type1 arg1, type2 arg2) { \ + LSS_BODY(type, name, "D" ((long)(arg1)), "S" ((long)(arg2))); \ + } + #undef _syscall3 + #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) { \ + LSS_BODY(type, name, "D" ((long)(arg1)), "S" ((long)(arg2)), \ + "d" ((long)(arg3))); \ + } + #undef _syscall4 + #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ + long __res; \ + __asm__ __volatile__("movq %5,%%r10; syscall" : \ + "=a" (__res) : "0" (__NR_##name), \ + "D" ((long)(arg1)), "S" ((long)(arg2)), "d" ((long)(arg3)), \ + "r" ((long)(arg4)) : "r10", "r11", "rcx", "memory"); \ + LSS_RETURN(type, __res); \ + } + #undef _syscall5 + #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ + type5,arg5) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5) { \ + long __res; \ + __asm__ __volatile__("movq %5,%%r10; movq %6,%%r8; syscall" : \ + "=a" (__res) : "0" (__NR_##name), \ + "D" ((long)(arg1)), "S" ((long)(arg2)), "d" ((long)(arg3)), \ + "r" ((long)(arg4)), "r" ((long)(arg5)) : \ + "r8", "r10", "r11", "rcx", "memory"); \ + LSS_RETURN(type, __res); \ + } + #undef _syscall6 + #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ + type5,arg5,type6,arg6) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5, type6 arg6) { \ + long __res; \ + __asm__ __volatile__("movq %5,%%r10; movq %6,%%r8; movq %7,%%r9;" \ + "syscall" : \ + "=a" (__res) : "0" (__NR_##name), \ + "D" ((long)(arg1)), "S" ((long)(arg2)), "d" ((long)(arg3)), \ + "r" ((long)(arg4)), "r" ((long)(arg5)), "r" ((long)(arg6)) : \ + "r8", "r9", "r10", "r11", "rcx", "memory"); \ + LSS_RETURN(type, __res); \ + } + LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack, + int flags, void *arg, int *parent_tidptr, + void *newtls, int *child_tidptr) { + long __res; + { + __asm__ __volatile__(/* if (fn == NULL) + * return -EINVAL; + */ + "testq %4,%4\n" + "jz 1f\n" + + /* if (child_stack == NULL) + * return -EINVAL; + */ + "testq %5,%5\n" + "jz 1f\n" + + /* Set up alignment of the child stack: + * child_stack = (child_stack & ~0xF) - 16; + */ + "andq $-16,%5\n" + "subq $16,%5\n" + + /* Push "arg" and "fn" onto the stack that will be + * used by the child. + */ + "movq %7,8(%5)\n" + "movq %4,0(%5)\n" + + /* %rax = syscall(%rax = __NR_clone, + * %rdi = flags, + * %rsi = child_stack, + * %rdx = parent_tidptr, + * %r8 = new_tls, + * %r10 = child_tidptr) + */ + "movq %2,%%rax\n" + "movq %9,%%r8\n" + "movq %10,%%r10\n" + "syscall\n" + + /* if (%rax != 0) + * return; + */ + "testq %%rax,%%rax\n" + "jnz 1f\n" + + /* In the child. Terminate frame pointer chain. + */ + "xorq %%rbp,%%rbp\n" + + /* Call "fn(arg)". + */ + "popq %%rax\n" + "popq %%rdi\n" + "call *%%rax\n" + + /* Call _exit(%ebx). + */ + "movq %%rax,%%rdi\n" + "movq %3,%%rax\n" + "syscall\n" + + /* Return to parent. + */ + "1:\n" + : "=a" (__res) + : "0"(-EINVAL), "i"(__NR_clone), "i"(__NR_exit), + "r"(fn), "S"(child_stack), "D"(flags), "r"(arg), + "d"(parent_tidptr), "g"(newtls), "g"(child_tidptr) + : "rsp", "memory", "r8", "r10", "r11", "rcx"); + } + LSS_RETURN(int, __res); + } + + LSS_INLINE void (*LSS_NAME(restore_rt)(void))(void) { + /* On x86-64, the kernel does not know how to return from + * a signal handler. Instead, it relies on user space to provide a + * restorer function that calls the rt_sigreturn() system call. + * Unfortunately, we cannot just reference the glibc version of this + * function, as glibc goes out of its way to make it inaccessible. + */ + void (*res)(void); + __asm__ __volatile__("call 2f\n" + "0:.align 16\n" + "1:movq %1,%%rax\n" + "syscall\n" + "2:popq %0\n" + "addq $(1b-0b),%0\n" + : "=a" (res) + : "i" (__NR_rt_sigreturn)); + return res; + } + #elif defined(__arm__) + /* Most definitions of _syscallX() neglect to mark "memory" as being + * clobbered. This causes problems with compilers, that do a better job + * at optimizing across __asm__ calls. + * So, we just have to redefine all fo the _syscallX() macros. + */ + #undef LSS_REG + #define LSS_REG(r,a) register long __r##r __asm__("r"#r) = (long)a + + /* r0..r3 are scratch registers and not preserved across function + * calls. We need to first evaluate the first 4 syscall arguments + * and store them on stack. They must be loaded into r0..r3 after + * all function calls to avoid r0..r3 being clobbered. + */ + #undef LSS_SAVE_ARG + #define LSS_SAVE_ARG(r,a) long __tmp##r = (long)a + #undef LSS_LOAD_ARG + #define LSS_LOAD_ARG(r) register long __r##r __asm__("r"#r) = __tmp##r + + #undef LSS_BODY + #define LSS_BODY(type, name, args...) \ + register long __res_r0 __asm__("r0"); \ + long __res; \ + __SYS_REG(name) \ + __asm__ __volatile__ (__syscall_safe(name) \ + : "=r"(__res_r0) \ + : __SYS_REG_LIST(args) \ + : "lr", "memory"); \ + __res = __res_r0; \ + LSS_RETURN(type, __res) + #undef _syscall0 + #define _syscall0(type, name) \ + type LSS_NAME(name)() { \ + LSS_BODY(type, name); \ + } + #undef _syscall1 + #define _syscall1(type, name, type1, arg1) \ + type LSS_NAME(name)(type1 arg1) { \ + /* There is no need for using a volatile temp. */ \ + LSS_REG(0, arg1); \ + LSS_BODY(type, name, "r"(__r0)); \ + } + #undef _syscall2 + #define _syscall2(type, name, type1, arg1, type2, arg2) \ + type LSS_NAME(name)(type1 arg1, type2 arg2) { \ + LSS_SAVE_ARG(0, arg1); \ + LSS_SAVE_ARG(1, arg2); \ + LSS_LOAD_ARG(0); \ + LSS_LOAD_ARG(1); \ + LSS_BODY(type, name, "r"(__r0), "r"(__r1)); \ + } + #undef _syscall3 + #define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) { \ + LSS_SAVE_ARG(0, arg1); \ + LSS_SAVE_ARG(1, arg2); \ + LSS_SAVE_ARG(2, arg3); \ + LSS_LOAD_ARG(0); \ + LSS_LOAD_ARG(1); \ + LSS_LOAD_ARG(2); \ + LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2)); \ + } + #undef _syscall4 + #define _syscall4(type, name, type1, arg1, type2, arg2, type3, arg3, \ + type4, arg4) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ + LSS_SAVE_ARG(0, arg1); \ + LSS_SAVE_ARG(1, arg2); \ + LSS_SAVE_ARG(2, arg3); \ + LSS_SAVE_ARG(3, arg4); \ + LSS_LOAD_ARG(0); \ + LSS_LOAD_ARG(1); \ + LSS_LOAD_ARG(2); \ + LSS_LOAD_ARG(3); \ + LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3)); \ + } + #undef _syscall5 + #define _syscall5(type, name, type1, arg1, type2, arg2, type3, arg3, \ + type4, arg4, type5, arg5) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5) { \ + LSS_SAVE_ARG(0, arg1); \ + LSS_SAVE_ARG(1, arg2); \ + LSS_SAVE_ARG(2, arg3); \ + LSS_SAVE_ARG(3, arg4); \ + LSS_REG(4, arg5); \ + LSS_LOAD_ARG(0); \ + LSS_LOAD_ARG(1); \ + LSS_LOAD_ARG(2); \ + LSS_LOAD_ARG(3); \ + LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3), \ + "r"(__r4)); \ + } + #undef _syscall6 + #define _syscall6(type, name, type1, arg1, type2, arg2, type3, arg3, \ + type4, arg4, type5, arg5, type6, arg6) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5, type6 arg6) { \ + LSS_SAVE_ARG(0, arg1); \ + LSS_SAVE_ARG(1, arg2); \ + LSS_SAVE_ARG(2, arg3); \ + LSS_SAVE_ARG(3, arg4); \ + LSS_REG(4, arg5); \ + LSS_REG(5, arg6); \ + LSS_LOAD_ARG(0); \ + LSS_LOAD_ARG(1); \ + LSS_LOAD_ARG(2); \ + LSS_LOAD_ARG(3); \ + LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3), \ + "r"(__r4), "r"(__r5)); \ + } + LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack, + int flags, void *arg, int *parent_tidptr, + void *newtls, int *child_tidptr) { + register long __res __asm__("r5"); + { + if (fn == NULL || child_stack == NULL) { + __res = -EINVAL; + goto clone_exit; + } + + /* stash first 4 arguments on stack first because we can only load + * them after all function calls. + */ + int tmp_flags = flags; + int * tmp_stack = (int*) child_stack; + void * tmp_ptid = parent_tidptr; + void * tmp_tls = newtls; + + register int *__ctid __asm__("r4") = child_tidptr; + + /* Push "arg" and "fn" onto the stack that will be + * used by the child. + */ + *(--tmp_stack) = (int) arg; + *(--tmp_stack) = (int) fn; + + /* We must load r0..r3 last after all possible function calls. */ + register int __flags __asm__("r0") = tmp_flags; + register void *__stack __asm__("r1") = tmp_stack; + register void *__ptid __asm__("r2") = tmp_ptid; + register void *__tls __asm__("r3") = tmp_tls; + + /* %r0 = syscall(%r0 = flags, + * %r1 = child_stack, + * %r2 = parent_tidptr, + * %r3 = newtls, + * %r4 = child_tidptr) + */ + __SYS_REG(clone) + __asm__ __volatile__(/* %r0 = syscall(%r0 = flags, + * %r1 = child_stack, + * %r2 = parent_tidptr, + * %r3 = newtls, + * %r4 = child_tidptr) + */ + "push {r7}\n" + "mov r7,%1\n" + __syscall(clone)"\n" + + /* if (%r0 != 0) + * return %r0; + */ + "movs %0,r0\n" + "bne 1f\n" + + /* In the child, now. Call "fn(arg)". + */ + "ldr r0,[sp, #4]\n" + "mov lr,pc\n" + "ldr pc,[sp]\n" + + /* Call _exit(%r0), which never returns. We only + * need to set r7 for EABI syscall ABI but we do + * this always to simplify code sharing between + * old and new syscall ABIs. + */ + "mov r7,%2\n" + __syscall(exit)"\n" + + /* Pop r7 from the stack only in the parent. + */ + "1: pop {r7}\n" + : "=r" (__res) + : "r"(__sysreg), + "i"(__NR_exit), "r"(__stack), "r"(__flags), + "r"(__ptid), "r"(__tls), "r"(__ctid) + : "cc", "lr", "memory"); + } + clone_exit: + LSS_RETURN(int, __res); + } + #elif defined(__mips__) + #undef LSS_REG + #define LSS_REG(r,a) register unsigned long __r##r __asm__("$"#r) = \ + (unsigned long)(a) + + #if _MIPS_SIM == _MIPS_SIM_ABI32 + // See http://sources.redhat.com/ml/libc-alpha/2004-10/msg00050.html + // or http://www.linux-mips.org/archives/linux-mips/2004-10/msg00142.html + #define MIPS_SYSCALL_CLOBBERS "$1", "$3", "$8", "$9", "$10", "$11", "$12",\ + "$13", "$14", "$15", "$24", "$25", "memory" + #else + #define MIPS_SYSCALL_CLOBBERS "$1", "$3", "$10", "$11", "$12", "$13", \ + "$14", "$15", "$24", "$25", "memory" + #endif + + #undef LSS_BODY + #define LSS_BODY(type,name,r7,...) \ + register unsigned long __v0 __asm__("$2") = __NR_##name; \ + __asm__ __volatile__ ("syscall\n" \ + : "=&r"(__v0), r7 (__r7) \ + : "0"(__v0), ##__VA_ARGS__ \ + : MIPS_SYSCALL_CLOBBERS); \ + LSS_RETURN(type, __v0, __r7) + #undef _syscall0 + #define _syscall0(type, name) \ + type LSS_NAME(name)() { \ + register unsigned long __r7 __asm__("$7"); \ + LSS_BODY(type, name, "=r"); \ + } + #undef _syscall1 + #define _syscall1(type, name, type1, arg1) \ + type LSS_NAME(name)(type1 arg1) { \ + register unsigned long __r7 __asm__("$7"); \ + LSS_REG(4, arg1); LSS_BODY(type, name, "=r", "r"(__r4)); \ + } + #undef _syscall2 + #define _syscall2(type, name, type1, arg1, type2, arg2) \ + type LSS_NAME(name)(type1 arg1, type2 arg2) { \ + register unsigned long __r7 __asm__("$7"); \ + LSS_REG(4, arg1); LSS_REG(5, arg2); \ + LSS_BODY(type, name, "=r", "r"(__r4), "r"(__r5)); \ + } + #undef _syscall3 + #define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) { \ + register unsigned long __r7 __asm__("$7"); \ + LSS_REG(4, arg1); LSS_REG(5, arg2); LSS_REG(6, arg3); \ + LSS_BODY(type, name, "=r", "r"(__r4), "r"(__r5), "r"(__r6)); \ + } + #undef _syscall4 + #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ + LSS_REG(4, arg1); LSS_REG(5, arg2); LSS_REG(6, arg3); \ + LSS_REG(7, arg4); \ + LSS_BODY(type, name, "+r", "r"(__r4), "r"(__r5), "r"(__r6)); \ + } + #undef _syscall5 + #if _MIPS_SIM == _MIPS_SIM_ABI32 + /* The old 32bit MIPS system call API passes the fifth and sixth argument + * on the stack, whereas the new APIs use registers "r8" and "r9". + */ + #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ + type5,arg5) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5) { \ + LSS_REG(4, arg1); LSS_REG(5, arg2); LSS_REG(6, arg3); \ + LSS_REG(7, arg4); \ + register unsigned long __v0 __asm__("$2"); \ + __asm__ __volatile__ (".set noreorder\n" \ + "lw $2, %6\n" \ + "subu $29, 32\n" \ + "sw $2, 16($29)\n" \ + "li $2, %2\n" \ + "syscall\n" \ + "addiu $29, 32\n" \ + ".set reorder\n" \ + : "=&r"(__v0), "+r" (__r7) \ + : "i" (__NR_##name), "r"(__r4), "r"(__r5), \ + "r"(__r6), "m" ((unsigned long)arg5) \ + : MIPS_SYSCALL_CLOBBERS); \ + LSS_RETURN(type, __v0, __r7); \ + } + #else + #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ + type5,arg5) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5) { \ + LSS_REG(4, arg1); LSS_REG(5, arg2); LSS_REG(6, arg3); \ + LSS_REG(7, arg4); LSS_REG(8, arg5); \ + LSS_BODY(type, name, "+r", "r"(__r4), "r"(__r5), "r"(__r6), \ + "r"(__r8)); \ + } + #endif + #undef _syscall6 + #if _MIPS_SIM == _MIPS_SIM_ABI32 + /* The old 32bit MIPS system call API passes the fifth and sixth argument + * on the stack, whereas the new APIs use registers "r8" and "r9". + */ + #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ + type5,arg5,type6,arg6) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5, type6 arg6) { \ + LSS_REG(4, arg1); LSS_REG(5, arg2); LSS_REG(6, arg3); \ + LSS_REG(7, arg4); \ + register unsigned long __v0 __asm__("$2"); \ + __asm__ __volatile__ (".set noreorder\n" \ + "lw $2, %6\n" \ + "lw $8, %7\n" \ + "subu $29, 32\n" \ + "sw $2, 16($29)\n" \ + "sw $8, 20($29)\n" \ + "li $2, %2\n" \ + "syscall\n" \ + "addiu $29, 32\n" \ + ".set reorder\n" \ + : "=&r"(__v0), "+r" (__r7) \ + : "i" (__NR_##name), "r"(__r4), "r"(__r5), \ + "r"(__r6), "r" ((unsigned long)arg5), \ + "r" ((unsigned long)arg6) \ + : MIPS_SYSCALL_CLOBBERS); \ + LSS_RETURN(type, __v0, __r7); \ + } + #else + #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ + type5,arg5,type6,arg6) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5,type6 arg6) { \ + LSS_REG(4, arg1); LSS_REG(5, arg2); LSS_REG(6, arg3); \ + LSS_REG(7, arg4); LSS_REG(8, arg5); LSS_REG(9, arg6); \ + LSS_BODY(type, name, "+r", "r"(__r4), "r"(__r5), "r"(__r6), \ + "r"(__r8), "r"(__r9)); \ + } + #endif + LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack, + int flags, void *arg, int *parent_tidptr, + void *newtls, int *child_tidptr) { + register unsigned long __v0 __asm__("$2"); + register unsigned long __r7 __asm__("$7") = (unsigned long)newtls; + { + register int __flags __asm__("$4") = flags; + register void *__stack __asm__("$5") = child_stack; + register void *__ptid __asm__("$6") = parent_tidptr; + register int *__ctid __asm__("$8") = child_tidptr; + __asm__ __volatile__( + #if _MIPS_SIM == _MIPS_SIM_ABI32 && _MIPS_SZPTR == 32 + "subu $29,24\n" + #elif _MIPS_SIM == _MIPS_SIM_NABI32 + "sub $29,16\n" + #else + "dsubu $29,16\n" + #endif + + /* if (fn == NULL || child_stack == NULL) + * return -EINVAL; + */ + "li %0,%2\n" + "beqz %5,1f\n" + "beqz %6,1f\n" + + /* Push "arg" and "fn" onto the stack that will be + * used by the child. + */ + #if _MIPS_SIM == _MIPS_SIM_ABI32 && _MIPS_SZPTR == 32 + "subu %6,32\n" + "sw %5,0(%6)\n" + "sw %8,4(%6)\n" + #elif _MIPS_SIM == _MIPS_SIM_NABI32 + "sub %6,32\n" + "sw %5,0(%6)\n" + "sw %8,8(%6)\n" + #else + "dsubu %6,32\n" + "sd %5,0(%6)\n" + "sd %8,8(%6)\n" + #endif + + /* $7 = syscall($4 = flags, + * $5 = child_stack, + * $6 = parent_tidptr, + * $7 = newtls, + * $8 = child_tidptr) + */ + "li $2,%3\n" + "syscall\n" + + /* if ($7 != 0) + * return $2; + */ + "bnez $7,1f\n" + "bnez $2,1f\n" + + /* In the child, now. Call "fn(arg)". + */ + #if _MIPS_SIM == _MIPS_SIM_ABI32 && _MIPS_SZPTR == 32 + "lw $25,0($29)\n" + "lw $4,4($29)\n" + #elif _MIPS_SIM == _MIPS_SIM_NABI32 + "lw $25,0($29)\n" + "lw $4,8($29)\n" + #else + "ld $25,0($29)\n" + "ld $4,8($29)\n" + #endif + "jalr $25\n" + + /* Call _exit($2) + */ + "move $4,$2\n" + "li $2,%4\n" + "syscall\n" + + "1:\n" + #if _MIPS_SIM == _MIPS_SIM_ABI32 && _MIPS_SZPTR == 32 + "addu $29, 24\n" + #elif _MIPS_SIM == _MIPS_SIM_NABI32 + "add $29, 16\n" + #else + "daddu $29,16\n" + #endif + : "=&r" (__v0), "=r" (__r7) + : "i"(-EINVAL), "i"(__NR_clone), "i"(__NR_exit), + "r"(fn), "r"(__stack), "r"(__flags), "r"(arg), + "r"(__ptid), "r"(__r7), "r"(__ctid) + : "$9", "$10", "$11", "$12", "$13", "$14", "$15", + "$24", "memory"); + } + LSS_RETURN(int, __v0, __r7); + } + #elif defined (__PPC__) + #undef LSS_LOADARGS_0 + #define LSS_LOADARGS_0(name, dummy...) \ + __sc_0 = __NR_##name + #undef LSS_LOADARGS_1 + #define LSS_LOADARGS_1(name, arg1) \ + LSS_LOADARGS_0(name); \ + __sc_3 = (unsigned long) (arg1) + #undef LSS_LOADARGS_2 + #define LSS_LOADARGS_2(name, arg1, arg2) \ + LSS_LOADARGS_1(name, arg1); \ + __sc_4 = (unsigned long) (arg2) + #undef LSS_LOADARGS_3 + #define LSS_LOADARGS_3(name, arg1, arg2, arg3) \ + LSS_LOADARGS_2(name, arg1, arg2); \ + __sc_5 = (unsigned long) (arg3) + #undef LSS_LOADARGS_4 + #define LSS_LOADARGS_4(name, arg1, arg2, arg3, arg4) \ + LSS_LOADARGS_3(name, arg1, arg2, arg3); \ + __sc_6 = (unsigned long) (arg4) + #undef LSS_LOADARGS_5 + #define LSS_LOADARGS_5(name, arg1, arg2, arg3, arg4, arg5) \ + LSS_LOADARGS_4(name, arg1, arg2, arg3, arg4); \ + __sc_7 = (unsigned long) (arg5) + #undef LSS_LOADARGS_6 + #define LSS_LOADARGS_6(name, arg1, arg2, arg3, arg4, arg5, arg6) \ + LSS_LOADARGS_5(name, arg1, arg2, arg3, arg4, arg5); \ + __sc_8 = (unsigned long) (arg6) + #undef LSS_ASMINPUT_0 + #define LSS_ASMINPUT_0 "0" (__sc_0) + #undef LSS_ASMINPUT_1 + #define LSS_ASMINPUT_1 LSS_ASMINPUT_0, "1" (__sc_3) + #undef LSS_ASMINPUT_2 + #define LSS_ASMINPUT_2 LSS_ASMINPUT_1, "2" (__sc_4) + #undef LSS_ASMINPUT_3 + #define LSS_ASMINPUT_3 LSS_ASMINPUT_2, "3" (__sc_5) + #undef LSS_ASMINPUT_4 + #define LSS_ASMINPUT_4 LSS_ASMINPUT_3, "4" (__sc_6) + #undef LSS_ASMINPUT_5 + #define LSS_ASMINPUT_5 LSS_ASMINPUT_4, "5" (__sc_7) + #undef LSS_ASMINPUT_6 + #define LSS_ASMINPUT_6 LSS_ASMINPUT_5, "6" (__sc_8) + #undef LSS_BODY + #define LSS_BODY(nr, type, name, args...) \ + long __sc_ret, __sc_err; \ + { \ + register unsigned long __sc_0 __asm__ ("r0"); \ + register unsigned long __sc_3 __asm__ ("r3"); \ + register unsigned long __sc_4 __asm__ ("r4"); \ + register unsigned long __sc_5 __asm__ ("r5"); \ + register unsigned long __sc_6 __asm__ ("r6"); \ + register unsigned long __sc_7 __asm__ ("r7"); \ + register unsigned long __sc_8 __asm__ ("r8"); \ + \ + LSS_LOADARGS_##nr(name, args); \ + __asm__ __volatile__ \ + ("sc\n\t" \ + "mfcr %0" \ + : "=&r" (__sc_0), \ + "=&r" (__sc_3), "=&r" (__sc_4), \ + "=&r" (__sc_5), "=&r" (__sc_6), \ + "=&r" (__sc_7), "=&r" (__sc_8) \ + : LSS_ASMINPUT_##nr \ + : "cr0", "ctr", "memory", \ + "r9", "r10", "r11", "r12"); \ + __sc_ret = __sc_3; \ + __sc_err = __sc_0; \ + } \ + LSS_RETURN(type, __sc_ret, __sc_err) + #undef _syscall0 + #define _syscall0(type, name) \ + type LSS_NAME(name)(void) { \ + LSS_BODY(0, type, name); \ + } + #undef _syscall1 + #define _syscall1(type, name, type1, arg1) \ + type LSS_NAME(name)(type1 arg1) { \ + LSS_BODY(1, type, name, arg1); \ + } + #undef _syscall2 + #define _syscall2(type, name, type1, arg1, type2, arg2) \ + type LSS_NAME(name)(type1 arg1, type2 arg2) { \ + LSS_BODY(2, type, name, arg1, arg2); \ + } + #undef _syscall3 + #define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) { \ + LSS_BODY(3, type, name, arg1, arg2, arg3); \ + } + #undef _syscall4 + #define _syscall4(type, name, type1, arg1, type2, arg2, type3, arg3, \ + type4, arg4) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ + LSS_BODY(4, type, name, arg1, arg2, arg3, arg4); \ + } + #undef _syscall5 + #define _syscall5(type, name, type1, arg1, type2, arg2, type3, arg3, \ + type4, arg4, type5, arg5) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5) { \ + LSS_BODY(5, type, name, arg1, arg2, arg3, arg4, arg5); \ + } + #undef _syscall6 + #define _syscall6(type, name, type1, arg1, type2, arg2, type3, arg3, \ + type4, arg4, type5, arg5, type6, arg6) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5, type6 arg6) { \ + LSS_BODY(6, type, name, arg1, arg2, arg3, arg4, arg5, arg6); \ + } + /* clone function adapted from glibc 2.3.6 clone.S */ + /* TODO(csilvers): consider wrapping some args up in a struct, like we + * do for i386's _syscall6, so we can compile successfully on gcc 2.95 + */ + LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack, + int flags, void *arg, int *parent_tidptr, + void *newtls, int *child_tidptr) { + long __ret, __err; + { + register int (*__fn)(void *) __asm__ ("r8") = fn; + register void *__cstack __asm__ ("r4") = child_stack; + register int __flags __asm__ ("r3") = flags; + register void * __arg __asm__ ("r9") = arg; + register int * __ptidptr __asm__ ("r5") = parent_tidptr; + register void * __newtls __asm__ ("r6") = newtls; + register int * __ctidptr __asm__ ("r7") = child_tidptr; + __asm__ __volatile__( + /* check for fn == NULL + * and child_stack == NULL + */ + "cmpwi cr0, %6, 0\n\t" + "cmpwi cr1, %7, 0\n\t" + "cror cr0*4+eq, cr1*4+eq, cr0*4+eq\n\t" + "beq- cr0, 1f\n\t" + + /* set up stack frame for child */ + "clrrwi %7, %7, 4\n\t" + "li 0, 0\n\t" + "stwu 0, -16(%7)\n\t" + + /* fn, arg, child_stack are saved across the syscall: r28-30 */ + "mr 28, %6\n\t" + "mr 29, %7\n\t" + "mr 27, %9\n\t" + + /* syscall */ + "li 0, %4\n\t" + /* flags already in r3 + * child_stack already in r4 + * ptidptr already in r5 + * newtls already in r6 + * ctidptr already in r7 + */ + "sc\n\t" + + /* Test if syscall was successful */ + "cmpwi cr1, 3, 0\n\t" + "crandc cr1*4+eq, cr1*4+eq, cr0*4+so\n\t" + "bne- cr1, 1f\n\t" + + /* Do the function call */ + "mtctr 28\n\t" + "mr 3, 27\n\t" + "bctrl\n\t" + + /* Call _exit(r3) */ + "li 0, %5\n\t" + "sc\n\t" + + /* Return to parent */ + "1:\n" + "mfcr %1\n\t" + "mr %0, 3\n\t" + : "=r" (__ret), "=r" (__err) + : "0" (-1), "1" (EINVAL), + "i" (__NR_clone), "i" (__NR_exit), + "r" (__fn), "r" (__cstack), "r" (__flags), + "r" (__arg), "r" (__ptidptr), "r" (__newtls), + "r" (__ctidptr) + : "cr0", "cr1", "memory", "ctr", + "r0", "r29", "r27", "r28"); + } + LSS_RETURN(int, __ret, __err); + } + #endif + #define __NR__exit __NR_exit + #define __NR__gettid __NR_gettid + #define __NR__mremap __NR_mremap + LSS_INLINE _syscall1(int, close, int, f) + LSS_INLINE _syscall1(int, _exit, int, e) + LSS_INLINE _syscall3(int, fcntl, int, f, + int, c, long, a) + LSS_INLINE _syscall2(int, fstat, int, f, + struct kernel_stat*, b) + LSS_INLINE _syscall4(int, futex, int*, a, + int, o, int, v, + struct kernel_timespec*, t) + LSS_INLINE _syscall3(int, getdents, int, f, + struct kernel_dirent*, d, int, c) +#ifdef __NR_getdents64 + LSS_INLINE _syscall3(int, getdents64, int, f, + struct kernel_dirent64*, d, int, c) +#endif + LSS_INLINE _syscall0(pid_t, getpid) + LSS_INLINE _syscall0(pid_t, getppid) + LSS_INLINE _syscall0(pid_t, _gettid) + LSS_INLINE _syscall2(int, kill, pid_t, p, + int, s) + LSS_INLINE _syscall3(off_t, lseek, int, f, + off_t, o, int, w) + LSS_INLINE _syscall2(int, munmap, void*, s, + size_t, l) + LSS_INLINE _syscall5(void*, _mremap, void*, o, + size_t, os, size_t, ns, + unsigned long, f, void *, a) + LSS_INLINE _syscall3(int, open, const char*, p, + int, f, int, m) + LSS_INLINE _syscall2(int, prctl, int, o, + long, a) + LSS_INLINE _syscall4(long, ptrace, int, r, + pid_t, p, void *, a, void *, d) + LSS_INLINE _syscall3(ssize_t, read, int, f, + void *, b, size_t, c) + LSS_INLINE _syscall4(int, rt_sigaction, int, s, + const struct kernel_sigaction*, a, + struct kernel_sigaction*, o, size_t, c) + LSS_INLINE _syscall4(int, rt_sigprocmask, int, h, + const struct kernel_sigset_t*, s, + struct kernel_sigset_t*, o, size_t, c); + LSS_INLINE _syscall0(int, sched_yield) + LSS_INLINE _syscall2(int, sigaltstack, const stack_t*, s, + const stack_t*, o) + LSS_INLINE _syscall2(int, stat, const char*, f, + struct kernel_stat*, b) + LSS_INLINE _syscall3(ssize_t, write, int, f, + const void *, b, size_t, c) + #if defined(__NR_getcpu) + LSS_INLINE _syscall3(long, getcpu, unsigned *, cpu, + unsigned *, node, void *, unused); + #endif + #if defined(__x86_64__) || \ + (defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI32) + LSS_INLINE _syscall3(int, socket, int, d, + int, t, int, p) + #endif + #if defined(__x86_64__) + LSS_INLINE _syscall6(void*, mmap, void*, s, + size_t, l, int, p, + int, f, int, d, + __off64_t, o) + + LSS_INLINE int LSS_NAME(sigaction)(int signum, + const struct kernel_sigaction *act, + struct kernel_sigaction *oldact) { + /* On x86_64, the kernel requires us to always set our own + * SA_RESTORER in order to be able to return from a signal handler. + * This function must have a "magic" signature that the "gdb" + * (and maybe the kernel?) can recognize. + */ + if (act != NULL && !(act->sa_flags & SA_RESTORER)) { + struct kernel_sigaction a = *act; + a.sa_flags |= SA_RESTORER; + a.sa_restorer = LSS_NAME(restore_rt)(); + return LSS_NAME(rt_sigaction)(signum, &a, oldact, + (KERNEL_NSIG+7)/8); + } else { + return LSS_NAME(rt_sigaction)(signum, act, oldact, + (KERNEL_NSIG+7)/8); + } + } + + LSS_INLINE int LSS_NAME(sigprocmask)(int how, + const struct kernel_sigset_t *set, + struct kernel_sigset_t *oldset) { + return LSS_NAME(rt_sigprocmask)(how, set, oldset, (KERNEL_NSIG+7)/8); + } + #endif + #if defined(__x86_64__) || \ + defined(__arm__) || \ + (defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI32) + LSS_INLINE _syscall4(pid_t, wait4, pid_t, p, + int*, s, int, o, + struct kernel_rusage*, r) + LSS_INLINE pid_t LSS_NAME(waitpid)(pid_t pid, int *status, int options){ + return LSS_NAME(wait4)(pid, status, options, 0); + } + #endif + #if defined(__i386__) || defined(__x86_64__) || defined(__arm__) + LSS_INLINE _syscall4(int, openat, int, d, const char *, p, int, f, int, m) + #endif + LSS_INLINE int LSS_NAME(sigemptyset)(struct kernel_sigset_t *set) { + memset(&set->sig, 0, sizeof(set->sig)); + return 0; + } + + LSS_INLINE int LSS_NAME(sigfillset)(struct kernel_sigset_t *set) { + memset(&set->sig, -1, sizeof(set->sig)); + return 0; + } + + LSS_INLINE int LSS_NAME(sigaddset)(struct kernel_sigset_t *set, + int signum) { + if (signum < 1 || signum > (int)(8*sizeof(set->sig))) { + LSS_ERRNO = EINVAL; + return -1; + } else { + set->sig[(signum - 1)/(8*sizeof(set->sig[0]))] + |= 1UL << ((signum - 1) % (8*sizeof(set->sig[0]))); + return 0; + } + } + + LSS_INLINE int LSS_NAME(sigdelset)(struct kernel_sigset_t *set, + int signum) { + if (signum < 1 || signum > (int)(8*sizeof(set->sig))) { + LSS_ERRNO = EINVAL; + return -1; + } else { + set->sig[(signum - 1)/(8*sizeof(set->sig[0]))] + &= ~(1UL << ((signum - 1) % (8*sizeof(set->sig[0])))); + return 0; + } + } + + #if defined(__i386__) || \ + defined(__arm__) || \ + (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) || defined(__PPC__) + #define __NR__sigaction __NR_sigaction + #define __NR__sigprocmask __NR_sigprocmask + LSS_INLINE _syscall2(int, fstat64, int, f, + struct kernel_stat64 *, b) + LSS_INLINE _syscall5(int, _llseek, uint, fd, ulong, hi, ulong, lo, + loff_t *, res, uint, wh) +#ifdef __PPC64__ + LSS_INLINE _syscall6(void*, mmap, void*, s, + size_t, l, int, p, + int, f, int, d, + off_t, o) +#else + #ifndef __ARM_EABI__ + /* Not available on ARM EABI Linux. */ + LSS_INLINE _syscall1(void*, mmap, void*, a) + #endif + LSS_INLINE _syscall6(void*, mmap2, void*, s, + size_t, l, int, p, + int, f, int, d, + off_t, o) +#endif + LSS_INLINE _syscall3(int, _sigaction, int, s, + const struct kernel_old_sigaction*, a, + struct kernel_old_sigaction*, o) + LSS_INLINE _syscall3(int, _sigprocmask, int, h, + const unsigned long*, s, + unsigned long*, o) + LSS_INLINE _syscall2(int, stat64, const char *, p, + struct kernel_stat64 *, b) + + LSS_INLINE int LSS_NAME(sigaction)(int signum, + const struct kernel_sigaction *act, + struct kernel_sigaction *oldact) { + int old_errno = LSS_ERRNO; + int rc; + struct kernel_sigaction a; + if (act != NULL) { + a = *act; + #ifdef __i386__ + /* On i386, the kernel requires us to always set our own + * SA_RESTORER when using realtime signals. Otherwise, it does not + * know how to return from a signal handler. This function must have + * a "magic" signature that the "gdb" (and maybe the kernel?) can + * recognize. + * Apparently, a SA_RESTORER is implicitly set by the kernel, when + * using non-realtime signals. + * + * TODO: Test whether ARM needs a restorer + */ + if (!(a.sa_flags & SA_RESTORER)) { + a.sa_flags |= SA_RESTORER; + a.sa_restorer = (a.sa_flags & SA_SIGINFO) + ? LSS_NAME(restore_rt)() : LSS_NAME(restore)(); + } + #endif + } + rc = LSS_NAME(rt_sigaction)(signum, act ? &a : act, oldact, + (KERNEL_NSIG+7)/8); + if (rc < 0 && LSS_ERRNO == ENOSYS) { + struct kernel_old_sigaction oa, ooa, *ptr_a = &oa, *ptr_oa = &ooa; + if (!act) { + ptr_a = NULL; + } else { + oa.sa_handler_ = act->sa_handler_; + memcpy(&oa.sa_mask, &act->sa_mask, sizeof(oa.sa_mask)); + #ifndef __mips__ + oa.sa_restorer = act->sa_restorer; + #endif + oa.sa_flags = act->sa_flags; + } + if (!oldact) { + ptr_oa = NULL; + } + LSS_ERRNO = old_errno; + rc = LSS_NAME(_sigaction)(signum, ptr_a, ptr_oa); + if (rc == 0 && oldact) { + if (act) { + memcpy(oldact, act, sizeof(*act)); + } else { + memset(oldact, 0, sizeof(*oldact)); + } + oldact->sa_handler_ = ptr_oa->sa_handler_; + oldact->sa_flags = ptr_oa->sa_flags; + memcpy(&oldact->sa_mask, &ptr_oa->sa_mask, sizeof(ptr_oa->sa_mask)); + #ifndef __mips__ + oldact->sa_restorer = ptr_oa->sa_restorer; + #endif + } + } + return rc; + } + + LSS_INLINE int LSS_NAME(sigprocmask)(int how, + const struct kernel_sigset_t *set, + struct kernel_sigset_t *oldset) { + int olderrno = LSS_ERRNO; + int rc = LSS_NAME(rt_sigprocmask)(how, set, oldset, (KERNEL_NSIG+7)/8); + if (rc < 0 && LSS_ERRNO == ENOSYS) { + LSS_ERRNO = olderrno; + if (oldset) { + LSS_NAME(sigemptyset)(oldset); + } + rc = LSS_NAME(_sigprocmask)(how, + set ? &set->sig[0] : NULL, + oldset ? &oldset->sig[0] : NULL); + } + return rc; + } + #endif + #if defined(__PPC__) + #undef LSS_SC_LOADARGS_0 + #define LSS_SC_LOADARGS_0(dummy...) + #undef LSS_SC_LOADARGS_1 + #define LSS_SC_LOADARGS_1(arg1) \ + __sc_4 = (unsigned long) (arg1) + #undef LSS_SC_LOADARGS_2 + #define LSS_SC_LOADARGS_2(arg1, arg2) \ + LSS_SC_LOADARGS_1(arg1); \ + __sc_5 = (unsigned long) (arg2) + #undef LSS_SC_LOADARGS_3 + #define LSS_SC_LOADARGS_3(arg1, arg2, arg3) \ + LSS_SC_LOADARGS_2(arg1, arg2); \ + __sc_6 = (unsigned long) (arg3) + #undef LSS_SC_LOADARGS_4 + #define LSS_SC_LOADARGS_4(arg1, arg2, arg3, arg4) \ + LSS_SC_LOADARGS_3(arg1, arg2, arg3); \ + __sc_7 = (unsigned long) (arg4) + #undef LSS_SC_LOADARGS_5 + #define LSS_SC_LOADARGS_5(arg1, arg2, arg3, arg4, arg5) \ + LSS_SC_LOADARGS_4(arg1, arg2, arg3, arg4); \ + __sc_8 = (unsigned long) (arg5) + #undef LSS_SC_BODY + #define LSS_SC_BODY(nr, type, opt, args...) \ + long __sc_ret, __sc_err; \ + { \ + register unsigned long __sc_0 __asm__ ("r0") = __NR_socketcall; \ + register unsigned long __sc_3 __asm__ ("r3") = opt; \ + register unsigned long __sc_4 __asm__ ("r4"); \ + register unsigned long __sc_5 __asm__ ("r5"); \ + register unsigned long __sc_6 __asm__ ("r6"); \ + register unsigned long __sc_7 __asm__ ("r7"); \ + register unsigned long __sc_8 __asm__ ("r8"); \ + LSS_SC_LOADARGS_##nr(args); \ + __asm__ __volatile__ \ + ("stwu 1, -48(1)\n\t" \ + "stw 4, 20(1)\n\t" \ + "stw 5, 24(1)\n\t" \ + "stw 6, 28(1)\n\t" \ + "stw 7, 32(1)\n\t" \ + "stw 8, 36(1)\n\t" \ + "addi 4, 1, 20\n\t" \ + "sc\n\t" \ + "mfcr %0" \ + : "=&r" (__sc_0), \ + "=&r" (__sc_3), "=&r" (__sc_4), \ + "=&r" (__sc_5), "=&r" (__sc_6), \ + "=&r" (__sc_7), "=&r" (__sc_8) \ + : LSS_ASMINPUT_##nr \ + : "cr0", "ctr", "memory"); \ + __sc_ret = __sc_3; \ + __sc_err = __sc_0; \ + } \ + LSS_RETURN(type, __sc_ret, __sc_err) + + LSS_INLINE int LSS_NAME(socket)(int domain, int type, int protocol) { + LSS_SC_BODY(3, int, 1, domain, type, protocol); + } + #endif + #if defined(__i386__) || \ + (defined(__arm__) && !defined(__ARM_EABI__)) || \ + (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) + + /* See sys_socketcall in net/socket.c in kernel source. + * It de-multiplexes on its first arg and unpacks the arglist + * array in its second arg. + */ + LSS_INLINE _syscall2(long, socketcall, int, c, unsigned long*, a) + + LSS_INLINE int LSS_NAME(socket)(int domain, int type, int protocol) { + unsigned long args[3] = { + (unsigned long) domain, + (unsigned long) type, + (unsigned long) protocol + }; + return LSS_NAME(socketcall)(1, args); + } + #elif defined(__ARM_EABI__) + LSS_INLINE _syscall3(int, socket, int, d, + int, t, int, p) + #endif + #if defined(__i386__) || defined(__PPC__) || \ + (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) + LSS_INLINE _syscall3(pid_t, waitpid, pid_t, p, + int*, s, int, o) + #endif + #if defined(__mips__) + /* sys_pipe() on MIPS has non-standard calling conventions, as it returns + * both file handles through CPU registers. + */ + LSS_INLINE int LSS_NAME(pipe)(int *p) { + register unsigned long __v0 __asm__("$2") = __NR_pipe; + register unsigned long __v1 __asm__("$3"); + register unsigned long __r7 __asm__("$7"); + __asm__ __volatile__ ("syscall\n" + : "=&r"(__v0), "=&r"(__v1), "+r" (__r7) + : "0"(__v0) + : "$8", "$9", "$10", "$11", "$12", + "$13", "$14", "$15", "$24", "memory"); + if (__r7) { + LSS_ERRNO = __v0; + return -1; + } else { + p[0] = __v0; + p[1] = __v1; + return 0; + } + } + #else + LSS_INLINE _syscall1(int, pipe, int *, p) + #endif + + LSS_INLINE pid_t LSS_NAME(gettid)() { + pid_t tid = LSS_NAME(_gettid)(); + if (tid != -1) { + return tid; + } + return LSS_NAME(getpid)(); + } + + LSS_INLINE void *LSS_NAME(mremap)(void *old_address, size_t old_size, + size_t new_size, int flags, ...) { + va_list ap; + void *new_address, *rc; + va_start(ap, flags); + new_address = va_arg(ap, void *); + rc = LSS_NAME(_mremap)(old_address, old_size, new_size, + flags, new_address); + va_end(ap); + return rc; + } + + LSS_INLINE int LSS_NAME(ptrace_detach)(pid_t pid) { + /* PTRACE_DETACH can sometimes forget to wake up the tracee and it + * then sends job control signals to the real parent, rather than to + * the tracer. We reduce the risk of this happening by starting a + * whole new time slice, and then quickly sending a SIGCONT signal + * right after detaching from the tracee. + */ + int rc, err; + LSS_NAME(sched_yield)(); + rc = LSS_NAME(ptrace)(PTRACE_DETACH, pid, (void *)0, (void *)0); + err = LSS_ERRNO; + LSS_NAME(kill)(pid, SIGCONT); + LSS_ERRNO = err; + return rc; + } +#endif + +#if defined(__cplusplus) && !defined(SYS_CPLUSPLUS) +} +#endif + +#endif +#endif diff --git a/src/thirdparty/gperftools-2.0/src/base/linuxthreads.cc b/src/thirdparty/gperftools-2.0/src/base/linuxthreads.cc new file mode 100644 index 000000000..19da4004b --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/linuxthreads.cc @@ -0,0 +1,665 @@ +/* Copyright (c) 2005-2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Markus Gutschke + */ + +#include "base/linuxthreads.h" + +#ifdef THREADS +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "base/linux_syscall_support.h" +#include "base/thread_lister.h" + +#ifndef CLONE_UNTRACED +#define CLONE_UNTRACED 0x00800000 +#endif + + +/* Synchronous signals that should not be blocked while in the lister thread. + */ +static const int sync_signals[] = { SIGABRT, SIGILL, SIGFPE, SIGSEGV, SIGBUS, + SIGXCPU, SIGXFSZ }; + +/* itoa() is not a standard function, and we cannot safely call printf() + * after suspending threads. So, we just implement our own copy. A + * recursive approach is the easiest here. + */ +static char *local_itoa(char *buf, int i) { + if (i < 0) { + *buf++ = '-'; + return local_itoa(buf, -i); + } else { + if (i >= 10) + buf = local_itoa(buf, i/10); + *buf++ = (i%10) + '0'; + *buf = '\000'; + return buf; + } +} + + +/* Wrapper around clone() that runs "fn" on the same stack as the + * caller! Unlike fork(), the cloned thread shares the same address space. + * The caller must be careful to use only minimal amounts of stack until + * the cloned thread has returned. + * There is a good chance that the cloned thread and the caller will share + * the same copy of errno! + */ +#ifdef __GNUC__ +#if __GNUC__ == 3 && __GNUC_MINOR__ >= 1 || __GNUC__ > 3 +/* Try to force this function into a separate stack frame, and make sure + * that arguments are passed on the stack. + */ +static int local_clone (int (*fn)(void *), void *arg, ...) + __attribute__ ((noinline)); +#endif +#endif + +static int local_clone (int (*fn)(void *), void *arg, ...) { + /* Leave 4kB of gap between the callers stack and the new clone. This + * should be more than sufficient for the caller to call waitpid() until + * the cloned thread terminates. + * + * It is important that we set the CLONE_UNTRACED flag, because newer + * versions of "gdb" otherwise attempt to attach to our thread, and will + * attempt to reap its status codes. This subsequently results in the + * caller hanging indefinitely in waitpid(), waiting for a change in + * status that will never happen. By setting the CLONE_UNTRACED flag, we + * prevent "gdb" from stealing events, but we still expect the thread + * lister to fail, because it cannot PTRACE_ATTACH to the process that + * is being debugged. This is OK and the error code will be reported + * correctly. + */ + return sys_clone(fn, (char *)&arg - 4096, + CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_UNTRACED, arg, 0, 0, 0); +} + + +/* Local substitute for the atoi() function, which is not necessarily safe + * to call once threads are suspended (depending on whether libc looks up + * locale information, when executing atoi()). + */ +static int local_atoi(const char *s) { + int n = 0; + int neg = *s == '-'; + if (neg) + s++; + while (*s >= '0' && *s <= '9') + n = 10*n + (*s++ - '0'); + return neg ? -n : n; +} + + +/* Re-runs fn until it doesn't cause EINTR + */ +#define NO_INTR(fn) do {} while ((fn) < 0 && errno == EINTR) + + +/* Wrap a class around system calls, in order to give us access to + * a private copy of errno. This only works in C++, but it has the + * advantage of not needing nested functions, which are a non-standard + * language extension. + */ +#ifdef __cplusplus +namespace { + class SysCalls { + public: + #define SYS_CPLUSPLUS + #define SYS_ERRNO my_errno + #define SYS_INLINE inline + #define SYS_PREFIX -1 + #undef SYS_LINUX_SYSCALL_SUPPORT_H + #include "linux_syscall_support.h" + SysCalls() : my_errno(0) { } + int my_errno; + }; +} +#define ERRNO sys.my_errno +#else +#define ERRNO my_errno +#endif + + +/* Wrapper for open() which is guaranteed to never return EINTR. + */ +static int c_open(const char *fname, int flags, int mode) { + ssize_t rc; + NO_INTR(rc = sys_open(fname, flags, mode)); + return rc; +} + + +/* abort() is not safely reentrant, and changes it's behavior each time + * it is called. This means, if the main application ever called abort() + * we cannot safely call it again. This would happen if we were called + * from a SIGABRT signal handler in the main application. So, document + * that calling SIGABRT from the thread lister makes it not signal safe + * (and vice-versa). + * Also, since we share address space with the main application, we + * cannot call abort() from the callback and expect the main application + * to behave correctly afterwards. In fact, the only thing we can do, is + * to terminate the main application with extreme prejudice (aka + * PTRACE_KILL). + * We set up our own SIGABRT handler to do this. + * In order to find the main application from the signal handler, we + * need to store information about it in global variables. This is + * safe, because the main application should be suspended at this + * time. If the callback ever called ResumeAllProcessThreads(), then + * we are running a higher risk, though. So, try to avoid calling + * abort() after calling ResumeAllProcessThreads. + */ +static volatile int *sig_pids, sig_num_threads, sig_proc, sig_marker; + + +/* Signal handler to help us recover from dying while we are attached to + * other threads. + */ +static void SignalHandler(int signum, siginfo_t *si, void *data) { + if (sig_pids != NULL) { + if (signum == SIGABRT) { + while (sig_num_threads-- > 0) { + /* Not sure if sched_yield is really necessary here, but it does not */ + /* hurt, and it might be necessary for the same reasons that we have */ + /* to do so in sys_ptrace_detach(). */ + sys_sched_yield(); + sys_ptrace(PTRACE_KILL, sig_pids[sig_num_threads], 0, 0); + } + } else if (sig_num_threads > 0) { + ResumeAllProcessThreads(sig_num_threads, (int *)sig_pids); + } + } + sig_pids = NULL; + if (sig_marker >= 0) + NO_INTR(sys_close(sig_marker)); + sig_marker = -1; + if (sig_proc >= 0) + NO_INTR(sys_close(sig_proc)); + sig_proc = -1; + + sys__exit(signum == SIGABRT ? 1 : 2); +} + + +/* Try to dirty the stack, and hope that the compiler is not smart enough + * to optimize this function away. Or worse, the compiler could inline the + * function and permanently allocate the data on the stack. + */ +static void DirtyStack(size_t amount) { + char buf[amount]; + memset(buf, 0, amount); + sys_read(-1, buf, amount); +} + + +/* Data structure for passing arguments to the lister thread. + */ +#define ALT_STACKSIZE (MINSIGSTKSZ + 4096) + +struct ListerParams { + int result, err; + char *altstack_mem; + ListAllProcessThreadsCallBack callback; + void *parameter; + va_list ap; +}; + + +static void ListerThread(struct ListerParams *args) { + int found_parent = 0; + pid_t clone_pid = sys_gettid(), ppid = sys_getppid(); + char proc_self_task[80], marker_name[48], *marker_path; + const char *proc_paths[3]; + const char *const *proc_path = proc_paths; + int proc = -1, marker = -1, num_threads = 0; + int max_threads = 0, sig; + struct kernel_stat marker_sb, proc_sb; + stack_t altstack; + + /* Create "marker" that we can use to detect threads sharing the same + * address space and the same file handles. By setting the FD_CLOEXEC flag + * we minimize the risk of misidentifying child processes as threads; + * and since there is still a race condition, we will filter those out + * later, anyway. + */ + if ((marker = sys_socket(PF_LOCAL, SOCK_DGRAM, 0)) < 0 || + sys_fcntl(marker, F_SETFD, FD_CLOEXEC) < 0) { + failure: + args->result = -1; + args->err = errno; + if (marker >= 0) + NO_INTR(sys_close(marker)); + sig_marker = marker = -1; + if (proc >= 0) + NO_INTR(sys_close(proc)); + sig_proc = proc = -1; + sys__exit(1); + } + + /* Compute search paths for finding thread directories in /proc */ + local_itoa(strrchr(strcpy(proc_self_task, "/proc/"), '\000'), ppid); + strcpy(marker_name, proc_self_task); + marker_path = marker_name + strlen(marker_name); + strcat(proc_self_task, "/task/"); + proc_paths[0] = proc_self_task; /* /proc/$$/task/ */ + proc_paths[1] = "/proc/"; /* /proc/ */ + proc_paths[2] = NULL; + + /* Compute path for marker socket in /proc */ + local_itoa(strcpy(marker_path, "/fd/") + 4, marker); + if (sys_stat(marker_name, &marker_sb) < 0) { + goto failure; + } + + /* Catch signals on an alternate pre-allocated stack. This way, we can + * safely execute the signal handler even if we ran out of memory. + */ + memset(&altstack, 0, sizeof(altstack)); + altstack.ss_sp = args->altstack_mem; + altstack.ss_flags = 0; + altstack.ss_size = ALT_STACKSIZE; + sys_sigaltstack(&altstack, (const stack_t *)NULL); + + /* Some kernels forget to wake up traced processes, when the + * tracer dies. So, intercept synchronous signals and make sure + * that we wake up our tracees before dying. It is the caller's + * responsibility to ensure that asynchronous signals do not + * interfere with this function. + */ + sig_marker = marker; + sig_proc = -1; + for (sig = 0; sig < sizeof(sync_signals)/sizeof(*sync_signals); sig++) { + struct kernel_sigaction sa; + memset(&sa, 0, sizeof(sa)); + sa.sa_sigaction_ = SignalHandler; + sys_sigfillset(&sa.sa_mask); + sa.sa_flags = SA_ONSTACK|SA_SIGINFO|SA_RESETHAND; + sys_sigaction(sync_signals[sig], &sa, (struct kernel_sigaction *)NULL); + } + + /* Read process directories in /proc/... */ + for (;;) { + /* Some kernels know about threads, and hide them in "/proc" + * (although they are still there, if you know the process + * id). Threads are moved into a separate "task" directory. We + * check there first, and then fall back on the older naming + * convention if necessary. + */ + if ((sig_proc = proc = c_open(*proc_path, O_RDONLY|O_DIRECTORY, 0)) < 0) { + if (*++proc_path != NULL) + continue; + goto failure; + } + if (sys_fstat(proc, &proc_sb) < 0) + goto failure; + + /* Since we are suspending threads, we cannot call any libc + * functions that might acquire locks. Most notably, we cannot + * call malloc(). So, we have to allocate memory on the stack, + * instead. Since we do not know how much memory we need, we + * make a best guess. And if we guessed incorrectly we retry on + * a second iteration (by jumping to "detach_threads"). + * + * Unless the number of threads is increasing very rapidly, we + * should never need to do so, though, as our guestimate is very + * conservative. + */ + if (max_threads < proc_sb.st_nlink + 100) + max_threads = proc_sb.st_nlink + 100; + + /* scope */ { + pid_t pids[max_threads]; + int added_entries = 0; + sig_num_threads = num_threads; + sig_pids = pids; + for (;;) { + struct kernel_dirent *entry; + char buf[4096]; + ssize_t nbytes = sys_getdents(proc, (struct kernel_dirent *)buf, + sizeof(buf)); + if (nbytes < 0) + goto failure; + else if (nbytes == 0) { + if (added_entries) { + /* Need to keep iterating over "/proc" in multiple + * passes until we no longer find any more threads. This + * algorithm eventually completes, when all threads have + * been suspended. + */ + added_entries = 0; + sys_lseek(proc, 0, SEEK_SET); + continue; + } + break; + } + for (entry = (struct kernel_dirent *)buf; + entry < (struct kernel_dirent *)&buf[nbytes]; + entry = (struct kernel_dirent *)((char *)entry+entry->d_reclen)) { + if (entry->d_ino != 0) { + const char *ptr = entry->d_name; + pid_t pid; + + /* Some kernels hide threads by preceding the pid with a '.' */ + if (*ptr == '.') + ptr++; + + /* If the directory is not numeric, it cannot be a + * process/thread + */ + if (*ptr < '0' || *ptr > '9') + continue; + pid = local_atoi(ptr); + + /* Attach (and suspend) all threads */ + if (pid && pid != clone_pid) { + struct kernel_stat tmp_sb; + char fname[entry->d_reclen + 48]; + strcat(strcat(strcpy(fname, "/proc/"), + entry->d_name), marker_path); + + /* Check if the marker is identical to the one we created */ + if (sys_stat(fname, &tmp_sb) >= 0 && + marker_sb.st_ino == tmp_sb.st_ino) { + long i, j; + + /* Found one of our threads, make sure it is no duplicate */ + for (i = 0; i < num_threads; i++) { + /* Linear search is slow, but should not matter much for + * the typically small number of threads. + */ + if (pids[i] == pid) { + /* Found a duplicate; most likely on second pass */ + goto next_entry; + } + } + + /* Check whether data structure needs growing */ + if (num_threads >= max_threads) { + /* Back to square one, this time with more memory */ + NO_INTR(sys_close(proc)); + goto detach_threads; + } + + /* Attaching to thread suspends it */ + pids[num_threads++] = pid; + sig_num_threads = num_threads; + if (sys_ptrace(PTRACE_ATTACH, pid, (void *)0, + (void *)0) < 0) { + /* If operation failed, ignore thread. Maybe it + * just died? There might also be a race + * condition with a concurrent core dumper or + * with a debugger. In that case, we will just + * make a best effort, rather than failing + * entirely. + */ + num_threads--; + sig_num_threads = num_threads; + goto next_entry; + } + while (sys_waitpid(pid, (int *)0, __WALL) < 0) { + if (errno != EINTR) { + sys_ptrace_detach(pid); + num_threads--; + sig_num_threads = num_threads; + goto next_entry; + } + } + + if (sys_ptrace(PTRACE_PEEKDATA, pid, &i, &j) || i++ != j || + sys_ptrace(PTRACE_PEEKDATA, pid, &i, &j) || i != j) { + /* Address spaces are distinct, even though both + * processes show the "marker". This is probably + * a forked child process rather than a thread. + */ + sys_ptrace_detach(pid); + num_threads--; + sig_num_threads = num_threads; + } else { + found_parent |= pid == ppid; + added_entries++; + } + } + } + } + next_entry:; + } + } + NO_INTR(sys_close(proc)); + sig_proc = proc = -1; + + /* If we failed to find any threads, try looking somewhere else in + * /proc. Maybe, threads are reported differently on this system. + */ + if (num_threads > 1 || !*++proc_path) { + NO_INTR(sys_close(marker)); + sig_marker = marker = -1; + + /* If we never found the parent process, something is very wrong. + * Most likely, we are running in debugger. Any attempt to operate + * on the threads would be very incomplete. Let's just report an + * error to the caller. + */ + if (!found_parent) { + ResumeAllProcessThreads(num_threads, pids); + sys__exit(3); + } + + /* Now we are ready to call the callback, + * which takes care of resuming the threads for us. + */ + args->result = args->callback(args->parameter, num_threads, + pids, args->ap); + args->err = errno; + + /* Callback should have resumed threads, but better safe than sorry */ + if (ResumeAllProcessThreads(num_threads, pids)) { + /* Callback forgot to resume at least one thread, report error */ + args->err = EINVAL; + args->result = -1; + } + + sys__exit(0); + } + detach_threads: + /* Resume all threads prior to retrying the operation */ + ResumeAllProcessThreads(num_threads, pids); + sig_pids = NULL; + num_threads = 0; + sig_num_threads = num_threads; + max_threads += 100; + } + } +} + + +/* This function gets the list of all linux threads of the current process + * passes them to the 'callback' along with the 'parameter' pointer; at the + * call back call time all the threads are paused via + * PTRACE_ATTACH. + * The callback is executed from a separate thread which shares only the + * address space, the filesystem, and the filehandles with the caller. Most + * notably, it does not share the same pid and ppid; and if it terminates, + * the rest of the application is still there. 'callback' is supposed to do + * or arrange for ResumeAllProcessThreads. This happens automatically, if + * the thread raises a synchronous signal (e.g. SIGSEGV); asynchronous + * signals are blocked. If the 'callback' decides to unblock them, it must + * ensure that they cannot terminate the application, or that + * ResumeAllProcessThreads will get called. + * It is an error for the 'callback' to make any library calls that could + * acquire locks. Most notably, this means that most system calls have to + * avoid going through libc. Also, this means that it is not legal to call + * exit() or abort(). + * We return -1 on error and the return value of 'callback' on success. + */ +int ListAllProcessThreads(void *parameter, + ListAllProcessThreadsCallBack callback, ...) { + char altstack_mem[ALT_STACKSIZE]; + struct ListerParams args; + pid_t clone_pid; + int dumpable = 1, sig; + struct kernel_sigset_t sig_blocked, sig_old; + + va_start(args.ap, callback); + + /* If we are short on virtual memory, initializing the alternate stack + * might trigger a SIGSEGV. Let's do this early, before it could get us + * into more trouble (i.e. before signal handlers try to use the alternate + * stack, and before we attach to other threads). + */ + memset(altstack_mem, 0, sizeof(altstack_mem)); + + /* Some of our cleanup functions could conceivable use more stack space. + * Try to touch the stack right now. This could be defeated by the compiler + * being too smart for it's own good, so try really hard. + */ + DirtyStack(32768); + + /* Make this process "dumpable". This is necessary in order to ptrace() + * after having called setuid(). + */ + dumpable = sys_prctl(PR_GET_DUMPABLE, 0); + if (!dumpable) + sys_prctl(PR_SET_DUMPABLE, 1); + + /* Fill in argument block for dumper thread */ + args.result = -1; + args.err = 0; + args.altstack_mem = altstack_mem; + args.parameter = parameter; + args.callback = callback; + + /* Before cloning the thread lister, block all asynchronous signals, as we */ + /* are not prepared to handle them. */ + sys_sigfillset(&sig_blocked); + for (sig = 0; sig < sizeof(sync_signals)/sizeof(*sync_signals); sig++) { + sys_sigdelset(&sig_blocked, sync_signals[sig]); + } + if (sys_sigprocmask(SIG_BLOCK, &sig_blocked, &sig_old)) { + args.err = errno; + args.result = -1; + goto failed; + } + + /* scope */ { + /* After cloning, both the parent and the child share the same instance + * of errno. We must make sure that at least one of these processes + * (in our case, the parent) uses modified syscall macros that update + * a local copy of errno, instead. + */ + #ifdef __cplusplus + #define sys0_sigprocmask sys.sigprocmask + #define sys0_waitpid sys.waitpid + SysCalls sys; + #else + int my_errno; + #define SYS_ERRNO my_errno + #define SYS_INLINE inline + #define SYS_PREFIX 0 + #undef SYS_LINUX_SYSCALL_SUPPORT_H + #include "linux_syscall_support.h" + #endif + + int clone_errno; + clone_pid = local_clone((int (*)(void *))ListerThread, &args); + clone_errno = errno; + + sys_sigprocmask(SIG_SETMASK, &sig_old, &sig_old); + + if (clone_pid >= 0) { + int status, rc; + while ((rc = sys0_waitpid(clone_pid, &status, __WALL)) < 0 && + ERRNO == EINTR) { + /* Keep waiting */ + } + if (rc < 0) { + args.err = ERRNO; + args.result = -1; + } else if (WIFEXITED(status)) { + switch (WEXITSTATUS(status)) { + case 0: break; /* Normal process termination */ + case 2: args.err = EFAULT; /* Some fault (e.g. SIGSEGV) detected */ + args.result = -1; + break; + case 3: args.err = EPERM; /* Process is already being traced */ + args.result = -1; + break; + default:args.err = ECHILD; /* Child died unexpectedly */ + args.result = -1; + break; + } + } else if (!WIFEXITED(status)) { + args.err = EFAULT; /* Terminated due to an unhandled signal*/ + args.result = -1; + } + } else { + args.result = -1; + args.err = clone_errno; + } + } + + /* Restore the "dumpable" state of the process */ +failed: + if (!dumpable) + sys_prctl(PR_SET_DUMPABLE, dumpable); + + va_end(args.ap); + + errno = args.err; + return args.result; +} + +/* This function resumes the list of all linux threads that + * ListAllProcessThreads pauses before giving to its callback. + * The function returns non-zero if at least one thread was + * suspended and has now been resumed. + */ +int ResumeAllProcessThreads(int num_threads, pid_t *thread_pids) { + int detached_at_least_one = 0; + while (num_threads-- > 0) { + detached_at_least_one |= sys_ptrace_detach(thread_pids[num_threads]) >= 0; + } + return detached_at_least_one; +} + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/thirdparty/gperftools-2.0/src/base/linuxthreads.h b/src/thirdparty/gperftools-2.0/src/base/linuxthreads.h new file mode 100644 index 000000000..5c318fed7 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/linuxthreads.h @@ -0,0 +1,53 @@ +/* Copyright (c) 2005-2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Markus Gutschke + */ + +#ifndef _LINUXTHREADS_H +#define _LINUXTHREADS_H + +/* Include thread_lister.h to get the interface that we implement for linux. + */ + +/* We currently only support x86-32 and x86-64 on Linux. Porting to other + * related platforms should not be difficult. + */ +#if (defined(__i386__) || defined(__x86_64__) || defined(__ARM_ARCH_3__) || \ + defined(__mips__) || defined(__PPC__)) && defined(__linux) + +/* Define the THREADS symbol to make sure that there is exactly one core dumper + * built into the library. + */ +#define THREADS "Linux /proc" + +#endif + +#endif /* _LINUXTHREADS_H */ diff --git a/src/thirdparty/gperftools-2.0/src/base/logging.cc b/src/thirdparty/gperftools-2.0/src/base/logging.cc new file mode 100644 index 000000000..4b97858a3 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/logging.cc @@ -0,0 +1,107 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// This file just provides storage for FLAGS_verbose. + +#include +#include "base/logging.h" +#include "base/commandlineflags.h" + +DEFINE_int32(verbose, EnvToInt("PERFTOOLS_VERBOSE", 0), + "Set to numbers >0 for more verbose output, or <0 for less. " + "--verbose == -4 means we log fatal errors only."); + + +#if defined(_WIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__) + +// While windows does have a POSIX-compatible API +// (_open/_write/_close), it acquires memory. Using this lower-level +// windows API is the closest we can get to being "raw". +RawFD RawOpenForWriting(const char* filename) { + // CreateFile allocates memory if file_name isn't absolute, so if + // that ever becomes a problem then we ought to compute the absolute + // path on its behalf (perhaps the ntdll/kernel function isn't aware + // of the working directory?) + RawFD fd = CreateFileA(filename, GENERIC_WRITE, 0, NULL, + CREATE_ALWAYS, 0, NULL); + if (fd != kIllegalRawFD && GetLastError() == ERROR_ALREADY_EXISTS) + SetEndOfFile(fd); // truncate the existing file + return fd; +} + +void RawWrite(RawFD handle, const char* buf, size_t len) { + while (len > 0) { + DWORD wrote; + BOOL ok = WriteFile(handle, buf, len, &wrote, NULL); + // We do not use an asynchronous file handle, so ok==false means an error + if (!ok) break; + buf += wrote; + len -= wrote; + } +} + +void RawClose(RawFD handle) { + CloseHandle(handle); +} + +#else // _WIN32 || __CYGWIN__ || __CYGWIN32__ + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif + +// Re-run fn until it doesn't cause EINTR. +#define NO_INTR(fn) do {} while ((fn) < 0 && errno == EINTR) + +RawFD RawOpenForWriting(const char* filename) { + return open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0664); +} + +void RawWrite(RawFD fd, const char* buf, size_t len) { + while (len > 0) { + ssize_t r; + NO_INTR(r = write(fd, buf, len)); + if (r <= 0) break; + buf += r; + len -= r; + } +} + +void RawClose(RawFD fd) { + NO_INTR(close(fd)); +} + +#endif // _WIN32 || __CYGWIN__ || __CYGWIN32__ diff --git a/src/thirdparty/gperftools-2.0/src/base/logging.h b/src/thirdparty/gperftools-2.0/src/base/logging.h new file mode 100644 index 000000000..d6a6ab58a --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/logging.h @@ -0,0 +1,258 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// This file contains #include information about logging-related stuff. +// Pretty much everybody needs to #include this file so that they can +// log various happenings. +// +#ifndef _LOGGING_H_ +#define _LOGGING_H_ + +#include +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include // for write() +#endif +#include // for strlen(), strcmp() +#include +#include // for errno +#include "base/commandlineflags.h" + +// On some systems (like freebsd), we can't call write() at all in a +// global constructor, perhaps because errno hasn't been set up. +// (In windows, we can't call it because it might call malloc.) +// Calling the write syscall is safer (it doesn't set errno), so we +// prefer that. Note we don't care about errno for logging: we just +// do logging on a best-effort basis. +#if defined(_MSC_VER) +#define WRITE_TO_STDERR(buf, len) WriteToStderr(buf, len); // in port.cc +#elif defined(HAVE_SYS_SYSCALL_H) +#include +#define WRITE_TO_STDERR(buf, len) syscall(SYS_write, STDERR_FILENO, buf, len) +#else +#define WRITE_TO_STDERR(buf, len) write(STDERR_FILENO, buf, len) +#endif + +// MSVC and mingw define their own, safe version of vnsprintf (the +// windows one in broken) in port.cc. Everyone else can use the +// version here. We had to give it a unique name for windows. +#ifndef _WIN32 +# define perftools_vsnprintf vsnprintf +#endif + + +// We log all messages at this log-level and below. +// INFO == -1, WARNING == -2, ERROR == -3, FATAL == -4 +DECLARE_int32(verbose); + +// CHECK dies with a fatal error if condition is not true. It is *not* +// controlled by NDEBUG, so the check will be executed regardless of +// compilation mode. Therefore, it is safe to do things like: +// CHECK(fp->Write(x) == 4) +// Note we use write instead of printf/puts to avoid the risk we'll +// call malloc(). +#define CHECK(condition) \ + do { \ + if (!(condition)) { \ + WRITE_TO_STDERR("Check failed: " #condition "\n", \ + sizeof("Check failed: " #condition "\n")-1); \ + abort(); \ + } \ + } while (0) + +// This takes a message to print. The name is historical. +#define RAW_CHECK(condition, message) \ + do { \ + if (!(condition)) { \ + WRITE_TO_STDERR("Check failed: " #condition ": " message "\n", \ + sizeof("Check failed: " #condition ": " message "\n")-1);\ + abort(); \ + } \ + } while (0) + +// This is like RAW_CHECK, but only in debug-mode +#ifdef NDEBUG +enum { DEBUG_MODE = 0 }; +#define RAW_DCHECK(condition, message) +#else +enum { DEBUG_MODE = 1 }; +#define RAW_DCHECK(condition, message) RAW_CHECK(condition, message) +#endif + +// This prints errno as well. Note we use write instead of printf/puts to +// avoid the risk we'll call malloc(). +#define PCHECK(condition) \ + do { \ + if (!(condition)) { \ + const int err_no = errno; \ + WRITE_TO_STDERR("Check failed: " #condition ": ", \ + sizeof("Check failed: " #condition ": ")-1); \ + WRITE_TO_STDERR(strerror(err_no), strlen(strerror(err_no))); \ + WRITE_TO_STDERR("\n", sizeof("\n")-1); \ + abort(); \ + } \ + } while (0) + +// Helper macro for binary operators; prints the two values on error +// Don't use this macro directly in your code, use CHECK_EQ et al below + +// WARNING: These don't compile correctly if one of the arguments is a pointer +// and the other is NULL. To work around this, simply static_cast NULL to the +// type of the desired pointer. + +// TODO(jandrews): Also print the values in case of failure. Requires some +// sort of type-sensitive ToString() function. +#define CHECK_OP(op, val1, val2) \ + do { \ + if (!((val1) op (val2))) { \ + fprintf(stderr, "Check failed: %s %s %s\n", #val1, #op, #val2); \ + abort(); \ + } \ + } while (0) + +#define CHECK_EQ(val1, val2) CHECK_OP(==, val1, val2) +#define CHECK_NE(val1, val2) CHECK_OP(!=, val1, val2) +#define CHECK_LE(val1, val2) CHECK_OP(<=, val1, val2) +#define CHECK_LT(val1, val2) CHECK_OP(< , val1, val2) +#define CHECK_GE(val1, val2) CHECK_OP(>=, val1, val2) +#define CHECK_GT(val1, val2) CHECK_OP(> , val1, val2) + +// Synonyms for CHECK_* that are used in some unittests. +#define EXPECT_EQ(val1, val2) CHECK_EQ(val1, val2) +#define EXPECT_NE(val1, val2) CHECK_NE(val1, val2) +#define EXPECT_LE(val1, val2) CHECK_LE(val1, val2) +#define EXPECT_LT(val1, val2) CHECK_LT(val1, val2) +#define EXPECT_GE(val1, val2) CHECK_GE(val1, val2) +#define EXPECT_GT(val1, val2) CHECK_GT(val1, val2) +#define ASSERT_EQ(val1, val2) EXPECT_EQ(val1, val2) +#define ASSERT_NE(val1, val2) EXPECT_NE(val1, val2) +#define ASSERT_LE(val1, val2) EXPECT_LE(val1, val2) +#define ASSERT_LT(val1, val2) EXPECT_LT(val1, val2) +#define ASSERT_GE(val1, val2) EXPECT_GE(val1, val2) +#define ASSERT_GT(val1, val2) EXPECT_GT(val1, val2) +// As are these variants. +#define EXPECT_TRUE(cond) CHECK(cond) +#define EXPECT_FALSE(cond) CHECK(!(cond)) +#define EXPECT_STREQ(a, b) CHECK(strcmp(a, b) == 0) +#define ASSERT_TRUE(cond) EXPECT_TRUE(cond) +#define ASSERT_FALSE(cond) EXPECT_FALSE(cond) +#define ASSERT_STREQ(a, b) EXPECT_STREQ(a, b) + +// Used for (libc) functions that return -1 and set errno +#define CHECK_ERR(invocation) PCHECK((invocation) != -1) + +// A few more checks that only happen in debug mode +#ifdef NDEBUG +#define DCHECK_EQ(val1, val2) +#define DCHECK_NE(val1, val2) +#define DCHECK_LE(val1, val2) +#define DCHECK_LT(val1, val2) +#define DCHECK_GE(val1, val2) +#define DCHECK_GT(val1, val2) +#else +#define DCHECK_EQ(val1, val2) CHECK_EQ(val1, val2) +#define DCHECK_NE(val1, val2) CHECK_NE(val1, val2) +#define DCHECK_LE(val1, val2) CHECK_LE(val1, val2) +#define DCHECK_LT(val1, val2) CHECK_LT(val1, val2) +#define DCHECK_GE(val1, val2) CHECK_GE(val1, val2) +#define DCHECK_GT(val1, val2) CHECK_GT(val1, val2) +#endif + + +#ifdef ERROR +#undef ERROR // may conflict with ERROR macro on windows +#endif +enum LogSeverity {INFO = -1, WARNING = -2, ERROR = -3, FATAL = -4}; + +// NOTE: we add a newline to the end of the output if it's not there already +inline void LogPrintf(int severity, const char* pat, va_list ap) { + // We write directly to the stderr file descriptor and avoid FILE + // buffering because that may invoke malloc() + char buf[600]; + perftools_vsnprintf(buf, sizeof(buf)-1, pat, ap); + if (buf[0] != '\0' && buf[strlen(buf)-1] != '\n') { + assert(strlen(buf)+1 < sizeof(buf)); + strcat(buf, "\n"); + } + WRITE_TO_STDERR(buf, strlen(buf)); + if ((severity) == FATAL) + abort(); // LOG(FATAL) indicates a big problem, so don't run atexit() calls +} + +// Note that since the order of global constructors is unspecified, +// global code that calls RAW_LOG may execute before FLAGS_verbose is set. +// Such code will run with verbosity == 0 no matter what. +#define VLOG_IS_ON(severity) (FLAGS_verbose >= severity) + +// In a better world, we'd use __VA_ARGS__, but VC++ 7 doesn't support it. +#define LOG_PRINTF(severity, pat) do { \ + if (VLOG_IS_ON(severity)) { \ + va_list ap; \ + va_start(ap, pat); \ + LogPrintf(severity, pat, ap); \ + va_end(ap); \ + } \ +} while (0) + +// RAW_LOG is the main function; some synonyms are used in unittests. +inline void RAW_LOG(int lvl, const char* pat, ...) { LOG_PRINTF(lvl, pat); } +inline void RAW_VLOG(int lvl, const char* pat, ...) { LOG_PRINTF(lvl, pat); } +inline void LOG(int lvl, const char* pat, ...) { LOG_PRINTF(lvl, pat); } +inline void VLOG(int lvl, const char* pat, ...) { LOG_PRINTF(lvl, pat); } +inline void LOG_IF(int lvl, bool cond, const char* pat, ...) { + if (cond) LOG_PRINTF(lvl, pat); +} + +// This isn't technically logging, but it's also IO and also is an +// attempt to be "raw" -- that is, to not use any higher-level libc +// routines that might allocate memory or (ideally) try to allocate +// locks. We use an opaque file handle (not necessarily an int) +// to allow even more low-level stuff in the future. +// Like other "raw" routines, these functions are best effort, and +// thus don't return error codes (except RawOpenForWriting()). +#if defined(_WIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__) +#ifndef NOMINMAX +#define NOMINMAX // @#!$& windows +#endif +#include +typedef HANDLE RawFD; +const RawFD kIllegalRawFD = INVALID_HANDLE_VALUE; +#else +typedef int RawFD; +const RawFD kIllegalRawFD = -1; // what open returns if it fails +#endif // defined(_WIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__) + +RawFD RawOpenForWriting(const char* filename); // uses default permissions +void RawWrite(RawFD fd, const char* buf, size_t len); +void RawClose(RawFD fd); + +#endif // _LOGGING_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/low_level_alloc.cc b/src/thirdparty/gperftools-2.0/src/base/low_level_alloc.cc new file mode 100644 index 000000000..c043cb68b --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/low_level_alloc.cc @@ -0,0 +1,522 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// A low-level allocator that can be used by other low-level +// modules without introducing dependency cycles. +// This allocator is slow and wasteful of memory; +// it should not be used when performance is key. + +#include "base/low_level_alloc.h" +#include "base/dynamic_annotations.h" +#include "base/spinlock.h" +#include "base/logging.h" +#include "malloc_hook-inl.h" +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_MMAP +#include +#endif +#include // for placement-new + +// On systems (like freebsd) that don't define MAP_ANONYMOUS, use the old +// form of the name instead. +#ifndef MAP_ANONYMOUS +# define MAP_ANONYMOUS MAP_ANON +#endif + +// A first-fit allocator with amortized logarithmic free() time. + +// --------------------------------------------------------------------------- +static const int kMaxLevel = 30; + +// We put this class-only struct in a namespace to avoid polluting the +// global namespace with this struct name (thus risking an ODR violation). +namespace low_level_alloc_internal { + // This struct describes one allocated block, or one free block. + struct AllocList { + struct Header { + intptr_t size; // size of entire region, including this field. Must be + // first. Valid in both allocated and unallocated blocks + intptr_t magic; // kMagicAllocated or kMagicUnallocated xor this + LowLevelAlloc::Arena *arena; // pointer to parent arena + void *dummy_for_alignment; // aligns regions to 0 mod 2*sizeof(void*) + } header; + + // Next two fields: in unallocated blocks: freelist skiplist data + // in allocated blocks: overlaps with client data + int levels; // levels in skiplist used + AllocList *next[kMaxLevel]; // actually has levels elements. + // The AllocList node may not have room for + // all kMaxLevel entries. See max_fit in + // LLA_SkiplistLevels() + }; +} +using low_level_alloc_internal::AllocList; + + +// --------------------------------------------------------------------------- +// A trivial skiplist implementation. This is used to keep the freelist +// in address order while taking only logarithmic time per insert and delete. + +// An integer approximation of log2(size/base) +// Requires size >= base. +static int IntLog2(size_t size, size_t base) { + int result = 0; + for (size_t i = size; i > base; i >>= 1) { // i == floor(size/2**result) + result++; + } + // floor(size / 2**result) <= base < floor(size / 2**(result-1)) + // => log2(size/(base+1)) <= result < 1+log2(size/base) + // => result ~= log2(size/base) + return result; +} + +// Return a random integer n: p(n)=1/(2**n) if 1 <= n; p(n)=0 if n < 1. +static int Random() { + static int32 r = 1; // no locking---it's not critical + ANNOTATE_BENIGN_RACE(&r, "benign race, not critical."); + int result = 1; + while ((((r = r*1103515245 + 12345) >> 30) & 1) == 0) { + result++; + } + return result; +} + +// Return a number of skiplist levels for a node of size bytes, where +// base is the minimum node size. Compute level=log2(size / base)+n +// where n is 1 if random is false and otherwise a random number generated with +// the standard distribution for a skiplist: See Random() above. +// Bigger nodes tend to have more skiplist levels due to the log2(size / base) +// term, so first-fit searches touch fewer nodes. "level" is clipped so +// level max_fit) level = max_fit; + if (level > kMaxLevel-1) level = kMaxLevel - 1; + RAW_CHECK(level >= 1, "block not big enough for even one level"); + return level; +} + +// Return "atleast", the first element of AllocList *head s.t. *atleast >= *e. +// For 0 <= i < head->levels, set prev[i] to "no_greater", where no_greater +// points to the last element at level i in the AllocList less than *e, or is +// head if no such element exists. +static AllocList *LLA_SkiplistSearch(AllocList *head, + AllocList *e, AllocList **prev) { + AllocList *p = head; + for (int level = head->levels - 1; level >= 0; level--) { + for (AllocList *n; (n = p->next[level]) != 0 && n < e; p = n) { + } + prev[level] = p; + } + return (head->levels == 0) ? 0 : prev[0]->next[0]; +} + +// Insert element *e into AllocList *head. Set prev[] as LLA_SkiplistSearch. +// Requires that e->levels be previously set by the caller (using +// LLA_SkiplistLevels()) +static void LLA_SkiplistInsert(AllocList *head, AllocList *e, + AllocList **prev) { + LLA_SkiplistSearch(head, e, prev); + for (; head->levels < e->levels; head->levels++) { // extend prev pointers + prev[head->levels] = head; // to all *e's levels + } + for (int i = 0; i != e->levels; i++) { // add element to list + e->next[i] = prev[i]->next[i]; + prev[i]->next[i] = e; + } +} + +// Remove element *e from AllocList *head. Set prev[] as LLA_SkiplistSearch(). +// Requires that e->levels be previous set by the caller (using +// LLA_SkiplistLevels()) +static void LLA_SkiplistDelete(AllocList *head, AllocList *e, + AllocList **prev) { + AllocList *found = LLA_SkiplistSearch(head, e, prev); + RAW_CHECK(e == found, "element not in freelist"); + for (int i = 0; i != e->levels && prev[i]->next[i] == e; i++) { + prev[i]->next[i] = e->next[i]; + } + while (head->levels > 0 && head->next[head->levels - 1] == 0) { + head->levels--; // reduce head->levels if level unused + } +} + +// --------------------------------------------------------------------------- +// Arena implementation + +struct LowLevelAlloc::Arena { + Arena() : mu(SpinLock::LINKER_INITIALIZED) {} // does nothing; for static init + explicit Arena(int) : pagesize(0) {} // set pagesize to zero explicitly + // for non-static init + + SpinLock mu; // protects freelist, allocation_count, + // pagesize, roundup, min_size + AllocList freelist; // head of free list; sorted by addr (under mu) + int32 allocation_count; // count of allocated blocks (under mu) + int32 flags; // flags passed to NewArena (ro after init) + size_t pagesize; // ==getpagesize() (init under mu, then ro) + size_t roundup; // lowest power of 2 >= max(16,sizeof (AllocList)) + // (init under mu, then ro) + size_t min_size; // smallest allocation block size + // (init under mu, then ro) +}; + +// The default arena, which is used when 0 is passed instead of an Arena +// pointer. +static struct LowLevelAlloc::Arena default_arena; + +// Non-malloc-hooked arenas: used only to allocate metadata for arenas that +// do not want malloc hook reporting, so that for them there's no malloc hook +// reporting even during arena creation. +static struct LowLevelAlloc::Arena unhooked_arena; +static struct LowLevelAlloc::Arena unhooked_async_sig_safe_arena; + +// magic numbers to identify allocated and unallocated blocks +static const intptr_t kMagicAllocated = 0x4c833e95; +static const intptr_t kMagicUnallocated = ~kMagicAllocated; + +namespace { + class SCOPED_LOCKABLE ArenaLock { + public: + explicit ArenaLock(LowLevelAlloc::Arena *arena) + EXCLUSIVE_LOCK_FUNCTION(arena->mu) + : left_(false), mask_valid_(false), arena_(arena) { + if ((arena->flags & LowLevelAlloc::kAsyncSignalSafe) != 0) { + // We've decided not to support async-signal-safe arena use until + // there a demonstrated need. Here's how one could do it though + // (would need to be made more portable). +#if 0 + sigset_t all; + sigfillset(&all); + this->mask_valid_ = + (pthread_sigmask(SIG_BLOCK, &all, &this->mask_) == 0); +#else + RAW_CHECK(false, "We do not yet support async-signal-safe arena."); +#endif + } + this->arena_->mu.Lock(); + } + ~ArenaLock() { RAW_CHECK(this->left_, "haven't left Arena region"); } + void Leave() /*UNLOCK_FUNCTION()*/ { + this->arena_->mu.Unlock(); +#if 0 + if (this->mask_valid_) { + pthread_sigmask(SIG_SETMASK, &this->mask_, 0); + } +#endif + this->left_ = true; + } + private: + bool left_; // whether left region + bool mask_valid_; +#if 0 + sigset_t mask_; // old mask of blocked signals +#endif + LowLevelAlloc::Arena *arena_; + DISALLOW_COPY_AND_ASSIGN(ArenaLock); + }; +} // anonymous namespace + +// create an appropriate magic number for an object at "ptr" +// "magic" should be kMagicAllocated or kMagicUnallocated +inline static intptr_t Magic(intptr_t magic, AllocList::Header *ptr) { + return magic ^ reinterpret_cast(ptr); +} + +// Initialize the fields of an Arena +static void ArenaInit(LowLevelAlloc::Arena *arena) { + if (arena->pagesize == 0) { + arena->pagesize = getpagesize(); + // Round up block sizes to a power of two close to the header size. + arena->roundup = 16; + while (arena->roundup < sizeof (arena->freelist.header)) { + arena->roundup += arena->roundup; + } + // Don't allocate blocks less than twice the roundup size to avoid tiny + // free blocks. + arena->min_size = 2 * arena->roundup; + arena->freelist.header.size = 0; + arena->freelist.header.magic = + Magic(kMagicUnallocated, &arena->freelist.header); + arena->freelist.header.arena = arena; + arena->freelist.levels = 0; + memset(arena->freelist.next, 0, sizeof (arena->freelist.next)); + arena->allocation_count = 0; + if (arena == &default_arena) { + // Default arena should be hooked, e.g. for heap-checker to trace + // pointer chains through objects in the default arena. + arena->flags = LowLevelAlloc::kCallMallocHook; + } else if (arena == &unhooked_async_sig_safe_arena) { + arena->flags = LowLevelAlloc::kAsyncSignalSafe; + } else { + arena->flags = 0; // other arenas' flags may be overridden by client, + // but unhooked_arena will have 0 in 'flags'. + } + } +} + +// L < meta_data_arena->mu +LowLevelAlloc::Arena *LowLevelAlloc::NewArena(int32 flags, + Arena *meta_data_arena) { + RAW_CHECK(meta_data_arena != 0, "must pass a valid arena"); + if (meta_data_arena == &default_arena) { + if ((flags & LowLevelAlloc::kAsyncSignalSafe) != 0) { + meta_data_arena = &unhooked_async_sig_safe_arena; + } else if ((flags & LowLevelAlloc::kCallMallocHook) == 0) { + meta_data_arena = &unhooked_arena; + } + } + // Arena(0) uses the constructor for non-static contexts + Arena *result = + new (AllocWithArena(sizeof (*result), meta_data_arena)) Arena(0); + ArenaInit(result); + result->flags = flags; + return result; +} + +// L < arena->mu, L < arena->arena->mu +bool LowLevelAlloc::DeleteArena(Arena *arena) { + RAW_CHECK(arena != 0 && arena != &default_arena && arena != &unhooked_arena, + "may not delete default arena"); + ArenaLock section(arena); + bool empty = (arena->allocation_count == 0); + section.Leave(); + if (empty) { + while (arena->freelist.next[0] != 0) { + AllocList *region = arena->freelist.next[0]; + size_t size = region->header.size; + arena->freelist.next[0] = region->next[0]; + RAW_CHECK(region->header.magic == + Magic(kMagicUnallocated, ®ion->header), + "bad magic number in DeleteArena()"); + RAW_CHECK(region->header.arena == arena, + "bad arena pointer in DeleteArena()"); + RAW_CHECK(size % arena->pagesize == 0, + "empty arena has non-page-aligned block size"); + RAW_CHECK(reinterpret_cast(region) % arena->pagesize == 0, + "empty arena has non-page-aligned block"); + int munmap_result; + if ((arena->flags & LowLevelAlloc::kAsyncSignalSafe) == 0) { + munmap_result = munmap(region, size); + } else { + munmap_result = MallocHook::UnhookedMUnmap(region, size); + } + RAW_CHECK(munmap_result == 0, + "LowLevelAlloc::DeleteArena: munmap failed address"); + } + Free(arena); + } + return empty; +} + +// --------------------------------------------------------------------------- + +// Return value rounded up to next multiple of align. +// align must be a power of two. +static intptr_t RoundUp(intptr_t addr, intptr_t align) { + return (addr + align - 1) & ~(align - 1); +} + +// Equivalent to "return prev->next[i]" but with sanity checking +// that the freelist is in the correct order, that it +// consists of regions marked "unallocated", and that no two regions +// are adjacent in memory (they should have been coalesced). +// L < arena->mu +static AllocList *Next(int i, AllocList *prev, LowLevelAlloc::Arena *arena) { + RAW_CHECK(i < prev->levels, "too few levels in Next()"); + AllocList *next = prev->next[i]; + if (next != 0) { + RAW_CHECK(next->header.magic == Magic(kMagicUnallocated, &next->header), + "bad magic number in Next()"); + RAW_CHECK(next->header.arena == arena, + "bad arena pointer in Next()"); + if (prev != &arena->freelist) { + RAW_CHECK(prev < next, "unordered freelist"); + RAW_CHECK(reinterpret_cast(prev) + prev->header.size < + reinterpret_cast(next), "malformed freelist"); + } + } + return next; +} + +// Coalesce list item "a" with its successor if they are adjacent. +static void Coalesce(AllocList *a) { + AllocList *n = a->next[0]; + if (n != 0 && reinterpret_cast(a) + a->header.size == + reinterpret_cast(n)) { + LowLevelAlloc::Arena *arena = a->header.arena; + a->header.size += n->header.size; + n->header.magic = 0; + n->header.arena = 0; + AllocList *prev[kMaxLevel]; + LLA_SkiplistDelete(&arena->freelist, n, prev); + LLA_SkiplistDelete(&arena->freelist, a, prev); + a->levels = LLA_SkiplistLevels(a->header.size, arena->min_size, true); + LLA_SkiplistInsert(&arena->freelist, a, prev); + } +} + +// Adds block at location "v" to the free list +// L >= arena->mu +static void AddToFreelist(void *v, LowLevelAlloc::Arena *arena) { + AllocList *f = reinterpret_cast( + reinterpret_cast(v) - sizeof (f->header)); + RAW_CHECK(f->header.magic == Magic(kMagicAllocated, &f->header), + "bad magic number in AddToFreelist()"); + RAW_CHECK(f->header.arena == arena, + "bad arena pointer in AddToFreelist()"); + f->levels = LLA_SkiplistLevels(f->header.size, arena->min_size, true); + AllocList *prev[kMaxLevel]; + LLA_SkiplistInsert(&arena->freelist, f, prev); + f->header.magic = Magic(kMagicUnallocated, &f->header); + Coalesce(f); // maybe coalesce with successor + Coalesce(prev[0]); // maybe coalesce with predecessor +} + +// Frees storage allocated by LowLevelAlloc::Alloc(). +// L < arena->mu +void LowLevelAlloc::Free(void *v) { + if (v != 0) { + AllocList *f = reinterpret_cast( + reinterpret_cast(v) - sizeof (f->header)); + RAW_CHECK(f->header.magic == Magic(kMagicAllocated, &f->header), + "bad magic number in Free()"); + LowLevelAlloc::Arena *arena = f->header.arena; + if ((arena->flags & kCallMallocHook) != 0) { + MallocHook::InvokeDeleteHook(v); + } + ArenaLock section(arena); + AddToFreelist(v, arena); + RAW_CHECK(arena->allocation_count > 0, "nothing in arena to free"); + arena->allocation_count--; + section.Leave(); + } +} + +// allocates and returns a block of size bytes, to be freed with Free() +// L < arena->mu +static void *DoAllocWithArena(size_t request, LowLevelAlloc::Arena *arena) { + void *result = 0; + if (request != 0) { + AllocList *s; // will point to region that satisfies request + ArenaLock section(arena); + ArenaInit(arena); + // round up with header + size_t req_rnd = RoundUp(request + sizeof (s->header), arena->roundup); + for (;;) { // loop until we find a suitable region + // find the minimum levels that a block of this size must have + int i = LLA_SkiplistLevels(req_rnd, arena->min_size, false) - 1; + if (i < arena->freelist.levels) { // potential blocks exist + AllocList *before = &arena->freelist; // predecessor of s + while ((s = Next(i, before, arena)) != 0 && s->header.size < req_rnd) { + before = s; + } + if (s != 0) { // we found a region + break; + } + } + // we unlock before mmap() both because mmap() may call a callback hook, + // and because it may be slow. + arena->mu.Unlock(); + // mmap generous 64K chunks to decrease + // the chances/impact of fragmentation: + size_t new_pages_size = RoundUp(req_rnd, arena->pagesize * 16); + void *new_pages; + if ((arena->flags & LowLevelAlloc::kAsyncSignalSafe) != 0) { + new_pages = MallocHook::UnhookedMMap(0, new_pages_size, + PROT_WRITE|PROT_READ, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); + } else { + new_pages = mmap(0, new_pages_size, + PROT_WRITE|PROT_READ, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); + } + RAW_CHECK(new_pages != MAP_FAILED, "mmap error"); + arena->mu.Lock(); + s = reinterpret_cast(new_pages); + s->header.size = new_pages_size; + // Pretend the block is allocated; call AddToFreelist() to free it. + s->header.magic = Magic(kMagicAllocated, &s->header); + s->header.arena = arena; + AddToFreelist(&s->levels, arena); // insert new region into free list + } + AllocList *prev[kMaxLevel]; + LLA_SkiplistDelete(&arena->freelist, s, prev); // remove from free list + // s points to the first free region that's big enough + if (req_rnd + arena->min_size <= s->header.size) { // big enough to split + AllocList *n = reinterpret_cast + (req_rnd + reinterpret_cast(s)); + n->header.size = s->header.size - req_rnd; + n->header.magic = Magic(kMagicAllocated, &n->header); + n->header.arena = arena; + s->header.size = req_rnd; + AddToFreelist(&n->levels, arena); + } + s->header.magic = Magic(kMagicAllocated, &s->header); + RAW_CHECK(s->header.arena == arena, ""); + arena->allocation_count++; + section.Leave(); + result = &s->levels; + } + ANNOTATE_NEW_MEMORY(result, request); + return result; +} + +void *LowLevelAlloc::Alloc(size_t request) { + void *result = DoAllocWithArena(request, &default_arena); + if ((default_arena.flags & kCallMallocHook) != 0) { + // this call must be directly in the user-called allocator function + // for MallocHook::GetCallerStackTrace to work properly + MallocHook::InvokeNewHook(result, request); + } + return result; +} + +void *LowLevelAlloc::AllocWithArena(size_t request, Arena *arena) { + RAW_CHECK(arena != 0, "must pass a valid arena"); + void *result = DoAllocWithArena(request, arena); + if ((arena->flags & kCallMallocHook) != 0) { + // this call must be directly in the user-called allocator function + // for MallocHook::GetCallerStackTrace to work properly + MallocHook::InvokeNewHook(result, request); + } + return result; +} + +LowLevelAlloc::Arena *LowLevelAlloc::DefaultArena() { + return &default_arena; +} diff --git a/src/thirdparty/gperftools-2.0/src/base/low_level_alloc.h b/src/thirdparty/gperftools-2.0/src/base/low_level_alloc.h new file mode 100644 index 000000000..393b3d25b --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/low_level_alloc.h @@ -0,0 +1,106 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !defined(_BASE_LOW_LEVEL_ALLOC_H_) +#define _BASE_LOW_LEVEL_ALLOC_H_ + +// A simple thread-safe memory allocator that does not depend on +// mutexes or thread-specific data. It is intended to be used +// sparingly, and only when malloc() would introduce an unwanted +// dependency, such as inside the heap-checker. + +#include +#include // for size_t +#include "base/basictypes.h" + +class LowLevelAlloc { + public: + struct Arena; // an arena from which memory may be allocated + + // Returns a pointer to a block of at least "request" bytes + // that have been newly allocated from the specific arena. + // for Alloc() call the DefaultArena() is used. + // Returns 0 if passed request==0. + // Does not return 0 under other circumstances; it crashes if memory + // is not available. + static void *Alloc(size_t request) + ATTRIBUTE_SECTION(malloc_hook); + static void *AllocWithArena(size_t request, Arena *arena) + ATTRIBUTE_SECTION(malloc_hook); + + // Deallocates a region of memory that was previously allocated with + // Alloc(). Does nothing if passed 0. "s" must be either 0, + // or must have been returned from a call to Alloc() and not yet passed to + // Free() since that call to Alloc(). The space is returned to the arena + // from which it was allocated. + static void Free(void *s) ATTRIBUTE_SECTION(malloc_hook); + + // ATTRIBUTE_SECTION(malloc_hook) for Alloc* and Free + // are to put all callers of MallocHook::Invoke* in this module + // into special section, + // so that MallocHook::GetCallerStackTrace can function accurately. + + // Create a new arena. + // The root metadata for the new arena is allocated in the + // meta_data_arena; the DefaultArena() can be passed for meta_data_arena. + // These values may be ored into flags: + enum { + // Report calls to Alloc() and Free() via the MallocHook interface. + // Set in the DefaultArena. + kCallMallocHook = 0x0001, + + // Make calls to Alloc(), Free() be async-signal-safe. Not set in + // DefaultArena(). + kAsyncSignalSafe = 0x0002, + + // When used with DefaultArena(), the NewArena() and DeleteArena() calls + // obey the flags given explicitly in the NewArena() call, even if those + // flags differ from the settings in DefaultArena(). So the call + // NewArena(kAsyncSignalSafe, DefaultArena()) is itself async-signal-safe, + // as well as generatating an arena that provides async-signal-safe + // Alloc/Free. + }; + static Arena *NewArena(int32 flags, Arena *meta_data_arena); + + // Destroys an arena allocated by NewArena and returns true, + // provided no allocated blocks remain in the arena. + // If allocated blocks remain in the arena, does nothing and + // returns false. + // It is illegal to attempt to destroy the DefaultArena(). + static bool DeleteArena(Arena *arena); + + // The default arena that always exists. + static Arena *DefaultArena(); + + private: + LowLevelAlloc(); // no instances +}; + +#endif diff --git a/src/thirdparty/gperftools-2.0/src/base/simple_mutex.h b/src/thirdparty/gperftools-2.0/src/base/simple_mutex.h new file mode 100644 index 000000000..a97172ac5 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/simple_mutex.h @@ -0,0 +1,331 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// --- +// Author: Craig Silverstein. +// +// A simple mutex wrapper, supporting locks and read-write locks. +// You should assume the locks are *not* re-entrant. +// +// To use: you should define the following macros in your configure.ac: +// ACX_PTHREAD +// AC_RWLOCK +// The latter is defined in ../autoconf. +// +// This class is meant to be internal-only and should be wrapped by an +// internal namespace. Before you use this module, please give the +// name of your internal namespace for this module. Or, if you want +// to expose it, you'll want to move it to the Google namespace. We +// cannot put this class in global namespace because there can be some +// problems when we have multiple versions of Mutex in each shared object. +// +// NOTE: TryLock() is broken for NO_THREADS mode, at least in NDEBUG +// mode. +// +// CYGWIN NOTE: Cygwin support for rwlock seems to be buggy: +// http://www.cygwin.com/ml/cygwin/2008-12/msg00017.html +// Because of that, we might as well use windows locks for +// cygwin. They seem to be more reliable than the cygwin pthreads layer. +// +// TRICKY IMPLEMENTATION NOTE: +// This class is designed to be safe to use during +// dynamic-initialization -- that is, by global constructors that are +// run before main() starts. The issue in this case is that +// dynamic-initialization happens in an unpredictable order, and it +// could be that someone else's dynamic initializer could call a +// function that tries to acquire this mutex -- but that all happens +// before this mutex's constructor has run. (This can happen even if +// the mutex and the function that uses the mutex are in the same .cc +// file.) Basically, because Mutex does non-trivial work in its +// constructor, it's not, in the naive implementation, safe to use +// before dynamic initialization has run on it. +// +// The solution used here is to pair the actual mutex primitive with a +// bool that is set to true when the mutex is dynamically initialized. +// (Before that it's false.) Then we modify all mutex routines to +// look at the bool, and not try to lock/unlock until the bool makes +// it to true (which happens after the Mutex constructor has run.) +// +// This works because before main() starts -- particularly, during +// dynamic initialization -- there are no threads, so a) it's ok that +// the mutex operations are a no-op, since we don't need locking then +// anyway; and b) we can be quite confident our bool won't change +// state between a call to Lock() and a call to Unlock() (that would +// require a global constructor in one translation unit to call Lock() +// and another global constructor in another translation unit to call +// Unlock() later, which is pretty perverse). +// +// That said, it's tricky, and can conceivably fail; it's safest to +// avoid trying to acquire a mutex in a global constructor, if you +// can. One way it can fail is that a really smart compiler might +// initialize the bool to true at static-initialization time (too +// early) rather than at dynamic-initialization time. To discourage +// that, we set is_safe_ to true in code (not the constructor +// colon-initializer) and set it to true via a function that always +// evaluates to true, but that the compiler can't know always +// evaluates to true. This should be good enough. +// +// A related issue is code that could try to access the mutex +// after it's been destroyed in the global destructors (because +// the Mutex global destructor runs before some other global +// destructor, that tries to acquire the mutex). The way we +// deal with this is by taking a constructor arg that global +// mutexes should pass in, that causes the destructor to do no +// work. We still depend on the compiler not doing anything +// weird to a Mutex's memory after it is destroyed, but for a +// static global variable, that's pretty safe. + +#ifndef GOOGLE_MUTEX_H_ +#define GOOGLE_MUTEX_H_ + +#include + +#if defined(NO_THREADS) + typedef int MutexType; // to keep a lock-count +#elif defined(_WIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__) +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN // We only need minimal includes +# endif + // We need Windows NT or later for TryEnterCriticalSection(). If you + // don't need that functionality, you can remove these _WIN32_WINNT + // lines, and change TryLock() to assert(0) or something. +# ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0400 +# endif +# include + typedef CRITICAL_SECTION MutexType; +#elif defined(HAVE_PTHREAD) && defined(HAVE_RWLOCK) + // Needed for pthread_rwlock_*. If it causes problems, you could take it + // out, but then you'd have to unset HAVE_RWLOCK (at least on linux -- it + // *does* cause problems for FreeBSD, or MacOSX, but isn't needed + // for locking there.) +# ifdef __linux__ +# define _XOPEN_SOURCE 500 // may be needed to get the rwlock calls +# endif +# include + typedef pthread_rwlock_t MutexType; +#elif defined(HAVE_PTHREAD) +# include + typedef pthread_mutex_t MutexType; +#else +# error Need to implement mutex.h for your architecture, or #define NO_THREADS +#endif + +#include +#include // for abort() + +#define MUTEX_NAMESPACE perftools_mutex_namespace + +namespace MUTEX_NAMESPACE { + +class Mutex { + public: + // This is used for the single-arg constructor + enum LinkerInitialized { LINKER_INITIALIZED }; + + // Create a Mutex that is not held by anybody. This constructor is + // typically used for Mutexes allocated on the heap or the stack. + inline Mutex(); + // This constructor should be used for global, static Mutex objects. + // It inhibits work being done by the destructor, which makes it + // safer for code that tries to acqiure this mutex in their global + // destructor. + inline Mutex(LinkerInitialized); + + // Destructor + inline ~Mutex(); + + inline void Lock(); // Block if needed until free then acquire exclusively + inline void Unlock(); // Release a lock acquired via Lock() + inline bool TryLock(); // If free, Lock() and return true, else return false + // Note that on systems that don't support read-write locks, these may + // be implemented as synonyms to Lock() and Unlock(). So you can use + // these for efficiency, but don't use them anyplace where being able + // to do shared reads is necessary to avoid deadlock. + inline void ReaderLock(); // Block until free or shared then acquire a share + inline void ReaderUnlock(); // Release a read share of this Mutex + inline void WriterLock() { Lock(); } // Acquire an exclusive lock + inline void WriterUnlock() { Unlock(); } // Release a lock from WriterLock() + + private: + MutexType mutex_; + // We want to make sure that the compiler sets is_safe_ to true only + // when we tell it to, and never makes assumptions is_safe_ is + // always true. volatile is the most reliable way to do that. + volatile bool is_safe_; + // This indicates which constructor was called. + bool destroy_; + + inline void SetIsSafe() { is_safe_ = true; } + + // Catch the error of writing Mutex when intending MutexLock. + Mutex(Mutex* /*ignored*/) {} + // Disallow "evil" constructors + Mutex(const Mutex&); + void operator=(const Mutex&); +}; + +// Now the implementation of Mutex for various systems +#if defined(NO_THREADS) + +// When we don't have threads, we can be either reading or writing, +// but not both. We can have lots of readers at once (in no-threads +// mode, that's most likely to happen in recursive function calls), +// but only one writer. We represent this by having mutex_ be -1 when +// writing and a number > 0 when reading (and 0 when no lock is held). +// +// In debug mode, we assert these invariants, while in non-debug mode +// we do nothing, for efficiency. That's why everything is in an +// assert. + +Mutex::Mutex() : mutex_(0) { } +Mutex::Mutex(Mutex::LinkerInitialized) : mutex_(0) { } +Mutex::~Mutex() { assert(mutex_ == 0); } +void Mutex::Lock() { assert(--mutex_ == -1); } +void Mutex::Unlock() { assert(mutex_++ == -1); } +bool Mutex::TryLock() { if (mutex_) return false; Lock(); return true; } +void Mutex::ReaderLock() { assert(++mutex_ > 0); } +void Mutex::ReaderUnlock() { assert(mutex_-- > 0); } + +#elif defined(_WIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__) + +Mutex::Mutex() : destroy_(true) { + InitializeCriticalSection(&mutex_); + SetIsSafe(); +} +Mutex::Mutex(LinkerInitialized) : destroy_(false) { + InitializeCriticalSection(&mutex_); + SetIsSafe(); +} +Mutex::~Mutex() { if (destroy_) DeleteCriticalSection(&mutex_); } +void Mutex::Lock() { if (is_safe_) EnterCriticalSection(&mutex_); } +void Mutex::Unlock() { if (is_safe_) LeaveCriticalSection(&mutex_); } +bool Mutex::TryLock() { return is_safe_ ? + TryEnterCriticalSection(&mutex_) != 0 : true; } +void Mutex::ReaderLock() { Lock(); } // we don't have read-write locks +void Mutex::ReaderUnlock() { Unlock(); } + +#elif defined(HAVE_PTHREAD) && defined(HAVE_RWLOCK) + +#define SAFE_PTHREAD(fncall) do { /* run fncall if is_safe_ is true */ \ + if (is_safe_ && fncall(&mutex_) != 0) abort(); \ +} while (0) + +Mutex::Mutex() : destroy_(true) { + SetIsSafe(); + if (is_safe_ && pthread_rwlock_init(&mutex_, NULL) != 0) abort(); +} +Mutex::Mutex(Mutex::LinkerInitialized) : destroy_(false) { + SetIsSafe(); + if (is_safe_ && pthread_rwlock_init(&mutex_, NULL) != 0) abort(); +} +Mutex::~Mutex() { if (destroy_) SAFE_PTHREAD(pthread_rwlock_destroy); } +void Mutex::Lock() { SAFE_PTHREAD(pthread_rwlock_wrlock); } +void Mutex::Unlock() { SAFE_PTHREAD(pthread_rwlock_unlock); } +bool Mutex::TryLock() { return is_safe_ ? + pthread_rwlock_trywrlock(&mutex_) == 0 : true; } +void Mutex::ReaderLock() { SAFE_PTHREAD(pthread_rwlock_rdlock); } +void Mutex::ReaderUnlock() { SAFE_PTHREAD(pthread_rwlock_unlock); } +#undef SAFE_PTHREAD + +#elif defined(HAVE_PTHREAD) + +#define SAFE_PTHREAD(fncall) do { /* run fncall if is_safe_ is true */ \ + if (is_safe_ && fncall(&mutex_) != 0) abort(); \ +} while (0) + +Mutex::Mutex() : destroy_(true) { + SetIsSafe(); + if (is_safe_ && pthread_mutex_init(&mutex_, NULL) != 0) abort(); +} +Mutex::Mutex(Mutex::LinkerInitialized) : destroy_(false) { + SetIsSafe(); + if (is_safe_ && pthread_mutex_init(&mutex_, NULL) != 0) abort(); +} +Mutex::~Mutex() { if (destroy_) SAFE_PTHREAD(pthread_mutex_destroy); } +void Mutex::Lock() { SAFE_PTHREAD(pthread_mutex_lock); } +void Mutex::Unlock() { SAFE_PTHREAD(pthread_mutex_unlock); } +bool Mutex::TryLock() { return is_safe_ ? + pthread_mutex_trylock(&mutex_) == 0 : true; } +void Mutex::ReaderLock() { Lock(); } +void Mutex::ReaderUnlock() { Unlock(); } +#undef SAFE_PTHREAD + +#endif + +// -------------------------------------------------------------------------- +// Some helper classes + +// MutexLock(mu) acquires mu when constructed and releases it when destroyed. +class MutexLock { + public: + explicit MutexLock(Mutex *mu) : mu_(mu) { mu_->Lock(); } + ~MutexLock() { mu_->Unlock(); } + private: + Mutex * const mu_; + // Disallow "evil" constructors + MutexLock(const MutexLock&); + void operator=(const MutexLock&); +}; + +// ReaderMutexLock and WriterMutexLock do the same, for rwlocks +class ReaderMutexLock { + public: + explicit ReaderMutexLock(Mutex *mu) : mu_(mu) { mu_->ReaderLock(); } + ~ReaderMutexLock() { mu_->ReaderUnlock(); } + private: + Mutex * const mu_; + // Disallow "evil" constructors + ReaderMutexLock(const ReaderMutexLock&); + void operator=(const ReaderMutexLock&); +}; + +class WriterMutexLock { + public: + explicit WriterMutexLock(Mutex *mu) : mu_(mu) { mu_->WriterLock(); } + ~WriterMutexLock() { mu_->WriterUnlock(); } + private: + Mutex * const mu_; + // Disallow "evil" constructors + WriterMutexLock(const WriterMutexLock&); + void operator=(const WriterMutexLock&); +}; + +// Catch bug where variable name is omitted, e.g. MutexLock (&mu); +#define MutexLock(x) COMPILE_ASSERT(0, mutex_lock_decl_missing_var_name) +#define ReaderMutexLock(x) COMPILE_ASSERT(0, rmutex_lock_decl_missing_var_name) +#define WriterMutexLock(x) COMPILE_ASSERT(0, wmutex_lock_decl_missing_var_name) + +} // namespace MUTEX_NAMESPACE + +using namespace MUTEX_NAMESPACE; + +#undef MUTEX_NAMESPACE + +#endif /* #define GOOGLE_SIMPLE_MUTEX_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/base/spinlock.cc b/src/thirdparty/gperftools-2.0/src/base/spinlock.cc new file mode 100644 index 000000000..1413923fe --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/spinlock.cc @@ -0,0 +1,182 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Sanjay Ghemawat + */ + +#include +#include "base/spinlock.h" +#include "base/synchronization_profiling.h" +#include "base/spinlock_internal.h" +#include "base/cycleclock.h" +#include "base/sysinfo.h" /* for NumCPUs() */ + +// NOTE on the Lock-state values: +// +// kSpinLockFree represents the unlocked state +// kSpinLockHeld represents the locked state with no waiters +// +// Values greater than kSpinLockHeld represent the locked state with waiters, +// where the value is the time the current lock holder had to +// wait before obtaining the lock. The kSpinLockSleeper state is a special +// "locked with waiters" state that indicates that a sleeper needs to +// be woken, but the thread that just released the lock didn't wait. + +static int adaptive_spin_count = 0; + +const base::LinkerInitialized SpinLock::LINKER_INITIALIZED = + base::LINKER_INITIALIZED; + +namespace { +struct SpinLock_InitHelper { + SpinLock_InitHelper() { + // On multi-cpu machines, spin for longer before yielding + // the processor or sleeping. Reduces idle time significantly. + if (NumCPUs() > 1) { + adaptive_spin_count = 1000; + } + } +}; + +// Hook into global constructor execution: +// We do not do adaptive spinning before that, +// but nothing lock-intensive should be going on at that time. +static SpinLock_InitHelper init_helper; + +} // unnamed namespace + +// Monitor the lock to see if its value changes within some time period +// (adaptive_spin_count loop iterations). A timestamp indicating +// when the thread initially started waiting for the lock is passed in via +// the initial_wait_timestamp value. The total wait time in cycles for the +// lock is returned in the wait_cycles parameter. The last value read +// from the lock is returned from the method. +Atomic32 SpinLock::SpinLoop(int64 initial_wait_timestamp, + Atomic32* wait_cycles) { + int c = adaptive_spin_count; + while (base::subtle::NoBarrier_Load(&lockword_) != kSpinLockFree && --c > 0) { + } + Atomic32 spin_loop_wait_cycles = CalculateWaitCycles(initial_wait_timestamp); + Atomic32 lock_value = + base::subtle::Acquire_CompareAndSwap(&lockword_, kSpinLockFree, + spin_loop_wait_cycles); + *wait_cycles = spin_loop_wait_cycles; + return lock_value; +} + +void SpinLock::SlowLock() { + // The lock was not obtained initially, so this thread needs to wait for + // it. Record the current timestamp in the local variable wait_start_time + // so the total wait time can be stored in the lockword once this thread + // obtains the lock. + int64 wait_start_time = CycleClock::Now(); + Atomic32 wait_cycles; + Atomic32 lock_value = SpinLoop(wait_start_time, &wait_cycles); + + int lock_wait_call_count = 0; + while (lock_value != kSpinLockFree) { + // If the lock is currently held, but not marked as having a sleeper, mark + // it as having a sleeper. + if (lock_value == kSpinLockHeld) { + // Here, just "mark" that the thread is going to sleep. Don't store the + // lock wait time in the lock as that will cause the current lock + // owner to think it experienced contention. + lock_value = base::subtle::Acquire_CompareAndSwap(&lockword_, + kSpinLockHeld, + kSpinLockSleeper); + if (lock_value == kSpinLockHeld) { + // Successfully transitioned to kSpinLockSleeper. Pass + // kSpinLockSleeper to the SpinLockWait routine to properly indicate + // the last lock_value observed. + lock_value = kSpinLockSleeper; + } else if (lock_value == kSpinLockFree) { + // Lock is free again, so try and aquire it before sleeping. The + // new lock state will be the number of cycles this thread waited if + // this thread obtains the lock. + lock_value = base::subtle::Acquire_CompareAndSwap(&lockword_, + kSpinLockFree, + wait_cycles); + continue; // skip the delay at the end of the loop + } + } + + // Wait for an OS specific delay. + base::internal::SpinLockDelay(&lockword_, lock_value, + ++lock_wait_call_count); + // Spin again after returning from the wait routine to give this thread + // some chance of obtaining the lock. + lock_value = SpinLoop(wait_start_time, &wait_cycles); + } +} + +// The wait time for contentionz lock profiling must fit into 32 bits. +// However, the lower 32-bits of the cycle counter wrap around too quickly +// with high frequency processors, so a right-shift by 7 is performed to +// quickly divide the cycles by 128. Using these 32 bits, reduces the +// granularity of time measurement to 128 cycles, and loses track +// of wait time for waits greater than 109 seconds on a 5 GHz machine +// [(2^32 cycles/5 Ghz)*128 = 109.95 seconds]. Waits this long should be +// very rare and the reduced granularity should not be an issue given +// processors in the Google fleet operate at a minimum of one billion +// cycles/sec. +enum { PROFILE_TIMESTAMP_SHIFT = 7 }; + +void SpinLock::SlowUnlock(uint64 wait_cycles) { + base::internal::SpinLockWake(&lockword_, false); // wake waiter if necessary + + // Collect contentionz profile info, expanding the wait_cycles back out to + // the full value. If wait_cycles is <= kSpinLockSleeper, then no wait + // was actually performed, so don't record the wait time. Note, that the + // CalculateWaitCycles method adds in kSpinLockSleeper cycles + // unconditionally to guarantee the wait time is not kSpinLockFree or + // kSpinLockHeld. The adding in of these small number of cycles may + // overestimate the contention by a slight amount 50% of the time. However, + // if this code tried to correct for that addition by subtracting out the + // kSpinLockSleeper amount that would underestimate the contention slightly + // 50% of the time. Both ways get the wrong answer, so the code + // overestimates to be more conservative. Overestimating also makes the code + // a little simpler. + // + if (wait_cycles > kSpinLockSleeper) { + base::SubmitSpinLockProfileData(this, + wait_cycles << PROFILE_TIMESTAMP_SHIFT); + } +} + +inline int32 SpinLock::CalculateWaitCycles(int64 wait_start_time) { + int32 wait_cycles = ((CycleClock::Now() - wait_start_time) >> + PROFILE_TIMESTAMP_SHIFT); + // The number of cycles waiting for the lock is used as both the + // wait_cycles and lock value, so it can't be kSpinLockFree or + // kSpinLockHeld. Make sure the value returned is at least + // kSpinLockSleeper. + wait_cycles |= kSpinLockSleeper; + return wait_cycles; +} diff --git a/src/thirdparty/gperftools-2.0/src/base/spinlock.h b/src/thirdparty/gperftools-2.0/src/base/spinlock.h new file mode 100644 index 000000000..c2be4fd72 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/spinlock.h @@ -0,0 +1,151 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Sanjay Ghemawat + */ + +// +// Fast spinlocks (at least on x86, a lock/unlock pair is approximately +// half the cost of a Mutex because the unlock just does a store instead +// of a compare-and-swap which is expensive). + +// SpinLock is async signal safe. +// If used within a signal handler, all lock holders +// should block the signal even outside the signal handler. + +#ifndef BASE_SPINLOCK_H_ +#define BASE_SPINLOCK_H_ + +#include +#include "base/atomicops.h" +#include "base/basictypes.h" +#include "base/dynamic_annotations.h" +#include "base/thread_annotations.h" + +class LOCKABLE SpinLock { + public: + SpinLock() : lockword_(kSpinLockFree) { } + + // Special constructor for use with static SpinLock objects. E.g., + // + // static SpinLock lock(base::LINKER_INITIALIZED); + // + // When intialized using this constructor, we depend on the fact + // that the linker has already initialized the memory appropriately. + // A SpinLock constructed like this can be freely used from global + // initializers without worrying about the order in which global + // initializers run. + explicit SpinLock(base::LinkerInitialized /*x*/) { + // Does nothing; lockword_ is already initialized + } + + // Acquire this SpinLock. + // TODO(csilvers): uncomment the annotation when we figure out how to + // support this macro with 0 args (see thread_annotations.h) + inline void Lock() /*EXCLUSIVE_LOCK_FUNCTION()*/ { + if (base::subtle::Acquire_CompareAndSwap(&lockword_, kSpinLockFree, + kSpinLockHeld) != kSpinLockFree) { + SlowLock(); + } + ANNOTATE_RWLOCK_ACQUIRED(this, 1); + } + + // Try to acquire this SpinLock without blocking and return true if the + // acquisition was successful. If the lock was not acquired, false is + // returned. If this SpinLock is free at the time of the call, TryLock + // will return true with high probability. + inline bool TryLock() EXCLUSIVE_TRYLOCK_FUNCTION(true) { + bool res = + (base::subtle::Acquire_CompareAndSwap(&lockword_, kSpinLockFree, + kSpinLockHeld) == kSpinLockFree); + if (res) { + ANNOTATE_RWLOCK_ACQUIRED(this, 1); + } + return res; + } + + // Release this SpinLock, which must be held by the calling thread. + // TODO(csilvers): uncomment the annotation when we figure out how to + // support this macro with 0 args (see thread_annotations.h) + inline void Unlock() /*UNLOCK_FUNCTION()*/ { + uint64 wait_cycles = + static_cast(base::subtle::NoBarrier_Load(&lockword_)); + ANNOTATE_RWLOCK_RELEASED(this, 1); + base::subtle::Release_Store(&lockword_, kSpinLockFree); + if (wait_cycles != kSpinLockHeld) { + // Collect contentionz profile info, and speed the wakeup of any waiter. + // The wait_cycles value indicates how long this thread spent waiting + // for the lock. + SlowUnlock(wait_cycles); + } + } + + // Determine if the lock is held. When the lock is held by the invoking + // thread, true will always be returned. Intended to be used as + // CHECK(lock.IsHeld()). + inline bool IsHeld() const { + return base::subtle::NoBarrier_Load(&lockword_) != kSpinLockFree; + } + + static const base::LinkerInitialized LINKER_INITIALIZED; // backwards compat + private: + enum { kSpinLockFree = 0 }; + enum { kSpinLockHeld = 1 }; + enum { kSpinLockSleeper = 2 }; + + volatile Atomic32 lockword_; + + void SlowLock(); + void SlowUnlock(uint64 wait_cycles); + Atomic32 SpinLoop(int64 initial_wait_timestamp, Atomic32* wait_cycles); + inline int32 CalculateWaitCycles(int64 wait_start_time); + + DISALLOW_COPY_AND_ASSIGN(SpinLock); +}; + +// Corresponding locker object that arranges to acquire a spinlock for +// the duration of a C++ scope. +class SCOPED_LOCKABLE SpinLockHolder { + private: + SpinLock* lock_; + public: + inline explicit SpinLockHolder(SpinLock* l) EXCLUSIVE_LOCK_FUNCTION(l) + : lock_(l) { + l->Lock(); + } + // TODO(csilvers): uncomment the annotation when we figure out how to + // support this macro with 0 args (see thread_annotations.h) + inline ~SpinLockHolder() /*UNLOCK_FUNCTION()*/ { lock_->Unlock(); } +}; +// Catch bug where variable name is omitted, e.g. SpinLockHolder (&lock); +#define SpinLockHolder(x) COMPILE_ASSERT(0, spin_lock_decl_missing_var_name) + + +#endif // BASE_SPINLOCK_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/spinlock_internal.cc b/src/thirdparty/gperftools-2.0/src/base/spinlock_internal.cc new file mode 100644 index 000000000..b9faddef2 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/spinlock_internal.cc @@ -0,0 +1,102 @@ +/* Copyright (c) 2010, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// The OS-specific header included below must provide two calls: +// base::internal::SpinLockDelay() and base::internal::SpinLockWake(). +// See spinlock_internal.h for the spec of SpinLockWake(). + +// void SpinLockDelay(volatile Atomic32 *w, int32 value, int loop) +// SpinLockDelay() generates an apprproate spin delay on iteration "loop" of a +// spin loop on location *w, whose previously observed value was "value". +// SpinLockDelay() may do nothing, may yield the CPU, may sleep a clock tick, +// or may wait for a delay that can be truncated by a call to SpinlockWake(w). +// In all cases, it must return in bounded time even if SpinlockWake() is not +// called. + +#include "base/spinlock_internal.h" + +// forward declaration for use by spinlock_*-inl.h +namespace base { namespace internal { static int SuggestedDelayNS(int loop); }} + +#if defined(_WIN32) +#include "base/spinlock_win32-inl.h" +#elif defined(__linux__) +#include "base/spinlock_linux-inl.h" +#else +#include "base/spinlock_posix-inl.h" +#endif + +namespace base { +namespace internal { + +// See spinlock_internal.h for spec. +int32 SpinLockWait(volatile Atomic32 *w, int n, + const SpinLockWaitTransition trans[]) { + int32 v; + bool done = false; + for (int loop = 0; !done; loop++) { + v = base::subtle::Acquire_Load(w); + int i; + for (i = 0; i != n && v != trans[i].from; i++) { + } + if (i == n) { + SpinLockDelay(w, v, loop); // no matching transition + } else if (trans[i].to == v || // null transition + base::subtle::Acquire_CompareAndSwap(w, v, trans[i].to) == v) { + done = trans[i].done; + } + } + return v; +} + +// Return a suggested delay in nanoseconds for iteration number "loop" +static int SuggestedDelayNS(int loop) { + // Weak pseudo-random number generator to get some spread between threads + // when many are spinning. + static base::subtle::Atomic64 rand; + uint64 r = base::subtle::NoBarrier_Load(&rand); + r = 0x5deece66dLL * r + 0xb; // numbers from nrand48() + base::subtle::NoBarrier_Store(&rand, r); + + r <<= 16; // 48-bit random number now in top 48-bits. + if (loop < 0 || loop > 32) { // limit loop to 0..32 + loop = 32; + } + // loop>>3 cannot exceed 4 because loop cannot exceed 32. + // Select top 20..24 bits of lower 48 bits, + // giving approximately 0ms to 16ms. + // Mean is exponential in loop for first 32 iterations, then 8ms. + // The futex path multiplies this by 16, since we expect explicit wakeups + // almost always on that path. + return r >> (44 - (loop >> 3)); +} + +} // namespace internal +} // namespace base diff --git a/src/thirdparty/gperftools-2.0/src/base/spinlock_internal.h b/src/thirdparty/gperftools-2.0/src/base/spinlock_internal.h new file mode 100644 index 000000000..44942609f --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/spinlock_internal.h @@ -0,0 +1,64 @@ +/* Copyright (c) 2010, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * This file is an internal part spinlock.cc and once.cc + * It may not be used directly by code outside of //base. + */ + +#ifndef BASE_SPINLOCK_INTERNAL_H_ +#define BASE_SPINLOCK_INTERNAL_H_ + +#include +#include "base/basictypes.h" +#include "base/atomicops.h" + +namespace base { +namespace internal { + +// SpinLockWait() waits until it can perform one of several transitions from +// "from" to "to". It returns when it performs a transition where done==true. +struct SpinLockWaitTransition { + int32 from; + int32 to; + bool done; +}; + +// Wait until *w can transition from trans[i].from to trans[i].to for some i +// satisfying 0<=i +#include +#include +#include +#include "base/linux_syscall_support.h" + +#define FUTEX_WAIT 0 +#define FUTEX_WAKE 1 +#define FUTEX_PRIVATE_FLAG 128 + +static bool have_futex; +static int futex_private_flag = FUTEX_PRIVATE_FLAG; + +namespace { +static struct InitModule { + InitModule() { + int x = 0; + // futexes are ints, so we can use them only when + // that's the same size as the lockword_ in SpinLock. +#ifdef __arm__ + // ARM linux doesn't support sys_futex1(void*, int, int, struct timespec*); + have_futex = 0; +#else + have_futex = (sizeof (Atomic32) == sizeof (int) && + sys_futex(&x, FUTEX_WAKE, 1, 0) >= 0); +#endif + if (have_futex && + sys_futex(&x, FUTEX_WAKE | futex_private_flag, 1, 0) < 0) { + futex_private_flag = 0; + } + } +} init_module; + +} // anonymous namespace + + +namespace base { +namespace internal { + +void SpinLockDelay(volatile Atomic32 *w, int32 value, int loop) { + if (loop != 0) { + int save_errno = errno; + struct timespec tm; + tm.tv_sec = 0; + if (have_futex) { + tm.tv_nsec = base::internal::SuggestedDelayNS(loop); + } else { + tm.tv_nsec = 2000001; // above 2ms so linux 2.4 doesn't spin + } + if (have_futex) { + tm.tv_nsec *= 16; // increase the delay; we expect explicit wakeups + sys_futex(reinterpret_cast(const_cast(w)), + FUTEX_WAIT | futex_private_flag, + value, reinterpret_cast(&tm)); + } else { + nanosleep(&tm, NULL); + } + errno = save_errno; + } +} + +void SpinLockWake(volatile Atomic32 *w, bool all) { + if (have_futex) { + sys_futex(reinterpret_cast(const_cast(w)), + FUTEX_WAKE | futex_private_flag, all? INT_MAX : 1, 0); + } +} + +} // namespace internal +} // namespace base diff --git a/src/thirdparty/gperftools-2.0/src/base/spinlock_posix-inl.h b/src/thirdparty/gperftools-2.0/src/base/spinlock_posix-inl.h new file mode 100644 index 000000000..e1d43b7db --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/spinlock_posix-inl.h @@ -0,0 +1,62 @@ +/* Copyright (c) 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * This file is a Posix-specific part of spinlock_internal.cc + */ + +#include +#include +#ifdef HAVE_SCHED_H +#include /* For sched_yield() */ +#endif +#include /* For nanosleep() */ + +namespace base { +namespace internal { + +void SpinLockDelay(volatile Atomic32 *w, int32 value, int loop) { + int save_errno = errno; + if (loop == 0) { + } else if (loop == 1) { + sched_yield(); + } else { + struct timespec tm; + tm.tv_sec = 0; + tm.tv_nsec = base::internal::SuggestedDelayNS(loop); + nanosleep(&tm, NULL); + } + errno = save_errno; +} + +void SpinLockWake(volatile Atomic32 *w, bool all) { +} + +} // namespace internal +} // namespace base diff --git a/src/thirdparty/gperftools-2.0/src/base/spinlock_win32-inl.h b/src/thirdparty/gperftools-2.0/src/base/spinlock_win32-inl.h new file mode 100644 index 000000000..64decd267 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/spinlock_win32-inl.h @@ -0,0 +1,53 @@ +/* Copyright (c) 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * This file is a Win32-specific part of spinlock_internal.cc + */ + + +#include + +namespace base { +namespace internal { + +void SpinLockDelay(volatile Atomic32 *w, int32 value, int loop) { + if (loop == 0) { + } else if (loop == 1) { + Sleep(0); + } else { + Sleep(base::internal::SuggestedDelayNS(loop) / 1000000); + } +} + +void SpinLockWake(volatile Atomic32 *w, bool all) { +} + +} // namespace internal +} // namespace base diff --git a/src/thirdparty/gperftools-2.0/src/base/stl_allocator.h b/src/thirdparty/gperftools-2.0/src/base/stl_allocator.h new file mode 100644 index 000000000..8276a83d7 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/stl_allocator.h @@ -0,0 +1,97 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Maxim Lifantsev + */ + + +#ifndef BASE_STL_ALLOCATOR_H_ +#define BASE_STL_ALLOCATOR_H_ + +#include + +#include // for ptrdiff_t +#include + +#include "base/logging.h" + +// Generic allocator class for STL objects +// that uses a given type-less allocator Alloc, which must provide: +// static void* Alloc::Allocate(size_t size); +// static void Alloc::Free(void* ptr, size_t size); +// +// STL_Allocator provides the same thread-safety +// guarantees as MyAlloc. +// +// Usage example: +// set, STL_Allocator > my_set; +// CAVEAT: Parts of the code below are probably specific +// to the STL version(s) we are using. +// The code is simply lifted from what std::allocator<> provides. +template +class STL_Allocator { + public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef T* pointer; + typedef const T* const_pointer; + typedef T& reference; + typedef const T& const_reference; + typedef T value_type; + + template struct rebind { + typedef STL_Allocator other; + }; + + STL_Allocator() { } + STL_Allocator(const STL_Allocator&) { } + template STL_Allocator(const STL_Allocator&) { } + ~STL_Allocator() { } + + pointer address(reference x) const { return &x; } + const_pointer address(const_reference x) const { return &x; } + + pointer allocate(size_type n, const void* = 0) { + RAW_DCHECK((n * sizeof(T)) / sizeof(T) == n, "n is too big to allocate"); + return static_cast(Alloc::Allocate(n * sizeof(T))); + } + void deallocate(pointer p, size_type n) { Alloc::Free(p, n * sizeof(T)); } + + size_type max_size() const { return size_t(-1) / sizeof(T); } + + void construct(pointer p, const T& val) { ::new(p) T(val); } + void construct(pointer p) { ::new(p) T(); } + void destroy(pointer p) { p->~T(); } + + // There's no state, so these allocators are always equal + bool operator==(const STL_Allocator&) const { return true; } +}; + +#endif // BASE_STL_ALLOCATOR_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/synchronization_profiling.h b/src/thirdparty/gperftools-2.0/src/base/synchronization_profiling.h new file mode 100644 index 000000000..cf02c218a --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/synchronization_profiling.h @@ -0,0 +1,50 @@ +/* Copyright (c) 2010, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Chris Ruemmler + */ + +#ifndef BASE_AUXILIARY_SYNCHRONIZATION_PROFILING_H_ +#define BASE_AUXILIARY_SYNCHRONIZATION_PROFILING_H_ + +#include "base/basictypes.h" + +namespace base { + +// We can do contention-profiling of SpinLocks, but the code is in +// mutex.cc, which is not always linked in with spinlock. Hence we +// provide a weak definition, which are used if mutex.cc isn't linked in. + +// Submit the number of cycles the spinlock spent contending. +ATTRIBUTE_WEAK extern void SubmitSpinLockProfileData(const void *, int64); +extern void SubmitSpinLockProfileData(const void *contendedlock, + int64 wait_cycles) {} +} +#endif // BASE_AUXILIARY_SYNCHRONIZATION_PROFILING_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/sysinfo.cc b/src/thirdparty/gperftools-2.0/src/base/sysinfo.cc new file mode 100644 index 000000000..2559158b9 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/sysinfo.cc @@ -0,0 +1,985 @@ +// Copyright (c) 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#if (defined(_WIN32) || defined(__MINGW32__)) && !defined(__CYGWIN__) && !defined(__CYGWIN32) +# define PLATFORM_WINDOWS 1 +#endif + +#include // for getenv() +#include // for snprintf(), sscanf() +#include // for memmove(), memchr(), etc. +#include // for open() +#include // for errno +#ifdef HAVE_UNISTD_H +#include // for read() +#endif +#if defined __MACH__ // Mac OS X, almost certainly +#include // for iterating over dll's in ProcMapsIter +#include // for iterating over dll's in ProcMapsIter +#include +#include // how we figure out numcpu's on OS X +#elif defined __FreeBSD__ +#include +#elif defined __sun__ // Solaris +#include // for, e.g., prmap_t +#elif defined(PLATFORM_WINDOWS) +#include // for getpid() (actually, _getpid()) +#include // for SHGetValueA() +#include // for Module32First() +#endif +#include "base/sysinfo.h" +#include "base/commandlineflags.h" +#include "base/dynamic_annotations.h" // for RunningOnValgrind +#include "base/logging.h" +#include "base/cycleclock.h" + +#ifdef PLATFORM_WINDOWS +#ifdef MODULEENTRY32 +// In a change from the usual W-A pattern, there is no A variant of +// MODULEENTRY32. Tlhelp32.h #defines the W variant, but not the A. +// In unicode mode, tlhelp32.h #defines MODULEENTRY32 to be +// MODULEENTRY32W. These #undefs are the only way I see to get back +// access to the original, ascii struct (and related functions). +#undef MODULEENTRY32 +#undef Module32First +#undef Module32Next +#undef PMODULEENTRY32 +#undef LPMODULEENTRY32 +#endif /* MODULEENTRY32 */ +// MinGW doesn't seem to define this, perhaps some windowsen don't either. +#ifndef TH32CS_SNAPMODULE32 +#define TH32CS_SNAPMODULE32 0 +#endif /* TH32CS_SNAPMODULE32 */ +#endif /* PLATFORM_WINDOWS */ + +// Re-run fn until it doesn't cause EINTR. +#define NO_INTR(fn) do {} while ((fn) < 0 && errno == EINTR) + +// open/read/close can set errno, which may be illegal at this +// time, so prefer making the syscalls directly if we can. +#ifdef HAVE_SYS_SYSCALL_H +# include +#endif +#ifdef SYS_open // solaris 11, at least sometimes, only defines SYS_openat +# define safeopen(filename, mode) syscall(SYS_open, filename, mode) +#else +# define safeopen(filename, mode) open(filename, mode) +#endif +#ifdef SYS_read +# define saferead(fd, buffer, size) syscall(SYS_read, fd, buffer, size) +#else +# define saferead(fd, buffer, size) read(fd, buffer, size) +#endif +#ifdef SYS_close +# define safeclose(fd) syscall(SYS_close, fd) +#else +# define safeclose(fd) close(fd) +#endif + +// ---------------------------------------------------------------------- +// GetenvBeforeMain() +// GetUniquePathFromEnv() +// Some non-trivial getenv-related functions. +// ---------------------------------------------------------------------- + +// It's not safe to call getenv() in the malloc hooks, because they +// might be called extremely early, before libc is done setting up +// correctly. In particular, the thread library may not be done +// setting up errno. So instead, we use the built-in __environ array +// if it exists, and otherwise read /proc/self/environ directly, using +// system calls to read the file, and thus avoid setting errno. +// /proc/self/environ has a limit of how much data it exports (around +// 8K), so it's not an ideal solution. +const char* GetenvBeforeMain(const char* name) { +#if defined(HAVE___ENVIRON) // if we have it, it's declared in unistd.h + if (__environ) { // can exist but be NULL, if statically linked + const int namelen = strlen(name); + for (char** p = __environ; *p; p++) { + if (!memcmp(*p, name, namelen) && (*p)[namelen] == '=') // it's a match + return *p + namelen+1; // point after = + } + return NULL; + } +#endif +#if defined(PLATFORM_WINDOWS) + // TODO(mbelshe) - repeated calls to this function will overwrite the + // contents of the static buffer. + static char envvar_buf[1024]; // enough to hold any envvar we care about + if (!GetEnvironmentVariableA(name, envvar_buf, sizeof(envvar_buf)-1)) + return NULL; + return envvar_buf; +#endif + // static is ok because this function should only be called before + // main(), when we're single-threaded. + static char envbuf[16<<10]; + if (*envbuf == '\0') { // haven't read the environ yet + int fd = safeopen("/proc/self/environ", O_RDONLY); + // The -2 below guarantees the last two bytes of the buffer will be \0\0 + if (fd == -1 || // unable to open the file, fall back onto libc + saferead(fd, envbuf, sizeof(envbuf) - 2) < 0) { // error reading file + RAW_VLOG(1, "Unable to open /proc/self/environ, falling back " + "on getenv(\"%s\"), which may not work", name); + if (fd != -1) safeclose(fd); + return getenv(name); + } + safeclose(fd); + } + const int namelen = strlen(name); + const char* p = envbuf; + while (*p != '\0') { // will happen at the \0\0 that terminates the buffer + // proc file has the format NAME=value\0NAME=value\0NAME=value\0... + const char* endp = (char*)memchr(p, '\0', sizeof(envbuf) - (p - envbuf)); + if (endp == NULL) // this entry isn't NUL terminated + return NULL; + else if (!memcmp(p, name, namelen) && p[namelen] == '=') // it's a match + return p + namelen+1; // point after = + p = endp + 1; + } + return NULL; // env var never found +} + +// This takes as an argument an environment-variable name (like +// CPUPROFILE) whose value is supposed to be a file-path, and sets +// path to that path, and returns true. If the env var doesn't exist, +// or is the empty string, leave path unchanged and returns false. +// The reason this is non-trivial is that this function handles munged +// pathnames. Here's why: +// +// If we're a child process of the 'main' process, we can't just use +// getenv("CPUPROFILE") -- the parent process will be using that path. +// Instead we append our pid to the pathname. How do we tell if we're a +// child process? Ideally we'd set an environment variable that all +// our children would inherit. But -- and this is seemingly a bug in +// gcc -- if you do a setenv() in a shared libarary in a global +// constructor, the environment setting is lost by the time main() is +// called. The only safe thing we can do in such a situation is to +// modify the existing envvar. So we do a hack: in the parent, we set +// the high bit of the 1st char of CPUPROFILE. In the child, we +// notice the high bit is set and append the pid(). This works +// assuming cpuprofile filenames don't normally have the high bit set +// in their first character! If that assumption is violated, we'll +// still get a profile, but one with an unexpected name. +// TODO(csilvers): set an envvar instead when we can do it reliably. +bool GetUniquePathFromEnv(const char* env_name, char* path) { + char* envval = getenv(env_name); + if (envval == NULL || *envval == '\0') + return false; + if (envval[0] & 128) { // high bit is set + snprintf(path, PATH_MAX, "%c%s_%u", // add pid and clear high bit + envval[0] & 127, envval+1, (unsigned int)(getpid())); + } else { + snprintf(path, PATH_MAX, "%s", envval); + envval[0] |= 128; // set high bit for kids to see + } + return true; +} + +// ---------------------------------------------------------------------- +// CyclesPerSecond() +// NumCPUs() +// It's important this not call malloc! -- they may be called at +// global-construct time, before we've set up all our proper malloc +// hooks and such. +// ---------------------------------------------------------------------- + +static double cpuinfo_cycles_per_second = 1.0; // 0.0 might be dangerous +static int cpuinfo_num_cpus = 1; // Conservative guess + +void SleepForMilliseconds(int milliseconds) { +#ifdef PLATFORM_WINDOWS + _sleep(milliseconds); // Windows's _sleep takes milliseconds argument +#else + // Sleep for a few milliseconds + struct timespec sleep_time; + sleep_time.tv_sec = milliseconds / 1000; + sleep_time.tv_nsec = (milliseconds % 1000) * 1000000; + while (nanosleep(&sleep_time, &sleep_time) != 0 && errno == EINTR) + ; // Ignore signals and wait for the full interval to elapse. +#endif +} + +// Helper function estimates cycles/sec by observing cycles elapsed during +// sleep(). Using small sleep time decreases accuracy significantly. +static int64 EstimateCyclesPerSecond(const int estimate_time_ms) { + assert(estimate_time_ms > 0); + if (estimate_time_ms <= 0) + return 1; + double multiplier = 1000.0 / (double)estimate_time_ms; // scale by this much + + const int64 start_ticks = CycleClock::Now(); + SleepForMilliseconds(estimate_time_ms); + const int64 guess = int64(multiplier * (CycleClock::Now() - start_ticks)); + return guess; +} + +// ReadIntFromFile is only called on linux and cygwin platforms. +#if defined(__linux__) || defined(__CYGWIN__) || defined(__CYGWIN32__) +// Helper function for reading an int from a file. Returns true if successful +// and the memory location pointed to by value is set to the value read. +static bool ReadIntFromFile(const char *file, int *value) { + bool ret = false; + int fd = open(file, O_RDONLY); + if (fd != -1) { + char line[1024]; + char* err; + memset(line, '\0', sizeof(line)); + read(fd, line, sizeof(line) - 1); + const int temp_value = strtol(line, &err, 10); + if (line[0] != '\0' && (*err == '\n' || *err == '\0')) { + *value = temp_value; + ret = true; + } + close(fd); + } + return ret; +} +#endif + +// WARNING: logging calls back to InitializeSystemInfo() so it must +// not invoke any logging code. Also, InitializeSystemInfo() can be +// called before main() -- in fact it *must* be since already_called +// isn't protected -- before malloc hooks are properly set up, so +// we make an effort not to call any routines which might allocate +// memory. + +static void InitializeSystemInfo() { + static bool already_called = false; // safe if we run before threads + if (already_called) return; + already_called = true; + + bool saw_mhz = false; + + if (RunningOnValgrind()) { + // Valgrind may slow the progress of time artificially (--scale-time=N + // option). We thus can't rely on CPU Mhz info stored in /sys or /proc + // files. Thus, actually measure the cps. + cpuinfo_cycles_per_second = EstimateCyclesPerSecond(100); + saw_mhz = true; + } + +#if defined(__linux__) || defined(__CYGWIN__) || defined(__CYGWIN32__) + char line[1024]; + char* err; + int freq; + + // If the kernel is exporting the tsc frequency use that. There are issues + // where cpuinfo_max_freq cannot be relied on because the BIOS may be + // exporintg an invalid p-state (on x86) or p-states may be used to put the + // processor in a new mode (turbo mode). Essentially, those frequencies + // cannot always be relied upon. The same reasons apply to /proc/cpuinfo as + // well. + if (!saw_mhz && + ReadIntFromFile("/sys/devices/system/cpu/cpu0/tsc_freq_khz", &freq)) { + // The value is in kHz (as the file name suggests). For example, on a + // 2GHz warpstation, the file contains the value "2000000". + cpuinfo_cycles_per_second = freq * 1000.0; + saw_mhz = true; + } + + // If CPU scaling is in effect, we want to use the *maximum* frequency, + // not whatever CPU speed some random processor happens to be using now. + if (!saw_mhz && + ReadIntFromFile("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq", + &freq)) { + // The value is in kHz. For example, on a 2GHz machine, the file + // contains the value "2000000". + cpuinfo_cycles_per_second = freq * 1000.0; + saw_mhz = true; + } + + // Read /proc/cpuinfo for other values, and if there is no cpuinfo_max_freq. + const char* pname = "/proc/cpuinfo"; + int fd = open(pname, O_RDONLY); + if (fd == -1) { + perror(pname); + if (!saw_mhz) { + cpuinfo_cycles_per_second = EstimateCyclesPerSecond(1000); + } + return; // TODO: use generic tester instead? + } + + double bogo_clock = 1.0; + bool saw_bogo = false; + int num_cpus = 0; + line[0] = line[1] = '\0'; + int chars_read = 0; + do { // we'll exit when the last read didn't read anything + // Move the next line to the beginning of the buffer + const int oldlinelen = strlen(line); + if (sizeof(line) == oldlinelen + 1) // oldlinelen took up entire line + line[0] = '\0'; + else // still other lines left to save + memmove(line, line + oldlinelen+1, sizeof(line) - (oldlinelen+1)); + // Terminate the new line, reading more if we can't find the newline + char* newline = strchr(line, '\n'); + if (newline == NULL) { + const int linelen = strlen(line); + const int bytes_to_read = sizeof(line)-1 - linelen; + assert(bytes_to_read > 0); // because the memmove recovered >=1 bytes + chars_read = read(fd, line + linelen, bytes_to_read); + line[linelen + chars_read] = '\0'; + newline = strchr(line, '\n'); + } + if (newline != NULL) + *newline = '\0'; + + // When parsing the "cpu MHz" and "bogomips" (fallback) entries, we only + // accept postive values. Some environments (virtual machines) report zero, + // which would cause infinite looping in WallTime_Init. + if (!saw_mhz && strncasecmp(line, "cpu MHz", sizeof("cpu MHz")-1) == 0) { + const char* freqstr = strchr(line, ':'); + if (freqstr) { + cpuinfo_cycles_per_second = strtod(freqstr+1, &err) * 1000000.0; + if (freqstr[1] != '\0' && *err == '\0' && cpuinfo_cycles_per_second > 0) + saw_mhz = true; + } + } else if (strncasecmp(line, "bogomips", sizeof("bogomips")-1) == 0) { + const char* freqstr = strchr(line, ':'); + if (freqstr) { + bogo_clock = strtod(freqstr+1, &err) * 1000000.0; + if (freqstr[1] != '\0' && *err == '\0' && bogo_clock > 0) + saw_bogo = true; + } + } else if (strncasecmp(line, "processor", sizeof("processor")-1) == 0) { + num_cpus++; // count up every time we see an "processor :" entry + } + } while (chars_read > 0); + close(fd); + + if (!saw_mhz) { + if (saw_bogo) { + // If we didn't find anything better, we'll use bogomips, but + // we're not happy about it. + cpuinfo_cycles_per_second = bogo_clock; + } else { + // If we don't even have bogomips, we'll use the slow estimation. + cpuinfo_cycles_per_second = EstimateCyclesPerSecond(1000); + } + } + if (cpuinfo_cycles_per_second == 0.0) { + cpuinfo_cycles_per_second = 1.0; // maybe unnecessary, but safe + } + if (num_cpus > 0) { + cpuinfo_num_cpus = num_cpus; + } + +#elif defined __FreeBSD__ + // For this sysctl to work, the machine must be configured without + // SMP, APIC, or APM support. hz should be 64-bit in freebsd 7.0 + // and later. Before that, it's a 32-bit quantity (and gives the + // wrong answer on machines faster than 2^32 Hz). See + // http://lists.freebsd.org/pipermail/freebsd-i386/2004-November/001846.html + // But also compare FreeBSD 7.0: + // http://fxr.watson.org/fxr/source/i386/i386/tsc.c?v=RELENG70#L223 + // 231 error = sysctl_handle_quad(oidp, &freq, 0, req); + // To FreeBSD 6.3 (it's the same in 6-STABLE): + // http://fxr.watson.org/fxr/source/i386/i386/tsc.c?v=RELENG6#L131 + // 139 error = sysctl_handle_int(oidp, &freq, sizeof(freq), req); +#if __FreeBSD__ >= 7 + uint64_t hz = 0; +#else + unsigned int hz = 0; +#endif + size_t sz = sizeof(hz); + const char *sysctl_path = "machdep.tsc_freq"; + if ( sysctlbyname(sysctl_path, &hz, &sz, NULL, 0) != 0 ) { + fprintf(stderr, "Unable to determine clock rate from sysctl: %s: %s\n", + sysctl_path, strerror(errno)); + cpuinfo_cycles_per_second = EstimateCyclesPerSecond(1000); + } else { + cpuinfo_cycles_per_second = hz; + } + // TODO(csilvers): also figure out cpuinfo_num_cpus + +#elif defined(PLATFORM_WINDOWS) +# pragma comment(lib, "shlwapi.lib") // for SHGetValue() + // In NT, read MHz from the registry. If we fail to do so or we're in win9x + // then make a crude estimate. + OSVERSIONINFO os; + os.dwOSVersionInfoSize = sizeof(os); + DWORD data, data_size = sizeof(data); + if (GetVersionEx(&os) && + os.dwPlatformId == VER_PLATFORM_WIN32_NT && + SUCCEEDED(SHGetValueA(HKEY_LOCAL_MACHINE, + "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", + "~MHz", NULL, &data, &data_size))) + cpuinfo_cycles_per_second = (int64)data * (int64)(1000 * 1000); // was mhz + else + cpuinfo_cycles_per_second = EstimateCyclesPerSecond(500); // TODO <500? + + // Get the number of processors. + SYSTEM_INFO info; + GetSystemInfo(&info); + cpuinfo_num_cpus = info.dwNumberOfProcessors; + +#elif defined(__MACH__) && defined(__APPLE__) + // returning "mach time units" per second. the current number of elapsed + // mach time units can be found by calling uint64 mach_absolute_time(); + // while not as precise as actual CPU cycles, it is accurate in the face + // of CPU frequency scaling and multi-cpu/core machines. + // Our mac users have these types of machines, and accuracy + // (i.e. correctness) trumps precision. + // See cycleclock.h: CycleClock::Now(), which returns number of mach time + // units on Mac OS X. + mach_timebase_info_data_t timebase_info; + mach_timebase_info(&timebase_info); + double mach_time_units_per_nanosecond = + static_cast(timebase_info.denom) / + static_cast(timebase_info.numer); + cpuinfo_cycles_per_second = mach_time_units_per_nanosecond * 1e9; + + int num_cpus = 0; + size_t size = sizeof(num_cpus); + int numcpus_name[] = { CTL_HW, HW_NCPU }; + if (::sysctl(numcpus_name, arraysize(numcpus_name), &num_cpus, &size, 0, 0) + == 0 + && (size == sizeof(num_cpus))) + cpuinfo_num_cpus = num_cpus; + +#else + // Generic cycles per second counter + cpuinfo_cycles_per_second = EstimateCyclesPerSecond(1000); +#endif +} + +double CyclesPerSecond(void) { + InitializeSystemInfo(); + return cpuinfo_cycles_per_second; +} + +int NumCPUs(void) { + InitializeSystemInfo(); + return cpuinfo_num_cpus; +} + +// ---------------------------------------------------------------------- +// HasPosixThreads() +// Return true if we're running POSIX (e.g., NPTL on Linux) +// threads, as opposed to a non-POSIX thread libary. The thing +// that we care about is whether a thread's pid is the same as +// the thread that spawned it. If so, this function returns +// true. +// ---------------------------------------------------------------------- +bool HasPosixThreads() { +#if defined(__linux__) +#ifndef _CS_GNU_LIBPTHREAD_VERSION +#define _CS_GNU_LIBPTHREAD_VERSION 3 +#endif + char buf[32]; + // We assume that, if confstr() doesn't know about this name, then + // the same glibc is providing LinuxThreads. + if (confstr(_CS_GNU_LIBPTHREAD_VERSION, buf, sizeof(buf)) == 0) + return false; + return strncmp(buf, "NPTL", 4) == 0; +#elif defined(PLATFORM_WINDOWS) || defined(__CYGWIN__) || defined(__CYGWIN32__) + return false; +#else // other OS + return true; // Assume that everything else has Posix +#endif // else OS_LINUX +} + +// ---------------------------------------------------------------------- + +#if defined __linux__ || defined __FreeBSD__ || defined __sun__ || defined __CYGWIN__ || defined __CYGWIN32__ +static void ConstructFilename(const char* spec, pid_t pid, + char* buf, int buf_size) { + CHECK_LT(snprintf(buf, buf_size, + spec, + static_cast(pid ? pid : getpid())), buf_size); +} +#endif + +// A templatized helper function instantiated for Mach (OS X) only. +// It can handle finding info for both 32 bits and 64 bits. +// Returns true if it successfully handled the hdr, false else. +#ifdef __MACH__ // Mac OS X, almost certainly +template +static bool NextExtMachHelper(const mach_header* hdr, + int current_image, int current_load_cmd, + uint64 *start, uint64 *end, char **flags, + uint64 *offset, int64 *inode, char **filename, + uint64 *file_mapping, uint64 *file_pages, + uint64 *anon_mapping, uint64 *anon_pages, + dev_t *dev) { + static char kDefaultPerms[5] = "r-xp"; + if (hdr->magic != kMagic) + return false; + const char* lc = (const char *)hdr + sizeof(MachHeader); + // TODO(csilvers): make this not-quadradic (increment and hold state) + for (int j = 0; j < current_load_cmd; j++) // advance to *our* load_cmd + lc += ((const load_command *)lc)->cmdsize; + if (((const load_command *)lc)->cmd == kLCSegment) { + const intptr_t dlloff = _dyld_get_image_vmaddr_slide(current_image); + const SegmentCommand* sc = (const SegmentCommand *)lc; + if (start) *start = sc->vmaddr + dlloff; + if (end) *end = sc->vmaddr + sc->vmsize + dlloff; + if (flags) *flags = kDefaultPerms; // can we do better? + if (offset) *offset = sc->fileoff; + if (inode) *inode = 0; + if (filename) + *filename = const_cast(_dyld_get_image_name(current_image)); + if (file_mapping) *file_mapping = 0; + if (file_pages) *file_pages = 0; // could we use sc->filesize? + if (anon_mapping) *anon_mapping = 0; + if (anon_pages) *anon_pages = 0; + if (dev) *dev = 0; + return true; + } + + return false; +} +#endif + +ProcMapsIterator::ProcMapsIterator(pid_t pid) { + Init(pid, NULL, false); +} + +ProcMapsIterator::ProcMapsIterator(pid_t pid, Buffer *buffer) { + Init(pid, buffer, false); +} + +ProcMapsIterator::ProcMapsIterator(pid_t pid, Buffer *buffer, + bool use_maps_backing) { + Init(pid, buffer, use_maps_backing); +} + +void ProcMapsIterator::Init(pid_t pid, Buffer *buffer, + bool use_maps_backing) { + pid_ = pid; + using_maps_backing_ = use_maps_backing; + dynamic_buffer_ = NULL; + if (!buffer) { + // If the user didn't pass in any buffer storage, allocate it + // now. This is the normal case; the signal handler passes in a + // static buffer. + buffer = dynamic_buffer_ = new Buffer; + } else { + dynamic_buffer_ = NULL; + } + + ibuf_ = buffer->buf_; + + stext_ = etext_ = nextline_ = ibuf_; + ebuf_ = ibuf_ + Buffer::kBufSize - 1; + nextline_ = ibuf_; + +#if defined(__linux__) || defined(__CYGWIN__) || defined(__CYGWIN32__) + if (use_maps_backing) { // don't bother with clever "self" stuff in this case + ConstructFilename("/proc/%d/maps_backing", pid, ibuf_, Buffer::kBufSize); + } else if (pid == 0) { + // We have to kludge a bit to deal with the args ConstructFilename + // expects. The 1 is never used -- it's only impt. that it's not 0. + ConstructFilename("/proc/self/maps", 1, ibuf_, Buffer::kBufSize); + } else { + ConstructFilename("/proc/%d/maps", pid, ibuf_, Buffer::kBufSize); + } + // No error logging since this can be called from the crash dump + // handler at awkward moments. Users should call Valid() before + // using. + NO_INTR(fd_ = open(ibuf_, O_RDONLY)); +#elif defined(__FreeBSD__) + // We don't support maps_backing on freebsd + if (pid == 0) { + ConstructFilename("/proc/curproc/map", 1, ibuf_, Buffer::kBufSize); + } else { + ConstructFilename("/proc/%d/map", pid, ibuf_, Buffer::kBufSize); + } + NO_INTR(fd_ = open(ibuf_, O_RDONLY)); +#elif defined(__sun__) + if (pid == 0) { + ConstructFilename("/proc/self/map", 1, ibuf_, Buffer::kBufSize); + } else { + ConstructFilename("/proc/%d/map", pid, ibuf_, Buffer::kBufSize); + } + NO_INTR(fd_ = open(ibuf_, O_RDONLY)); +#elif defined(__MACH__) + current_image_ = _dyld_image_count(); // count down from the top + current_load_cmd_ = -1; +#elif defined(PLATFORM_WINDOWS) + snapshot_ = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | + TH32CS_SNAPMODULE32, + GetCurrentProcessId()); + memset(&module_, 0, sizeof(module_)); +#else + fd_ = -1; // so Valid() is always false +#endif + +} + +ProcMapsIterator::~ProcMapsIterator() { +#if defined(PLATFORM_WINDOWS) + if (snapshot_ != INVALID_HANDLE_VALUE) CloseHandle(snapshot_); +#elif defined(__MACH__) + // no cleanup necessary! +#else + if (fd_ >= 0) NO_INTR(close(fd_)); +#endif + delete dynamic_buffer_; +} + +bool ProcMapsIterator::Valid() const { +#if defined(PLATFORM_WINDOWS) + return snapshot_ != INVALID_HANDLE_VALUE; +#elif defined(__MACH__) + return 1; +#else + return fd_ != -1; +#endif +} + +bool ProcMapsIterator::Next(uint64 *start, uint64 *end, char **flags, + uint64 *offset, int64 *inode, char **filename) { + return NextExt(start, end, flags, offset, inode, filename, NULL, NULL, + NULL, NULL, NULL); +} + +// This has too many arguments. It should really be building +// a map object and returning it. The problem is that this is called +// when the memory allocator state is undefined, hence the arguments. +bool ProcMapsIterator::NextExt(uint64 *start, uint64 *end, char **flags, + uint64 *offset, int64 *inode, char **filename, + uint64 *file_mapping, uint64 *file_pages, + uint64 *anon_mapping, uint64 *anon_pages, + dev_t *dev) { + +#if defined(__linux__) || defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__CYGWIN32__) + do { + // Advance to the start of the next line + stext_ = nextline_; + + // See if we have a complete line in the buffer already + nextline_ = static_cast(memchr (stext_, '\n', etext_ - stext_)); + if (!nextline_) { + // Shift/fill the buffer so we do have a line + int count = etext_ - stext_; + + // Move the current text to the start of the buffer + memmove(ibuf_, stext_, count); + stext_ = ibuf_; + etext_ = ibuf_ + count; + + int nread = 0; // fill up buffer with text + while (etext_ < ebuf_) { + NO_INTR(nread = read(fd_, etext_, ebuf_ - etext_)); + if (nread > 0) + etext_ += nread; + else + break; + } + + // Zero out remaining characters in buffer at EOF to avoid returning + // garbage from subsequent calls. + if (etext_ != ebuf_ && nread == 0) { + memset(etext_, 0, ebuf_ - etext_); + } + *etext_ = '\n'; // sentinel; safe because ibuf extends 1 char beyond ebuf + nextline_ = static_cast(memchr (stext_, '\n', etext_ + 1 - stext_)); + } + *nextline_ = 0; // turn newline into nul + nextline_ += ((nextline_ < etext_)? 1 : 0); // skip nul if not end of text + // stext_ now points at a nul-terminated line + uint64 tmpstart, tmpend, tmpoffset; + int64 tmpinode; + int major, minor; + unsigned filename_offset = 0; +#if defined(__linux__) + // for now, assume all linuxes have the same format + if (sscanf(stext_, "%"SCNx64"-%"SCNx64" %4s %"SCNx64" %x:%x %"SCNd64" %n", + start ? start : &tmpstart, + end ? end : &tmpend, + flags_, + offset ? offset : &tmpoffset, + &major, &minor, + inode ? inode : &tmpinode, &filename_offset) != 7) continue; +#elif defined(__CYGWIN__) || defined(__CYGWIN32__) + // cygwin is like linux, except the third field is the "entry point" + // rather than the offset (see format_process_maps at + // http://cygwin.com/cgi-bin/cvsweb.cgi/src/winsup/cygwin/fhandler_process.cc?rev=1.89&content-type=text/x-cvsweb-markup&cvsroot=src + // Offset is always be 0 on cygwin: cygwin implements an mmap + // by loading the whole file and then calling NtMapViewOfSection. + // Cygwin also seems to set its flags kinda randomly; use windows default. + char tmpflags[5]; + if (offset) + *offset = 0; + strcpy(flags_, "r-xp"); + if (sscanf(stext_, "%llx-%llx %4s %llx %x:%x %lld %n", + start ? start : &tmpstart, + end ? end : &tmpend, + tmpflags, + &tmpoffset, + &major, &minor, + inode ? inode : &tmpinode, &filename_offset) != 7) continue; +#elif defined(__FreeBSD__) + // For the format, see http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/fs/procfs/procfs_map.c?rev=1.31&content-type=text/x-cvsweb-markup + tmpstart = tmpend = tmpoffset = 0; + tmpinode = 0; + major = minor = 0; // can't get this info in freebsd + if (inode) + *inode = 0; // nor this + if (offset) + *offset = 0; // seems like this should be in there, but maybe not + // start end resident privateresident obj(?) prot refcnt shadowcnt + // flags copy_on_write needs_copy type filename: + // 0x8048000 0x804a000 2 0 0xc104ce70 r-x 1 0 0x0 COW NC vnode /bin/cat + if (sscanf(stext_, "0x%"SCNx64" 0x%"SCNx64" %*d %*d %*p %3s %*d %*d 0x%*x %*s %*s %*s %n", + start ? start : &tmpstart, + end ? end : &tmpend, + flags_, + &filename_offset) != 3) continue; +#endif + + // Depending on the Linux kernel being used, there may or may not be a space + // after the inode if there is no filename. sscanf will in such situations + // nondeterministically either fill in filename_offset or not (the results + // differ on multiple calls in the same run even with identical arguments). + // We don't want to wander off somewhere beyond the end of the string. + size_t stext_length = strlen(stext_); + if (filename_offset == 0 || filename_offset > stext_length) + filename_offset = stext_length; + + // We found an entry + if (flags) *flags = flags_; + if (filename) *filename = stext_ + filename_offset; + if (dev) *dev = minor | (major << 8); + + if (using_maps_backing_) { + // Extract and parse physical page backing info. + char *backing_ptr = stext_ + filename_offset + + strlen(stext_+filename_offset); + + // find the second '(' + int paren_count = 0; + while (--backing_ptr > stext_) { + if (*backing_ptr == '(') { + ++paren_count; + if (paren_count >= 2) { + uint64 tmp_file_mapping; + uint64 tmp_file_pages; + uint64 tmp_anon_mapping; + uint64 tmp_anon_pages; + + sscanf(backing_ptr+1, "F %"SCNx64" %"SCNd64") (A %"SCNx64" %"SCNd64")", + file_mapping ? file_mapping : &tmp_file_mapping, + file_pages ? file_pages : &tmp_file_pages, + anon_mapping ? anon_mapping : &tmp_anon_mapping, + anon_pages ? anon_pages : &tmp_anon_pages); + // null terminate the file name (there is a space + // before the first (. + backing_ptr[-1] = 0; + break; + } + } + } + } + + return true; + } while (etext_ > ibuf_); +#elif defined(__sun__) + // This is based on MA_READ == 4, MA_WRITE == 2, MA_EXEC == 1 + static char kPerms[8][4] = { "---", "--x", "-w-", "-wx", + "r--", "r-x", "rw-", "rwx" }; + COMPILE_ASSERT(MA_READ == 4, solaris_ma_read_must_equal_4); + COMPILE_ASSERT(MA_WRITE == 2, solaris_ma_write_must_equal_2); + COMPILE_ASSERT(MA_EXEC == 1, solaris_ma_exec_must_equal_1); + Buffer object_path; + int nread = 0; // fill up buffer with text + NO_INTR(nread = read(fd_, ibuf_, sizeof(prmap_t))); + if (nread == sizeof(prmap_t)) { + long inode_from_mapname = 0; + prmap_t* mapinfo = reinterpret_cast(ibuf_); + // Best-effort attempt to get the inode from the filename. I think the + // two middle ints are major and minor device numbers, but I'm not sure. + sscanf(mapinfo->pr_mapname, "ufs.%*d.%*d.%ld", &inode_from_mapname); + + if (pid_ == 0) { + CHECK_LT(snprintf(object_path.buf_, Buffer::kBufSize, + "/proc/self/path/%s", mapinfo->pr_mapname), + Buffer::kBufSize); + } else { + CHECK_LT(snprintf(object_path.buf_, Buffer::kBufSize, + "/proc/%d/path/%s", + static_cast(pid_), mapinfo->pr_mapname), + Buffer::kBufSize); + } + ssize_t len = readlink(object_path.buf_, current_filename_, PATH_MAX); + CHECK_LT(len, PATH_MAX); + if (len < 0) + len = 0; + current_filename_[len] = '\0'; + + if (start) *start = mapinfo->pr_vaddr; + if (end) *end = mapinfo->pr_vaddr + mapinfo->pr_size; + if (flags) *flags = kPerms[mapinfo->pr_mflags & 7]; + if (offset) *offset = mapinfo->pr_offset; + if (inode) *inode = inode_from_mapname; + if (filename) *filename = current_filename_; + if (file_mapping) *file_mapping = 0; + if (file_pages) *file_pages = 0; + if (anon_mapping) *anon_mapping = 0; + if (anon_pages) *anon_pages = 0; + if (dev) *dev = 0; + return true; + } +#elif defined(__MACH__) + // We return a separate entry for each segment in the DLL. (TODO(csilvers): + // can we do better?) A DLL ("image") has load-commands, some of which + // talk about segment boundaries. + // cf image_for_address from http://svn.digium.com/view/asterisk/team/oej/minivoicemail/dlfcn.c?revision=53912 + for (; current_image_ >= 0; current_image_--) { + const mach_header* hdr = _dyld_get_image_header(current_image_); + if (!hdr) continue; + if (current_load_cmd_ < 0) // set up for this image + current_load_cmd_ = hdr->ncmds; // again, go from the top down + + // We start with the next load command (we've already looked at this one). + for (current_load_cmd_--; current_load_cmd_ >= 0; current_load_cmd_--) { +#ifdef MH_MAGIC_64 + if (NextExtMachHelper( + hdr, current_image_, current_load_cmd_, + start, end, flags, offset, inode, filename, + file_mapping, file_pages, anon_mapping, + anon_pages, dev)) { + return true; + } +#endif + if (NextExtMachHelper( + hdr, current_image_, current_load_cmd_, + start, end, flags, offset, inode, filename, + file_mapping, file_pages, anon_mapping, + anon_pages, dev)) { + return true; + } + } + // If we get here, no more load_cmd's in this image talk about + // segments. Go on to the next image. + } +#elif defined(PLATFORM_WINDOWS) + static char kDefaultPerms[5] = "r-xp"; + BOOL ok; + if (module_.dwSize == 0) { // only possible before first call + module_.dwSize = sizeof(module_); + ok = Module32First(snapshot_, &module_); + } else { + ok = Module32Next(snapshot_, &module_); + } + if (ok) { + uint64 base_addr = reinterpret_cast(module_.modBaseAddr); + if (start) *start = base_addr; + if (end) *end = base_addr + module_.modBaseSize; + if (flags) *flags = kDefaultPerms; + if (offset) *offset = 0; + if (inode) *inode = 0; + if (filename) *filename = module_.szExePath; + if (file_mapping) *file_mapping = 0; + if (file_pages) *file_pages = 0; + if (anon_mapping) *anon_mapping = 0; + if (anon_pages) *anon_pages = 0; + if (dev) *dev = 0; + return true; + } +#endif + + // We didn't find anything + return false; +} + +int ProcMapsIterator::FormatLine(char* buffer, int bufsize, + uint64 start, uint64 end, const char *flags, + uint64 offset, int64 inode, + const char *filename, dev_t dev) { + // We assume 'flags' looks like 'rwxp' or 'rwx'. + char r = (flags && flags[0] == 'r') ? 'r' : '-'; + char w = (flags && flags[0] && flags[1] == 'w') ? 'w' : '-'; + char x = (flags && flags[0] && flags[1] && flags[2] == 'x') ? 'x' : '-'; + // p always seems set on linux, so we set the default to 'p', not '-' + char p = (flags && flags[0] && flags[1] && flags[2] && flags[3] != 'p') + ? '-' : 'p'; + + const int rc = snprintf(buffer, bufsize, + "%08"PRIx64"-%08"PRIx64" %c%c%c%c %08"PRIx64" %02x:%02x %-11"PRId64" %s\n", + start, end, r,w,x,p, offset, + static_cast(dev/256), static_cast(dev%256), + inode, filename); + return (rc < 0 || rc >= bufsize) ? 0 : rc; +} + +namespace tcmalloc { + +// Helper to add the list of mapped shared libraries to a profile. +// Fill formatted "/proc/self/maps" contents into buffer 'buf' of size 'size' +// and return the actual size occupied in 'buf'. We fill wrote_all to true +// if we successfully wrote all proc lines to buf, false else. +// We do not provision for 0-terminating 'buf'. +int FillProcSelfMaps(char buf[], int size, bool* wrote_all) { + ProcMapsIterator::Buffer iterbuf; + ProcMapsIterator it(0, &iterbuf); // 0 means "current pid" + + uint64 start, end, offset; + int64 inode; + char *flags, *filename; + int bytes_written = 0; + *wrote_all = true; + while (it.Next(&start, &end, &flags, &offset, &inode, &filename)) { + const int line_length = it.FormatLine(buf + bytes_written, + size - bytes_written, + start, end, flags, offset, + inode, filename, 0); + if (line_length == 0) + *wrote_all = false; // failed to write this line out + else + bytes_written += line_length; + + } + return bytes_written; +} + +// Dump the same data as FillProcSelfMaps reads to fd. +// It seems easier to repeat parts of FillProcSelfMaps here than to +// reuse it via a call. +void DumpProcSelfMaps(RawFD fd) { + ProcMapsIterator::Buffer iterbuf; + ProcMapsIterator it(0, &iterbuf); // 0 means "current pid" + + uint64 start, end, offset; + int64 inode; + char *flags, *filename; + ProcMapsIterator::Buffer linebuf; + while (it.Next(&start, &end, &flags, &offset, &inode, &filename)) { + int written = it.FormatLine(linebuf.buf_, sizeof(linebuf.buf_), + start, end, flags, offset, inode, filename, + 0); + RawWrite(fd, linebuf.buf_, written); + } +} + +} // namespace tcmalloc diff --git a/src/thirdparty/gperftools-2.0/src/base/sysinfo.h b/src/thirdparty/gperftools-2.0/src/base/sysinfo.h new file mode 100644 index 000000000..7935855d6 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/sysinfo.h @@ -0,0 +1,235 @@ +// Copyright (c) 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// All functions here are thread-hostile due to file caching unless +// commented otherwise. + +#ifndef _SYSINFO_H_ +#define _SYSINFO_H_ + +#include + +#include +#if (defined(_WIN32) || defined(__MINGW32__)) && (!defined(__CYGWIN__) && !defined(__CYGWIN32__)) +#include // for DWORD +#include // for CreateToolhelp32Snapshot +#endif +#ifdef HAVE_UNISTD_H +#include // for pid_t +#endif +#include // for size_t +#include // for PATH_MAX +#include "base/basictypes.h" +#include "base/logging.h" // for RawFD + +// This getenv function is safe to call before the C runtime is initialized. +// On Windows, it utilizes GetEnvironmentVariable() and on unix it uses +// /proc/self/environ instead calling getenv(). It's intended to be used in +// routines that run before main(), when the state required for getenv() may +// not be set up yet. In particular, errno isn't set up until relatively late +// (after the pthreads library has a chance to make it threadsafe), and +// getenv() doesn't work until then. +// On some platforms, this call will utilize the same, static buffer for +// repeated GetenvBeforeMain() calls. Callers should not expect pointers from +// this routine to be long lived. +// Note that on unix, /proc only has the environment at the time the +// application was started, so this routine ignores setenv() calls/etc. Also +// note it only reads the first 16K of the environment. +extern const char* GetenvBeforeMain(const char* name); + +// This takes as an argument an environment-variable name (like +// CPUPROFILE) whose value is supposed to be a file-path, and sets +// path to that path, and returns true. Non-trivial for surprising +// reasons, as documented in sysinfo.cc. path must have space PATH_MAX. +extern bool GetUniquePathFromEnv(const char* env_name, char* path); + +extern int NumCPUs(); + +void SleepForMilliseconds(int milliseconds); + +// processor cycles per second of each processor. Thread-safe. +extern double CyclesPerSecond(void); + + +// Return true if we're running POSIX (e.g., NPTL on Linux) threads, +// as opposed to a non-POSIX thread libary. The thing that we care +// about is whether a thread's pid is the same as the thread that +// spawned it. If so, this function returns true. +// Thread-safe. +// Note: We consider false negatives to be OK. +bool HasPosixThreads(); + +#ifndef SWIG // SWIG doesn't like struct Buffer and variable arguments. + +// A ProcMapsIterator abstracts access to /proc/maps for a given +// process. Needs to be stack-allocatable and avoid using stdio/malloc +// so it can be used in the google stack dumper, heap-profiler, etc. +// +// On Windows and Mac OS X, this iterator iterates *only* over DLLs +// mapped into this process space. For Linux, FreeBSD, and Solaris, +// it iterates over *all* mapped memory regions, including anonymous +// mmaps. For other O/Ss, it is unlikely to work at all, and Valid() +// will always return false. Also note: this routine only works on +// FreeBSD if procfs is mounted: make sure this is in your /etc/fstab: +// proc /proc procfs rw 0 0 +class ProcMapsIterator { + public: + struct Buffer { +#ifdef __FreeBSD__ + // FreeBSD requires us to read all of the maps file at once, so + // we have to make a buffer that's "always" big enough + static const size_t kBufSize = 102400; +#else // a one-line buffer is good enough + static const size_t kBufSize = PATH_MAX + 1024; +#endif + char buf_[kBufSize]; + }; + + + // Create a new iterator for the specified pid. pid can be 0 for "self". + explicit ProcMapsIterator(pid_t pid); + + // Create an iterator with specified storage (for use in signal + // handler). "buffer" should point to a ProcMapsIterator::Buffer + // buffer can be NULL in which case a bufer will be allocated. + ProcMapsIterator(pid_t pid, Buffer *buffer); + + // Iterate through maps_backing instead of maps if use_maps_backing + // is true. Otherwise the same as above. buffer can be NULL and + // it will allocate a buffer itself. + ProcMapsIterator(pid_t pid, Buffer *buffer, + bool use_maps_backing); + + // Returns true if the iterator successfully initialized; + bool Valid() const; + + // Returns a pointer to the most recently parsed line. Only valid + // after Next() returns true, and until the iterator is destroyed or + // Next() is called again. This may give strange results on non-Linux + // systems. Prefer FormatLine() if that may be a concern. + const char *CurrentLine() const { return stext_; } + + // Writes the "canonical" form of the /proc/xxx/maps info for a single + // line to the passed-in buffer. Returns the number of bytes written, + // or 0 if it was not able to write the complete line. (To guarantee + // success, buffer should have size at least Buffer::kBufSize.) + // Takes as arguments values set via a call to Next(). The + // "canonical" form of the line (taken from linux's /proc/xxx/maps): + // - + + // : Note: the + // eg + // 08048000-0804c000 r-xp 00000000 03:01 3793678 /bin/cat + // If you don't have the dev_t (dev), feel free to pass in 0. + // (Next() doesn't return a dev_t, though NextExt does.) + // + // Note: if filename and flags were obtained via a call to Next(), + // then the output of this function is only valid if Next() returned + // true, and only until the iterator is destroyed or Next() is + // called again. (Since filename, at least, points into CurrentLine.) + static int FormatLine(char* buffer, int bufsize, + uint64 start, uint64 end, const char *flags, + uint64 offset, int64 inode, const char *filename, + dev_t dev); + + // Find the next entry in /proc/maps; return true if found or false + // if at the end of the file. + // + // Any of the result pointers can be NULL if you're not interested + // in those values. + // + // If "flags" and "filename" are passed, they end up pointing to + // storage within the ProcMapsIterator that is valid only until the + // iterator is destroyed or Next() is called again. The caller may + // modify the contents of these strings (up as far as the first NUL, + // and only until the subsequent call to Next()) if desired. + + // The offsets are all uint64 in order to handle the case of a + // 32-bit process running on a 64-bit kernel + // + // IMPORTANT NOTE: see top-of-class notes for details about what + // mapped regions Next() iterates over, depending on O/S. + // TODO(csilvers): make flags and filename const. + bool Next(uint64 *start, uint64 *end, char **flags, + uint64 *offset, int64 *inode, char **filename); + + bool NextExt(uint64 *start, uint64 *end, char **flags, + uint64 *offset, int64 *inode, char **filename, + uint64 *file_mapping, uint64 *file_pages, + uint64 *anon_mapping, uint64 *anon_pages, + dev_t *dev); + + ~ProcMapsIterator(); + + private: + void Init(pid_t pid, Buffer *buffer, bool use_maps_backing); + + char *ibuf_; // input buffer + char *stext_; // start of text + char *etext_; // end of text + char *nextline_; // start of next line + char *ebuf_; // end of buffer (1 char for a nul) +#if (defined(_WIN32) || defined(__MINGW32__)) && (!defined(__CYGWIN__) && !defined(__CYGWIN32__)) + HANDLE snapshot_; // filehandle on dll info + // In a change from the usual W-A pattern, there is no A variant of + // MODULEENTRY32. Tlhelp32.h #defines the W variant, but not the A. + // We want the original A variants, and this #undef is the only + // way I see to get them. Redefining it when we're done prevents us + // from affecting other .cc files. +# ifdef MODULEENTRY32 // Alias of W +# undef MODULEENTRY32 + MODULEENTRY32 module_; // info about current dll (and dll iterator) +# define MODULEENTRY32 MODULEENTRY32W +# else // It's the ascii, the one we want. + MODULEENTRY32 module_; // info about current dll (and dll iterator) +# endif +#elif defined(__MACH__) + int current_image_; // dll's are called "images" in macos parlance + int current_load_cmd_; // the segment of this dll we're examining +#elif defined(__sun__) // Solaris + int fd_; + char current_filename_[PATH_MAX]; +#else + int fd_; // filehandle on /proc/*/maps +#endif + pid_t pid_; + char flags_[10]; + Buffer* dynamic_buffer_; // dynamically-allocated Buffer + bool using_maps_backing_; // true if we are looking at maps_backing instead of maps. +}; + +#endif /* #ifndef SWIG */ + +// Helper routines + +namespace tcmalloc { +int FillProcSelfMaps(char buf[], int size, bool* wrote_all); +void DumpProcSelfMaps(RawFD fd); +} + +#endif /* #ifndef _SYSINFO_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/base/thread_annotations.h b/src/thirdparty/gperftools-2.0/src/base/thread_annotations.h new file mode 100644 index 000000000..f57b2999e --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/thread_annotations.h @@ -0,0 +1,134 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Le-Chun Wu +// +// This header file contains the macro definitions for thread safety +// annotations that allow the developers to document the locking policies +// of their multi-threaded code. The annotations can also help program +// analysis tools to identify potential thread safety issues. +// +// The annotations are implemented using GCC's "attributes" extension. +// Using the macros defined here instead of the raw GCC attributes allows +// for portability and future compatibility. +// +// This functionality is not yet fully implemented in perftools, +// but may be one day. + +#ifndef BASE_THREAD_ANNOTATIONS_H_ +#define BASE_THREAD_ANNOTATIONS_H_ + + +#if defined(__GNUC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) \ + && defined(__SUPPORT_TS_ANNOTATION__) && (!defined(SWIG)) +#define THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x)) +#else +#define THREAD_ANNOTATION_ATTRIBUTE__(x) // no-op +#endif + + +// Document if a shared variable/field needs to be protected by a lock. +// GUARDED_BY allows the user to specify a particular lock that should be +// held when accessing the annotated variable, while GUARDED_VAR only +// indicates a shared variable should be guarded (by any lock). GUARDED_VAR +// is primarily used when the client cannot express the name of the lock. +#define GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x)) +#define GUARDED_VAR THREAD_ANNOTATION_ATTRIBUTE__(guarded) + +// Document if the memory location pointed to by a pointer should be guarded +// by a lock when dereferencing the pointer. Similar to GUARDED_VAR, +// PT_GUARDED_VAR is primarily used when the client cannot express the name +// of the lock. Note that a pointer variable to a shared memory location +// could itself be a shared variable. For example, if a shared global pointer +// q, which is guarded by mu1, points to a shared memory location that is +// guarded by mu2, q should be annotated as follows: +// int *q GUARDED_BY(mu1) PT_GUARDED_BY(mu2); +#define PT_GUARDED_BY(x) \ + THREAD_ANNOTATION_ATTRIBUTE__(point_to_guarded_by(x)) +#define PT_GUARDED_VAR \ + THREAD_ANNOTATION_ATTRIBUTE__(point_to_guarded) + +// Document the acquisition order between locks that can be held +// simultaneously by a thread. For any two locks that need to be annotated +// to establish an acquisition order, only one of them needs the annotation. +// (i.e. You don't have to annotate both locks with both ACQUIRED_AFTER +// and ACQUIRED_BEFORE.) +#define ACQUIRED_AFTER(x) \ + THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(x)) +#define ACQUIRED_BEFORE(x) \ + THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(x)) + +// The following three annotations document the lock requirements for +// functions/methods. + +// Document if a function expects certain locks to be held before it is called +#define EXCLUSIVE_LOCKS_REQUIRED(x) \ + THREAD_ANNOTATION_ATTRIBUTE__(exclusive_locks_required(x)) + +#define SHARED_LOCKS_REQUIRED(x) \ + THREAD_ANNOTATION_ATTRIBUTE__(shared_locks_required(x)) + +// Document the locks acquired in the body of the function. These locks +// cannot be held when calling this function (as google3's Mutex locks are +// non-reentrant). +#define LOCKS_EXCLUDED(x) \ + THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(x)) + +// Document the lock the annotated function returns without acquiring it. +#define LOCK_RETURNED(x) THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x)) + +// Document if a class/type is a lockable type (such as the Mutex class). +#define LOCKABLE THREAD_ANNOTATION_ATTRIBUTE__(lockable) + +// Document if a class is a scoped lockable type (such as the MutexLock class). +#define SCOPED_LOCKABLE THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable) + +// The following annotations specify lock and unlock primitives. +#define EXCLUSIVE_LOCK_FUNCTION(x) \ + THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock(x)) + +#define SHARED_LOCK_FUNCTION(x) \ + THREAD_ANNOTATION_ATTRIBUTE__(shared_lock(x)) + +#define EXCLUSIVE_TRYLOCK_FUNCTION(x) \ + THREAD_ANNOTATION_ATTRIBUTE__(exclusive_trylock(x)) + +#define SHARED_TRYLOCK_FUNCTION(x) \ + THREAD_ANNOTATION_ATTRIBUTE__(shared_trylock(x)) + +#define UNLOCK_FUNCTION(x) \ + THREAD_ANNOTATION_ATTRIBUTE__(unlock(x)) + +// An escape hatch for thread safety analysis to ignore the annotated function. +#define NO_THREAD_SAFETY_ANALYSIS \ + THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis) + +#endif // BASE_THREAD_ANNOTATIONS_H_ diff --git a/src/thirdparty/gperftools-2.0/src/base/thread_lister.c b/src/thirdparty/gperftools-2.0/src/base/thread_lister.c new file mode 100644 index 000000000..bc180dba7 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/thread_lister.c @@ -0,0 +1,77 @@ +/* Copyright (c) 2005-2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Markus Gutschke + */ + +#include "config.h" +#include /* needed for NULL on some powerpc platforms (?!) */ +#ifdef HAVE_SYS_PRCTL +# include +#endif +#include "base/thread_lister.h" +#include "base/linuxthreads.h" +/* Include other thread listers here that define THREADS macro + * only when they can provide a good implementation. + */ + +#ifndef THREADS + +/* Default trivial thread lister for single-threaded applications, + * or if the multi-threading code has not been ported, yet. + */ + +int ListAllProcessThreads(void *parameter, + ListAllProcessThreadsCallBack callback, ...) { + int rc; + va_list ap; + pid_t pid; + +#ifdef HAVE_SYS_PRCTL + int dumpable = prctl(PR_GET_DUMPABLE, 0); + if (!dumpable) + prctl(PR_SET_DUMPABLE, 1); +#endif + va_start(ap, callback); + pid = getpid(); + rc = callback(parameter, 1, &pid, ap); + va_end(ap); +#ifdef HAVE_SYS_PRCTL + if (!dumpable) + prctl(PR_SET_DUMPABLE, 0); +#endif + return rc; +} + +int ResumeAllProcessThreads(int num_threads, pid_t *thread_pids) { + return 1; +} + +#endif /* ifndef THREADS */ diff --git a/src/thirdparty/gperftools-2.0/src/base/thread_lister.h b/src/thirdparty/gperftools-2.0/src/base/thread_lister.h new file mode 100644 index 000000000..6afe4dd1c --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/thread_lister.h @@ -0,0 +1,82 @@ +/* Copyright (c) 2005-2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Markus Gutschke + */ + +#ifndef _THREAD_LISTER_H +#define _THREAD_LISTER_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef int (*ListAllProcessThreadsCallBack)(void *parameter, + int num_threads, + pid_t *thread_pids, + va_list ap); + +/* This function gets the list of all linux threads of the current process + * passes them to the 'callback' along with the 'parameter' pointer; at the + * call back call time all the threads are paused via + * PTRACE_ATTACH. + * The callback is executed from a separate thread which shares only the + * address space, the filesystem, and the filehandles with the caller. Most + * notably, it does not share the same pid and ppid; and if it terminates, + * the rest of the application is still there. 'callback' is supposed to do + * or arrange for ResumeAllProcessThreads. This happens automatically, if + * the thread raises a synchronous signal (e.g. SIGSEGV); asynchronous + * signals are blocked. If the 'callback' decides to unblock them, it must + * ensure that they cannot terminate the application, or that + * ResumeAllProcessThreads will get called. + * It is an error for the 'callback' to make any library calls that could + * acquire locks. Most notably, this means that most system calls have to + * avoid going through libc. Also, this means that it is not legal to call + * exit() or abort(). + * We return -1 on error and the return value of 'callback' on success. + */ +int ListAllProcessThreads(void *parameter, + ListAllProcessThreadsCallBack callback, ...); + +/* This function resumes the list of all linux threads that + * ListAllProcessThreads pauses before giving to its callback. + * The function returns non-zero if at least one thread was + * suspended and has now been resumed. + */ +int ResumeAllProcessThreads(int num_threads, pid_t *thread_pids); + +#ifdef __cplusplus +} +#endif + +#endif /* _THREAD_LISTER_H */ diff --git a/src/thirdparty/gperftools-2.0/src/base/vdso_support.cc b/src/thirdparty/gperftools-2.0/src/base/vdso_support.cc new file mode 100644 index 000000000..767ee5f58 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/vdso_support.cc @@ -0,0 +1,189 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Paul Pluzhnikov +// +// Allow dynamic symbol lookup in the kernel VDSO page. +// +// VDSOSupport -- a class representing kernel VDSO (if present). +// + +#include "base/vdso_support.h" + +#ifdef HAVE_VDSO_SUPPORT // defined in vdso_support.h + +#include +#include // for ptrdiff_t + +#include "base/atomicops.h" // for MemoryBarrier +#include "base/linux_syscall_support.h" +#include "base/logging.h" +#include "base/dynamic_annotations.h" +#include "base/basictypes.h" // for COMPILE_ASSERT + +using base::subtle::MemoryBarrier; + +#ifndef AT_SYSINFO_EHDR +#define AT_SYSINFO_EHDR 33 +#endif + +namespace base { + +const void *VDSOSupport::vdso_base_ = ElfMemImage::kInvalidBase; +VDSOSupport::GetCpuFn VDSOSupport::getcpu_fn_ = &InitAndGetCPU; +VDSOSupport::VDSOSupport() + // If vdso_base_ is still set to kInvalidBase, we got here + // before VDSOSupport::Init has been called. Call it now. + : image_(vdso_base_ == ElfMemImage::kInvalidBase ? Init() : vdso_base_) { +} + +// NOTE: we can't use GoogleOnceInit() below, because we can be +// called by tcmalloc, and none of the *once* stuff may be functional yet. +// +// In addition, we hope that the VDSOSupportHelper constructor +// causes this code to run before there are any threads, and before +// InitGoogle() has executed any chroot or setuid calls. +// +// Finally, even if there is a race here, it is harmless, because +// the operation should be idempotent. +const void *VDSOSupport::Init() { + if (vdso_base_ == ElfMemImage::kInvalidBase) { + // Valgrind zaps AT_SYSINFO_EHDR and friends from the auxv[] + // on stack, and so glibc works as if VDSO was not present. + // But going directly to kernel via /proc/self/auxv below bypasses + // Valgrind zapping. So we check for Valgrind separately. + if (RunningOnValgrind()) { + vdso_base_ = NULL; + getcpu_fn_ = &GetCPUViaSyscall; + return NULL; + } + int fd = open("/proc/self/auxv", O_RDONLY); + if (fd == -1) { + // Kernel too old to have a VDSO. + vdso_base_ = NULL; + getcpu_fn_ = &GetCPUViaSyscall; + return NULL; + } + ElfW(auxv_t) aux; + while (read(fd, &aux, sizeof(aux)) == sizeof(aux)) { + if (aux.a_type == AT_SYSINFO_EHDR) { + COMPILE_ASSERT(sizeof(vdso_base_) == sizeof(aux.a_un.a_val), + unexpected_sizeof_pointer_NE_sizeof_a_val); + vdso_base_ = reinterpret_cast(aux.a_un.a_val); + break; + } + } + close(fd); + if (vdso_base_ == ElfMemImage::kInvalidBase) { + // Didn't find AT_SYSINFO_EHDR in auxv[]. + vdso_base_ = NULL; + } + } + GetCpuFn fn = &GetCPUViaSyscall; // default if VDSO not present. + if (vdso_base_) { + VDSOSupport vdso; + SymbolInfo info; + if (vdso.LookupSymbol("__vdso_getcpu", "LINUX_2.6", STT_FUNC, &info)) { + // Casting from an int to a pointer is not legal C++. To emphasize + // this, we use a C-style cast rather than a C++-style cast. + fn = (GetCpuFn)(info.address); + } + } + // Subtle: this code runs outside of any locks; prevent compiler + // from assigning to getcpu_fn_ more than once. + base::subtle::MemoryBarrier(); + getcpu_fn_ = fn; + return vdso_base_; +} + +const void *VDSOSupport::SetBase(const void *base) { + CHECK(base != ElfMemImage::kInvalidBase); + const void *old_base = vdso_base_; + vdso_base_ = base; + image_.Init(base); + // Also reset getcpu_fn_, so GetCPU could be tested with simulated VDSO. + getcpu_fn_ = &InitAndGetCPU; + return old_base; +} + +bool VDSOSupport::LookupSymbol(const char *name, + const char *version, + int type, + SymbolInfo *info) const { + return image_.LookupSymbol(name, version, type, info); +} + +bool VDSOSupport::LookupSymbolByAddress(const void *address, + SymbolInfo *info_out) const { + return image_.LookupSymbolByAddress(address, info_out); +} + +// NOLINT on 'long' because this routine mimics kernel api. +long VDSOSupport::GetCPUViaSyscall(unsigned *cpu, void *, void *) { // NOLINT +#if defined(__NR_getcpu) + return sys_getcpu(cpu, NULL, NULL); +#else + // x86_64 never implemented sys_getcpu(), except as a VDSO call. + errno = ENOSYS; + return -1; +#endif +} + +// Use fast __vdso_getcpu if available. +long VDSOSupport::InitAndGetCPU(unsigned *cpu, void *x, void *y) { // NOLINT + Init(); + CHECK_NE(getcpu_fn_, &InitAndGetCPU); // << "Init() did not set getcpu_fn_"; + return (*getcpu_fn_)(cpu, x, y); +} + +// This function must be very fast, and may be called from very +// low level (e.g. tcmalloc). Hence I avoid things like +// GoogleOnceInit() and ::operator new. +int GetCPU(void) { + unsigned cpu; + int ret_code = (*VDSOSupport::getcpu_fn_)(&cpu, NULL, NULL); + return ret_code == 0 ? cpu : ret_code; +} + +// We need to make sure VDSOSupport::Init() is called before +// the main() runs, since it might do something like setuid or +// chroot. If VDSOSupport +// is used in any global constructor, this will happen, since +// VDSOSupport's constructor calls Init. But if not, we need to +// ensure it here, with a global constructor of our own. This +// is an allowed exception to the normal rule against non-trivial +// global constructors. +static class VDSOInitHelper { + public: + VDSOInitHelper() { VDSOSupport::Init(); } +} vdso_init_helper; +} + +#endif // HAVE_VDSO_SUPPORT diff --git a/src/thirdparty/gperftools-2.0/src/base/vdso_support.h b/src/thirdparty/gperftools-2.0/src/base/vdso_support.h new file mode 100644 index 000000000..b97ab254d --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/base/vdso_support.h @@ -0,0 +1,155 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Paul Pluzhnikov +// +// Allow dynamic symbol lookup in the kernel VDSO page. +// +// VDSO stands for "Virtual Dynamic Shared Object" -- a page of +// executable code, which looks like a shared library, but doesn't +// necessarily exist anywhere on disk, and which gets mmap()ed into +// every process by kernels which support VDSO, such as 2.6.x for 32-bit +// executables, and 2.6.24 and above for 64-bit executables. +// +// More details could be found here: +// http://www.trilithium.com/johan/2005/08/linux-gate/ +// +// VDSOSupport -- a class representing kernel VDSO (if present). +// +// Example usage: +// VDSOSupport vdso; +// VDSOSupport::SymbolInfo info; +// typedef (*FN)(unsigned *, void *, void *); +// FN fn = NULL; +// if (vdso.LookupSymbol("__vdso_getcpu", "LINUX_2.6", STT_FUNC, &info)) { +// fn = reinterpret_cast(info.address); +// } + +#ifndef BASE_VDSO_SUPPORT_H_ +#define BASE_VDSO_SUPPORT_H_ + +#include +#include "base/basictypes.h" +#include "base/elf_mem_image.h" + +#ifdef HAVE_ELF_MEM_IMAGE + +#define HAVE_VDSO_SUPPORT 1 + +#include // for NULL + +namespace base { + +// NOTE: this class may be used from within tcmalloc, and can not +// use any memory allocation routines. +class VDSOSupport { + public: + VDSOSupport(); + + typedef ElfMemImage::SymbolInfo SymbolInfo; + typedef ElfMemImage::SymbolIterator SymbolIterator; + + // Answers whether we have a vdso at all. + bool IsPresent() const { return image_.IsPresent(); } + + // Allow to iterate over all VDSO symbols. + SymbolIterator begin() const { return image_.begin(); } + SymbolIterator end() const { return image_.end(); } + + // Look up versioned dynamic symbol in the kernel VDSO. + // Returns false if VDSO is not present, or doesn't contain given + // symbol/version/type combination. + // If info_out != NULL, additional details are filled in. + bool LookupSymbol(const char *name, const char *version, + int symbol_type, SymbolInfo *info_out) const; + + // Find info about symbol (if any) which overlaps given address. + // Returns true if symbol was found; false if VDSO isn't present + // or doesn't have a symbol overlapping given address. + // If info_out != NULL, additional details are filled in. + bool LookupSymbolByAddress(const void *address, SymbolInfo *info_out) const; + + // Used only for testing. Replace real VDSO base with a mock. + // Returns previous value of vdso_base_. After you are done testing, + // you are expected to call SetBase() with previous value, in order to + // reset state to the way it was. + const void *SetBase(const void *s); + + // Computes vdso_base_ and returns it. Should be called as early as + // possible; before any thread creation, chroot or setuid. + static const void *Init(); + + private: + // image_ represents VDSO ELF image in memory. + // image_.ehdr_ == NULL implies there is no VDSO. + ElfMemImage image_; + + // Cached value of auxv AT_SYSINFO_EHDR, computed once. + // This is a tri-state: + // kInvalidBase => value hasn't been determined yet. + // 0 => there is no VDSO. + // else => vma of VDSO Elf{32,64}_Ehdr. + // + // When testing with mock VDSO, low bit is set. + // The low bit is always available because vdso_base_ is + // page-aligned. + static const void *vdso_base_; + + // NOLINT on 'long' because these routines mimic kernel api. + // The 'cache' parameter may be used by some versions of the kernel, + // and should be NULL or point to a static buffer containing at + // least two 'long's. + static long InitAndGetCPU(unsigned *cpu, void *cache, // NOLINT 'long'. + void *unused); + static long GetCPUViaSyscall(unsigned *cpu, void *cache, // NOLINT 'long'. + void *unused); + typedef long (*GetCpuFn)(unsigned *cpu, void *cache, // NOLINT 'long'. + void *unused); + + // This function pointer may point to InitAndGetCPU, + // GetCPUViaSyscall, or __vdso_getcpu at different stages of initialization. + static GetCpuFn getcpu_fn_; + + friend int GetCPU(void); // Needs access to getcpu_fn_. + + DISALLOW_COPY_AND_ASSIGN(VDSOSupport); +}; + +// Same as sched_getcpu() on later glibc versions. +// Return current CPU, using (fast) __vdso_getcpu@LINUX_2.6 if present, +// otherwise use syscall(SYS_getcpu,...). +// May return -1 with errno == ENOSYS if the kernel doesn't +// support SYS_getcpu. +int GetCPU(); +} // namespace base + +#endif // HAVE_ELF_MEM_IMAGE + +#endif // BASE_VDSO_SUPPORT_H_ diff --git a/src/thirdparty/gperftools-2.0/src/central_freelist.cc b/src/thirdparty/gperftools-2.0/src/central_freelist.cc new file mode 100644 index 000000000..87a1825c0 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/central_freelist.cc @@ -0,0 +1,376 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#include "config.h" +#include +#include "central_freelist.h" +#include "internal_logging.h" // for ASSERT, MESSAGE +#include "linked_list.h" // for SLL_Next, SLL_Push, etc +#include "page_heap.h" // for PageHeap +#include "static_vars.h" // for Static + +using std::min; +using std::max; + +namespace tcmalloc { + +void CentralFreeList::Init(size_t cl) { + size_class_ = cl; + tcmalloc::DLL_Init(&empty_); + tcmalloc::DLL_Init(&nonempty_); + num_spans_ = 0; + counter_ = 0; + + max_cache_size_ = kMaxNumTransferEntries; +#ifdef TCMALLOC_SMALL_BUT_SLOW + // Disable the transfer cache for the small footprint case. + cache_size_ = 0; +#else + cache_size_ = 16; +#endif + if (cl > 0) { + // Limit the maximum size of the cache based on the size class. If this + // is not done, large size class objects will consume a lot of memory if + // they just sit in the transfer cache. + int32_t bytes = Static::sizemap()->ByteSizeForClass(cl); + int32_t objs_to_move = Static::sizemap()->num_objects_to_move(cl); + + ASSERT(objs_to_move > 0 && bytes > 0); + // Limit each size class cache to at most 1MB of objects or one entry, + // whichever is greater. Total transfer cache memory used across all + // size classes then can't be greater than approximately + // 1MB * kMaxNumTransferEntries. + // min and max are in parens to avoid macro-expansion on windows. + max_cache_size_ = (min)(max_cache_size_, + (max)(1, (1024 * 1024) / (bytes * objs_to_move))); + cache_size_ = (min)(cache_size_, max_cache_size_); + } + used_slots_ = 0; + ASSERT(cache_size_ <= max_cache_size_); +} + +void CentralFreeList::ReleaseListToSpans(void* start) { + while (start) { + void *next = SLL_Next(start); + ReleaseToSpans(start); + start = next; + } +} + +// MapObjectToSpan should logically be part of ReleaseToSpans. But +// this triggers an optimization bug in gcc 4.5.0. Moving to a +// separate function, and making sure that function isn't inlined, +// seems to fix the problem. It also should be fixed for gcc 4.5.1. +static +#if __GNUC__ == 4 && __GNUC_MINOR__ == 5 && __GNUC_PATCHLEVEL__ == 0 +__attribute__ ((noinline)) +#endif +Span* MapObjectToSpan(void* object) { + const PageID p = reinterpret_cast(object) >> kPageShift; + Span* span = Static::pageheap()->GetDescriptor(p); + return span; +} + +void CentralFreeList::ReleaseToSpans(void* object) { + Span* span = MapObjectToSpan(object); + ASSERT(span != NULL); + ASSERT(span->refcount > 0); + + // If span is empty, move it to non-empty list + if (span->objects == NULL) { + tcmalloc::DLL_Remove(span); + tcmalloc::DLL_Prepend(&nonempty_, span); + Event(span, 'N', 0); + } + + // The following check is expensive, so it is disabled by default + if (false) { + // Check that object does not occur in list + int got = 0; + for (void* p = span->objects; p != NULL; p = *((void**) p)) { + ASSERT(p != object); + got++; + } + ASSERT(got + span->refcount == + (span->length<ByteSizeForClass(span->sizeclass)); + } + + counter_++; + span->refcount--; + if (span->refcount == 0) { + Event(span, '#', 0); + counter_ -= ((span->length<ByteSizeForClass(span->sizeclass)); + tcmalloc::DLL_Remove(span); + --num_spans_; + + // Release central list lock while operating on pageheap + lock_.Unlock(); + { + SpinLockHolder h(Static::pageheap_lock()); + Static::pageheap()->Delete(span); + } + lock_.Lock(); + } else { + *(reinterpret_cast(object)) = span->objects; + span->objects = object; + } +} + +bool CentralFreeList::EvictRandomSizeClass( + int locked_size_class, bool force) { + static int race_counter = 0; + int t = race_counter++; // Updated without a lock, but who cares. + if (t >= kNumClasses) { + while (t >= kNumClasses) { + t -= kNumClasses; + } + race_counter = t; + } + ASSERT(t >= 0); + ASSERT(t < kNumClasses); + if (t == locked_size_class) return false; + return Static::central_cache()[t].ShrinkCache(locked_size_class, force); +} + +bool CentralFreeList::MakeCacheSpace() { + // Is there room in the cache? + if (used_slots_ < cache_size_) return true; + // Check if we can expand this cache? + if (cache_size_ == max_cache_size_) return false; + // Ok, we'll try to grab an entry from some other size class. + if (EvictRandomSizeClass(size_class_, false) || + EvictRandomSizeClass(size_class_, true)) { + // Succeeded in evicting, we're going to make our cache larger. + // However, we may have dropped and re-acquired the lock in + // EvictRandomSizeClass (via ShrinkCache and the LockInverter), so the + // cache_size may have changed. Therefore, check and verify that it is + // still OK to increase the cache_size. + if (cache_size_ < max_cache_size_) { + cache_size_++; + return true; + } + } + return false; +} + + +namespace { +class LockInverter { + private: + SpinLock *held_, *temp_; + public: + inline explicit LockInverter(SpinLock* held, SpinLock *temp) + : held_(held), temp_(temp) { held_->Unlock(); temp_->Lock(); } + inline ~LockInverter() { temp_->Unlock(); held_->Lock(); } +}; +} + +// This function is marked as NO_THREAD_SAFETY_ANALYSIS because it uses +// LockInverter to release one lock and acquire another in scoped-lock +// style, which our current annotation/analysis does not support. +bool CentralFreeList::ShrinkCache(int locked_size_class, bool force) + NO_THREAD_SAFETY_ANALYSIS { + // Start with a quick check without taking a lock. + if (cache_size_ == 0) return false; + // We don't evict from a full cache unless we are 'forcing'. + if (force == false && used_slots_ == cache_size_) return false; + + // Grab lock, but first release the other lock held by this thread. We use + // the lock inverter to ensure that we never hold two size class locks + // concurrently. That can create a deadlock because there is no well + // defined nesting order. + LockInverter li(&Static::central_cache()[locked_size_class].lock_, &lock_); + ASSERT(used_slots_ <= cache_size_); + ASSERT(0 <= cache_size_); + if (cache_size_ == 0) return false; + if (used_slots_ == cache_size_) { + if (force == false) return false; + // ReleaseListToSpans releases the lock, so we have to make all the + // updates to the central list before calling it. + cache_size_--; + used_slots_--; + ReleaseListToSpans(tc_slots_[used_slots_].head); + return true; + } + cache_size_--; + return true; +} + +void CentralFreeList::InsertRange(void *start, void *end, int N) { + SpinLockHolder h(&lock_); + if (N == Static::sizemap()->num_objects_to_move(size_class_) && + MakeCacheSpace()) { + int slot = used_slots_++; + ASSERT(slot >=0); + ASSERT(slot < max_cache_size_); + TCEntry *entry = &tc_slots_[slot]; + entry->head = start; + entry->tail = end; + return; + } + ReleaseListToSpans(start); +} + +int CentralFreeList::RemoveRange(void **start, void **end, int N) { + ASSERT(N > 0); + lock_.Lock(); + if (N == Static::sizemap()->num_objects_to_move(size_class_) && + used_slots_ > 0) { + int slot = --used_slots_; + ASSERT(slot >= 0); + TCEntry *entry = &tc_slots_[slot]; + *start = entry->head; + *end = entry->tail; + lock_.Unlock(); + return N; + } + + int result = 0; + void* head = NULL; + void* tail = NULL; + // TODO: Prefetch multiple TCEntries? + tail = FetchFromSpansSafe(); + if (tail != NULL) { + SLL_SetNext(tail, NULL); + head = tail; + result = 1; + while (result < N) { + void *t = FetchFromSpans(); + if (!t) break; + SLL_Push(&head, t); + result++; + } + } + lock_.Unlock(); + *start = head; + *end = tail; + return result; +} + + +void* CentralFreeList::FetchFromSpansSafe() { + void *t = FetchFromSpans(); + if (!t) { + Populate(); + t = FetchFromSpans(); + } + return t; +} + +void* CentralFreeList::FetchFromSpans() { + if (tcmalloc::DLL_IsEmpty(&nonempty_)) return NULL; + Span* span = nonempty_.next; + + ASSERT(span->objects != NULL); + span->refcount++; + void* result = span->objects; + span->objects = *(reinterpret_cast(result)); + if (span->objects == NULL) { + // Move to empty list + tcmalloc::DLL_Remove(span); + tcmalloc::DLL_Prepend(&empty_, span); + Event(span, 'E', 0); + } + counter_--; + return result; +} + +// Fetch memory from the system and add to the central cache freelist. +void CentralFreeList::Populate() { + // Release central list lock while operating on pageheap + lock_.Unlock(); + const size_t npages = Static::sizemap()->class_to_pages(size_class_); + + Span* span; + { + SpinLockHolder h(Static::pageheap_lock()); + span = Static::pageheap()->New(npages); + if (span) Static::pageheap()->RegisterSizeClass(span, size_class_); + } + if (span == NULL) { + Log(kLog, __FILE__, __LINE__, + "tcmalloc: allocation failed", npages << kPageShift); + lock_.Lock(); + return; + } + ASSERT(span->length == npages); + // Cache sizeclass info eagerly. Locking is not necessary. + // (Instead of being eager, we could just replace any stale info + // about this span, but that seems to be no better in practice.) + for (int i = 0; i < npages; i++) { + Static::pageheap()->CacheSizeClass(span->start + i, size_class_); + } + + // Split the block into pieces and add to the free-list + // TODO: coloring of objects to avoid cache conflicts? + void** tail = &span->objects; + char* ptr = reinterpret_cast(span->start << kPageShift); + char* limit = ptr + (npages << kPageShift); + const size_t size = Static::sizemap()->ByteSizeForClass(size_class_); + int num = 0; + while (ptr + size <= limit) { + *tail = ptr; + tail = reinterpret_cast(ptr); + ptr += size; + num++; + } + ASSERT(ptr <= limit); + *tail = NULL; + span->refcount = 0; // No sub-object in use yet + + // Add span to list of non-empty spans + lock_.Lock(); + tcmalloc::DLL_Prepend(&nonempty_, span); + ++num_spans_; + counter_ += num; +} + +int CentralFreeList::tc_length() { + SpinLockHolder h(&lock_); + return used_slots_ * Static::sizemap()->num_objects_to_move(size_class_); +} + +size_t CentralFreeList::OverheadBytes() { + SpinLockHolder h(&lock_); + if (size_class_ == 0) { // 0 holds the 0-sized allocations + return 0; + } + const size_t pages_per_span = Static::sizemap()->class_to_pages(size_class_); + const size_t object_size = Static::sizemap()->class_to_size(size_class_); + ASSERT(object_size > 0); + const size_t overhead_per_span = (pages_per_span * kPageSize) % object_size; + return num_spans_ * overhead_per_span; +} + +} // namespace tcmalloc diff --git a/src/thirdparty/gperftools-2.0/src/central_freelist.h b/src/thirdparty/gperftools-2.0/src/central_freelist.h new file mode 100644 index 000000000..4fd5799de --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/central_freelist.h @@ -0,0 +1,200 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#ifndef TCMALLOC_CENTRAL_FREELIST_H_ +#define TCMALLOC_CENTRAL_FREELIST_H_ + +#include "config.h" +#include // for size_t +#ifdef HAVE_STDINT_H +#include // for int32_t +#endif +#include "base/spinlock.h" +#include "base/thread_annotations.h" +#include "common.h" +#include "span.h" + +namespace tcmalloc { + +// Data kept per size-class in central cache. +class CentralFreeList { + public: + // A CentralFreeList may be used before its constructor runs. + // So we prevent lock_'s constructor from doing anything to the + // lock_ state. + CentralFreeList() : lock_(base::LINKER_INITIALIZED) { } + + void Init(size_t cl); + + // These methods all do internal locking. + + // Insert the specified range into the central freelist. N is the number of + // elements in the range. RemoveRange() is the opposite operation. + void InsertRange(void *start, void *end, int N); + + // Returns the actual number of fetched elements and sets *start and *end. + int RemoveRange(void **start, void **end, int N); + + // Returns the number of free objects in cache. + int length() { + SpinLockHolder h(&lock_); + return counter_; + } + + // Returns the number of free objects in the transfer cache. + int tc_length(); + + // Returns the memory overhead (internal fragmentation) attributable + // to the freelist. This is memory lost when the size of elements + // in a freelist doesn't exactly divide the page-size (an 8192-byte + // page full of 5-byte objects would have 2 bytes memory overhead). + size_t OverheadBytes(); + + private: + // TransferCache is used to cache transfers of + // sizemap.num_objects_to_move(size_class) back and forth between + // thread caches and the central cache for a given size class. + struct TCEntry { + void *head; // Head of chain of objects. + void *tail; // Tail of chain of objects. + }; + + // A central cache freelist can have anywhere from 0 to kMaxNumTransferEntries + // slots to put link list chains into. +#ifdef TCMALLOC_SMALL_BUT_SLOW + // For the small memory model, the transfer cache is not used. + static const int kMaxNumTransferEntries = 0; +#else + // Starting point for the the maximum number of entries in the transfer cache. + // This actual maximum for a given size class may be lower than this + // maximum value. + static const int kMaxNumTransferEntries = 64; +#endif + + // REQUIRES: lock_ is held + // Remove object from cache and return. + // Return NULL if no free entries in cache. + void* FetchFromSpans() EXCLUSIVE_LOCKS_REQUIRED(lock_); + + // REQUIRES: lock_ is held + // Remove object from cache and return. Fetches + // from pageheap if cache is empty. Only returns + // NULL on allocation failure. + void* FetchFromSpansSafe() EXCLUSIVE_LOCKS_REQUIRED(lock_); + + // REQUIRES: lock_ is held + // Release a linked list of objects to spans. + // May temporarily release lock_. + void ReleaseListToSpans(void *start) EXCLUSIVE_LOCKS_REQUIRED(lock_); + + // REQUIRES: lock_ is held + // Release an object to spans. + // May temporarily release lock_. + void ReleaseToSpans(void* object) EXCLUSIVE_LOCKS_REQUIRED(lock_); + + // REQUIRES: lock_ is held + // Populate cache by fetching from the page heap. + // May temporarily release lock_. + void Populate() EXCLUSIVE_LOCKS_REQUIRED(lock_); + + // REQUIRES: lock is held. + // Tries to make room for a TCEntry. If the cache is full it will try to + // expand it at the cost of some other cache size. Return false if there is + // no space. + bool MakeCacheSpace() EXCLUSIVE_LOCKS_REQUIRED(lock_); + + // REQUIRES: lock_ for locked_size_class is held. + // Picks a "random" size class to steal TCEntry slot from. In reality it + // just iterates over the sizeclasses but does so without taking a lock. + // Returns true on success. + // May temporarily lock a "random" size class. + static bool EvictRandomSizeClass(int locked_size_class, bool force); + + // REQUIRES: lock_ is *not* held. + // Tries to shrink the Cache. If force is true it will relase objects to + // spans if it allows it to shrink the cache. Return false if it failed to + // shrink the cache. Decrements cache_size_ on succeess. + // May temporarily take lock_. If it takes lock_, the locked_size_class + // lock is released to keep the thread from holding two size class locks + // concurrently which could lead to a deadlock. + bool ShrinkCache(int locked_size_class, bool force) LOCKS_EXCLUDED(lock_); + + // This lock protects all the data members. cached_entries and cache_size_ + // may be looked at without holding the lock. + SpinLock lock_; + + // We keep linked lists of empty and non-empty spans. + size_t size_class_; // My size class + Span empty_; // Dummy header for list of empty spans + Span nonempty_; // Dummy header for list of non-empty spans + size_t num_spans_; // Number of spans in empty_ plus nonempty_ + size_t counter_; // Number of free objects in cache entry + + // Here we reserve space for TCEntry cache slots. Space is preallocated + // for the largest possible number of entries than any one size class may + // accumulate. Not all size classes are allowed to accumulate + // kMaxNumTransferEntries, so there is some wasted space for those size + // classes. + TCEntry tc_slots_[kMaxNumTransferEntries]; + + // Number of currently used cached entries in tc_slots_. This variable is + // updated under a lock but can be read without one. + int32_t used_slots_; + // The current number of slots for this size class. This is an + // adaptive value that is increased if there is lots of traffic + // on a given size class. + int32_t cache_size_; + // Maximum size of the cache for a given size class. + int32_t max_cache_size_; +}; + +// Pads each CentralCache object to multiple of 64 bytes. Since some +// compilers (such as MSVC) don't like it when the padding is 0, I use +// template specialization to remove the padding entirely when +// sizeof(CentralFreeList) is a multiple of 64. +template +class CentralFreeListPaddedTo : public CentralFreeList { + private: + char pad_[64 - kFreeListSizeMod64]; +}; + +template<> +class CentralFreeListPaddedTo<0> : public CentralFreeList { +}; + +class CentralFreeListPadded : public CentralFreeListPaddedTo< + sizeof(CentralFreeList) % 64> { +}; + +} // namespace tcmalloc + +#endif // TCMALLOC_CENTRAL_FREELIST_H_ diff --git a/src/thirdparty/gperftools-2.0/src/common.cc b/src/thirdparty/gperftools-2.0/src/common.cc new file mode 100644 index 000000000..dad7372ff --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/common.cc @@ -0,0 +1,202 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#include "config.h" +#include "common.h" +#include "system-alloc.h" + +namespace tcmalloc { + +// Note: the following only works for "n"s that fit in 32-bits, but +// that is fine since we only use it for small sizes. +static inline int LgFloor(size_t n) { + int log = 0; + for (int i = 4; i >= 0; --i) { + int shift = (1 << i); + size_t x = n >> shift; + if (x != 0) { + n = x; + log += shift; + } + } + ASSERT(n == 1); + return log; +} + +int AlignmentForSize(size_t size) { + int alignment = kAlignment; + if (size > kMaxSize) { + // Cap alignment at kPageSize for large sizes. + alignment = kPageSize; + } else if (size >= 128) { + // Space wasted due to alignment is at most 1/8, i.e., 12.5%. + alignment = (1 << LgFloor(size)) / 8; + } else if (size >= 16) { + // We need an alignment of at least 16 bytes to satisfy + // requirements for some SSE types. + alignment = 16; + } + // Maximum alignment allowed is page size alignment. + if (alignment > kPageSize) { + alignment = kPageSize; + } + CHECK_CONDITION(size < 16 || alignment >= 16); + CHECK_CONDITION((alignment & (alignment - 1)) == 0); + return alignment; +} + +int SizeMap::NumMoveSize(size_t size) { + if (size == 0) return 0; + // Use approx 64k transfers between thread and central caches. + int num = static_cast(64.0 * 1024.0 / size); + if (num < 2) num = 2; + + // Avoid bringing too many objects into small object free lists. + // If this value is too large: + // - We waste memory with extra objects sitting in the thread caches. + // - The central freelist holds its lock for too long while + // building a linked list of objects, slowing down the allocations + // of other threads. + // If this value is too small: + // - We go to the central freelist too often and we have to acquire + // its lock each time. + // This value strikes a balance between the constraints above. + if (num > 32) num = 32; + + return num; +} + +// Initialize the mapping arrays +void SizeMap::Init() { + // Do some sanity checking on add_amount[]/shift_amount[]/class_array[] + if (ClassIndex(0) < 0) { + Log(kCrash, __FILE__, __LINE__, + "Invalid class index for size 0", ClassIndex(0)); + } + if (ClassIndex(kMaxSize) >= sizeof(class_array_)) { + Log(kCrash, __FILE__, __LINE__, + "Invalid class index for kMaxSize", ClassIndex(kMaxSize)); + } + + // Compute the size classes we want to use + int sc = 1; // Next size class to assign + int alignment = kAlignment; + CHECK_CONDITION(kAlignment <= 16); + for (size_t size = kAlignment; size <= kMaxSize; size += alignment) { + alignment = AlignmentForSize(size); + CHECK_CONDITION((size % alignment) == 0); + + int blocks_to_move = NumMoveSize(size) / 4; + size_t psize = 0; + do { + psize += kPageSize; + // Allocate enough pages so leftover is less than 1/8 of total. + // This bounds wasted space to at most 12.5%. + while ((psize % size) > (psize >> 3)) { + psize += kPageSize; + } + // Continue to add pages until there are at least as many objects in + // the span as are needed when moving objects from the central + // freelists and spans to the thread caches. + } while ((psize / size) < (blocks_to_move)); + const size_t my_pages = psize >> kPageShift; + + if (sc > 1 && my_pages == class_to_pages_[sc-1]) { + // See if we can merge this into the previous class without + // increasing the fragmentation of the previous class. + const size_t my_objects = (my_pages << kPageShift) / size; + const size_t prev_objects = (class_to_pages_[sc-1] << kPageShift) + / class_to_size_[sc-1]; + if (my_objects == prev_objects) { + // Adjust last class to include this size + class_to_size_[sc-1] = size; + continue; + } + } + + // Add new class + class_to_pages_[sc] = my_pages; + class_to_size_[sc] = size; + sc++; + } + if (sc != kNumClasses) { + Log(kCrash, __FILE__, __LINE__, + "wrong number of size classes: (found vs. expected )", sc, kNumClasses); + } + + // Initialize the mapping arrays + int next_size = 0; + for (int c = 1; c < kNumClasses; c++) { + const int max_size_in_class = class_to_size_[c]; + for (int s = next_size; s <= max_size_in_class; s += kAlignment) { + class_array_[ClassIndex(s)] = c; + } + next_size = max_size_in_class + kAlignment; + } + + // Double-check sizes just to be safe + for (size_t size = 0; size <= kMaxSize; size++) { + const int sc = SizeClass(size); + if (sc <= 0 || sc >= kNumClasses) { + Log(kCrash, __FILE__, __LINE__, + "Bad size class (class, size)", sc, size); + } + if (sc > 1 && size <= class_to_size_[sc-1]) { + Log(kCrash, __FILE__, __LINE__, + "Allocating unnecessarily large class (class, size)", sc, size); + } + const size_t s = class_to_size_[sc]; + if (size > s || s == 0) { + Log(kCrash, __FILE__, __LINE__, + "Bad (class, size, requested)", sc, s, size); + } + } + + // Initialize the num_objects_to_move array. + for (size_t cl = 1; cl < kNumClasses; ++cl) { + num_objects_to_move_[cl] = NumMoveSize(ByteSizeForClass(cl)); + } +} + +// Metadata allocator -- keeps stats about how many bytes allocated. +static uint64_t metadata_system_bytes_ = 0; +void* MetaDataAlloc(size_t bytes) { + void* result = TCMalloc_SystemAlloc(bytes, NULL); + if (result != NULL) { + metadata_system_bytes_ += bytes; + } + return result; +} + +uint64_t metadata_system_bytes() { return metadata_system_bytes_; } + +} // namespace tcmalloc diff --git a/src/thirdparty/gperftools-2.0/src/common.h b/src/thirdparty/gperftools-2.0/src/common.h new file mode 100644 index 000000000..49458f24a --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/common.h @@ -0,0 +1,246 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Common definitions for tcmalloc code. + +#ifndef TCMALLOC_COMMON_H_ +#define TCMALLOC_COMMON_H_ + +#include "config.h" +#include // for size_t +#ifdef HAVE_STDINT_H +#include // for uintptr_t, uint64_t +#endif +#include "internal_logging.h" // for ASSERT, etc + +// Type that can hold a page number +typedef uintptr_t PageID; + +// Type that can hold the length of a run of pages +typedef uintptr_t Length; + +//------------------------------------------------------------------- +// Configuration +//------------------------------------------------------------------- + +// Using large pages speeds up the execution at a cost of larger memory use. +// Deallocation may speed up by a factor as the page map gets 8x smaller, so +// lookups in the page map result in fewer L2 cache misses, which translates to +// speedup for application/platform combinations with high L2 cache pressure. +// As the number of size classes increases with large pages, we increase +// the thread cache allowance to avoid passing more free ranges to and from +// central lists. Also, larger pages are less likely to get freed. +// These two factors cause a bounded increase in memory use. + +#if defined(TCMALLOC_LARGE_PAGES) +static const size_t kPageShift = 15; +static const size_t kNumClasses = 78; +#else +static const size_t kPageShift = 13; +static const size_t kNumClasses = 86; +#endif +static const size_t kMaxThreadCacheSize = 4 << 20; + +static const size_t kPageSize = 1 << kPageShift; +static const size_t kMaxSize = 256 * 1024; +static const size_t kAlignment = 8; +static const size_t kLargeSizeClass = 0; +// For all span-lengths < kMaxPages we keep an exact-size list. +static const size_t kMaxPages = 1 << (20 - kPageShift); + +// Default bound on the total amount of thread caches. +#ifdef TCMALLOC_SMALL_BUT_SLOW +// Make the overall thread cache no bigger than that of a single thread +// for the small memory footprint case. +static const size_t kDefaultOverallThreadCacheSize = kMaxThreadCacheSize; +#else +static const size_t kDefaultOverallThreadCacheSize = 8u * kMaxThreadCacheSize; +#endif + +// Lower bound on the per-thread cache sizes +static const size_t kMinThreadCacheSize = kMaxSize * 2; + +// The number of bytes one ThreadCache will steal from another when +// the first ThreadCache is forced to Scavenge(), delaying the +// next call to Scavenge for this thread. +static const size_t kStealAmount = 1 << 16; + +// The number of times that a deallocation can cause a freelist to +// go over its max_length() before shrinking max_length(). +static const int kMaxOverages = 3; + +// Maximum length we allow a per-thread free-list to have before we +// move objects from it into the corresponding central free-list. We +// want this big to avoid locking the central free-list too often. It +// should not hurt to make this list somewhat big because the +// scavenging code will shrink it down when its contents are not in use. +static const int kMaxDynamicFreeListLength = 8192; + +static const Length kMaxValidPages = (~static_cast(0)) >> kPageShift; + +#if defined __x86_64__ +// All current and planned x86_64 processors only look at the lower 48 bits +// in virtual to physical address translation. The top 16 are thus unused. +// TODO(rus): Under what operating systems can we increase it safely to 17? +// This lets us use smaller page maps. On first allocation, a 36-bit page map +// uses only 96 KB instead of the 4.5 MB used by a 52-bit page map. +static const int kAddressBits = (sizeof(void*) < 8 ? (8 * sizeof(void*)) : 48); +#else +static const int kAddressBits = 8 * sizeof(void*); +#endif + +namespace tcmalloc { + +// Convert byte size into pages. This won't overflow, but may return +// an unreasonably large value if bytes is huge enough. +inline Length pages(size_t bytes) { + return (bytes >> kPageShift) + + ((bytes & (kPageSize - 1)) > 0 ? 1 : 0); +} + +// For larger allocation sizes, we use larger memory alignments to +// reduce the number of size classes. +int AlignmentForSize(size_t size); + +// Size-class information + mapping +class SizeMap { + private: + // Number of objects to move between a per-thread list and a central + // list in one shot. We want this to be not too small so we can + // amortize the lock overhead for accessing the central list. Making + // it too big may temporarily cause unnecessary memory wastage in the + // per-thread free list until the scavenger cleans up the list. + int num_objects_to_move_[kNumClasses]; + + //------------------------------------------------------------------- + // Mapping from size to size_class and vice versa + //------------------------------------------------------------------- + + // Sizes <= 1024 have an alignment >= 8. So for such sizes we have an + // array indexed by ceil(size/8). Sizes > 1024 have an alignment >= 128. + // So for these larger sizes we have an array indexed by ceil(size/128). + // + // We flatten both logical arrays into one physical array and use + // arithmetic to compute an appropriate index. The constants used by + // ClassIndex() were selected to make the flattening work. + // + // Examples: + // Size Expression Index + // ------------------------------------------------------- + // 0 (0 + 7) / 8 0 + // 1 (1 + 7) / 8 1 + // ... + // 1024 (1024 + 7) / 8 128 + // 1025 (1025 + 127 + (120<<7)) / 128 129 + // ... + // 32768 (32768 + 127 + (120<<7)) / 128 376 + static const int kMaxSmallSize = 1024; + static const size_t kClassArraySize = + ((kMaxSize + 127 + (120 << 7)) >> 7) + 1; + unsigned char class_array_[kClassArraySize]; + + // Compute index of the class_array[] entry for a given size + static inline int ClassIndex(int s) { + ASSERT(0 <= s); + ASSERT(s <= kMaxSize); + const bool big = (s > kMaxSmallSize); + const int add_amount = big ? (127 + (120<<7)) : 7; + const int shift_amount = big ? 7 : 3; + return (s + add_amount) >> shift_amount; + } + + int NumMoveSize(size_t size); + + // Mapping from size class to max size storable in that class + size_t class_to_size_[kNumClasses]; + + // Mapping from size class to number of pages to allocate at a time + size_t class_to_pages_[kNumClasses]; + + public: + // Constructor should do nothing since we rely on explicit Init() + // call, which may or may not be called before the constructor runs. + SizeMap() { } + + // Initialize the mapping arrays + void Init(); + + inline int SizeClass(int size) { + return class_array_[ClassIndex(size)]; + } + + // Get the byte-size for a specified class + inline size_t ByteSizeForClass(size_t cl) { + return class_to_size_[cl]; + } + + // Mapping from size class to max size storable in that class + inline size_t class_to_size(size_t cl) { + return class_to_size_[cl]; + } + + // Mapping from size class to number of pages to allocate at a time + inline size_t class_to_pages(size_t cl) { + return class_to_pages_[cl]; + } + + // Number of objects to move between a per-thread list and a central + // list in one shot. We want this to be not too small so we can + // amortize the lock overhead for accessing the central list. Making + // it too big may temporarily cause unnecessary memory wastage in the + // per-thread free list until the scavenger cleans up the list. + inline int num_objects_to_move(size_t cl) { + return num_objects_to_move_[cl]; + } +}; + +// Allocates "bytes" worth of memory and returns it. Increments +// metadata_system_bytes appropriately. May return NULL if allocation +// fails. Requires pageheap_lock is held. +void* MetaDataAlloc(size_t bytes); + +// Returns the total number of bytes allocated from the system. +// Requires pageheap_lock is held. +uint64_t metadata_system_bytes(); + +// size/depth are made the same size as a pointer so that some generic +// code below can conveniently cast them back and forth to void*. +static const int kMaxStackDepth = 31; +struct StackTrace { + uintptr_t size; // Size of object + uintptr_t depth; // Number of PC values stored in array below + void* stack[kMaxStackDepth]; +}; + +} // namespace tcmalloc + +#endif // TCMALLOC_COMMON_H_ diff --git a/src/thirdparty/gperftools-2.0/src/config_for_unittests.h b/src/thirdparty/gperftools-2.0/src/config_for_unittests.h new file mode 100644 index 000000000..b418dbf27 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/config_for_unittests.h @@ -0,0 +1,64 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// All Rights Reserved. +// +// Author: Craig Silverstein +// +// This file is needed for windows -- unittests are not part of the +// perftools dll, but still want to include config.h just like the +// dll does, so they can use internal tools and APIs for testing. +// +// The problem is that config.h declares PERFTOOLS_DLL_DECL to be +// for exporting symbols, but the unittest needs to *import* symbols +// (since it's not the dll). +// +// The solution is to have this file, which is just like config.h but +// sets PERFTOOLS_DLL_DECL to do a dllimport instead of a dllexport. +// +// The reason we need this extra PERFTOOLS_DLL_DECL_FOR_UNITTESTS +// variable is in case people want to set PERFTOOLS_DLL_DECL explicitly +// to something other than __declspec(dllexport). In that case, they +// may want to use something other than __declspec(dllimport) for the +// unittest case. For that, we allow folks to define both +// PERFTOOLS_DLL_DECL and PERFTOOLS_DLL_DECL_FOR_UNITTESTS explicitly. +// +// NOTE: This file is equivalent to config.h on non-windows systems, +// which never defined PERFTOOLS_DLL_DECL_FOR_UNITTESTS and always +// define PERFTOOLS_DLL_DECL to the empty string. + +#include "config.h" + +#undef PERFTOOLS_DLL_DECL +#ifdef PERFTOOLS_DLL_DECL_FOR_UNITTESTS +# define PERFTOOLS_DLL_DECL PERFTOOLS_DLL_DECL_FOR_UNITTESTS +#else +# define PERFTOOLS_DLL_DECL // if DLL_DECL_FOR_UNITTESTS isn't defined, use "" +#endif diff --git a/src/thirdparty/gperftools-2.0/src/debugallocation.cc b/src/thirdparty/gperftools-2.0/src/debugallocation.cc new file mode 100644 index 000000000..70ec162bc --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/debugallocation.cc @@ -0,0 +1,1420 @@ +// Copyright (c) 2000, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Urs Holzle + +#include "config.h" +#include +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_INTTYPES_H +#include +#endif +// We only need malloc.h for struct mallinfo. +#ifdef HAVE_STRUCT_MALLINFO +// Malloc can be in several places on older versions of OS X. +# if defined(HAVE_MALLOC_H) +# include +# elif defined(HAVE_MALLOC_MALLOC_H) +# include +# elif defined(HAVE_SYS_MALLOC_H) +# include +# endif +#endif +#ifdef HAVE_PTHREAD +#include +#endif +#include +#include +#include +#ifdef HAVE_MMAP +#include +#endif +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif + +#include +#include +#include +#include "addressmap-inl.h" +#include "base/commandlineflags.h" +#include "base/googleinit.h" +#include "base/logging.h" +#include "base/spinlock.h" +#include "malloc_hook-inl.h" +#include "symbolize.h" + +#define TCMALLOC_USING_DEBUGALLOCATION +#include "tcmalloc.cc" + +// __THROW is defined in glibc systems. It means, counter-intuitively, +// "This function will never throw an exception." It's an optional +// optimization tool, but we may need to use it to match glibc prototypes. +#ifndef __THROW // I guess we're not on a glibc system +# define __THROW // __THROW is just an optimization, so ok to make it "" +#endif + +// On systems (like freebsd) that don't define MAP_ANONYMOUS, use the old +// form of the name instead. +#ifndef MAP_ANONYMOUS +# define MAP_ANONYMOUS MAP_ANON +#endif + +// ========================================================================= // + +DEFINE_bool(malloctrace, + EnvToBool("TCMALLOC_TRACE", false), + "Enables memory (de)allocation tracing to /tmp/google.alloc."); +#ifdef HAVE_MMAP +DEFINE_bool(malloc_page_fence, + EnvToBool("TCMALLOC_PAGE_FENCE", false), + "Enables putting of memory allocations at page boundaries " + "with a guard page following the allocation (to catch buffer " + "overruns right when they happen)."); +DEFINE_bool(malloc_page_fence_never_reclaim, + EnvToBool("TCMALLOC_PAGE_FRANCE_NEVER_RECLAIM", false), + "Enables making the virtual address space inaccessible " + "upon a deallocation instead of returning it and reusing later."); +#else +DEFINE_bool(malloc_page_fence, false, "Not usable (requires mmap)"); +DEFINE_bool(malloc_page_fence_never_reclaim, false, "Not usable (required mmap)"); +#endif +DEFINE_bool(malloc_reclaim_memory, + EnvToBool("TCMALLOC_RECLAIM_MEMORY", true), + "If set to false, we never return memory to malloc " + "when an object is deallocated. This ensures that all " + "heap object addresses are unique."); +DEFINE_int32(max_free_queue_size, + EnvToInt("TCMALLOC_MAX_FREE_QUEUE_SIZE", 10*1024*1024), + "If greater than 0, keep freed blocks in a queue instead of " + "releasing them to the allocator immediately. Release them when " + "the total size of all blocks in the queue would otherwise exceed " + "this limit."); + +DEFINE_bool(symbolize_stacktrace, + EnvToBool("TCMALLOC_SYMBOLIZE_STACKTRACE", true), + "Symbolize the stack trace when provided (on some error exits)"); + +// If we are LD_PRELOAD-ed against a non-pthreads app, then +// pthread_once won't be defined. We declare it here, for that +// case (with weak linkage) which will cause the non-definition to +// resolve to NULL. We can then check for NULL or not in Instance. +extern "C" int pthread_once(pthread_once_t *, void (*)(void)) + ATTRIBUTE_WEAK; + +// ========================================================================= // + +// A safe version of printf() that does not do any allocation and +// uses very little stack space. +static void TracePrintf(int fd, const char *fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); + +// The do_* functions are defined in tcmalloc/tcmalloc.cc, +// which is included before this file +// when TCMALLOC_FOR_DEBUGALLOCATION is defined +// TODO(csilvers): get rid of these now that we are tied to tcmalloc. +#define BASE_MALLOC_NEW do_malloc +#define BASE_MALLOC do_malloc +#define BASE_FREE do_free +#define BASE_MALLOC_STATS do_malloc_stats +#define BASE_MALLOPT do_mallopt +#define BASE_MALLINFO do_mallinfo + +// ========================================================================= // + +class MallocBlock; + +// A circular buffer to hold freed blocks of memory. MallocBlock::Deallocate +// (below) pushes blocks into this queue instead of returning them to the +// underlying allocator immediately. See MallocBlock::Deallocate for more +// information. +// +// We can't use an STL class for this because we need to be careful not to +// perform any heap de-allocations in any of the code in this class, since the +// code in MallocBlock::Deallocate is not re-entrant. +template +class FreeQueue { + public: + FreeQueue() : q_front_(0), q_back_(0) {} + + bool Full() { + return (q_front_ + 1) % kFreeQueueSize == q_back_; + } + + void Push(const QueueEntry& block) { + q_[q_front_] = block; + q_front_ = (q_front_ + 1) % kFreeQueueSize; + } + + QueueEntry Pop() { + RAW_CHECK(q_back_ != q_front_, "Queue is empty"); + const QueueEntry& ret = q_[q_back_]; + q_back_ = (q_back_ + 1) % kFreeQueueSize; + return ret; + } + + size_t size() const { + return (q_front_ - q_back_ + kFreeQueueSize) % kFreeQueueSize; + } + + private: + // Maximum number of blocks kept in the free queue before being freed. + static const int kFreeQueueSize = 1024; + + QueueEntry q_[kFreeQueueSize]; + int q_front_; + int q_back_; +}; + +struct MallocBlockQueueEntry { + MallocBlockQueueEntry() : block(NULL), size(0), + num_deleter_pcs(0), deleter_threadid(0) {} + MallocBlockQueueEntry(MallocBlock* b, size_t s) : block(b), size(s) { + if (FLAGS_max_free_queue_size != 0 && b != NULL) { + // Adjust the number of frames to skip (4) if you change the + // location of this call. + num_deleter_pcs = + GetStackTrace(deleter_pcs, + sizeof(deleter_pcs) / sizeof(deleter_pcs[0]), + 4); + deleter_threadid = pthread_self(); + } else { + num_deleter_pcs = 0; + // Zero is an illegal pthread id by my reading of the pthread + // implementation: + deleter_threadid = 0; + } + } + + MallocBlock* block; + size_t size; + + // When deleted and put in the free queue, we (flag-controlled) + // record the stack so that if corruption is later found, we can + // print the deleter's stack. (These three vars add 144 bytes of + // overhead under the LP64 data model.) + void* deleter_pcs[16]; + int num_deleter_pcs; + pthread_t deleter_threadid; +}; + +class MallocBlock { + public: // allocation type constants + + // Different allocation types we distinguish. + // Note: The lower 4 bits are not random: we index kAllocName array + // by these values masked with kAllocTypeMask; + // the rest are "random" magic bits to help catch memory corruption. + static const int kMallocType = 0xEFCDAB90; + static const int kNewType = 0xFEBADC81; + static const int kArrayNewType = 0xBCEADF72; + + private: // constants + + // A mask used on alloc types above to get to 0, 1, 2 + static const int kAllocTypeMask = 0x3; + // An additional bit to set in AllocType constants + // to mark now deallocated regions. + static const int kDeallocatedTypeBit = 0x4; + + // For better memory debugging, we initialize all storage to known + // values, and overwrite the storage when it's deallocated: + // Byte that fills uninitialized storage. + static const int kMagicUninitializedByte = 0xAB; + // Byte that fills deallocated storage. + // NOTE: tcmalloc.cc depends on the value of kMagicDeletedByte + // to work around a bug in the pthread library. + static const int kMagicDeletedByte = 0xCD; + // A size_t (type of alloc_type_ below) in a deallocated storage + // filled with kMagicDeletedByte. + static const size_t kMagicDeletedSizeT = + 0xCDCDCDCD | (((size_t)0xCDCDCDCD << 16) << 16); + // Initializer works for 32 and 64 bit size_ts; + // "<< 16 << 16" is to fool gcc from issuing a warning + // when size_ts are 32 bits. + + // NOTE: on Linux, you can enable malloc debugging support in libc by + // setting the environment variable MALLOC_CHECK_ to 1 before you + // start the program (see man malloc). + + // We use either BASE_MALLOC or mmap to make the actual allocation. In + // order to remember which one of the two was used for any block, we store an + // appropriate magic word next to the block. + static const int kMagicMalloc = 0xDEADBEEF; + static const int kMagicMMap = 0xABCDEFAB; + + // This array will be filled with 0xCD, for use with memcmp. + static unsigned char kMagicDeletedBuffer[1024]; + static pthread_once_t deleted_buffer_initialized_; + static bool deleted_buffer_initialized_no_pthreads_; + + private: // data layout + + // The four fields size1_,offset_,magic1_,alloc_type_ + // should together occupy a multiple of 16 bytes. (At the + // moment, sizeof(size_t) == 4 or 8 depending on piii vs + // k8, and 4 of those sum to 16 or 32 bytes). + // This, combined with BASE_MALLOC's alignment guarantees, + // ensures that SSE types can be stored into the returned + // block, at &size2_. + size_t size1_; + size_t offset_; // normally 0 unless memaligned memory + // see comments in memalign() and FromRawPointer(). + size_t magic1_; + size_t alloc_type_; + // here comes the actual data (variable length) + // ... + // then come the size2_ and magic2_, or a full page of mprotect-ed memory + // if the malloc_page_fence feature is enabled. + size_t size2_; + int magic2_; + + private: // static data and helpers + + // Allocation map: stores the allocation type for each allocated object, + // or the type or'ed with kDeallocatedTypeBit + // for each formerly allocated object. + typedef AddressMap AllocMap; + static AllocMap* alloc_map_; + // This protects alloc_map_ and consistent state of metadata + // for each still-allocated object in it. + // We use spin locks instead of pthread_mutex_t locks + // to prevent crashes via calls to pthread_mutex_(un)lock + // for the (de)allocations coming from pthreads initialization itself. + static SpinLock alloc_map_lock_; + + // A queue of freed blocks. Instead of releasing blocks to the allocator + // immediately, we put them in a queue, freeing them only when necessary + // to keep the total size of all the freed blocks below the limit set by + // FLAGS_max_free_queue_size. + static FreeQueue* free_queue_; + + static size_t free_queue_size_; // total size of blocks in free_queue_ + // protects free_queue_ and free_queue_size_ + static SpinLock free_queue_lock_; + + // Names of allocation types (kMallocType, kNewType, kArrayNewType) + static const char* const kAllocName[]; + // Names of corresponding deallocation types + static const char* const kDeallocName[]; + + static const char* AllocName(int type) { + return kAllocName[type & kAllocTypeMask]; + } + + static const char* DeallocName(int type) { + return kDeallocName[type & kAllocTypeMask]; + } + + private: // helper accessors + + bool IsMMapped() const { return kMagicMMap == magic1_; } + + bool IsValidMagicValue(int value) const { + return kMagicMMap == value || kMagicMalloc == value; + } + + static size_t real_malloced_size(size_t size) { + return size + sizeof(MallocBlock); + } + static size_t real_mmapped_size(size_t size) { + return size + MallocBlock::data_offset(); + } + + size_t real_size() { + return IsMMapped() ? real_mmapped_size(size1_) : real_malloced_size(size1_); + } + + // NOTE: if the block is mmapped (that is, we're using the + // malloc_page_fence option) then there's no size2 or magic2 + // (instead, the guard page begins where size2 would be). + + size_t* size2_addr() { return (size_t*)((char*)&size2_ + size1_); } + const size_t* size2_addr() const { + return (const size_t*)((char*)&size2_ + size1_); + } + + int* magic2_addr() { return (int*)(size2_addr() + 1); } + const int* magic2_addr() const { return (const int*)(size2_addr() + 1); } + + private: // other helpers + + void Initialize(size_t size, int type) { + RAW_CHECK(IsValidMagicValue(magic1_), ""); + // record us as allocated in the map + alloc_map_lock_.Lock(); + if (!alloc_map_) { + void* p = BASE_MALLOC(sizeof(AllocMap)); + alloc_map_ = new(p) AllocMap(BASE_MALLOC, BASE_FREE); + } + alloc_map_->Insert(data_addr(), type); + // initialize us + size1_ = size; + offset_ = 0; + alloc_type_ = type; + if (!IsMMapped()) { + *magic2_addr() = magic1_; + *size2_addr() = size; + } + alloc_map_lock_.Unlock(); + memset(data_addr(), kMagicUninitializedByte, size); + if (!IsMMapped()) { + RAW_CHECK(size1_ == *size2_addr(), "should hold"); + RAW_CHECK(magic1_ == *magic2_addr(), "should hold"); + } + } + + size_t CheckAndClear(int type) { + alloc_map_lock_.Lock(); + CheckLocked(type); + if (!IsMMapped()) { + RAW_CHECK(size1_ == *size2_addr(), "should hold"); + } + // record us as deallocated in the map + alloc_map_->Insert(data_addr(), type | kDeallocatedTypeBit); + alloc_map_lock_.Unlock(); + // clear us + const size_t size = real_size(); + memset(this, kMagicDeletedByte, size); + return size; + } + + void CheckLocked(int type) const { + int map_type = 0; + const int* found_type = + alloc_map_ != NULL ? alloc_map_->Find(data_addr()) : NULL; + if (found_type == NULL) { + RAW_LOG(FATAL, "memory allocation bug: object at %p " + "has never been allocated", data_addr()); + } else { + map_type = *found_type; + } + if ((map_type & kDeallocatedTypeBit) != 0) { + RAW_LOG(FATAL, "memory allocation bug: object at %p " + "has been already deallocated (it was allocated with %s)", + data_addr(), AllocName(map_type & ~kDeallocatedTypeBit)); + } + if (alloc_type_ == kMagicDeletedSizeT) { + RAW_LOG(FATAL, "memory stomping bug: a word before object at %p " + "has been corrupted; or else the object has been already " + "deallocated and our memory map has been corrupted", + data_addr()); + } + if (!IsValidMagicValue(magic1_)) { + RAW_LOG(FATAL, "memory stomping bug: a word before object at %p " + "has been corrupted; " + "or else our memory map has been corrupted and this is a " + "deallocation for not (currently) heap-allocated object", + data_addr()); + } + if (!IsMMapped()) { + if (size1_ != *size2_addr()) { + RAW_LOG(FATAL, "memory stomping bug: a word after object at %p " + "has been corrupted", data_addr()); + } + if (!IsValidMagicValue(*magic2_addr())) { + RAW_LOG(FATAL, "memory stomping bug: a word after object at %p " + "has been corrupted", data_addr()); + } + } + if (alloc_type_ != type) { + if ((alloc_type_ != MallocBlock::kMallocType) && + (alloc_type_ != MallocBlock::kNewType) && + (alloc_type_ != MallocBlock::kArrayNewType)) { + RAW_LOG(FATAL, "memory stomping bug: a word before object at %p " + "has been corrupted", data_addr()); + } + RAW_LOG(FATAL, "memory allocation/deallocation mismatch at %p: " + "allocated with %s being deallocated with %s", + data_addr(), AllocName(alloc_type_), DeallocName(type)); + } + if (alloc_type_ != map_type) { + RAW_LOG(FATAL, "memory stomping bug: our memory map has been corrupted : " + "allocation at %p made with %s " + "is recorded in the map to be made with %s", + data_addr(), AllocName(alloc_type_), AllocName(map_type)); + } + } + + public: // public accessors + + void* data_addr() { return (void*)&size2_; } + const void* data_addr() const { return (const void*)&size2_; } + + static size_t data_offset() { return OFFSETOF_MEMBER(MallocBlock, size2_); } + + size_t data_size() const { return size1_; } + + void set_offset(int offset) { this->offset_ = offset; } + + public: // our main interface + + static MallocBlock* Allocate(size_t size, int type) { + // Prevent an integer overflow / crash with large allocation sizes. + // TODO - Note that for a e.g. 64-bit size_t, max_size_t may not actually + // be the maximum value, depending on how the compiler treats ~0. The worst + // practical effect is that allocations are limited to 4Gb or so, even if + // the address space could take more. + static size_t max_size_t = ~0; + if (size > max_size_t - sizeof(MallocBlock)) { + RAW_LOG(ERROR, "Massive size passed to malloc: %"PRIuS"", size); + return NULL; + } + MallocBlock* b = NULL; + const bool use_malloc_page_fence = FLAGS_malloc_page_fence; +#ifdef HAVE_MMAP + if (use_malloc_page_fence) { + // Put the block towards the end of the page and make the next page + // inaccessible. This will catch buffer overrun right when it happens. + size_t sz = real_mmapped_size(size); + int pagesize = getpagesize(); + int num_pages = (sz + pagesize - 1) / pagesize + 1; + char* p = (char*) mmap(NULL, num_pages * pagesize, PROT_READ|PROT_WRITE, + MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + if (p == MAP_FAILED) { + // If the allocation fails, abort rather than returning NULL to + // malloc. This is because in most cases, the program will run out + // of memory in this mode due to tremendous amount of wastage. There + // is no point in propagating the error elsewhere. + RAW_LOG(FATAL, "Out of memory: possibly due to page fence overhead: %s", + strerror(errno)); + } + // Mark the page after the block inaccessible + if (mprotect(p + (num_pages - 1) * pagesize, pagesize, PROT_NONE)) { + RAW_LOG(FATAL, "Guard page setup failed: %s", strerror(errno)); + } + b = (MallocBlock*) (p + (num_pages - 1) * pagesize - sz); + } else { + b = (MallocBlock*) (type == kMallocType ? + BASE_MALLOC(real_malloced_size(size)) : + BASE_MALLOC_NEW(real_malloced_size(size))); + } +#else + b = (MallocBlock*) (type == kMallocType ? + BASE_MALLOC(real_malloced_size(size)) : + BASE_MALLOC_NEW(real_malloced_size(size))); +#endif + + // It would be nice to output a diagnostic on allocation failure + // here, but logging (other than FATAL) requires allocating + // memory, which could trigger a nasty recursion. Instead, preserve + // malloc semantics and return NULL on failure. + if (b != NULL) { + b->magic1_ = use_malloc_page_fence ? kMagicMMap : kMagicMalloc; + b->Initialize(size, type); + } + return b; + } + + void Deallocate(int type) { + if (IsMMapped()) { // have to do this before CheckAndClear +#ifdef HAVE_MMAP + int size = CheckAndClear(type); + int pagesize = getpagesize(); + int num_pages = (size + pagesize - 1) / pagesize + 1; + char* p = (char*) this; + if (FLAGS_malloc_page_fence_never_reclaim || + !FLAGS_malloc_reclaim_memory) { + mprotect(p - (num_pages - 1) * pagesize + size, + num_pages * pagesize, PROT_NONE); + } else { + munmap(p - (num_pages - 1) * pagesize + size, num_pages * pagesize); + } +#endif + } else { + const size_t size = CheckAndClear(type); + if (FLAGS_malloc_reclaim_memory) { + // Instead of freeing the block immediately, push it onto a queue of + // recently freed blocks. Free only enough blocks to keep from + // exceeding the capacity of the queue or causing the total amount of + // un-released memory in the queue from exceeding + // FLAGS_max_free_queue_size. + ProcessFreeQueue(this, size, FLAGS_max_free_queue_size); + } + } + } + + static size_t FreeQueueSize() { + SpinLockHolder l(&free_queue_lock_); + return free_queue_size_; + } + + static void ProcessFreeQueue(MallocBlock* b, size_t size, + int max_free_queue_size) { + // MallocBlockQueueEntry are about 144 in size, so we can only + // use a small array of them on the stack. + MallocBlockQueueEntry entries[4]; + int num_entries = 0; + MallocBlockQueueEntry new_entry(b, size); + free_queue_lock_.Lock(); + if (free_queue_ == NULL) + free_queue_ = new FreeQueue; + RAW_CHECK(!free_queue_->Full(), "Free queue mustn't be full!"); + + if (b != NULL) { + free_queue_size_ += size + sizeof(MallocBlockQueueEntry); + free_queue_->Push(new_entry); + } + + // Free blocks until the total size of unfreed blocks no longer exceeds + // max_free_queue_size, and the free queue has at least one free + // space in it. + while (free_queue_size_ > max_free_queue_size || free_queue_->Full()) { + RAW_CHECK(num_entries < arraysize(entries), "entries array overflow"); + entries[num_entries] = free_queue_->Pop(); + free_queue_size_ -= + entries[num_entries].size + sizeof(MallocBlockQueueEntry); + num_entries++; + if (num_entries == arraysize(entries)) { + // The queue will not be full at this point, so it is ok to + // release the lock. The queue may still contain more than + // max_free_queue_size, but this is not a strict invariant. + free_queue_lock_.Unlock(); + for (int i = 0; i < num_entries; i++) { + CheckForDanglingWrites(entries[i]); + BASE_FREE(entries[i].block); + } + num_entries = 0; + free_queue_lock_.Lock(); + } + } + RAW_CHECK(free_queue_size_ >= 0, "Free queue size went negative!"); + free_queue_lock_.Unlock(); + for (int i = 0; i < num_entries; i++) { + CheckForDanglingWrites(entries[i]); + BASE_FREE(entries[i].block); + } + } + + static void InitDeletedBuffer() { + memset(kMagicDeletedBuffer, kMagicDeletedByte, sizeof(kMagicDeletedBuffer)); + deleted_buffer_initialized_no_pthreads_ = true; + } + + static void CheckForDanglingWrites(const MallocBlockQueueEntry& queue_entry) { + // Initialize the buffer if necessary. + if (pthread_once) + pthread_once(&deleted_buffer_initialized_, &InitDeletedBuffer); + if (!deleted_buffer_initialized_no_pthreads_) { + // This will be the case on systems that don't link in pthreads, + // including on FreeBSD where pthread_once has a non-zero address + // (but doesn't do anything) even when pthreads isn't linked in. + InitDeletedBuffer(); + } + + const unsigned char* p = + reinterpret_cast(queue_entry.block); + + static const size_t size_of_buffer = sizeof(kMagicDeletedBuffer); + const size_t size = queue_entry.size; + const size_t buffers = size / size_of_buffer; + const size_t remainder = size % size_of_buffer; + size_t buffer_idx; + for (buffer_idx = 0; buffer_idx < buffers; ++buffer_idx) { + CheckForCorruptedBuffer(queue_entry, buffer_idx, p, size_of_buffer); + p += size_of_buffer; + } + CheckForCorruptedBuffer(queue_entry, buffer_idx, p, remainder); + } + + static void CheckForCorruptedBuffer(const MallocBlockQueueEntry& queue_entry, + size_t buffer_idx, + const unsigned char* buffer, + size_t size_of_buffer) { + if (memcmp(buffer, kMagicDeletedBuffer, size_of_buffer) == 0) { + return; + } + + RAW_LOG(ERROR, + "Found a corrupted memory buffer in MallocBlock (may be offset " + "from user ptr): buffer index: %zd, buffer ptr: %p, size of " + "buffer: %zd", buffer_idx, buffer, size_of_buffer); + + // The magic deleted buffer should only be 1024 bytes, but in case + // this changes, let's put an upper limit on the number of debug + // lines we'll output: + if (size_of_buffer <= 1024) { + for (int i = 0; i < size_of_buffer; ++i) { + if (buffer[i] != kMagicDeletedByte) { + RAW_LOG(ERROR, "Buffer byte %d is 0x%02x (should be 0x%02x).", + i, buffer[i], kMagicDeletedByte); + } + } + } else { + RAW_LOG(ERROR, "Buffer too large to print corruption."); + } + + const MallocBlock* b = queue_entry.block; + const size_t size = queue_entry.size; + if (queue_entry.num_deleter_pcs > 0) { + TracePrintf(STDERR_FILENO, "Deleted by thread %p\n", + reinterpret_cast( + PRINTABLE_PTHREAD(queue_entry.deleter_threadid))); + + // We don't want to allocate or deallocate memory here, so we use + // placement-new. It's ok that we don't destroy this, since we're + // just going to error-exit below anyway. Union is for alignment. + union { void* alignment; char buf[sizeof(SymbolTable)]; } tablebuf; + SymbolTable* symbolization_table = new (tablebuf.buf) SymbolTable; + for (int i = 0; i < queue_entry.num_deleter_pcs; i++) { + // Symbolizes the previous address of pc because pc may be in the + // next function. This may happen when the function ends with + // a call to a function annotated noreturn (e.g. CHECK). + char *pc = reinterpret_cast(queue_entry.deleter_pcs[i]); + symbolization_table->Add(pc - 1); + } + if (FLAGS_symbolize_stacktrace) + symbolization_table->Symbolize(); + for (int i = 0; i < queue_entry.num_deleter_pcs; i++) { + char *pc = reinterpret_cast(queue_entry.deleter_pcs[i]); + TracePrintf(STDERR_FILENO, " @ %p %s\n", + pc, symbolization_table->GetSymbol(pc - 1)); + } + } else { + RAW_LOG(ERROR, + "Skipping the printing of the deleter's stack! Its stack was " + "not found; either the corruption occurred too early in " + "execution to obtain a stack trace or --max_free_queue_size was " + "set to 0."); + } + + RAW_LOG(FATAL, + "Memory was written to after being freed. MallocBlock: %p, user " + "ptr: %p, size: %zd. If you can't find the source of the error, " + "try using ASan (http://code.google.com/p/address-sanitizer/), " + "Valgrind, or Purify, or study the " + "output of the deleter's stack printed above.", + b, b->data_addr(), size); + } + + static MallocBlock* FromRawPointer(void* p) { + const size_t data_offset = MallocBlock::data_offset(); + // Find the header just before client's memory. + MallocBlock *mb = reinterpret_cast( + reinterpret_cast(p) - data_offset); + // If mb->alloc_type_ is kMagicDeletedSizeT, we're not an ok pointer. + if (mb->alloc_type_ == kMagicDeletedSizeT) { + RAW_LOG(FATAL, "memory allocation bug: object at %p has been already" + " deallocated; or else a word before the object has been" + " corrupted (memory stomping bug)", p); + } + // If mb->offset_ is zero (common case), mb is the real header. If + // mb->offset_ is non-zero, this block was allocated by memalign, and + // mb->offset_ is the distance backwards to the real header from mb, + // which is a fake header. The following subtraction works for both zero + // and non-zero values. + return reinterpret_cast( + reinterpret_cast(mb) - mb->offset_); + } + static const MallocBlock* FromRawPointer(const void* p) { + // const-safe version: we just cast about + return FromRawPointer(const_cast(p)); + } + + void Check(int type) const { + alloc_map_lock_.Lock(); + CheckLocked(type); + alloc_map_lock_.Unlock(); + } + + static bool CheckEverything() { + alloc_map_lock_.Lock(); + if (alloc_map_ != NULL) alloc_map_->Iterate(CheckCallback, 0); + alloc_map_lock_.Unlock(); + return true; // if we get here, we're okay + } + + static bool MemoryStats(int* blocks, size_t* total, + int histogram[kMallocHistogramSize]) { + memset(histogram, 0, kMallocHistogramSize * sizeof(int)); + alloc_map_lock_.Lock(); + stats_blocks_ = 0; + stats_total_ = 0; + stats_histogram_ = histogram; + if (alloc_map_ != NULL) alloc_map_->Iterate(StatsCallback, 0); + *blocks = stats_blocks_; + *total = stats_total_; + alloc_map_lock_.Unlock(); + return true; + } + + private: // helpers for CheckEverything and MemoryStats + + static void CheckCallback(const void* ptr, int* type, int dummy) { + if ((*type & kDeallocatedTypeBit) == 0) { + FromRawPointer(ptr)->CheckLocked(*type); + } + } + + // Accumulation variables for StatsCallback protected by alloc_map_lock_ + static int stats_blocks_; + static size_t stats_total_; + static int* stats_histogram_; + + static void StatsCallback(const void* ptr, int* type, int dummy) { + if ((*type & kDeallocatedTypeBit) == 0) { + const MallocBlock* b = FromRawPointer(ptr); + b->CheckLocked(*type); + ++stats_blocks_; + size_t mysize = b->size1_; + int entry = 0; + stats_total_ += mysize; + while (mysize) { + ++entry; + mysize >>= 1; + } + RAW_CHECK(entry < kMallocHistogramSize, + "kMallocHistogramSize should be at least as large as log2 " + "of the maximum process memory size"); + stats_histogram_[entry] += 1; + } + } +}; + +void DanglingWriteChecker() { + // Clear out the remaining free queue to check for dangling writes. + MallocBlock::ProcessFreeQueue(NULL, 0, 0); +} + +// ========================================================================= // + +const int MallocBlock::kMagicMalloc; +const int MallocBlock::kMagicMMap; + +MallocBlock::AllocMap* MallocBlock::alloc_map_ = NULL; +SpinLock MallocBlock::alloc_map_lock_(SpinLock::LINKER_INITIALIZED); + +FreeQueue* MallocBlock::free_queue_ = NULL; +size_t MallocBlock::free_queue_size_ = 0; +SpinLock MallocBlock::free_queue_lock_(SpinLock::LINKER_INITIALIZED); + +unsigned char MallocBlock::kMagicDeletedBuffer[1024]; +pthread_once_t MallocBlock::deleted_buffer_initialized_ = PTHREAD_ONCE_INIT; +bool MallocBlock::deleted_buffer_initialized_no_pthreads_ = false; + +const char* const MallocBlock::kAllocName[] = { + "malloc", + "new", + "new []", + NULL, +}; + +const char* const MallocBlock::kDeallocName[] = { + "free", + "delete", + "delete []", + NULL, +}; + +int MallocBlock::stats_blocks_; +size_t MallocBlock::stats_total_; +int* MallocBlock::stats_histogram_; + +// ========================================================================= // + +// The following cut-down version of printf() avoids +// using stdio or ostreams. +// This is to guarantee no recursive calls into +// the allocator and to bound the stack space consumed. (The pthread +// manager thread in linuxthreads has a very small stack, +// so fprintf can't be called.) +static void TracePrintf(int fd, const char *fmt, ...) { + char buf[64]; + int i = 0; + va_list ap; + va_start(ap, fmt); + const char *p = fmt; + char numbuf[25]; + numbuf[sizeof(numbuf)-1] = 0; + while (*p != '\0') { // until end of format string + char *s = &numbuf[sizeof(numbuf)-1]; + if (p[0] == '%' && p[1] != 0) { // handle % formats + int64 l = 0; + unsigned long base = 0; + if (*++p == 's') { // %s + s = va_arg(ap, char *); + } else if (*p == 'l' && p[1] == 'd') { // %ld + l = va_arg(ap, long); + base = 10; + p++; + } else if (*p == 'l' && p[1] == 'u') { // %lu + l = va_arg(ap, unsigned long); + base = 10; + p++; + } else if (*p == 'z' && p[1] == 'u') { // %zu + l = va_arg(ap, size_t); + base = 10; + p++; + } else if (*p == 'u') { // %u + l = va_arg(ap, unsigned int); + base = 10; + } else if (*p == 'd') { // %d + l = va_arg(ap, int); + base = 10; + } else if (*p == 'p') { // %p + l = va_arg(ap, intptr_t); + base = 16; + } else { + write(STDERR_FILENO, "Unimplemented TracePrintf format\n", 33); + write(STDERR_FILENO, p, 2); + write(STDERR_FILENO, "\n", 1); + abort(); + } + p++; + if (base != 0) { + bool minus = (l < 0 && base == 10); + uint64 ul = minus? -l : l; + do { + *--s = "0123456789abcdef"[ul % base]; + ul /= base; + } while (ul != 0); + if (base == 16) { + *--s = 'x'; + *--s = '0'; + } else if (minus) { + *--s = '-'; + } + } + } else { // handle normal characters + *--s = *p++; + } + while (*s != 0) { + if (i == sizeof(buf)) { + write(fd, buf, i); + i = 0; + } + buf[i++] = *s++; + } + } + if (i != 0) { + write(fd, buf, i); + } + va_end(ap); +} + +// Return the file descriptor we're writing a log to +static int TraceFd() { + static int trace_fd = -1; + if (trace_fd == -1) { // Open the trace file on the first call + trace_fd = open("/tmp/google.alloc", O_CREAT|O_TRUNC|O_WRONLY, 0666); + if (trace_fd == -1) { + trace_fd = 2; + TracePrintf(trace_fd, + "Can't open /tmp/google.alloc. Logging to stderr.\n"); + } + // Add a header to the log. + TracePrintf(trace_fd, "Trace started: %lu\n", + static_cast(time(NULL))); + TracePrintf(trace_fd, + "func\tsize\tptr\tthread_id\tstack pcs for tools/symbolize\n"); + } + return trace_fd; +} + +// Print the hex stack dump on a single line. PCs are separated by tabs. +static void TraceStack(void) { + void *pcs[16]; + int n = GetStackTrace(pcs, sizeof(pcs)/sizeof(pcs[0]), 0); + for (int i = 0; i != n; i++) { + TracePrintf(TraceFd(), "\t%p", pcs[i]); + } +} + +// This protects MALLOC_TRACE, to make sure its info is atomically written. +static SpinLock malloc_trace_lock(SpinLock::LINKER_INITIALIZED); + +#define MALLOC_TRACE(name, size, addr) \ + do { \ + if (FLAGS_malloctrace) { \ + SpinLockHolder l(&malloc_trace_lock); \ + TracePrintf(TraceFd(), "%s\t%"PRIuS"\t%p\t%"GPRIuPTHREAD, \ + name, size, addr, PRINTABLE_PTHREAD(pthread_self())); \ + TraceStack(); \ + TracePrintf(TraceFd(), "\n"); \ + } \ + } while (0) + +// ========================================================================= // + +// Write the characters buf[0, ..., size-1] to +// the malloc trace buffer. +// This function is intended for debugging, +// and is not declared in any header file. +// You must insert a declaration of it by hand when you need +// to use it. +void __malloctrace_write(const char *buf, size_t size) { + if (FLAGS_malloctrace) { + write(TraceFd(), buf, size); + } +} + +// ========================================================================= // + +// General debug allocation/deallocation + +static inline void* DebugAllocate(size_t size, int type) { + MallocBlock* ptr = MallocBlock::Allocate(size, type); + if (ptr == NULL) return NULL; + MALLOC_TRACE("malloc", size, ptr->data_addr()); + return ptr->data_addr(); +} + +static inline void DebugDeallocate(void* ptr, int type) { + MALLOC_TRACE("free", + (ptr != 0 ? MallocBlock::FromRawPointer(ptr)->data_size() : 0), + ptr); + if (ptr) MallocBlock::FromRawPointer(ptr)->Deallocate(type); +} + +// ========================================================================= // + +// The following functions may be called via MallocExtension::instance() +// for memory verification and statistics. +class DebugMallocImplementation : public TCMallocImplementation { + public: + virtual bool GetNumericProperty(const char* name, size_t* value) { + bool result = TCMallocImplementation::GetNumericProperty(name, value); + if (result && (strcmp(name, "generic.current_allocated_bytes") == 0)) { + // Subtract bytes kept in the free queue + size_t qsize = MallocBlock::FreeQueueSize(); + if (*value >= qsize) { + *value -= qsize; + } + } + return result; + } + + virtual bool VerifyNewMemory(const void* p) { + if (p) MallocBlock::FromRawPointer(p)->Check(MallocBlock::kNewType); + return true; + } + + virtual bool VerifyArrayNewMemory(const void* p) { + if (p) MallocBlock::FromRawPointer(p)->Check(MallocBlock::kArrayNewType); + return true; + } + + virtual bool VerifyMallocMemory(const void* p) { + if (p) MallocBlock::FromRawPointer(p)->Check(MallocBlock::kMallocType); + return true; + } + + virtual bool VerifyAllMemory() { + return MallocBlock::CheckEverything(); + } + + virtual bool MallocMemoryStats(int* blocks, size_t* total, + int histogram[kMallocHistogramSize]) { + return MallocBlock::MemoryStats(blocks, total, histogram); + } + + virtual size_t GetEstimatedAllocatedSize(size_t size) { + return size; + } + + virtual size_t GetAllocatedSize(const void* p) { + if (p) { + RAW_CHECK(GetOwnership(p) != MallocExtension::kNotOwned, + "ptr not allocated by tcmalloc"); + return MallocBlock::FromRawPointer(p)->data_size(); + } + return 0; + } + + virtual MallocExtension::Ownership GetOwnership(const void* p) { + if (p) { + const MallocBlock* mb = MallocBlock::FromRawPointer(p); + return TCMallocImplementation::GetOwnership(mb); + } + return MallocExtension::kNotOwned; // nobody owns NULL + } + + virtual void GetFreeListSizes(vector* v) { + static const char* kDebugFreeQueue = "debug.free_queue"; + + TCMallocImplementation::GetFreeListSizes(v); + + MallocExtension::FreeListInfo i; + i.type = kDebugFreeQueue; + i.min_object_size = 0; + i.max_object_size = numeric_limits::max(); + i.total_bytes_free = MallocBlock::FreeQueueSize(); + v->push_back(i); + } + + }; + +static DebugMallocImplementation debug_malloc_implementation; + +REGISTER_MODULE_INITIALIZER(debugallocation, { + // Either we or valgrind will control memory management. We + // register our extension if we're the winner. Otherwise let + // Valgrind use its own malloc (so don't register our extension). + if (!RunningOnValgrind()) { + MallocExtension::Register(&debug_malloc_implementation); + } +}); + +REGISTER_MODULE_DESTRUCTOR(debugallocation, { + if (!RunningOnValgrind()) { + // When the program exits, check all blocks still in the free + // queue for corruption. + DanglingWriteChecker(); + } +}); + +// ========================================================================= // + +// This is mostly the same a cpp_alloc in tcmalloc.cc. +// TODO(csilvers): change Allocate() above to call cpp_alloc, so we +// don't have to reproduce the logic here. To make tc_new_mode work +// properly, I think we'll need to separate out the logic of throwing +// from the logic of calling the new-handler. +inline void* debug_cpp_alloc(size_t size, int new_type, bool nothrow) { + for (;;) { + void* p = DebugAllocate(size, new_type); +#ifdef PREANSINEW + return p; +#else + if (p == NULL) { // allocation failed + // Get the current new handler. NB: this function is not + // thread-safe. We make a feeble stab at making it so here, but + // this lock only protects against tcmalloc interfering with + // itself, not with other libraries calling set_new_handler. + std::new_handler nh; + { + SpinLockHolder h(&set_new_handler_lock); + nh = std::set_new_handler(0); + (void) std::set_new_handler(nh); + } +#if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || (defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS) + if (nh) { + // Since exceptions are disabled, we don't really know if new_handler + // failed. Assume it will abort if it fails. + (*nh)(); + continue; + } + return 0; +#else + // If no new_handler is established, the allocation failed. + if (!nh) { + if (nothrow) return 0; + throw std::bad_alloc(); + } + // Otherwise, try the new_handler. If it returns, retry the + // allocation. If it throws std::bad_alloc, fail the allocation. + // if it throws something else, don't interfere. + try { + (*nh)(); + } catch (const std::bad_alloc&) { + if (!nothrow) throw; + return p; + } +#endif // (defined(__GNUC__) && !defined(__EXCEPTIONS)) || (defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS) + } else { // allocation success + return p; + } +#endif // PREANSINEW + } +} + +inline void* do_debug_malloc_or_debug_cpp_alloc(size_t size) { + return tc_new_mode ? debug_cpp_alloc(size, MallocBlock::kMallocType, true) + : DebugAllocate(size, MallocBlock::kMallocType); +} + +// Exported routines + +extern "C" PERFTOOLS_DLL_DECL void* tc_malloc(size_t size) __THROW { + void* ptr = do_debug_malloc_or_debug_cpp_alloc(size); + MallocHook::InvokeNewHook(ptr, size); + return ptr; +} + +extern "C" PERFTOOLS_DLL_DECL void tc_free(void* ptr) __THROW { + MallocHook::InvokeDeleteHook(ptr); + DebugDeallocate(ptr, MallocBlock::kMallocType); +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_calloc(size_t count, size_t size) __THROW { + // Overflow check + const size_t total_size = count * size; + if (size != 0 && total_size / size != count) return NULL; + + void* block = do_debug_malloc_or_debug_cpp_alloc(total_size); + MallocHook::InvokeNewHook(block, total_size); + if (block) memset(block, 0, total_size); + return block; +} + +extern "C" PERFTOOLS_DLL_DECL void tc_cfree(void* ptr) __THROW { + MallocHook::InvokeDeleteHook(ptr); + DebugDeallocate(ptr, MallocBlock::kMallocType); +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_realloc(void* ptr, size_t size) __THROW { + if (ptr == NULL) { + ptr = do_debug_malloc_or_debug_cpp_alloc(size); + MallocHook::InvokeNewHook(ptr, size); + return ptr; + } + if (size == 0) { + MallocHook::InvokeDeleteHook(ptr); + DebugDeallocate(ptr, MallocBlock::kMallocType); + return NULL; + } + MallocBlock* old = MallocBlock::FromRawPointer(ptr); + old->Check(MallocBlock::kMallocType); + MallocBlock* p = MallocBlock::Allocate(size, MallocBlock::kMallocType); + + // If realloc fails we are to leave the old block untouched and + // return null + if (p == NULL) return NULL; + + memcpy(p->data_addr(), old->data_addr(), + (old->data_size() < size) ? old->data_size() : size); + MallocHook::InvokeDeleteHook(ptr); + MallocHook::InvokeNewHook(p->data_addr(), size); + DebugDeallocate(ptr, MallocBlock::kMallocType); + MALLOC_TRACE("realloc", p->data_size(), p->data_addr()); + return p->data_addr(); +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_new(size_t size) { + void* ptr = debug_cpp_alloc(size, MallocBlock::kNewType, false); + MallocHook::InvokeNewHook(ptr, size); + if (ptr == NULL) { + RAW_LOG(FATAL, "Unable to allocate %"PRIuS" bytes: new failed.", size); + } + return ptr; +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_new_nothrow(size_t size, const std::nothrow_t&) __THROW { + void* ptr = debug_cpp_alloc(size, MallocBlock::kNewType, true); + MallocHook::InvokeNewHook(ptr, size); + return ptr; +} + +extern "C" PERFTOOLS_DLL_DECL void tc_delete(void* p) __THROW { + MallocHook::InvokeDeleteHook(p); + DebugDeallocate(p, MallocBlock::kNewType); +} + +// Some STL implementations explicitly invoke this. +// It is completely equivalent to a normal delete (delete never throws). +extern "C" PERFTOOLS_DLL_DECL void tc_delete_nothrow(void* p, const std::nothrow_t&) __THROW { + MallocHook::InvokeDeleteHook(p); + DebugDeallocate(p, MallocBlock::kNewType); +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_newarray(size_t size) { + void* ptr = debug_cpp_alloc(size, MallocBlock::kArrayNewType, false); + MallocHook::InvokeNewHook(ptr, size); + if (ptr == NULL) { + RAW_LOG(FATAL, "Unable to allocate %"PRIuS" bytes: new[] failed.", size); + } + return ptr; +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_newarray_nothrow(size_t size, const std::nothrow_t&) + __THROW { + void* ptr = debug_cpp_alloc(size, MallocBlock::kArrayNewType, true); + MallocHook::InvokeNewHook(ptr, size); + return ptr; +} + +extern "C" PERFTOOLS_DLL_DECL void tc_deletearray(void* p) __THROW { + MallocHook::InvokeDeleteHook(p); + DebugDeallocate(p, MallocBlock::kArrayNewType); +} + +// Some STL implementations explicitly invoke this. +// It is completely equivalent to a normal delete (delete never throws). +extern "C" PERFTOOLS_DLL_DECL void tc_deletearray_nothrow(void* p, const std::nothrow_t&) __THROW { + MallocHook::InvokeDeleteHook(p); + DebugDeallocate(p, MallocBlock::kArrayNewType); +} + +// Round "value" up to next "alignment" boundary. +// Requires that "alignment" be a power of two. +static intptr_t RoundUp(intptr_t value, intptr_t alignment) { + return (value + alignment - 1) & ~(alignment - 1); +} + +// This is mostly the same as do_memalign in tcmalloc.cc. +static void *do_debug_memalign(size_t alignment, size_t size) { + // Allocate >= size bytes aligned on "alignment" boundary + // "alignment" is a power of two. + void *p = 0; + RAW_CHECK((alignment & (alignment-1)) == 0, "must be power of two"); + const size_t data_offset = MallocBlock::data_offset(); + // Allocate "alignment-1" extra bytes to ensure alignment is possible, and + // a further data_offset bytes for an additional fake header. + size_t extra_bytes = data_offset + alignment - 1; + if (size + extra_bytes < size) return NULL; // Overflow + p = DebugAllocate(size + extra_bytes, MallocBlock::kMallocType); + if (p != 0) { + intptr_t orig_p = reinterpret_cast(p); + // Leave data_offset bytes for fake header, and round up to meet + // alignment. + p = reinterpret_cast(RoundUp(orig_p + data_offset, alignment)); + // Create a fake header block with an offset_ that points back to the + // real header. FromRawPointer uses this value. + MallocBlock *fake_hdr = reinterpret_cast( + reinterpret_cast(p) - data_offset); + // offset_ is distance between real and fake headers. + // p is now end of fake header (beginning of client area), + // and orig_p is the end of the real header, so offset_ + // is their difference. + fake_hdr->set_offset(reinterpret_cast(p) - orig_p); + } + return p; +} + +// This is mostly the same as cpp_memalign in tcmalloc.cc. +static void* debug_cpp_memalign(size_t align, size_t size) { + for (;;) { + void* p = do_debug_memalign(align, size); +#ifdef PREANSINEW + return p; +#else + if (p == NULL) { // allocation failed + // Get the current new handler. NB: this function is not + // thread-safe. We make a feeble stab at making it so here, but + // this lock only protects against tcmalloc interfering with + // itself, not with other libraries calling set_new_handler. + std::new_handler nh; + { + SpinLockHolder h(&set_new_handler_lock); + nh = std::set_new_handler(0); + (void) std::set_new_handler(nh); + } +#if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || (defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS) + if (nh) { + // Since exceptions are disabled, we don't really know if new_handler + // failed. Assume it will abort if it fails. + (*nh)(); + continue; + } + return 0; +#else + // If no new_handler is established, the allocation failed. + if (!nh) + return 0; + + // Otherwise, try the new_handler. If it returns, retry the + // allocation. If it throws std::bad_alloc, fail the allocation. + // if it throws something else, don't interfere. + try { + (*nh)(); + } catch (const std::bad_alloc&) { + return p; + } +#endif // (defined(__GNUC__) && !defined(__EXCEPTIONS)) || (defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS) + } else { // allocation success + return p; + } +#endif // PREANSINEW + } +} + +inline void* do_debug_memalign_or_debug_cpp_memalign(size_t align, + size_t size) { + return tc_new_mode ? debug_cpp_memalign(align, size) + : do_debug_memalign(align, size); +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_memalign(size_t align, size_t size) __THROW { + void *p = do_debug_memalign_or_debug_cpp_memalign(align, size); + MallocHook::InvokeNewHook(p, size); + return p; +} + +// Implementation taken from tcmalloc/tcmalloc.cc +extern "C" PERFTOOLS_DLL_DECL int tc_posix_memalign(void** result_ptr, size_t align, size_t size) + __THROW { + if (((align % sizeof(void*)) != 0) || + ((align & (align - 1)) != 0) || + (align == 0)) { + return EINVAL; + } + + void* result = do_debug_memalign_or_debug_cpp_memalign(align, size); + MallocHook::InvokeNewHook(result, size); + if (result == NULL) { + return ENOMEM; + } else { + *result_ptr = result; + return 0; + } +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_valloc(size_t size) __THROW { + // Allocate >= size bytes starting on a page boundary + void *p = do_debug_memalign_or_debug_cpp_memalign(getpagesize(), size); + MallocHook::InvokeNewHook(p, size); + return p; +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_pvalloc(size_t size) __THROW { + // Round size up to a multiple of pages + // then allocate memory on a page boundary + int pagesize = getpagesize(); + size = RoundUp(size, pagesize); + if (size == 0) { // pvalloc(0) should allocate one page, according to + size = pagesize; // http://man.free4web.biz/man3/libmpatrol.3.html + } + void *p = do_debug_memalign_or_debug_cpp_memalign(pagesize, size); + MallocHook::InvokeNewHook(p, size); + return p; +} + +// malloc_stats just falls through to the base implementation. +extern "C" PERFTOOLS_DLL_DECL void tc_malloc_stats(void) __THROW { + BASE_MALLOC_STATS(); +} + +extern "C" PERFTOOLS_DLL_DECL int tc_mallopt(int cmd, int value) __THROW { + return BASE_MALLOPT(cmd, value); +} + +#ifdef HAVE_STRUCT_MALLINFO +extern "C" PERFTOOLS_DLL_DECL struct mallinfo tc_mallinfo(void) __THROW { + return BASE_MALLINFO(); +} +#endif + +extern "C" PERFTOOLS_DLL_DECL size_t tc_malloc_size(void* ptr) __THROW { + return MallocExtension::instance()->GetAllocatedSize(ptr); +} diff --git a/src/thirdparty/gperftools-2.0/src/getpc.h b/src/thirdparty/gperftools-2.0/src/getpc.h new file mode 100644 index 000000000..9fb2e162b --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/getpc.h @@ -0,0 +1,186 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// This is an internal header file used by profiler.cc. It defines +// the single (inline) function GetPC. GetPC is used in a signal +// handler to figure out the instruction that was being executed when +// the signal-handler was triggered. +// +// To get this, we use the ucontext_t argument to the signal-handler +// callback, which holds the full context of what was going on when +// the signal triggered. How to get from a ucontext_t to a Program +// Counter is OS-dependent. + +#ifndef BASE_GETPC_H_ +#define BASE_GETPC_H_ + +#include "config.h" + +// On many linux systems, we may need _GNU_SOURCE to get access to +// the defined constants that define the register we want to see (eg +// REG_EIP). Note this #define must come first! +#define _GNU_SOURCE 1 +// If #define _GNU_SOURCE causes problems, this might work instead. +// It will cause problems for FreeBSD though!, because it turns off +// the needed __BSD_VISIBLE. +//#define _XOPEN_SOURCE 500 + +#include // for memcmp +#if defined(HAVE_SYS_UCONTEXT_H) +#include +#elif defined(HAVE_UCONTEXT_H) +#include // for ucontext_t (and also mcontext_t) +#elif defined(HAVE_CYGWIN_SIGNAL_H) +#include +typedef ucontext ucontext_t; +#endif + + +// Take the example where function Foo() calls function Bar(). For +// many architectures, Bar() is responsible for setting up and tearing +// down its own stack frame. In that case, it's possible for the +// interrupt to happen when execution is in Bar(), but the stack frame +// is not properly set up (either before it's done being set up, or +// after it's been torn down but before Bar() returns). In those +// cases, the stack trace cannot see the caller function anymore. +// +// GetPC can try to identify this situation, on architectures where it +// might occur, and unwind the current function call in that case to +// avoid false edges in the profile graph (that is, edges that appear +// to show a call skipping over a function). To do this, we hard-code +// in the asm instructions we might see when setting up or tearing +// down a stack frame. +// +// This is difficult to get right: the instructions depend on the +// processor, the compiler ABI, and even the optimization level. This +// is a best effort patch -- if we fail to detect such a situation, or +// mess up the PC, nothing happens; the returned PC is not used for +// any further processing. +struct CallUnrollInfo { + // Offset from (e)ip register where this instruction sequence + // should be matched. Interpreted as bytes. Offset 0 is the next + // instruction to execute. Be extra careful with negative offsets in + // architectures of variable instruction length (like x86) - it is + // not that easy as taking an offset to step one instruction back! + int pc_offset; + // The actual instruction bytes. Feel free to make it larger if you + // need a longer sequence. + char ins[16]; + // How many bytes to match from ins array? + int ins_size; + // The offset from the stack pointer (e)sp where to look for the + // call return address. Interpreted as bytes. + int return_sp_offset; +}; + + +// The dereferences needed to get the PC from a struct ucontext were +// determined at configure time, and stored in the macro +// PC_FROM_UCONTEXT in config.h. The only thing we need to do here, +// then, is to do the magic call-unrolling for systems that support it. + +// -- Special case 1: linux x86, for which we have CallUnrollInfo +#if defined(__linux) && defined(__i386) && defined(__GNUC__) +static const CallUnrollInfo callunrollinfo[] = { + // Entry to a function: push %ebp; mov %esp,%ebp + // Top-of-stack contains the caller IP. + { 0, + {0x55, 0x89, 0xe5}, 3, + 0 + }, + // Entry to a function, second instruction: push %ebp; mov %esp,%ebp + // Top-of-stack contains the old frame, caller IP is +4. + { -1, + {0x55, 0x89, 0xe5}, 3, + 4 + }, + // Return from a function: RET. + // Top-of-stack contains the caller IP. + { 0, + {0xc3}, 1, + 0 + } +}; + +inline void* GetPC(const ucontext_t& signal_ucontext) { + // See comment above struct CallUnrollInfo. Only try instruction + // flow matching if both eip and esp looks reasonable. + const int eip = signal_ucontext.uc_mcontext.gregs[REG_EIP]; + const int esp = signal_ucontext.uc_mcontext.gregs[REG_ESP]; + if ((eip & 0xffff0000) != 0 && (~eip & 0xffff0000) != 0 && + (esp & 0xffff0000) != 0) { + char* eip_char = reinterpret_cast(eip); + for (int i = 0; i < sizeof(callunrollinfo)/sizeof(*callunrollinfo); ++i) { + if (!memcmp(eip_char + callunrollinfo[i].pc_offset, + callunrollinfo[i].ins, callunrollinfo[i].ins_size)) { + // We have a match. + void **retaddr = (void**)(esp + callunrollinfo[i].return_sp_offset); + return *retaddr; + } + } + } + return (void*)eip; +} + +// Special case #2: Windows, which has to do something totally different. +#elif defined(_WIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__) || defined(__MINGW32__) +// If this is ever implemented, probably the way to do it is to have +// profiler.cc use a high-precision timer via timeSetEvent: +// http://msdn2.microsoft.com/en-us/library/ms712713.aspx +// We'd use it in mode TIME_CALLBACK_FUNCTION/TIME_PERIODIC. +// The callback function would be something like prof_handler, but +// alas the arguments are different: no ucontext_t! I don't know +// how we'd get the PC (using StackWalk64?) +// http://msdn2.microsoft.com/en-us/library/ms680650.aspx + +#include "base/logging.h" // for RAW_LOG +#ifndef HAVE_CYGWIN_SIGNAL_H +typedef int ucontext_t; +#endif + +inline void* GetPC(const struct ucontext_t& signal_ucontext) { + RAW_LOG(ERROR, "GetPC is not yet implemented on Windows\n"); + return NULL; +} + +// Normal cases. If this doesn't compile, it's probably because +// PC_FROM_UCONTEXT is the empty string. You need to figure out +// the right value for your system, and add it to the list in +// configure.ac (or set it manually in your config.h). +#else +inline void* GetPC(const ucontext_t& signal_ucontext) { + return (void*)signal_ucontext.PC_FROM_UCONTEXT; // defined in config.h +} + +#endif + +#endif // BASE_GETPC_H_ diff --git a/src/thirdparty/gperftools-2.0/src/google/heap-checker.h b/src/thirdparty/gperftools-2.0/src/google/heap-checker.h new file mode 100644 index 000000000..8aa5ea49c --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/google/heap-checker.h @@ -0,0 +1,33 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* The code has moved to gperftools/. Use that include-directory for + * new code. + */ +#include diff --git a/src/thirdparty/gperftools-2.0/src/google/heap-profiler.h b/src/thirdparty/gperftools-2.0/src/google/heap-profiler.h new file mode 100644 index 000000000..be4395964 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/google/heap-profiler.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2005, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* The code has moved to gperftools/. Use that include-directory for + * new code. + */ +#include diff --git a/src/thirdparty/gperftools-2.0/src/google/malloc_extension.h b/src/thirdparty/gperftools-2.0/src/google/malloc_extension.h new file mode 100644 index 000000000..55150e5a4 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/google/malloc_extension.h @@ -0,0 +1,33 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* The code has moved to gperftools/. Use that include-directory for + * new code. + */ +#include diff --git a/src/thirdparty/gperftools-2.0/src/google/malloc_extension_c.h b/src/thirdparty/gperftools-2.0/src/google/malloc_extension_c.h new file mode 100644 index 000000000..87d727b39 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/google/malloc_extension_c.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2008, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* The code has moved to gperftools/. Use that include-directory for + * new code. + */ +#include diff --git a/src/thirdparty/gperftools-2.0/src/google/malloc_hook.h b/src/thirdparty/gperftools-2.0/src/google/malloc_hook.h new file mode 100644 index 000000000..e5b8e7cb0 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/google/malloc_hook.h @@ -0,0 +1,33 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* The code has moved to gperftools/. Use that include-directory for + * new code. + */ +#include diff --git a/src/thirdparty/gperftools-2.0/src/google/malloc_hook_c.h b/src/thirdparty/gperftools-2.0/src/google/malloc_hook_c.h new file mode 100644 index 000000000..e3ac0a499 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/google/malloc_hook_c.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2008, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* The code has moved to gperftools/. Use that include-directory for + * new code. + */ +#include diff --git a/src/thirdparty/gperftools-2.0/src/google/profiler.h b/src/thirdparty/gperftools-2.0/src/google/profiler.h new file mode 100644 index 000000000..67a89c198 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/google/profiler.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2005, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* The code has moved to gperftools/. Use that include-directory for + * new code. + */ +#include diff --git a/src/thirdparty/gperftools-2.0/src/google/stacktrace.h b/src/thirdparty/gperftools-2.0/src/google/stacktrace.h new file mode 100644 index 000000000..eb761cab4 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/google/stacktrace.h @@ -0,0 +1,33 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* The code has moved to gperftools/. Use that include-directory for + * new code. + */ +#include diff --git a/src/thirdparty/gperftools-2.0/src/google/tcmalloc.h b/src/thirdparty/gperftools-2.0/src/google/tcmalloc.h new file mode 100644 index 000000000..c7db63194 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/google/tcmalloc.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2003, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* The code has moved to gperftools/. Use that include-directory for + * new code. + */ +#include diff --git a/src/thirdparty/gperftools-2.0/src/gperftools/heap-checker.h b/src/thirdparty/gperftools-2.0/src/gperftools/heap-checker.h new file mode 100644 index 000000000..32ed10a82 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/gperftools/heap-checker.h @@ -0,0 +1,424 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Maxim Lifantsev (with design ideas by Sanjay Ghemawat) +// +// +// Module for detecing heap (memory) leaks. +// +// For full(er) information, see doc/heap_checker.html +// +// This module can be linked into programs with +// no slowdown caused by this unless you activate the leak-checker: +// +// 1. Set the environment variable HEAPCHEK to _type_ before +// running the program. +// +// _type_ is usually "normal" but can also be "minimal", "strict", or +// "draconian". (See the html file for other options, like 'local'.) +// +// After that, just run your binary. If the heap-checker detects +// a memory leak at program-exit, it will print instructions on how +// to track down the leak. + +#ifndef BASE_HEAP_CHECKER_H_ +#define BASE_HEAP_CHECKER_H_ + +#include // for size_t +// I can't #include config.h in this public API file, but I should +// really use configure (and make malloc_extension.h a .in file) to +// figure out if the system has stdint.h or not. But I'm lazy, so +// for now I'm assuming it's a problem only with MSVC. +#ifndef _MSC_VER +#include // for uintptr_t +#endif +#include // for va_list +#include + +// Annoying stuff for windows -- makes sure clients can import these functions +#ifndef PERFTOOLS_DLL_DECL +# ifdef _WIN32 +# define PERFTOOLS_DLL_DECL __declspec(dllimport) +# else +# define PERFTOOLS_DLL_DECL +# endif +#endif + + +// The class is thread-safe with respect to all the provided static methods, +// as well as HeapLeakChecker objects: they can be accessed by multiple threads. +class PERFTOOLS_DLL_DECL HeapLeakChecker { + public: + + // ----------------------------------------------------------------------- // + // Static functions for working with (whole-program) leak checking. + + // If heap leak checking is currently active in some mode + // e.g. if leak checking was started (and is still active now) + // due to HEAPCHECK=... defined in the environment. + // The return value reflects iff HeapLeakChecker objects manually + // constructed right now will be doing leak checking or nothing. + // Note that we can go from active to inactive state during InitGoogle() + // if FLAGS_heap_check gets set to "" by some code before/during InitGoogle(). + static bool IsActive(); + + // Return pointer to the whole-program checker if it has been created + // and NULL otherwise. + // Once GlobalChecker() returns non-NULL that object will not disappear and + // will be returned by all later GlobalChecker calls. + // This is mainly to access BytesLeaked() and ObjectsLeaked() (see below) + // for the whole-program checker after one calls NoGlobalLeaks() + // or similar and gets false. + static HeapLeakChecker* GlobalChecker(); + + // Do whole-program leak check now (if it was activated for this binary); + // return false only if it was activated and has failed. + // The mode of the check is controlled by the command-line flags. + // This method can be called repeatedly. + // Things like GlobalChecker()->SameHeap() can also be called explicitly + // to do the desired flavor of the check. + static bool NoGlobalLeaks(); + + // If whole-program checker if active, + // cancel its automatic execution after main() exits. + // This requires that some leak check (e.g. NoGlobalLeaks()) + // has been called at least once on the whole-program checker. + static void CancelGlobalCheck(); + + // ----------------------------------------------------------------------- // + // Non-static functions for starting and doing leak checking. + + // Start checking and name the leak check performed. + // The name is used in naming dumped profiles + // and needs to be unique only within your binary. + // It must also be a string that can be a part of a file name, + // in particular not contain path expressions. + explicit HeapLeakChecker(const char *name); + + // Destructor (verifies that some *NoLeaks or *SameHeap method + // has been called at least once). + ~HeapLeakChecker(); + + // These used to be different but are all the same now: they return + // true iff all memory allocated since this HeapLeakChecker object + // was constructor is still reachable from global state. + // + // Because we fork to convert addresses to symbol-names, and forking + // is not thread-safe, and we may be called in a threaded context, + // we do not try to symbolize addresses when called manually. + bool NoLeaks() { return DoNoLeaks(DO_NOT_SYMBOLIZE); } + + // These forms are obsolete; use NoLeaks() instead. + // TODO(csilvers): mark as DEPRECATED. + bool QuickNoLeaks() { return NoLeaks(); } + bool BriefNoLeaks() { return NoLeaks(); } + bool SameHeap() { return NoLeaks(); } + bool QuickSameHeap() { return NoLeaks(); } + bool BriefSameHeap() { return NoLeaks(); } + + // Detailed information about the number of leaked bytes and objects + // (both of these can be negative as well). + // These are available only after a *SameHeap or *NoLeaks + // method has been called. + // Note that it's possible for both of these to be zero + // while SameHeap() or NoLeaks() returned false in case + // of a heap state change that is significant + // but preserves the byte and object counts. + ssize_t BytesLeaked() const; + ssize_t ObjectsLeaked() const; + + // ----------------------------------------------------------------------- // + // Static helpers to make us ignore certain leaks. + + // Scoped helper class. Should be allocated on the stack inside a + // block of code. Any heap allocations done in the code block + // covered by the scoped object (including in nested function calls + // done by the code block) will not be reported as leaks. This is + // the recommended replacement for the GetDisableChecksStart() and + // DisableChecksToHereFrom() routines below. + // + // Example: + // void Foo() { + // HeapLeakChecker::Disabler disabler; + // ... code that allocates objects whose leaks should be ignored ... + // } + // + // REQUIRES: Destructor runs in same thread as constructor + class Disabler { + public: + Disabler(); + ~Disabler(); + private: + Disabler(const Disabler&); // disallow copy + void operator=(const Disabler&); // and assign + }; + + // Ignore an object located at 'ptr' (can go at the start or into the object) + // as well as all heap objects (transitively) referenced from it for the + // purposes of heap leak checking. Returns 'ptr' so that one can write + // static T* obj = IgnoreObject(new T(...)); + // + // If 'ptr' does not point to an active allocated object at the time of this + // call, it is ignored; but if it does, the object must not get deleted from + // the heap later on. + // + // See also HiddenPointer, below, if you need to prevent a pointer from + // being traversed by the heap checker but do not wish to transitively + // whitelist objects referenced through it. + template + static T* IgnoreObject(T* ptr) { + DoIgnoreObject(static_cast(const_cast(ptr))); + return ptr; + } + + // Undo what an earlier IgnoreObject() call promised and asked to do. + // At the time of this call 'ptr' must point at or inside of an active + // allocated object which was previously registered with IgnoreObject(). + static void UnIgnoreObject(const void* ptr); + + // ----------------------------------------------------------------------- // + // Internal types defined in .cc + + class Allocator; + struct RangeValue; + + private: + + // ----------------------------------------------------------------------- // + // Various helpers + + // Create the name of the heap profile file. + // Should be deleted via Allocator::Free(). + char* MakeProfileNameLocked(); + + // Helper for constructors + void Create(const char *name, bool make_start_snapshot); + + enum ShouldSymbolize { SYMBOLIZE, DO_NOT_SYMBOLIZE }; + + // Helper for *NoLeaks and *SameHeap + bool DoNoLeaks(ShouldSymbolize should_symbolize); + + // Helper for NoGlobalLeaks, also called by the global destructor. + static bool NoGlobalLeaksMaybeSymbolize(ShouldSymbolize should_symbolize); + + // These used to be public, but they are now deprecated. + // Will remove entirely when all internal uses are fixed. + // In the meantime, use friendship so the unittest can still test them. + static void* GetDisableChecksStart(); + static void DisableChecksToHereFrom(const void* start_address); + static void DisableChecksIn(const char* pattern); + friend void RangeDisabledLeaks(); + friend void NamedTwoDisabledLeaks(); + friend void* RunNamedDisabledLeaks(void*); + friend void TestHeapLeakCheckerNamedDisabling(); + // TODO(csilvers): remove this one, at least + friend int main(int, char**); + + + // Actually implements IgnoreObject(). + static void DoIgnoreObject(const void* ptr); + + // Disable checks based on stack trace entry at a depth <= + // max_depth. Used to hide allocations done inside some special + // libraries. + static void DisableChecksFromToLocked(const void* start_address, + const void* end_address, + int max_depth); + + // Helper for DoNoLeaks to ignore all objects reachable from all live data + static void IgnoreAllLiveObjectsLocked(const void* self_stack_top); + + // Callback we pass to ListAllProcessThreads (see thread_lister.h) + // that is invoked when all threads of our process are found and stopped. + // The call back does the things needed to ignore live data reachable from + // thread stacks and registers for all our threads + // as well as do other global-live-data ignoring + // (via IgnoreNonThreadLiveObjectsLocked) + // during the quiet state of all threads being stopped. + // For the argument meaning see the comment by ListAllProcessThreads. + // Here we only use num_threads and thread_pids, that ListAllProcessThreads + // fills for us with the number and pids of all the threads of our process + // it found and attached to. + static int IgnoreLiveThreadsLocked(void* parameter, + int num_threads, + pid_t* thread_pids, + va_list ap); + + // Helper for IgnoreAllLiveObjectsLocked and IgnoreLiveThreadsLocked + // that we prefer to execute from IgnoreLiveThreadsLocked + // while all threads are stopped. + // This helper does live object discovery and ignoring + // for all objects that are reachable from everything + // not related to thread stacks and registers. + static void IgnoreNonThreadLiveObjectsLocked(); + + // Helper for IgnoreNonThreadLiveObjectsLocked and IgnoreLiveThreadsLocked + // to discover and ignore all heap objects + // reachable from currently considered live objects + // (live_objects static global variable in out .cc file). + // "name", "name2" are two strings that we print one after another + // in a debug message to describe what kind of live object sources + // are being used. + static void IgnoreLiveObjectsLocked(const char* name, const char* name2); + + // Do the overall whole-program heap leak check if needed; + // returns true when did the leak check. + static bool DoMainHeapCheck(); + + // Type of task for UseProcMapsLocked + enum ProcMapsTask { + RECORD_GLOBAL_DATA, + DISABLE_LIBRARY_ALLOCS + }; + + // Success/Error Return codes for UseProcMapsLocked. + enum ProcMapsResult { + PROC_MAPS_USED, + CANT_OPEN_PROC_MAPS, + NO_SHARED_LIBS_IN_PROC_MAPS + }; + + // Read /proc/self/maps, parse it, and do the 'proc_maps_task' for each line. + static ProcMapsResult UseProcMapsLocked(ProcMapsTask proc_maps_task); + + // A ProcMapsTask to disable allocations from 'library' + // that is mapped to [start_address..end_address) + // (only if library is a certain system library). + static void DisableLibraryAllocsLocked(const char* library, + uintptr_t start_address, + uintptr_t end_address); + + // Return true iff "*ptr" points to a heap object + // ("*ptr" can point at the start or inside of a heap object + // so that this works e.g. for pointers to C++ arrays, C++ strings, + // multiple-inherited objects, or pointers to members). + // We also fill *object_size for this object then + // and we move "*ptr" to point to the very start of the heap object. + static inline bool HaveOnHeapLocked(const void** ptr, size_t* object_size); + + // Helper to shutdown heap leak checker when it's not needed + // or can't function properly. + static void TurnItselfOffLocked(); + + // Internally-used c-tor to start whole-executable checking. + HeapLeakChecker(); + + // ----------------------------------------------------------------------- // + // Friends and externally accessed helpers. + + // Helper for VerifyHeapProfileTableStackGet in the unittest + // to get the recorded allocation caller for ptr, + // which must be a heap object. + static const void* GetAllocCaller(void* ptr); + friend void VerifyHeapProfileTableStackGet(); + + // This gets to execute before constructors for all global objects + static void BeforeConstructorsLocked(); + friend void HeapLeakChecker_BeforeConstructors(); + + // This gets to execute after destructors for all global objects + friend void HeapLeakChecker_AfterDestructors(); + + // Full starting of recommended whole-program checking. + friend void HeapLeakChecker_InternalInitStart(); + + // Runs REGISTER_HEAPCHECK_CLEANUP cleanups and potentially + // calls DoMainHeapCheck + friend void HeapLeakChecker_RunHeapCleanups(); + + // ----------------------------------------------------------------------- // + // Member data. + + class SpinLock* lock_; // to make HeapLeakChecker objects thread-safe + const char* name_; // our remembered name (we own it) + // NULL means this leak checker is a noop + + // Snapshot taken when the checker was created. May be NULL + // for the global heap checker object. We use void* instead of + // HeapProfileTable::Snapshot* to avoid including heap-profile-table.h. + void* start_snapshot_; + + bool has_checked_; // if we have done the leak check, so these are ready: + ssize_t inuse_bytes_increase_; // bytes-in-use increase for this checker + ssize_t inuse_allocs_increase_; // allocations-in-use increase + // for this checker + bool keep_profiles_; // iff we should keep the heap profiles we've made + + // ----------------------------------------------------------------------- // + + // Disallow "evil" constructors. + HeapLeakChecker(const HeapLeakChecker&); + void operator=(const HeapLeakChecker&); +}; + + +// Holds a pointer that will not be traversed by the heap checker. +// Contrast with HeapLeakChecker::IgnoreObject(o), in which o and +// all objects reachable from o are ignored by the heap checker. +template +class HiddenPointer { + public: + explicit HiddenPointer(T* t) + : masked_t_(reinterpret_cast(t) ^ kHideMask) { + } + // Returns unhidden pointer. Be careful where you save the result. + T* get() const { return reinterpret_cast(masked_t_ ^ kHideMask); } + + private: + // Arbitrary value, but not such that xor'ing with it is likely + // to map one valid pointer to another valid pointer: + static const uintptr_t kHideMask = + static_cast(0xF03A5F7BF03A5F7Bll); + uintptr_t masked_t_; +}; + +// A class that exists solely to run its destructor. This class should not be +// used directly, but instead by the REGISTER_HEAPCHECK_CLEANUP macro below. +class PERFTOOLS_DLL_DECL HeapCleaner { + public: + typedef void (*void_function)(void); + HeapCleaner(void_function f); + static void RunHeapCleanups(); + private: + static std::vector* heap_cleanups_; +}; + +// A macro to declare module heap check cleanup tasks +// (they run only if we are doing heap leak checking.) +// 'body' should be the cleanup code to run. 'name' doesn't matter, +// but must be unique amongst all REGISTER_HEAPCHECK_CLEANUP calls. +#define REGISTER_HEAPCHECK_CLEANUP(name, body) \ + namespace { \ + void heapcheck_cleanup_##name() { body; } \ + static HeapCleaner heapcheck_cleaner_##name(&heapcheck_cleanup_##name); \ + } + +#endif // BASE_HEAP_CHECKER_H_ diff --git a/src/thirdparty/gperftools-2.0/src/gperftools/heap-profiler.h b/src/thirdparty/gperftools-2.0/src/gperftools/heap-profiler.h new file mode 100644 index 000000000..57cb97a1c --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/gperftools/heap-profiler.h @@ -0,0 +1,104 @@ +/* Copyright (c) 2005, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Sanjay Ghemawat + * + * Module for heap-profiling. + * + * For full(er) information, see doc/heapprofile.html + * + * This module can be linked into your program with + * no slowdown caused by this unless you activate the profiler + * using one of the following methods: + * + * 1. Before starting the program, set the environment variable + * "HEAPPROFILE" to be the name of the file to which the profile + * data should be written. + * + * 2. Programmatically, start and stop the profiler using the + * routines "HeapProfilerStart(filename)" and "HeapProfilerStop()". + * + */ + +#ifndef BASE_HEAP_PROFILER_H_ +#define BASE_HEAP_PROFILER_H_ + +#include + +/* Annoying stuff for windows; makes sure clients can import these functions */ +#ifndef PERFTOOLS_DLL_DECL +# ifdef _WIN32 +# define PERFTOOLS_DLL_DECL __declspec(dllimport) +# else +# define PERFTOOLS_DLL_DECL +# endif +#endif + +/* All this code should be usable from within C apps. */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Start profiling and arrange to write profile data to file names + * of the form: "prefix.0000", "prefix.0001", ... + */ +PERFTOOLS_DLL_DECL void HeapProfilerStart(const char* prefix); + +/* Returns non-zero if we are currently profiling the heap. (Returns + * an int rather than a bool so it's usable from C.) This is true + * between calls to HeapProfilerStart() and HeapProfilerStop(), and + * also if the program has been run with HEAPPROFILER, or some other + * way to turn on whole-program profiling. + */ +int IsHeapProfilerRunning(); + +/* Stop heap profiling. Can be restarted again with HeapProfilerStart(), + * but the currently accumulated profiling information will be cleared. + */ +PERFTOOLS_DLL_DECL void HeapProfilerStop(); + +/* Dump a profile now - can be used for dumping at a hopefully + * quiescent state in your program, in order to more easily track down + * memory leaks. Will include the reason in the logged message + */ +PERFTOOLS_DLL_DECL void HeapProfilerDump(const char *reason); + +/* Generate current heap profiling information. + * Returns an empty string when heap profiling is not active. + * The returned pointer is a '\0'-terminated string allocated using malloc() + * and should be free()-ed as soon as the caller does not need it anymore. + */ +PERFTOOLS_DLL_DECL char* GetHeapProfile(); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* BASE_HEAP_PROFILER_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/gperftools/malloc_extension.h b/src/thirdparty/gperftools-2.0/src/gperftools/malloc_extension.h new file mode 100644 index 000000000..5bee01984 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/gperftools/malloc_extension.h @@ -0,0 +1,400 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Extra extensions exported by some malloc implementations. These +// extensions are accessed through a virtual base class so an +// application can link against a malloc that does not implement these +// extensions, and it will get default versions that do nothing. +// +// NOTE FOR C USERS: If you wish to use this functionality from within +// a C program, see malloc_extension_c.h. + +#ifndef BASE_MALLOC_EXTENSION_H_ +#define BASE_MALLOC_EXTENSION_H_ + +#include +// I can't #include config.h in this public API file, but I should +// really use configure (and make malloc_extension.h a .in file) to +// figure out if the system has stdint.h or not. But I'm lazy, so +// for now I'm assuming it's a problem only with MSVC. +#ifndef _MSC_VER +#include +#endif +#include +#include + +// Annoying stuff for windows -- makes sure clients can import these functions +#ifndef PERFTOOLS_DLL_DECL +# ifdef _WIN32 +# define PERFTOOLS_DLL_DECL __declspec(dllimport) +# else +# define PERFTOOLS_DLL_DECL +# endif +#endif + +static const int kMallocHistogramSize = 64; + +// One day, we could support other types of writers (perhaps for C?) +typedef std::string MallocExtensionWriter; + +namespace base { +struct MallocRange; +} + +// Interface to a pluggable system allocator. +class SysAllocator { + public: + SysAllocator() { + } + virtual ~SysAllocator(); + + // Allocates "size"-byte of memory from system aligned with "alignment". + // Returns NULL if failed. Otherwise, the returned pointer p up to and + // including (p + actual_size -1) have been allocated. + virtual void* Alloc(size_t size, size_t *actual_size, size_t alignment) = 0; +}; + +// The default implementations of the following routines do nothing. +// All implementations should be thread-safe; the current one +// (TCMallocImplementation) is. +class PERFTOOLS_DLL_DECL MallocExtension { + public: + virtual ~MallocExtension(); + + // Call this very early in the program execution -- say, in a global + // constructor -- to set up parameters and state needed by all + // instrumented malloc implemenatations. One example: this routine + // sets environemnt variables to tell STL to use libc's malloc() + // instead of doing its own memory management. This is safe to call + // multiple times, as long as each time is before threads start up. + static void Initialize(); + + // See "verify_memory.h" to see what these routines do + virtual bool VerifyAllMemory(); + virtual bool VerifyNewMemory(const void* p); + virtual bool VerifyArrayNewMemory(const void* p); + virtual bool VerifyMallocMemory(const void* p); + virtual bool MallocMemoryStats(int* blocks, size_t* total, + int histogram[kMallocHistogramSize]); + + // Get a human readable description of the current state of the malloc + // data structures. The state is stored as a null-terminated string + // in a prefix of "buffer[0,buffer_length-1]". + // REQUIRES: buffer_length > 0. + virtual void GetStats(char* buffer, int buffer_length); + + // Outputs to "writer" a sample of live objects and the stack traces + // that allocated these objects. The format of the returned output + // is equivalent to the output of the heap profiler and can + // therefore be passed to "pprof". This function is equivalent to + // ReadStackTraces. The main difference is that this function returns + // serialized data appropriately formatted for use by the pprof tool. + // NOTE: by default, tcmalloc does not do any heap sampling, and this + // function will always return an empty sample. To get useful + // data from GetHeapSample, you must also set the environment + // variable TCMALLOC_SAMPLE_PARAMETER to a value such as 524288. + virtual void GetHeapSample(MallocExtensionWriter* writer); + + // Outputs to "writer" the stack traces that caused growth in the + // address space size. The format of the returned output is + // equivalent to the output of the heap profiler and can therefore + // be passed to "pprof". This function is equivalent to + // ReadHeapGrowthStackTraces. The main difference is that this function + // returns serialized data appropriately formatted for use by the + // pprof tool. (This does not depend on, or require, + // TCMALLOC_SAMPLE_PARAMETER.) + virtual void GetHeapGrowthStacks(MallocExtensionWriter* writer); + + // Invokes func(arg, range) for every controlled memory + // range. *range is filled in with information about the range. + // + // This is a best-effort interface useful only for performance + // analysis. The implementation may not call func at all. + typedef void (RangeFunction)(void*, const base::MallocRange*); + virtual void Ranges(void* arg, RangeFunction func); + + // ------------------------------------------------------------------- + // Control operations for getting and setting malloc implementation + // specific parameters. Some currently useful properties: + // + // generic + // ------- + // "generic.current_allocated_bytes" + // Number of bytes currently allocated by application + // This property is not writable. + // + // "generic.heap_size" + // Number of bytes in the heap == + // current_allocated_bytes + + // fragmentation + + // freed memory regions + // This property is not writable. + // + // tcmalloc + // -------- + // "tcmalloc.max_total_thread_cache_bytes" + // Upper limit on total number of bytes stored across all + // per-thread caches. Default: 16MB. + // + // "tcmalloc.current_total_thread_cache_bytes" + // Number of bytes used across all thread caches. + // This property is not writable. + // + // "tcmalloc.pageheap_free_bytes" + // Number of bytes in free, mapped pages in page heap. These + // bytes can be used to fulfill allocation requests. They + // always count towards virtual memory usage, and unless the + // underlying memory is swapped out by the OS, they also count + // towards physical memory usage. This property is not writable. + // + // "tcmalloc.pageheap_unmapped_bytes" + // Number of bytes in free, unmapped pages in page heap. + // These are bytes that have been released back to the OS, + // possibly by one of the MallocExtension "Release" calls. + // They can be used to fulfill allocation requests, but + // typically incur a page fault. They always count towards + // virtual memory usage, and depending on the OS, typically + // do not count towards physical memory usage. This property + // is not writable. + // ------------------------------------------------------------------- + + // Get the named "property"'s value. Returns true if the property + // is known. Returns false if the property is not a valid property + // name for the current malloc implementation. + // REQUIRES: property != NULL; value != NULL + virtual bool GetNumericProperty(const char* property, size_t* value); + + // Set the named "property"'s value. Returns true if the property + // is known and writable. Returns false if the property is not a + // valid property name for the current malloc implementation, or + // is not writable. + // REQUIRES: property != NULL + virtual bool SetNumericProperty(const char* property, size_t value); + + // Mark the current thread as "idle". This routine may optionally + // be called by threads as a hint to the malloc implementation that + // any thread-specific resources should be released. Note: this may + // be an expensive routine, so it should not be called too often. + // + // Also, if the code that calls this routine will go to sleep for + // a while, it should take care to not allocate anything between + // the call to this routine and the beginning of the sleep. + // + // Most malloc implementations ignore this routine. + virtual void MarkThreadIdle(); + + // Mark the current thread as "busy". This routine should be + // called after MarkThreadIdle() if the thread will now do more + // work. If this method is not called, performance may suffer. + // + // Most malloc implementations ignore this routine. + virtual void MarkThreadBusy(); + + // Gets the system allocator used by the malloc extension instance. Returns + // NULL for malloc implementations that do not support pluggable system + // allocators. + virtual SysAllocator* GetSystemAllocator(); + + // Sets the system allocator to the specified. + // + // Users could register their own system allocators for malloc implementation + // that supports pluggable system allocators, such as TCMalloc, by doing: + // alloc = new MyOwnSysAllocator(); + // MallocExtension::instance()->SetSystemAllocator(alloc); + // It's up to users whether to fall back (recommended) to the default + // system allocator (use GetSystemAllocator() above) or not. The caller is + // responsible to any necessary locking. + // See tcmalloc/system-alloc.h for the interface and + // tcmalloc/memfs_malloc.cc for the examples. + // + // It's a no-op for malloc implementations that do not support pluggable + // system allocators. + virtual void SetSystemAllocator(SysAllocator *a); + + // Try to release num_bytes of free memory back to the operating + // system for reuse. Use this extension with caution -- to get this + // memory back may require faulting pages back in by the OS, and + // that may be slow. (Currently only implemented in tcmalloc.) + virtual void ReleaseToSystem(size_t num_bytes); + + // Same as ReleaseToSystem() but release as much memory as possible. + virtual void ReleaseFreeMemory(); + + // Sets the rate at which we release unused memory to the system. + // Zero means we never release memory back to the system. Increase + // this flag to return memory faster; decrease it to return memory + // slower. Reasonable rates are in the range [0,10]. (Currently + // only implemented in tcmalloc). + virtual void SetMemoryReleaseRate(double rate); + + // Gets the release rate. Returns a value < 0 if unknown. + virtual double GetMemoryReleaseRate(); + + // Returns the estimated number of bytes that will be allocated for + // a request of "size" bytes. This is an estimate: an allocation of + // SIZE bytes may reserve more bytes, but will never reserve less. + // (Currently only implemented in tcmalloc, other implementations + // always return SIZE.) + // This is equivalent to malloc_good_size() in OS X. + virtual size_t GetEstimatedAllocatedSize(size_t size); + + // Returns the actual number N of bytes reserved by tcmalloc for the + // pointer p. The client is allowed to use the range of bytes + // [p, p+N) in any way it wishes (i.e. N is the "usable size" of this + // allocation). This number may be equal to or greater than the number + // of bytes requested when p was allocated. + // p must have been allocated by this malloc implementation, + // must not be an interior pointer -- that is, must be exactly + // the pointer returned to by malloc() et al., not some offset + // from that -- and should not have been freed yet. p may be NULL. + // (Currently only implemented in tcmalloc; other implementations + // will return 0.) + // This is equivalent to malloc_size() in OS X, malloc_usable_size() + // in glibc, and _msize() for windows. + virtual size_t GetAllocatedSize(const void* p); + + // Returns kOwned if this malloc implementation allocated the memory + // pointed to by p, or kNotOwned if some other malloc implementation + // allocated it or p is NULL. May also return kUnknownOwnership if + // the malloc implementation does not keep track of ownership. + // REQUIRES: p must be a value returned from a previous call to + // malloc(), calloc(), realloc(), memalign(), posix_memalign(), + // valloc(), pvalloc(), new, or new[], and must refer to memory that + // is currently allocated (so, for instance, you should not pass in + // a pointer after having called free() on it). + enum Ownership { + // NOTE: Enum values MUST be kept in sync with the version in + // malloc_extension_c.h + kUnknownOwnership = 0, + kOwned, + kNotOwned + }; + virtual Ownership GetOwnership(const void* p); + + // The current malloc implementation. Always non-NULL. + static MallocExtension* instance(); + + // Change the malloc implementation. Typically called by the + // malloc implementation during initialization. + static void Register(MallocExtension* implementation); + + // Returns detailed information about malloc's freelists. For each list, + // return a FreeListInfo: + struct FreeListInfo { + size_t min_object_size; + size_t max_object_size; + size_t total_bytes_free; + const char* type; + }; + // Each item in the vector refers to a different freelist. The lists + // are identified by the range of allocations that objects in the + // list can satisfy ([min_object_size, max_object_size]) and the + // type of freelist (see below). The current size of the list is + // returned in total_bytes_free (which count against a processes + // resident and virtual size). + // + // Currently supported types are: + // + // "tcmalloc.page{_unmapped}" - tcmalloc's page heap. An entry for each size + // class in the page heap is returned. Bytes in "page_unmapped" + // are no longer backed by physical memory and do not count against + // the resident size of a process. + // + // "tcmalloc.large{_unmapped}" - tcmalloc's list of objects larger + // than the largest page heap size class. Only one "large" + // entry is returned. There is no upper-bound on the size + // of objects in the large free list; this call returns + // kint64max for max_object_size. Bytes in + // "large_unmapped" are no longer backed by physical memory + // and do not count against the resident size of a process. + // + // "tcmalloc.central" - tcmalloc's central free-list. One entry per + // size-class is returned. Never unmapped. + // + // "debug.free_queue" - free objects queued by the debug allocator + // and not returned to tcmalloc. + // + // "tcmalloc.thread" - tcmalloc's per-thread caches. Never unmapped. + virtual void GetFreeListSizes(std::vector* v); + + // Get a list of stack traces of sampled allocation points. Returns + // a pointer to a "new[]-ed" result array, and stores the sample + // period in "sample_period". + // + // The state is stored as a sequence of adjacent entries + // in the returned array. Each entry has the following form: + // uintptr_t count; // Number of objects with following trace + // uintptr_t size; // Total size of objects with following trace + // uintptr_t depth; // Number of PC values in stack trace + // void* stack[depth]; // PC values that form the stack trace + // + // The list of entries is terminated by a "count" of 0. + // + // It is the responsibility of the caller to "delete[]" the returned array. + // + // May return NULL to indicate no results. + // + // This is an internal extension. Callers should use the more + // convenient "GetHeapSample(string*)" method defined above. + virtual void** ReadStackTraces(int* sample_period); + + // Like ReadStackTraces(), but returns stack traces that caused growth + // in the address space size. + virtual void** ReadHeapGrowthStackTraces(); +}; + +namespace base { + +// Information passed per range. More fields may be added later. +struct MallocRange { + enum Type { + INUSE, // Application is using this range + FREE, // Range is currently free + UNMAPPED, // Backing physical memory has been returned to the OS + UNKNOWN, + // More enum values may be added in the future + }; + + uintptr_t address; // Address of range + size_t length; // Byte length of range + Type type; // Type of this range + double fraction; // Fraction of range that is being used (0 if !INUSE) + + // Perhaps add the following: + // - stack trace if this range was sampled + // - heap growth stack trace if applicable to this range + // - age when allocated (for inuse) or freed (if not in use) +}; + +} // namespace base + +#endif // BASE_MALLOC_EXTENSION_H_ diff --git a/src/thirdparty/gperftools-2.0/src/gperftools/malloc_extension_c.h b/src/thirdparty/gperftools-2.0/src/gperftools/malloc_extension_c.h new file mode 100644 index 000000000..72a0a7c17 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/gperftools/malloc_extension_c.h @@ -0,0 +1,99 @@ +/* Copyright (c) 2008, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * -- + * Author: Craig Silverstein + * + * C shims for the C++ malloc_extension.h. See malloc_extension.h for + * details. Note these C shims always work on + * MallocExtension::instance(); it is not possible to have more than + * one MallocExtension object in C applications. + */ + +#ifndef _MALLOC_EXTENSION_C_H_ +#define _MALLOC_EXTENSION_C_H_ + +#include +#include + +/* Annoying stuff for windows -- makes sure clients can import these fns */ +#ifndef PERFTOOLS_DLL_DECL +# ifdef _WIN32 +# define PERFTOOLS_DLL_DECL __declspec(dllimport) +# else +# define PERFTOOLS_DLL_DECL +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define kMallocExtensionHistogramSize 64 + +PERFTOOLS_DLL_DECL int MallocExtension_VerifyAllMemory(void); +PERFTOOLS_DLL_DECL int MallocExtension_VerifyNewMemory(const void* p); +PERFTOOLS_DLL_DECL int MallocExtension_VerifyArrayNewMemory(const void* p); +PERFTOOLS_DLL_DECL int MallocExtension_VerifyMallocMemory(const void* p); +PERFTOOLS_DLL_DECL int MallocExtension_MallocMemoryStats(int* blocks, size_t* total, + int histogram[kMallocExtensionHistogramSize]); +PERFTOOLS_DLL_DECL void MallocExtension_GetStats(char* buffer, int buffer_length); + +/* TODO(csilvers): write a C version of these routines, that perhaps + * takes a function ptr and a void *. + */ +/* void MallocExtension_GetHeapSample(string* result); */ +/* void MallocExtension_GetHeapGrowthStacks(string* result); */ + +PERFTOOLS_DLL_DECL int MallocExtension_GetNumericProperty(const char* property, size_t* value); +PERFTOOLS_DLL_DECL int MallocExtension_SetNumericProperty(const char* property, size_t value); +PERFTOOLS_DLL_DECL void MallocExtension_MarkThreadIdle(void); +PERFTOOLS_DLL_DECL void MallocExtension_MarkThreadBusy(void); +PERFTOOLS_DLL_DECL void MallocExtension_ReleaseToSystem(size_t num_bytes); +PERFTOOLS_DLL_DECL void MallocExtension_ReleaseFreeMemory(void); +PERFTOOLS_DLL_DECL size_t MallocExtension_GetEstimatedAllocatedSize(size_t size); +PERFTOOLS_DLL_DECL size_t MallocExtension_GetAllocatedSize(const void* p); + +/* + * NOTE: These enum values MUST be kept in sync with the version in + * malloc_extension.h + */ +typedef enum { + MallocExtension_kUnknownOwnership = 0, + MallocExtension_kOwned, + MallocExtension_kNotOwned +} MallocExtension_Ownership; + +PERFTOOLS_DLL_DECL MallocExtension_Ownership MallocExtension_GetOwnership(const void* p); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* _MALLOC_EXTENSION_C_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/gperftools/malloc_hook.h b/src/thirdparty/gperftools-2.0/src/gperftools/malloc_hook.h new file mode 100644 index 000000000..b99c047cd --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/gperftools/malloc_hook.h @@ -0,0 +1,358 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Some of our malloc implementations can invoke the following hooks whenever +// memory is allocated or deallocated. MallocHook is thread-safe, and things +// you do before calling AddFooHook(MyHook) are visible to any resulting calls +// to MyHook. Hooks must be thread-safe. If you write: +// +// CHECK(MallocHook::AddNewHook(&MyNewHook)); +// +// MyNewHook will be invoked in subsequent calls in the current thread, but +// there are no guarantees on when it might be invoked in other threads. +// +// There are a limited number of slots available for each hook type. Add*Hook +// will return false if there are no slots available. Remove*Hook will return +// false if the given hook was not already installed. +// +// The order in which individual hooks are called in Invoke*Hook is undefined. +// +// It is safe for a hook to remove itself within Invoke*Hook and add other +// hooks. Any hooks added inside a hook invocation (for the same hook type) +// will not be invoked for the current invocation. +// +// One important user of these hooks is the heap profiler. +// +// CAVEAT: If you add new MallocHook::Invoke* calls then those calls must be +// directly in the code of the (de)allocation function that is provided to the +// user and that function must have an ATTRIBUTE_SECTION(malloc_hook) attribute. +// +// Note: the Invoke*Hook() functions are defined in malloc_hook-inl.h. If you +// need to invoke a hook (which you shouldn't unless you're part of tcmalloc), +// be sure to #include malloc_hook-inl.h in addition to malloc_hook.h. +// +// NOTE FOR C USERS: If you want to use malloc_hook functionality from +// a C program, #include malloc_hook_c.h instead of this file. + +#ifndef _MALLOC_HOOK_H_ +#define _MALLOC_HOOK_H_ + +#include +#include +extern "C" { +#include // a C version of the malloc_hook interface +} + +// Annoying stuff for windows -- makes sure clients can import these functions +#ifndef PERFTOOLS_DLL_DECL +# ifdef _WIN32 +# define PERFTOOLS_DLL_DECL __declspec(dllimport) +# else +# define PERFTOOLS_DLL_DECL +# endif +#endif + +// The C++ methods below call the C version (MallocHook_*), and thus +// convert between an int and a bool. Windows complains about this +// (a "performance warning") which we don't care about, so we suppress. +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4800) +#endif + +// Note: malloc_hook_c.h defines MallocHook_*Hook and +// MallocHook_{Add,Remove}*Hook. The version of these inside the MallocHook +// class are defined in terms of the malloc_hook_c version. See malloc_hook_c.h +// for details of these types/functions. + +class PERFTOOLS_DLL_DECL MallocHook { + public: + // The NewHook is invoked whenever an object is allocated. + // It may be passed NULL if the allocator returned NULL. + typedef MallocHook_NewHook NewHook; + inline static bool AddNewHook(NewHook hook) { + return MallocHook_AddNewHook(hook); + } + inline static bool RemoveNewHook(NewHook hook) { + return MallocHook_RemoveNewHook(hook); + } + inline static void InvokeNewHook(const void* p, size_t s); + + // The DeleteHook is invoked whenever an object is deallocated. + // It may be passed NULL if the caller is trying to delete NULL. + typedef MallocHook_DeleteHook DeleteHook; + inline static bool AddDeleteHook(DeleteHook hook) { + return MallocHook_AddDeleteHook(hook); + } + inline static bool RemoveDeleteHook(DeleteHook hook) { + return MallocHook_RemoveDeleteHook(hook); + } + inline static void InvokeDeleteHook(const void* p); + + // The PreMmapHook is invoked with mmap or mmap64 arguments just + // before the call is actually made. Such a hook may be useful + // in memory limited contexts, to catch allocations that will exceed + // a memory limit, and take outside actions to increase that limit. + typedef MallocHook_PreMmapHook PreMmapHook; + inline static bool AddPreMmapHook(PreMmapHook hook) { + return MallocHook_AddPreMmapHook(hook); + } + inline static bool RemovePreMmapHook(PreMmapHook hook) { + return MallocHook_RemovePreMmapHook(hook); + } + inline static void InvokePreMmapHook(const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset); + + // The MmapReplacement is invoked after the PreMmapHook but before + // the call is actually made. The MmapReplacement should return true + // if it handled the call, or false if it is still necessary to + // call mmap/mmap64. + // This should be used only by experts, and users must be be + // extremely careful to avoid recursive calls to mmap. The replacement + // should be async signal safe. + // Only one MmapReplacement is supported. After setting an MmapReplacement + // you must call RemoveMmapReplacement before calling SetMmapReplacement + // again. + typedef MallocHook_MmapReplacement MmapReplacement; + inline static bool SetMmapReplacement(MmapReplacement hook) { + return MallocHook_SetMmapReplacement(hook); + } + inline static bool RemoveMmapReplacement(MmapReplacement hook) { + return MallocHook_RemoveMmapReplacement(hook); + } + inline static bool InvokeMmapReplacement(const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset, + void** result); + + + // The MmapHook is invoked whenever a region of memory is mapped. + // It may be passed MAP_FAILED if the mmap failed. + typedef MallocHook_MmapHook MmapHook; + inline static bool AddMmapHook(MmapHook hook) { + return MallocHook_AddMmapHook(hook); + } + inline static bool RemoveMmapHook(MmapHook hook) { + return MallocHook_RemoveMmapHook(hook); + } + inline static void InvokeMmapHook(const void* result, + const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset); + + // The MunmapReplacement is invoked with munmap arguments just before + // the call is actually made. The MunmapReplacement should return true + // if it handled the call, or false if it is still necessary to + // call munmap. + // This should be used only by experts. The replacement should be + // async signal safe. + // Only one MunmapReplacement is supported. After setting an + // MunmapReplacement you must call RemoveMunmapReplacement before + // calling SetMunmapReplacement again. + typedef MallocHook_MunmapReplacement MunmapReplacement; + inline static bool SetMunmapReplacement(MunmapReplacement hook) { + return MallocHook_SetMunmapReplacement(hook); + } + inline static bool RemoveMunmapReplacement(MunmapReplacement hook) { + return MallocHook_RemoveMunmapReplacement(hook); + } + inline static bool InvokeMunmapReplacement(const void* p, + size_t size, + int* result); + + // The MunmapHook is invoked whenever a region of memory is unmapped. + typedef MallocHook_MunmapHook MunmapHook; + inline static bool AddMunmapHook(MunmapHook hook) { + return MallocHook_AddMunmapHook(hook); + } + inline static bool RemoveMunmapHook(MunmapHook hook) { + return MallocHook_RemoveMunmapHook(hook); + } + inline static void InvokeMunmapHook(const void* p, size_t size); + + // The MremapHook is invoked whenever a region of memory is remapped. + typedef MallocHook_MremapHook MremapHook; + inline static bool AddMremapHook(MremapHook hook) { + return MallocHook_AddMremapHook(hook); + } + inline static bool RemoveMremapHook(MremapHook hook) { + return MallocHook_RemoveMremapHook(hook); + } + inline static void InvokeMremapHook(const void* result, + const void* old_addr, + size_t old_size, + size_t new_size, + int flags, + const void* new_addr); + + // The PreSbrkHook is invoked just before sbrk is called -- except when + // the increment is 0. This is because sbrk(0) is often called + // to get the top of the memory stack, and is not actually a + // memory-allocation call. It may be useful in memory-limited contexts, + // to catch allocations that will exceed the limit and take outside + // actions to increase such a limit. + typedef MallocHook_PreSbrkHook PreSbrkHook; + inline static bool AddPreSbrkHook(PreSbrkHook hook) { + return MallocHook_AddPreSbrkHook(hook); + } + inline static bool RemovePreSbrkHook(PreSbrkHook hook) { + return MallocHook_RemovePreSbrkHook(hook); + } + inline static void InvokePreSbrkHook(ptrdiff_t increment); + + // The SbrkHook is invoked whenever sbrk is called -- except when + // the increment is 0. This is because sbrk(0) is often called + // to get the top of the memory stack, and is not actually a + // memory-allocation call. + typedef MallocHook_SbrkHook SbrkHook; + inline static bool AddSbrkHook(SbrkHook hook) { + return MallocHook_AddSbrkHook(hook); + } + inline static bool RemoveSbrkHook(SbrkHook hook) { + return MallocHook_RemoveSbrkHook(hook); + } + inline static void InvokeSbrkHook(const void* result, ptrdiff_t increment); + + // Get the current stack trace. Try to skip all routines up to and + // and including the caller of MallocHook::Invoke*. + // Use "skip_count" (similarly to GetStackTrace from stacktrace.h) + // as a hint about how many routines to skip if better information + // is not available. + inline static int GetCallerStackTrace(void** result, int max_depth, + int skip_count) { + return MallocHook_GetCallerStackTrace(result, max_depth, skip_count); + } + + // Unhooked versions of mmap() and munmap(). These should be used + // only by experts, since they bypass heapchecking, etc. + // Note: These do not run hooks, but they still use the MmapReplacement + // and MunmapReplacement. + static void* UnhookedMMap(void *start, size_t length, int prot, int flags, + int fd, off_t offset); + static int UnhookedMUnmap(void *start, size_t length); + + // The following are DEPRECATED. + inline static NewHook GetNewHook(); + inline static NewHook SetNewHook(NewHook hook) { + return MallocHook_SetNewHook(hook); + } + + inline static DeleteHook GetDeleteHook(); + inline static DeleteHook SetDeleteHook(DeleteHook hook) { + return MallocHook_SetDeleteHook(hook); + } + + inline static PreMmapHook GetPreMmapHook(); + inline static PreMmapHook SetPreMmapHook(PreMmapHook hook) { + return MallocHook_SetPreMmapHook(hook); + } + + inline static MmapHook GetMmapHook(); + inline static MmapHook SetMmapHook(MmapHook hook) { + return MallocHook_SetMmapHook(hook); + } + + inline static MunmapHook GetMunmapHook(); + inline static MunmapHook SetMunmapHook(MunmapHook hook) { + return MallocHook_SetMunmapHook(hook); + } + + inline static MremapHook GetMremapHook(); + inline static MremapHook SetMremapHook(MremapHook hook) { + return MallocHook_SetMremapHook(hook); + } + + inline static PreSbrkHook GetPreSbrkHook(); + inline static PreSbrkHook SetPreSbrkHook(PreSbrkHook hook) { + return MallocHook_SetPreSbrkHook(hook); + } + + inline static SbrkHook GetSbrkHook(); + inline static SbrkHook SetSbrkHook(SbrkHook hook) { + return MallocHook_SetSbrkHook(hook); + } + // End of DEPRECATED methods. + + private: + // Slow path versions of Invoke*Hook. + static void InvokeNewHookSlow(const void* p, size_t s); + static void InvokeDeleteHookSlow(const void* p); + static void InvokePreMmapHookSlow(const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset); + static void InvokeMmapHookSlow(const void* result, + const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset); + static bool InvokeMmapReplacementSlow(const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset, + void** result); + static void InvokeMunmapHookSlow(const void* p, size_t size); + static bool InvokeMunmapReplacementSlow(const void* p, + size_t size, + int* result); + static void InvokeMremapHookSlow(const void* result, + const void* old_addr, + size_t old_size, + size_t new_size, + int flags, + const void* new_addr); + static void InvokePreSbrkHookSlow(ptrdiff_t increment); + static void InvokeSbrkHookSlow(const void* result, ptrdiff_t increment); +}; + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + + +#endif /* _MALLOC_HOOK_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/gperftools/malloc_hook_c.h b/src/thirdparty/gperftools-2.0/src/gperftools/malloc_hook_c.h new file mode 100644 index 000000000..56337e15e --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/gperftools/malloc_hook_c.h @@ -0,0 +1,173 @@ +/* Copyright (c) 2008, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * -- + * Author: Craig Silverstein + * + * C shims for the C++ malloc_hook.h. See malloc_hook.h for details + * on how to use these. + */ + +#ifndef _MALLOC_HOOK_C_H_ +#define _MALLOC_HOOK_C_H_ + +#include +#include + +/* Annoying stuff for windows; makes sure clients can import these functions */ +#ifndef PERFTOOLS_DLL_DECL +# ifdef _WIN32 +# define PERFTOOLS_DLL_DECL __declspec(dllimport) +# else +# define PERFTOOLS_DLL_DECL +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Get the current stack trace. Try to skip all routines up to and + * and including the caller of MallocHook::Invoke*. + * Use "skip_count" (similarly to GetStackTrace from stacktrace.h) + * as a hint about how many routines to skip if better information + * is not available. + */ +PERFTOOLS_DLL_DECL +int MallocHook_GetCallerStackTrace(void** result, int max_depth, + int skip_count); + +/* The MallocHook_{Add,Remove}*Hook functions return 1 on success and 0 on + * failure. + */ + +typedef void (*MallocHook_NewHook)(const void* ptr, size_t size); +PERFTOOLS_DLL_DECL +int MallocHook_AddNewHook(MallocHook_NewHook hook); +PERFTOOLS_DLL_DECL +int MallocHook_RemoveNewHook(MallocHook_NewHook hook); + +typedef void (*MallocHook_DeleteHook)(const void* ptr); +PERFTOOLS_DLL_DECL +int MallocHook_AddDeleteHook(MallocHook_DeleteHook hook); +PERFTOOLS_DLL_DECL +int MallocHook_RemoveDeleteHook(MallocHook_DeleteHook hook); + +typedef void (*MallocHook_PreMmapHook)(const void *start, + size_t size, + int protection, + int flags, + int fd, + off_t offset); +PERFTOOLS_DLL_DECL +int MallocHook_AddPreMmapHook(MallocHook_PreMmapHook hook); +PERFTOOLS_DLL_DECL +int MallocHook_RemovePreMmapHook(MallocHook_PreMmapHook hook); + +typedef void (*MallocHook_MmapHook)(const void* result, + const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset); +PERFTOOLS_DLL_DECL +int MallocHook_AddMmapHook(MallocHook_MmapHook hook); +PERFTOOLS_DLL_DECL +int MallocHook_RemoveMmapHook(MallocHook_MmapHook hook); + +typedef int (*MallocHook_MmapReplacement)(const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset, + void** result); +int MallocHook_SetMmapReplacement(MallocHook_MmapReplacement hook); +int MallocHook_RemoveMmapReplacement(MallocHook_MmapReplacement hook); + +typedef void (*MallocHook_MunmapHook)(const void* ptr, size_t size); +PERFTOOLS_DLL_DECL +int MallocHook_AddMunmapHook(MallocHook_MunmapHook hook); +PERFTOOLS_DLL_DECL +int MallocHook_RemoveMunmapHook(MallocHook_MunmapHook hook); + +typedef int (*MallocHook_MunmapReplacement)(const void* ptr, + size_t size, + int* result); +int MallocHook_SetMunmapReplacement(MallocHook_MunmapReplacement hook); +int MallocHook_RemoveMunmapReplacement(MallocHook_MunmapReplacement hook); + +typedef void (*MallocHook_MremapHook)(const void* result, + const void* old_addr, + size_t old_size, + size_t new_size, + int flags, + const void* new_addr); +PERFTOOLS_DLL_DECL +int MallocHook_AddMremapHook(MallocHook_MremapHook hook); +PERFTOOLS_DLL_DECL +int MallocHook_RemoveMremapHook(MallocHook_MremapHook hook); + +typedef void (*MallocHook_PreSbrkHook)(ptrdiff_t increment); +PERFTOOLS_DLL_DECL +int MallocHook_AddPreSbrkHook(MallocHook_PreSbrkHook hook); +PERFTOOLS_DLL_DECL +int MallocHook_RemovePreSbrkHook(MallocHook_PreSbrkHook hook); + +typedef void (*MallocHook_SbrkHook)(const void* result, ptrdiff_t increment); +PERFTOOLS_DLL_DECL +int MallocHook_AddSbrkHook(MallocHook_SbrkHook hook); +PERFTOOLS_DLL_DECL +int MallocHook_RemoveSbrkHook(MallocHook_SbrkHook hook); + +/* The following are DEPRECATED. */ +PERFTOOLS_DLL_DECL +MallocHook_NewHook MallocHook_SetNewHook(MallocHook_NewHook hook); +PERFTOOLS_DLL_DECL +MallocHook_DeleteHook MallocHook_SetDeleteHook(MallocHook_DeleteHook hook); +PERFTOOLS_DLL_DECL +MallocHook_PreMmapHook MallocHook_SetPreMmapHook(MallocHook_PreMmapHook hook); +PERFTOOLS_DLL_DECL +MallocHook_MmapHook MallocHook_SetMmapHook(MallocHook_MmapHook hook); +PERFTOOLS_DLL_DECL +MallocHook_MunmapHook MallocHook_SetMunmapHook(MallocHook_MunmapHook hook); +PERFTOOLS_DLL_DECL +MallocHook_MremapHook MallocHook_SetMremapHook(MallocHook_MremapHook hook); +PERFTOOLS_DLL_DECL +MallocHook_PreSbrkHook MallocHook_SetPreSbrkHook(MallocHook_PreSbrkHook hook); +PERFTOOLS_DLL_DECL +MallocHook_SbrkHook MallocHook_SetSbrkHook(MallocHook_SbrkHook hook); +/* End of DEPRECATED functions. */ + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* _MALLOC_HOOK_C_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/gperftools/profiler.h b/src/thirdparty/gperftools-2.0/src/gperftools/profiler.h new file mode 100644 index 000000000..7971e0444 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/gperftools/profiler.h @@ -0,0 +1,168 @@ +/* Copyright (c) 2005, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Sanjay Ghemawat + * + * Module for CPU profiling based on periodic pc-sampling. + * + * For full(er) information, see doc/cpuprofile.html + * + * This module is linked into your program with + * no slowdown caused by this unless you activate the profiler + * using one of the following methods: + * + * 1. Before starting the program, set the environment variable + * "PROFILE" to be the name of the file to which the profile + * data should be written. + * + * 2. Programmatically, start and stop the profiler using the + * routines "ProfilerStart(filename)" and "ProfilerStop()". + * + * + * (Note: if using linux 2.4 or earlier, only the main thread may be + * profiled.) + * + * Use pprof to view the resulting profile output. + * % pprof + * % pprof --gv + * + * These functions are thread-safe. + */ + +#ifndef BASE_PROFILER_H_ +#define BASE_PROFILER_H_ + +#include /* For time_t */ + +/* Annoying stuff for windows; makes sure clients can import these functions */ +#ifndef PERFTOOLS_DLL_DECL +# ifdef _WIN32 +# define PERFTOOLS_DLL_DECL __declspec(dllimport) +# else +# define PERFTOOLS_DLL_DECL +# endif +#endif + +/* All this code should be usable from within C apps. */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Profiler options, for use with ProfilerStartWithOptions. To use: + * + * struct ProfilerOptions options; + * memset(&options, 0, sizeof options); + * + * then fill in fields as needed. + * + * This structure is intended to be usable from C code, so no constructor + * is provided to initialize it. (Use memset as described above). + */ +struct ProfilerOptions { + /* Filter function and argument. + * + * If filter_in_thread is not NULL, when a profiling tick is delivered + * the profiler will call: + * + * (*filter_in_thread)(filter_in_thread_arg) + * + * If it returns nonzero, the sample will be included in the profile. + * Note that filter_in_thread runs in a signal handler, so must be + * async-signal-safe. + * + * A typical use would be to set up filter results for each thread + * in the system before starting the profiler, then to make + * filter_in_thread be a very simple function which retrieves those + * results in an async-signal-safe way. Retrieval could be done + * using thread-specific data, or using a shared data structure that + * supports async-signal-safe lookups. + */ + int (*filter_in_thread)(void *arg); + void *filter_in_thread_arg; +}; + +/* Start profiling and write profile info into fname, discarding any + * existing profiling data in that file. + * + * This is equivalent to calling ProfilerStartWithOptions(fname, NULL). + */ +PERFTOOLS_DLL_DECL int ProfilerStart(const char* fname); + +/* Start profiling and write profile into fname, discarding any + * existing profiling data in that file. + * + * The profiler is configured using the options given by 'options'. + * Options which are not specified are given default values. + * + * 'options' may be NULL, in which case all are given default values. + * + * Returns nonzero if profiling was started sucessfully, or zero else. + */ +PERFTOOLS_DLL_DECL int ProfilerStartWithOptions( + const char *fname, const struct ProfilerOptions *options); + +/* Stop profiling. Can be started again with ProfilerStart(), but + * the currently accumulated profiling data will be cleared. + */ +PERFTOOLS_DLL_DECL void ProfilerStop(); + +/* Flush any currently buffered profiling state to the profile file. + * Has no effect if the profiler has not been started. + */ +PERFTOOLS_DLL_DECL void ProfilerFlush(); + + +/* DEPRECATED: these functions were used to enable/disable profiling + * in the current thread, but no longer do anything. + */ +PERFTOOLS_DLL_DECL void ProfilerEnable(); +PERFTOOLS_DLL_DECL void ProfilerDisable(); + +/* Returns nonzero if profile is currently enabled, zero if it's not. */ +PERFTOOLS_DLL_DECL int ProfilingIsEnabledForAllThreads(); + +/* Routine for registering new threads with the profiler. + */ +PERFTOOLS_DLL_DECL void ProfilerRegisterThread(); + +/* Stores state about profiler's current status into "*state". */ +struct ProfilerState { + int enabled; /* Is profiling currently enabled? */ + time_t start_time; /* If enabled, when was profiling started? */ + char profile_name[1024]; /* Name of profile file being written, or '\0' */ + int samples_gathered; /* Number of samples gathered so far (or 0) */ +}; +PERFTOOLS_DLL_DECL void ProfilerGetCurrentState(struct ProfilerState* state); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* BASE_PROFILER_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/gperftools/stacktrace.h b/src/thirdparty/gperftools-2.0/src/gperftools/stacktrace.h new file mode 100644 index 000000000..fd186d63a --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/gperftools/stacktrace.h @@ -0,0 +1,116 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Routines to extract the current stack trace. These functions are +// thread-safe. + +#ifndef GOOGLE_STACKTRACE_H_ +#define GOOGLE_STACKTRACE_H_ + +// Annoying stuff for windows -- makes sure clients can import these functions +#ifndef PERFTOOLS_DLL_DECL +# ifdef _WIN32 +# define PERFTOOLS_DLL_DECL __declspec(dllimport) +# else +# define PERFTOOLS_DLL_DECL +# endif +#endif + + +// Skips the most recent "skip_count" stack frames (also skips the +// frame generated for the "GetStackFrames" routine itself), and then +// records the pc values for up to the next "max_depth" frames in +// "result", and the corresponding stack frame sizes in "sizes". +// Returns the number of values recorded in "result"/"sizes". +// +// Example: +// main() { foo(); } +// foo() { bar(); } +// bar() { +// void* result[10]; +// int sizes[10]; +// int depth = GetStackFrames(result, sizes, 10, 1); +// } +// +// The GetStackFrames call will skip the frame for "bar". It will +// return 2 and will produce pc values that map to the following +// procedures: +// result[0] foo +// result[1] main +// (Actually, there may be a few more entries after "main" to account for +// startup procedures.) +// And corresponding stack frame sizes will also be recorded: +// sizes[0] 16 +// sizes[1] 16 +// (Stack frame sizes of 16 above are just for illustration purposes.) +// Stack frame sizes of 0 or less indicate that those frame sizes couldn't +// be identified. +// +// This routine may return fewer stack frame entries than are +// available. Also note that "result" and "sizes" must both be non-NULL. +extern PERFTOOLS_DLL_DECL int GetStackFrames(void** result, int* sizes, int max_depth, + int skip_count); + +// Same as above, but to be used from a signal handler. The "uc" parameter +// should be the pointer to ucontext_t which was passed as the 3rd parameter +// to sa_sigaction signal handler. It may help the unwinder to get a +// better stack trace under certain conditions. The "uc" may safely be NULL. +extern PERFTOOLS_DLL_DECL int GetStackFramesWithContext(void** result, int* sizes, int max_depth, + int skip_count, const void *uc); + +// This is similar to the GetStackFrames routine, except that it returns +// the stack trace only, and not the stack frame sizes as well. +// Example: +// main() { foo(); } +// foo() { bar(); } +// bar() { +// void* result[10]; +// int depth = GetStackTrace(result, 10, 1); +// } +// +// This produces: +// result[0] foo +// result[1] main +// .... ... +// +// "result" must not be NULL. +extern PERFTOOLS_DLL_DECL int GetStackTrace(void** result, int max_depth, + int skip_count); + +// Same as above, but to be used from a signal handler. The "uc" parameter +// should be the pointer to ucontext_t which was passed as the 3rd parameter +// to sa_sigaction signal handler. It may help the unwinder to get a +// better stack trace under certain conditions. The "uc" may safely be NULL. +extern PERFTOOLS_DLL_DECL int GetStackTraceWithContext(void** result, int max_depth, + int skip_count, const void *uc); + +#endif /* GOOGLE_STACKTRACE_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/gperftools/tcmalloc.h.in b/src/thirdparty/gperftools-2.0/src/gperftools/tcmalloc.h.in new file mode 100644 index 000000000..dbca6ec07 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/gperftools/tcmalloc.h.in @@ -0,0 +1,123 @@ +/* Copyright (c) 2003, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Sanjay Ghemawat + * .h file by Craig Silverstein + */ + +#ifndef TCMALLOC_TCMALLOC_H_ +#define TCMALLOC_TCMALLOC_H_ + +#include // for size_t +#ifdef HAVE_SYS_CDEFS_H +#include // where glibc defines __THROW +#endif + +// __THROW is defined in glibc systems. It means, counter-intuitively, +// "This function will never throw an exception." It's an optional +// optimization tool, but we may need to use it to match glibc prototypes. +#ifndef __THROW /* I guess we're not on a glibc system */ +# define __THROW /* __THROW is just an optimization, so ok to make it "" */ +#endif + +// Define the version number so folks can check against it +#define TC_VERSION_MAJOR @TC_VERSION_MAJOR@ +#define TC_VERSION_MINOR @TC_VERSION_MINOR@ +#define TC_VERSION_PATCH "@TC_VERSION_PATCH@" +#define TC_VERSION_STRING "gperftools @TC_VERSION_MAJOR@.@TC_VERSION_MINOR@@TC_VERSION_PATCH@" + +#include // for struct mallinfo, if it's defined + +// Annoying stuff for windows -- makes sure clients can import these functions +#ifndef PERFTOOLS_DLL_DECL +# ifdef _WIN32 +# define PERFTOOLS_DLL_DECL __declspec(dllimport) +# else +# define PERFTOOLS_DLL_DECL +# endif +#endif + +#ifdef __cplusplus +namespace std { +struct nothrow_t; +} + +extern "C" { +#endif + // Returns a human-readable version string. If major, minor, + // and/or patch are not NULL, they are set to the major version, + // minor version, and patch-code (a string, usually ""). + PERFTOOLS_DLL_DECL const char* tc_version(int* major, int* minor, + const char** patch) __THROW; + + PERFTOOLS_DLL_DECL void* tc_malloc(size_t size) __THROW; + PERFTOOLS_DLL_DECL void tc_free(void* ptr) __THROW; + PERFTOOLS_DLL_DECL void* tc_realloc(void* ptr, size_t size) __THROW; + PERFTOOLS_DLL_DECL void* tc_calloc(size_t nmemb, size_t size) __THROW; + PERFTOOLS_DLL_DECL void tc_cfree(void* ptr) __THROW; + + PERFTOOLS_DLL_DECL void* tc_memalign(size_t __alignment, + size_t __size) __THROW; + PERFTOOLS_DLL_DECL int tc_posix_memalign(void** ptr, + size_t align, size_t size) __THROW; + PERFTOOLS_DLL_DECL void* tc_valloc(size_t __size) __THROW; + PERFTOOLS_DLL_DECL void* tc_pvalloc(size_t __size) __THROW; + + PERFTOOLS_DLL_DECL void tc_malloc_stats(void) __THROW; + PERFTOOLS_DLL_DECL int tc_mallopt(int cmd, int value) __THROW; +#if @ac_cv_have_struct_mallinfo@ + PERFTOOLS_DLL_DECL struct mallinfo tc_mallinfo(void) __THROW; +#endif + + // This is an alias for MallocExtension::instance()->GetAllocatedSize(). + // It is equivalent to + // OS X: malloc_size() + // glibc: malloc_usable_size() + // Windows: _msize() + PERFTOOLS_DLL_DECL size_t tc_malloc_size(void* ptr) __THROW; + +#ifdef __cplusplus + PERFTOOLS_DLL_DECL int tc_set_new_mode(int flag) __THROW; + PERFTOOLS_DLL_DECL void* tc_new(size_t size); + PERFTOOLS_DLL_DECL void* tc_new_nothrow(size_t size, + const std::nothrow_t&) __THROW; + PERFTOOLS_DLL_DECL void tc_delete(void* p) __THROW; + PERFTOOLS_DLL_DECL void tc_delete_nothrow(void* p, + const std::nothrow_t&) __THROW; + PERFTOOLS_DLL_DECL void* tc_newarray(size_t size); + PERFTOOLS_DLL_DECL void* tc_newarray_nothrow(size_t size, + const std::nothrow_t&) __THROW; + PERFTOOLS_DLL_DECL void tc_deletearray(void* p) __THROW; + PERFTOOLS_DLL_DECL void tc_deletearray_nothrow(void* p, + const std::nothrow_t&) __THROW; +} +#endif + +#endif // #ifndef TCMALLOC_TCMALLOC_H_ diff --git a/src/thirdparty/gperftools-2.0/src/heap-checker-bcad.cc b/src/thirdparty/gperftools-2.0/src/heap-checker-bcad.cc new file mode 100644 index 000000000..7ed6942c0 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/heap-checker-bcad.cc @@ -0,0 +1,92 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// All Rights Reserved. +// +// Author: Maxim Lifantsev +// +// A file to ensure that components of heap leak checker run before +// all global object constructors and after all global object +// destructors. +// +// This file must be the last library any binary links against. +// Otherwise, the heap checker may not be able to run early enough to +// catalog all the global objects in your program. If this happens, +// and later in the program you allocate memory and have one of these +// "uncataloged" global objects point to it, the heap checker will +// consider that allocation to be a leak, even though it's not (since +// the allocated object is reachable from global data and hence "live"). + +#include // for abort() +#include + +// A dummy variable to refer from heap-checker.cc. This is to make +// sure this file is not optimized out by the linker. +bool heap_leak_checker_bcad_variable; + +extern void HeapLeakChecker_AfterDestructors(); // in heap-checker.cc + +// A helper class to ensure that some components of heap leak checking +// can happen before construction and after destruction +// of all global/static objects. +class HeapLeakCheckerGlobalPrePost { + public: + HeapLeakCheckerGlobalPrePost() { + if (count_ == 0) { + // The 'new int' will ensure that we have run an initial malloc + // hook, which will set up the heap checker via + // MallocHook_InitAtFirstAllocation_HeapLeakChecker. See malloc_hook.cc. + // This is done in this roundabout fashion in order to avoid self-deadlock + // if we directly called HeapLeakChecker_BeforeConstructors here. + delete new int; + // This needs to be called before the first allocation of an STL + // object, but after libc is done setting up threads (because it + // calls setenv, which requires a thread-aware errno). By + // putting it here, we hope it's the first bit of code executed + // after the libc global-constructor code. + MallocExtension::Initialize(); + } + ++count_; + } + ~HeapLeakCheckerGlobalPrePost() { + if (count_ <= 0) abort(); + --count_; + if (count_ == 0) HeapLeakChecker_AfterDestructors(); + } + private: + // Counter of constructions/destructions of objects of this class + // (just in case there are more than one of them). + static int count_; +}; + +int HeapLeakCheckerGlobalPrePost::count_ = 0; + +// The early-construction/late-destruction global object. +static const HeapLeakCheckerGlobalPrePost heap_leak_checker_global_pre_post; diff --git a/src/thirdparty/gperftools-2.0/src/heap-checker.cc b/src/thirdparty/gperftools-2.0/src/heap-checker.cc new file mode 100644 index 000000000..cb71ae130 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/heap-checker.cc @@ -0,0 +1,2372 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// All Rights Reserved. +// +// Author: Maxim Lifantsev +// + +#include "config.h" + +#include // for O_RDONLY (we use syscall to do actual reads) +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_MMAP +#include +#endif +#ifdef HAVE_PTHREAD +#include +#endif +#include +#include +#include +#include + +#if defined(HAVE_LINUX_PTRACE_H) +#include +#endif +#ifdef HAVE_SYS_SYSCALL_H +#include +#endif +#if defined(_WIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__) || defined(__MINGW32__) +#include +#include +#undef ERROR // windows defines these as macros, which can cause trouble +#undef max +#undef min +#endif + +#include +#include +#include +#include +#include +#include + +#include + +#include "base/basictypes.h" +#include "base/googleinit.h" +#include "base/logging.h" +#include +#include "base/commandlineflags.h" +#include "base/elfcore.h" // for i386_regs +#include "base/thread_lister.h" +#include "heap-profile-table.h" +#include "base/low_level_alloc.h" +#include "malloc_hook-inl.h" +#include +#include +#include "maybe_threads.h" +#include "memory_region_map.h" +#include "base/spinlock.h" +#include "base/sysinfo.h" +#include "base/stl_allocator.h" + +using std::string; +using std::basic_string; +using std::pair; +using std::map; +using std::set; +using std::vector; +using std::swap; +using std::make_pair; +using std::min; +using std::max; +using std::less; +using std::char_traits; + +// If current process is being ptrace()d, 'TracerPid' in /proc/self/status +// will be non-zero. +static bool IsDebuggerAttached(void) { // only works under linux, probably + char buf[256]; // TracerPid comes relatively earlier in status output + int fd = open("/proc/self/status", O_RDONLY); + if (fd == -1) { + return false; // Can't tell for sure. + } + const int len = read(fd, buf, sizeof(buf)); + bool rc = false; + if (len > 0) { + const char *const kTracerPid = "TracerPid:\t"; + buf[len - 1] = '\0'; + const char *p = strstr(buf, kTracerPid); + if (p != NULL) { + rc = (strncmp(p + strlen(kTracerPid), "0\n", 2) != 0); + } + } + close(fd); + return rc; +} + +// This is the default if you don't link in -lprofiler +extern "C" { +ATTRIBUTE_WEAK PERFTOOLS_DLL_DECL bool ProfilingIsEnabledForAllThreads(); +bool ProfilingIsEnabledForAllThreads() { return false; } +} + +//---------------------------------------------------------------------- +// Flags that control heap-checking +//---------------------------------------------------------------------- + +DEFINE_string(heap_check, + EnvToString("HEAPCHECK", ""), + "The heap leak checking to be done over the whole executable: " + "\"minimal\", \"normal\", \"strict\", " + "\"draconian\", \"as-is\", and \"local\" " + " or the empty string are the supported choices. " + "(See HeapLeakChecker_InternalInitStart for details.)"); + +DEFINE_bool(heap_check_report, true, "Obsolete"); + +DEFINE_bool(heap_check_before_constructors, + true, + "deprecated; pretty much always true now"); + +DEFINE_bool(heap_check_after_destructors, + EnvToBool("HEAP_CHECK_AFTER_DESTRUCTORS", false), + "If overall heap check is to end after global destructors " + "or right after all REGISTER_HEAPCHECK_CLEANUP's"); + +DEFINE_bool(heap_check_strict_check, true, "Obsolete"); + +DEFINE_bool(heap_check_ignore_global_live, + EnvToBool("HEAP_CHECK_IGNORE_GLOBAL_LIVE", true), + "If overall heap check is to ignore heap objects reachable " + "from the global data"); + +DEFINE_bool(heap_check_identify_leaks, + EnvToBool("HEAP_CHECK_IDENTIFY_LEAKS", false), + "If heap check should generate the addresses of the leaked " + "objects in the memory leak profiles. This may be useful " + "in tracking down leaks where only a small fraction of " + "objects allocated at the same stack trace are leaked."); + +DEFINE_bool(heap_check_ignore_thread_live, + EnvToBool("HEAP_CHECK_IGNORE_THREAD_LIVE", true), + "If set to true, objects reachable from thread stacks " + "and registers are not reported as leaks"); + +DEFINE_bool(heap_check_test_pointer_alignment, + EnvToBool("HEAP_CHECK_TEST_POINTER_ALIGNMENT", false), + "Set to true to check if the found leak can be due to " + "use of unaligned pointers"); + +// Alignment at which all pointers in memory are supposed to be located; +// use 1 if any alignment is ok. +// heap_check_test_pointer_alignment flag guides if we try the value of 1. +// The larger it can be, the lesser is the chance of missing real leaks. +static const size_t kPointerSourceAlignment = sizeof(void*); +DEFINE_int32(heap_check_pointer_source_alignment, + EnvToInt("HEAP_CHECK_POINTER_SOURCE_ALIGNMENT", + kPointerSourceAlignment), + "Alignment at which all pointers in memory are supposed to be " + "located. Use 1 if any alignment is ok."); + +// A reasonable default to handle pointers inside of typical class objects: +// Too low and we won't be able to traverse pointers to normally-used +// nested objects and base parts of multiple-inherited objects. +// Too high and it will both slow down leak checking (FindInsideAlloc +// in HaveOnHeapLocked will get slower when there are large on-heap objects) +// and make it probabilistically more likely to miss leaks +// of large-sized objects. +static const int64 kHeapCheckMaxPointerOffset = 1024; +DEFINE_int64(heap_check_max_pointer_offset, + EnvToInt("HEAP_CHECK_MAX_POINTER_OFFSET", + kHeapCheckMaxPointerOffset), + "Largest pointer offset for which we traverse " + "pointers going inside of heap allocated objects. " + "Set to -1 to use the actual largest heap object size."); + +DEFINE_bool(heap_check_run_under_gdb, + EnvToBool("HEAP_CHECK_RUN_UNDER_GDB", false), + "If false, turns off heap-checking library when running under gdb " + "(normally, set to 'true' only when debugging the heap-checker)"); + +DEFINE_int32(heap_check_delay_seconds, 0, + "Number of seconds to delay on-exit heap checking." + " If you set this flag," + " you may also want to set exit_timeout_seconds in order to" + " avoid exit timeouts.\n" + "NOTE: This flag is to be used only to help diagnose issues" + " where it is suspected that the heap checker is reporting" + " false leaks that will disappear if the heap checker delays" + " its checks. Report any such issues to the heap-checker" + " maintainer(s)."); + +//---------------------------------------------------------------------- + +DEFINE_string(heap_profile_pprof, + EnvToString("PPROF_PATH", "pprof"), + "OBSOLETE; not used"); + +DEFINE_string(heap_check_dump_directory, + EnvToString("HEAP_CHECK_DUMP_DIRECTORY", "/tmp"), + "Directory to put heap-checker leak dump information"); + + +//---------------------------------------------------------------------- +// HeapLeakChecker global data +//---------------------------------------------------------------------- + +// Global lock for all the global data of this module. +static SpinLock heap_checker_lock(SpinLock::LINKER_INITIALIZED); + +//---------------------------------------------------------------------- + +// Heap profile prefix for leak checking profiles. +// Gets assigned once when leak checking is turned on, then never modified. +static const string* profile_name_prefix = NULL; + +// Whole-program heap leak checker. +// Gets assigned once when leak checking is turned on, +// then main_heap_checker is never deleted. +static HeapLeakChecker* main_heap_checker = NULL; + +// Whether we will use main_heap_checker to do a check at program exit +// automatically. In any case user can ask for more checks on main_heap_checker +// via GlobalChecker(). +static bool do_main_heap_check = false; + +// The heap profile we use to collect info about the heap. +// This is created in HeapLeakChecker::BeforeConstructorsLocked +// together with setting heap_checker_on (below) to true +// and registering our new/delete malloc hooks; +// similarly all are unset in HeapLeakChecker::TurnItselfOffLocked. +static HeapProfileTable* heap_profile = NULL; + +// If we are doing (or going to do) any kind of heap-checking. +static bool heap_checker_on = false; + +// pid of the process that does whole-program heap leak checking +static pid_t heap_checker_pid = 0; + +// If we did heap profiling during global constructors execution +static bool constructor_heap_profiling = false; + +// RAW_VLOG level we dump key INFO messages at. If you want to turn +// off these messages, set the environment variable PERFTOOLS_VERBOSE=-1. +static const int heap_checker_info_level = 0; + +//---------------------------------------------------------------------- +// HeapLeakChecker's own memory allocator that is +// independent of the normal program allocator. +//---------------------------------------------------------------------- + +// Wrapper of LowLevelAlloc for STL_Allocator and direct use. +// We always access this class under held heap_checker_lock, +// this allows us to in particular protect the period when threads are stopped +// at random spots with ListAllProcessThreads by heap_checker_lock, +// w/o worrying about the lock in LowLevelAlloc::Arena. +// We rely on the fact that we use an own arena with an own lock here. +class HeapLeakChecker::Allocator { + public: + static void Init() { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + RAW_DCHECK(arena_ == NULL, ""); + arena_ = LowLevelAlloc::NewArena(0, LowLevelAlloc::DefaultArena()); + } + static void Shutdown() { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + if (!LowLevelAlloc::DeleteArena(arena_) || alloc_count_ != 0) { + RAW_LOG(FATAL, "Internal heap checker leak of %d objects", alloc_count_); + } + } + static int alloc_count() { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + return alloc_count_; + } + static void* Allocate(size_t n) { + RAW_DCHECK(arena_ && heap_checker_lock.IsHeld(), ""); + void* p = LowLevelAlloc::AllocWithArena(n, arena_); + if (p) alloc_count_ += 1; + return p; + } + static void Free(void* p) { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + if (p) alloc_count_ -= 1; + LowLevelAlloc::Free(p); + } + static void Free(void* p, size_t /* n */) { + Free(p); + } + // destruct, free, and make *p to be NULL + template static void DeleteAndNull(T** p) { + (*p)->~T(); + Free(*p); + *p = NULL; + } + template static void DeleteAndNullIfNot(T** p) { + if (*p != NULL) DeleteAndNull(p); + } + private: + static LowLevelAlloc::Arena* arena_; + static int alloc_count_; +}; + +LowLevelAlloc::Arena* HeapLeakChecker::Allocator::arena_ = NULL; +int HeapLeakChecker::Allocator::alloc_count_ = 0; + +//---------------------------------------------------------------------- +// HeapLeakChecker live object tracking components +//---------------------------------------------------------------------- + +// Cases of live object placement we distinguish +enum ObjectPlacement { + MUST_BE_ON_HEAP, // Must point to a live object of the matching size in the + // heap_profile map of the heap when we get to it + IGNORED_ON_HEAP, // Is a live (ignored) object on heap + MAYBE_LIVE, // Is a piece of writable memory from /proc/self/maps + IN_GLOBAL_DATA, // Is part of global data region of the executable + THREAD_DATA, // Part of a thread stack and a thread descriptor with TLS + THREAD_REGISTERS, // Values in registers of some thread +}; + +// Information about an allocated object +struct AllocObject { + const void* ptr; // the object + uintptr_t size; // its size + ObjectPlacement place; // where ptr points to + + AllocObject(const void* p, size_t s, ObjectPlacement l) + : ptr(p), size(s), place(l) { } +}; + +// All objects (memory ranges) ignored via HeapLeakChecker::IgnoreObject +// Key is the object's address; value is its size. +typedef map, + STL_Allocator, + HeapLeakChecker::Allocator> + > IgnoredObjectsMap; +static IgnoredObjectsMap* ignored_objects = NULL; + +// All objects (memory ranges) that we consider to be the sources of pointers +// to live (not leaked) objects. +// At different times this holds (what can be reached from) global data regions +// and the objects we've been told to ignore. +// For any AllocObject::ptr "live_objects" is supposed to contain at most one +// record at any time. We maintain this by checking with the heap_profile map +// of the heap and removing the live heap objects we've handled from it. +// This vector is maintained as a stack and the frontier of reachable +// live heap objects in our flood traversal of them. +typedef vector + > LiveObjectsStack; +static LiveObjectsStack* live_objects = NULL; + +// A special string type that uses my allocator +typedef basic_string, + STL_Allocator + > HCL_string; + +// A placeholder to fill-in the starting values for live_objects +// for each library so we can keep the library-name association for logging. +typedef map, + STL_Allocator, + HeapLeakChecker::Allocator> + > LibraryLiveObjectsStacks; +static LibraryLiveObjectsStacks* library_live_objects = NULL; + +// Value stored in the map of disabled address ranges; +// its key is the end of the address range. +// We'll ignore allocations with a return address in a disabled range +// if the address occurs at 'max_depth' or less in the stack trace. +struct HeapLeakChecker::RangeValue { + uintptr_t start_address; // the start of the range + int max_depth; // the maximal stack depth to disable at +}; +typedef map, + STL_Allocator, + HeapLeakChecker::Allocator> + > DisabledRangeMap; +// The disabled program counter address ranges for profile dumping +// that are registered with HeapLeakChecker::DisableChecksFromToLocked. +static DisabledRangeMap* disabled_ranges = NULL; + +// Set of stack tops. +// These are used to consider live only appropriate chunks of the memory areas +// that are used for stacks (and maybe thread-specific data as well) +// so that we do not treat pointers from outdated stack frames as live. +typedef set, + STL_Allocator + > StackTopSet; +static StackTopSet* stack_tops = NULL; + +// A map of ranges of code addresses for the system libraries +// that can mmap/mremap/sbrk-allocate memory regions for stacks +// and thread-local storage that we want to consider as live global data. +// Maps from the end address to the start address. +typedef map, + STL_Allocator, + HeapLeakChecker::Allocator> + > GlobalRegionCallerRangeMap; +static GlobalRegionCallerRangeMap* global_region_caller_ranges = NULL; + +// TODO(maxim): make our big data structs into own modules + +// Disabler is implemented by keeping track of a per-thread count +// of active Disabler objects. Any objects allocated while the +// count > 0 are not reported. + +#ifdef HAVE_TLS + +static __thread int thread_disable_counter +// The "inital exec" model is faster than the default TLS model, at +// the cost you can't dlopen this library. But dlopen on heap-checker +// doesn't work anyway -- it must run before main -- so this is a good +// trade-off. +# ifdef HAVE___ATTRIBUTE__ + __attribute__ ((tls_model ("initial-exec"))) +# endif + ; +inline int get_thread_disable_counter() { + return thread_disable_counter; +} +inline void set_thread_disable_counter(int value) { + thread_disable_counter = value; +} + +#else // #ifdef HAVE_TLS + +static pthread_key_t thread_disable_counter_key; +static int main_thread_counter; // storage for use before main() +static bool use_main_thread_counter = true; + +// TODO(csilvers): this is called from NewHook, in the middle of malloc(). +// If perftools_pthread_getspecific calls malloc, that will lead to an +// infinite loop. I don't know how to fix that, so I hope it never happens! +inline int get_thread_disable_counter() { + if (use_main_thread_counter) // means we're running really early + return main_thread_counter; + void* p = perftools_pthread_getspecific(thread_disable_counter_key); + return (intptr_t)p; // kinda evil: store the counter directly in the void* +} + +inline void set_thread_disable_counter(int value) { + if (use_main_thread_counter) { // means we're running really early + main_thread_counter = value; + return; + } + intptr_t pointer_sized_value = value; + // kinda evil: store the counter directly in the void* + void* p = (void*)pointer_sized_value; + // NOTE: this may call malloc, which will call NewHook which will call + // get_thread_disable_counter() which will call pthread_getspecific(). I + // don't know if anything bad can happen if we call getspecific() in the + // middle of a setspecific() call. It seems to work ok in practice... + perftools_pthread_setspecific(thread_disable_counter_key, p); +} + +// The idea here is that this initializer will run pretty late: after +// pthreads have been totally set up. At this point we can call +// pthreads routines, so we set those up. +class InitThreadDisableCounter { + public: + InitThreadDisableCounter() { + perftools_pthread_key_create(&thread_disable_counter_key, NULL); + // Set up the main thread's value, which we have a special variable for. + void* p = (void*)main_thread_counter; // store the counter directly + perftools_pthread_setspecific(thread_disable_counter_key, p); + use_main_thread_counter = false; + } +}; +InitThreadDisableCounter init_thread_disable_counter; + +#endif // #ifdef HAVE_TLS + +HeapLeakChecker::Disabler::Disabler() { + // It is faster to unconditionally increment the thread-local + // counter than to check whether or not heap-checking is on + // in a thread-safe manner. + int counter = get_thread_disable_counter(); + set_thread_disable_counter(counter + 1); + RAW_VLOG(10, "Increasing thread disable counter to %d", counter + 1); +} + +HeapLeakChecker::Disabler::~Disabler() { + int counter = get_thread_disable_counter(); + RAW_DCHECK(counter > 0, ""); + if (counter > 0) { + set_thread_disable_counter(counter - 1); + RAW_VLOG(10, "Decreasing thread disable counter to %d", counter); + } else { + RAW_VLOG(0, "Thread disable counter underflow : %d", counter); + } +} + +//---------------------------------------------------------------------- + +// The size of the largest heap object allocated so far. +static size_t max_heap_object_size = 0; +// The possible range of addresses that can point +// into one of the elements of heap_objects. +static uintptr_t min_heap_address = uintptr_t(-1LL); +static uintptr_t max_heap_address = 0; + +//---------------------------------------------------------------------- + +// Simple casting helpers for uintptr_t and void*: +template +inline static const void* AsPtr(T addr) { + return reinterpret_cast(addr); +} +inline static uintptr_t AsInt(const void* ptr) { + return reinterpret_cast(ptr); +} + +//---------------------------------------------------------------------- + +// We've seen reports that strstr causes heap-checker crashes in some +// libc's (?): +// http://code.google.com/p/gperftools/issues/detail?id=263 +// It's simple enough to use our own. This is not in time-critical code. +static const char* hc_strstr(const char* s1, const char* s2) { + const size_t len = strlen(s2); + RAW_CHECK(len > 0, "Unexpected empty string passed to strstr()"); + for (const char* p = strchr(s1, *s2); p != NULL; p = strchr(p+1, *s2)) { + if (strncmp(p, s2, len) == 0) { + return p; + } + } + return NULL; +} + +//---------------------------------------------------------------------- + +// Our hooks for MallocHook +static void NewHook(const void* ptr, size_t size) { + if (ptr != NULL) { + const int counter = get_thread_disable_counter(); + const bool ignore = (counter > 0); + RAW_VLOG(16, "Recording Alloc: %p of %"PRIuS "; %d", ptr, size, + int(counter)); + + // Fetch the caller's stack trace before acquiring heap_checker_lock. + void* stack[HeapProfileTable::kMaxStackDepth]; + int depth = HeapProfileTable::GetCallerStackTrace(0, stack); + + { SpinLockHolder l(&heap_checker_lock); + if (size > max_heap_object_size) max_heap_object_size = size; + uintptr_t addr = AsInt(ptr); + if (addr < min_heap_address) min_heap_address = addr; + addr += size; + if (addr > max_heap_address) max_heap_address = addr; + if (heap_checker_on) { + heap_profile->RecordAlloc(ptr, size, depth, stack); + if (ignore) { + heap_profile->MarkAsIgnored(ptr); + } + } + } + RAW_VLOG(17, "Alloc Recorded: %p of %"PRIuS"", ptr, size); + } +} + +static void DeleteHook(const void* ptr) { + if (ptr != NULL) { + RAW_VLOG(16, "Recording Free %p", ptr); + { SpinLockHolder l(&heap_checker_lock); + if (heap_checker_on) heap_profile->RecordFree(ptr); + } + RAW_VLOG(17, "Free Recorded: %p", ptr); + } +} + +//---------------------------------------------------------------------- + +enum StackDirection { + GROWS_TOWARDS_HIGH_ADDRESSES, + GROWS_TOWARDS_LOW_ADDRESSES, + UNKNOWN_DIRECTION +}; + +// Determine which way the stack grows: + +static StackDirection ATTRIBUTE_NOINLINE GetStackDirection( + const uintptr_t *const ptr) { + uintptr_t x; + if (&x < ptr) + return GROWS_TOWARDS_LOW_ADDRESSES; + if (ptr < &x) + return GROWS_TOWARDS_HIGH_ADDRESSES; + + RAW_CHECK(0, ""); // Couldn't determine the stack direction. + + return UNKNOWN_DIRECTION; +} + +// Direction of stack growth (will initialize via GetStackDirection()) +static StackDirection stack_direction = UNKNOWN_DIRECTION; + +// This routine is called for every thread stack we know about to register it. +static void RegisterStackLocked(const void* top_ptr) { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + RAW_DCHECK(MemoryRegionMap::LockIsHeld(), ""); + RAW_VLOG(10, "Thread stack at %p", top_ptr); + uintptr_t top = AsInt(top_ptr); + stack_tops->insert(top); // add for later use + + // make sure stack_direction is initialized + if (stack_direction == UNKNOWN_DIRECTION) { + stack_direction = GetStackDirection(&top); + } + + // Find memory region with this stack + MemoryRegionMap::Region region; + if (MemoryRegionMap::FindAndMarkStackRegion(top, ®ion)) { + // Make the proper portion of the stack live: + if (stack_direction == GROWS_TOWARDS_LOW_ADDRESSES) { + RAW_VLOG(11, "Live stack at %p of %"PRIuPTR" bytes", + top_ptr, region.end_addr - top); + live_objects->push_back(AllocObject(top_ptr, region.end_addr - top, + THREAD_DATA)); + } else { // GROWS_TOWARDS_HIGH_ADDRESSES + RAW_VLOG(11, "Live stack at %p of %"PRIuPTR" bytes", + AsPtr(region.start_addr), + top - region.start_addr); + live_objects->push_back(AllocObject(AsPtr(region.start_addr), + top - region.start_addr, + THREAD_DATA)); + } + // not in MemoryRegionMap, look in library_live_objects: + } else if (FLAGS_heap_check_ignore_global_live) { + for (LibraryLiveObjectsStacks::iterator lib = library_live_objects->begin(); + lib != library_live_objects->end(); ++lib) { + for (LiveObjectsStack::iterator span = lib->second.begin(); + span != lib->second.end(); ++span) { + uintptr_t start = AsInt(span->ptr); + uintptr_t end = start + span->size; + if (start <= top && top < end) { + RAW_VLOG(11, "Stack at %p is inside /proc/self/maps chunk %p..%p", + top_ptr, AsPtr(start), AsPtr(end)); + // Shrink start..end region by chopping away the memory regions in + // MemoryRegionMap that land in it to undo merging of regions + // in /proc/self/maps, so that we correctly identify what portion + // of start..end is actually the stack region. + uintptr_t stack_start = start; + uintptr_t stack_end = end; + // can optimize-away this loop, but it does not run often + RAW_DCHECK(MemoryRegionMap::LockIsHeld(), ""); + for (MemoryRegionMap::RegionIterator r = + MemoryRegionMap::BeginRegionLocked(); + r != MemoryRegionMap::EndRegionLocked(); ++r) { + if (top < r->start_addr && r->start_addr < stack_end) { + stack_end = r->start_addr; + } + if (stack_start < r->end_addr && r->end_addr <= top) { + stack_start = r->end_addr; + } + } + if (stack_start != start || stack_end != end) { + RAW_VLOG(11, "Stack at %p is actually inside memory chunk %p..%p", + top_ptr, AsPtr(stack_start), AsPtr(stack_end)); + } + // Make the proper portion of the stack live: + if (stack_direction == GROWS_TOWARDS_LOW_ADDRESSES) { + RAW_VLOG(11, "Live stack at %p of %"PRIuPTR" bytes", + top_ptr, stack_end - top); + live_objects->push_back( + AllocObject(top_ptr, stack_end - top, THREAD_DATA)); + } else { // GROWS_TOWARDS_HIGH_ADDRESSES + RAW_VLOG(11, "Live stack at %p of %"PRIuPTR" bytes", + AsPtr(stack_start), top - stack_start); + live_objects->push_back( + AllocObject(AsPtr(stack_start), top - stack_start, THREAD_DATA)); + } + lib->second.erase(span); // kill the rest of the region + // Put the non-stack part(s) of the region back: + if (stack_start != start) { + lib->second.push_back(AllocObject(AsPtr(start), stack_start - start, + MAYBE_LIVE)); + } + if (stack_end != end) { + lib->second.push_back(AllocObject(AsPtr(stack_end), end - stack_end, + MAYBE_LIVE)); + } + return; + } + } + } + RAW_LOG(ERROR, "Memory region for stack at %p not found. " + "Will likely report false leak positives.", top_ptr); + } +} + +// Iterator for heap allocation map data to make ignored objects "live" +// (i.e., treated as roots for the mark-and-sweep phase) +static void MakeIgnoredObjectsLiveCallbackLocked( + const void* ptr, const HeapProfileTable::AllocInfo& info) { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + if (info.ignored) { + live_objects->push_back(AllocObject(ptr, info.object_size, + MUST_BE_ON_HEAP)); + } +} + +// Iterator for heap allocation map data to make objects allocated from +// disabled regions of code to be live. +static void MakeDisabledLiveCallbackLocked( + const void* ptr, const HeapProfileTable::AllocInfo& info) { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + bool stack_disable = false; + bool range_disable = false; + for (int depth = 0; depth < info.stack_depth; depth++) { + uintptr_t addr = AsInt(info.call_stack[depth]); + if (disabled_ranges) { + DisabledRangeMap::const_iterator iter + = disabled_ranges->upper_bound(addr); + if (iter != disabled_ranges->end()) { + RAW_DCHECK(iter->first > addr, ""); + if (iter->second.start_address < addr && + iter->second.max_depth > depth) { + range_disable = true; // in range; dropping + break; + } + } + } + } + if (stack_disable || range_disable) { + uintptr_t start_address = AsInt(ptr); + uintptr_t end_address = start_address + info.object_size; + StackTopSet::const_iterator iter + = stack_tops->lower_bound(start_address); + if (iter != stack_tops->end()) { + RAW_DCHECK(*iter >= start_address, ""); + if (*iter < end_address) { + // We do not disable (treat as live) whole allocated regions + // if they are used to hold thread call stacks + // (i.e. when we find a stack inside). + // The reason is that we'll treat as live the currently used + // stack portions anyway (see RegisterStackLocked), + // and the rest of the region where the stack lives can well + // contain outdated stack variables which are not live anymore, + // hence should not be treated as such. + RAW_VLOG(11, "Not %s-disabling %"PRIuS" bytes at %p" + ": have stack inside: %p", + (stack_disable ? "stack" : "range"), + info.object_size, ptr, AsPtr(*iter)); + return; + } + } + RAW_VLOG(11, "%s-disabling %"PRIuS" bytes at %p", + (stack_disable ? "Stack" : "Range"), info.object_size, ptr); + live_objects->push_back(AllocObject(ptr, info.object_size, + MUST_BE_ON_HEAP)); + } +} + +static const char kUnnamedProcSelfMapEntry[] = "UNNAMED"; + +// This function takes some fields from a /proc/self/maps line: +// +// start_address start address of a memory region. +// end_address end address of a memory region +// permissions rwx + private/shared bit +// filename filename of the mapped file +// +// If the region is not writeable, then it cannot have any heap +// pointers in it, otherwise we record it as a candidate live region +// to get filtered later. +static void RecordGlobalDataLocked(uintptr_t start_address, + uintptr_t end_address, + const char* permissions, + const char* filename) { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + // Ignore non-writeable regions. + if (strchr(permissions, 'w') == NULL) return; + if (filename == NULL || *filename == '\0') { + filename = kUnnamedProcSelfMapEntry; + } + RAW_VLOG(11, "Looking into %s: 0x%" PRIxPTR "..0x%" PRIxPTR, + filename, start_address, end_address); + (*library_live_objects)[filename]. + push_back(AllocObject(AsPtr(start_address), + end_address - start_address, + MAYBE_LIVE)); +} + +// See if 'library' from /proc/self/maps has base name 'library_base' +// i.e. contains it and has '.' or '-' after it. +static bool IsLibraryNamed(const char* library, const char* library_base) { + const char* p = hc_strstr(library, library_base); + size_t sz = strlen(library_base); + return p != NULL && (p[sz] == '.' || p[sz] == '-'); +} + +// static +void HeapLeakChecker::DisableLibraryAllocsLocked(const char* library, + uintptr_t start_address, + uintptr_t end_address) { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + int depth = 0; + // TODO(maxim): maybe this should be extended to also use objdump + // and pick the text portion of the library more precisely. + if (IsLibraryNamed(library, "/libpthread") || + // libpthread has a lot of small "system" leaks we don't care about. + // In particular it allocates memory to store data supplied via + // pthread_setspecific (which can be the only pointer to a heap object). + IsLibraryNamed(library, "/libdl") || + // library loaders leak some "system" heap that we don't care about + IsLibraryNamed(library, "/libcrypto") || + // Sometimes libcrypto of OpenSSH is compiled with -fomit-frame-pointer + // (any library can be, of course, but this one often is because speed + // is so important for making crypto usable). We ignore all its + // allocations because we can't see the call stacks. We'd prefer + // to ignore allocations done in files/symbols that match + // "default_malloc_ex|default_realloc_ex" + // but that doesn't work when the end-result binary is stripped. + IsLibraryNamed(library, "/libjvm") || + // JVM has a lot of leaks we don't care about. + IsLibraryNamed(library, "/libzip") + // The JVM leaks java.util.zip.Inflater after loading classes. + ) { + depth = 1; // only disable allocation calls directly from the library code + } else if (IsLibraryNamed(library, "/ld") + // library loader leaks some "system" heap + // (e.g. thread-local storage) that we don't care about + ) { + depth = 2; // disable allocation calls directly from the library code + // and at depth 2 from it. + // We need depth 2 here solely because of a libc bug that + // forces us to jump through __memalign_hook and MemalignOverride hoops + // in tcmalloc.cc. + // Those buggy __libc_memalign() calls are in ld-linux.so and happen for + // thread-local storage allocations that we want to ignore here. + // We go with the depth-2 hack as a workaround for this libc bug: + // otherwise we'd need to extend MallocHook interface + // so that correct stack depth adjustment can be propagated from + // the exceptional case of MemalignOverride. + // Using depth 2 here should not mask real leaks because ld-linux.so + // does not call user code. + } + if (depth) { + RAW_VLOG(10, "Disabling allocations from %s at depth %d:", library, depth); + DisableChecksFromToLocked(AsPtr(start_address), AsPtr(end_address), depth); + if (IsLibraryNamed(library, "/libpthread") || + IsLibraryNamed(library, "/libdl") || + IsLibraryNamed(library, "/ld")) { + RAW_VLOG(10, "Global memory regions made by %s will be live data", + library); + if (global_region_caller_ranges == NULL) { + global_region_caller_ranges = + new(Allocator::Allocate(sizeof(GlobalRegionCallerRangeMap))) + GlobalRegionCallerRangeMap; + } + global_region_caller_ranges + ->insert(make_pair(end_address, start_address)); + } + } +} + +// static +HeapLeakChecker::ProcMapsResult HeapLeakChecker::UseProcMapsLocked( + ProcMapsTask proc_maps_task) { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + // Need to provide own scratch memory to ProcMapsIterator: + ProcMapsIterator::Buffer buffer; + ProcMapsIterator it(0, &buffer); + if (!it.Valid()) { + int errsv = errno; + RAW_LOG(ERROR, "Could not open /proc/self/maps: errno=%d. " + "Libraries will not be handled correctly.", errsv); + return CANT_OPEN_PROC_MAPS; + } + uint64 start_address, end_address, file_offset; + int64 inode; + char *permissions, *filename; + bool saw_shared_lib = false; + bool saw_nonzero_inode = false; + bool saw_shared_lib_with_nonzero_inode = false; + while (it.Next(&start_address, &end_address, &permissions, + &file_offset, &inode, &filename)) { + if (start_address >= end_address) { + // Warn if a line we can be interested in is ill-formed: + if (inode != 0) { + RAW_LOG(ERROR, "Errors reading /proc/self/maps. " + "Some global memory regions will not " + "be handled correctly."); + } + // Silently skip other ill-formed lines: some are possible + // probably due to the interplay of how /proc/self/maps is updated + // while we read it in chunks in ProcMapsIterator and + // do things in this loop. + continue; + } + // Determine if any shared libraries are present (this is the same + // list of extensions as is found in pprof). We want to ignore + // 'fake' libraries with inode 0 when determining. However, some + // systems don't share inodes via /proc, so we turn off this check + // if we don't see any evidence that we're getting inode info. + if (inode != 0) { + saw_nonzero_inode = true; + } + if ((hc_strstr(filename, "lib") && hc_strstr(filename, ".so")) || + hc_strstr(filename, ".dll") || + // not all .dylib filenames start with lib. .dylib is big enough + // that we are unlikely to get false matches just checking that. + hc_strstr(filename, ".dylib") || hc_strstr(filename, ".bundle")) { + saw_shared_lib = true; + if (inode != 0) { + saw_shared_lib_with_nonzero_inode = true; + } + } + + switch (proc_maps_task) { + case DISABLE_LIBRARY_ALLOCS: + // All lines starting like + // "401dc000-4030f000 r??p 00132000 03:01 13991972 lib/bin" + // identify a data and code sections of a shared library or our binary + if (inode != 0 && strncmp(permissions, "r-xp", 4) == 0) { + DisableLibraryAllocsLocked(filename, start_address, end_address); + } + break; + case RECORD_GLOBAL_DATA: + RecordGlobalDataLocked(start_address, end_address, + permissions, filename); + break; + default: + RAW_CHECK(0, ""); + } + } + // If /proc/self/maps is reporting inodes properly (we saw a + // non-zero inode), then we only say we saw a shared lib if we saw a + // 'real' one, with a non-zero inode. + if (saw_nonzero_inode) { + saw_shared_lib = saw_shared_lib_with_nonzero_inode; + } + if (!saw_shared_lib) { + RAW_LOG(ERROR, "No shared libs detected. Will likely report false leak " + "positives for statically linked executables."); + return NO_SHARED_LIBS_IN_PROC_MAPS; + } + return PROC_MAPS_USED; +} + +// Total number and size of live objects dropped from the profile; +// (re)initialized in IgnoreAllLiveObjectsLocked. +static int64 live_objects_total; +static int64 live_bytes_total; + +// pid of the thread that is doing the current leak check +// (protected by our lock; IgnoreAllLiveObjectsLocked sets it) +static pid_t self_thread_pid = 0; + +// Status of our thread listing callback execution +// (protected by our lock; used from within IgnoreAllLiveObjectsLocked) +static enum { + CALLBACK_NOT_STARTED, + CALLBACK_STARTED, + CALLBACK_COMPLETED, +} thread_listing_status = CALLBACK_NOT_STARTED; + +// Ideally to avoid deadlocks this function should not result in any libc +// or other function calls that might need to lock a mutex: +// It is called when all threads of a process are stopped +// at arbitrary points thus potentially holding those locks. +// +// In practice we are calling some simple i/o and sprintf-type library functions +// for logging messages, but use only our own LowLevelAlloc::Arena allocator. +// +// This is known to be buggy: the library i/o function calls are able to cause +// deadlocks when they request a lock that a stopped thread happens to hold. +// This issue as far as we know have so far not resulted in any deadlocks +// in practice, so for now we are taking our chance that the deadlocks +// have insignificant frequency. +// +// If such deadlocks become a problem we should make the i/o calls +// into appropriately direct system calls (or eliminate them), +// in particular write() is not safe and vsnprintf() is potentially dangerous +// due to reliance on locale functions (these are called through RAW_LOG +// and in other ways). +// +/*static*/ int HeapLeakChecker::IgnoreLiveThreadsLocked(void* parameter, + int num_threads, + pid_t* thread_pids, + va_list /*ap*/) { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + thread_listing_status = CALLBACK_STARTED; + RAW_VLOG(11, "Found %d threads (from pid %d)", num_threads, getpid()); + + if (FLAGS_heap_check_ignore_global_live) { + UseProcMapsLocked(RECORD_GLOBAL_DATA); + } + + // We put the registers from other threads here + // to make pointers stored in them live. + vector > thread_registers; + + int failures = 0; + for (int i = 0; i < num_threads; ++i) { + // the leak checking thread itself is handled + // specially via self_thread_stack, not here: + if (thread_pids[i] == self_thread_pid) continue; + RAW_VLOG(11, "Handling thread with pid %d", thread_pids[i]); +#if (defined(__i386__) || defined(__x86_64)) && \ + defined(HAVE_LINUX_PTRACE_H) && defined(HAVE_SYS_SYSCALL_H) && defined(DUMPER) + i386_regs thread_regs; +#define sys_ptrace(r, p, a, d) syscall(SYS_ptrace, (r), (p), (a), (d)) + // We use sys_ptrace to avoid thread locking + // because this is called from ListAllProcessThreads + // when all but this thread are suspended. + if (sys_ptrace(PTRACE_GETREGS, thread_pids[i], NULL, &thread_regs) == 0) { + // Need to use SP to get all the data from the very last stack frame: + COMPILE_ASSERT(sizeof(thread_regs.SP) == sizeof(void*), + SP_register_does_not_look_like_a_pointer); + RegisterStackLocked(reinterpret_cast(thread_regs.SP)); + // Make registers live (just in case PTRACE_ATTACH resulted in some + // register pointers still being in the registers and not on the stack): + for (void** p = reinterpret_cast(&thread_regs); + p < reinterpret_cast(&thread_regs + 1); ++p) { + RAW_VLOG(12, "Thread register %p", *p); + thread_registers.push_back(*p); + } + } else { + failures += 1; + } +#else + failures += 1; +#endif + } + // Use all the collected thread (stack) liveness sources: + IgnoreLiveObjectsLocked("threads stack data", ""); + if (thread_registers.size()) { + // Make thread registers be live heap data sources. + // we rely here on the fact that vector is in one memory chunk: + RAW_VLOG(11, "Live registers at %p of %"PRIuS" bytes", + &thread_registers[0], thread_registers.size() * sizeof(void*)); + live_objects->push_back(AllocObject(&thread_registers[0], + thread_registers.size() * sizeof(void*), + THREAD_REGISTERS)); + IgnoreLiveObjectsLocked("threads register data", ""); + } + // Do all other liveness walking while all threads are stopped: + IgnoreNonThreadLiveObjectsLocked(); + // Can now resume the threads: + ResumeAllProcessThreads(num_threads, thread_pids); + thread_listing_status = CALLBACK_COMPLETED; + return failures; +} + +// Stack top of the thread that is doing the current leak check +// (protected by our lock; IgnoreAllLiveObjectsLocked sets it) +static const void* self_thread_stack_top; + +// static +void HeapLeakChecker::IgnoreNonThreadLiveObjectsLocked() { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + RAW_DCHECK(MemoryRegionMap::LockIsHeld(), ""); + RAW_VLOG(11, "Handling self thread with pid %d", self_thread_pid); + // Register our own stack: + + // Important that all stack ranges (including the one here) + // are known before we start looking at them + // in MakeDisabledLiveCallbackLocked: + RegisterStackLocked(self_thread_stack_top); + IgnoreLiveObjectsLocked("stack data", ""); + + // Make objects we were told to ignore live: + if (ignored_objects) { + for (IgnoredObjectsMap::const_iterator object = ignored_objects->begin(); + object != ignored_objects->end(); ++object) { + const void* ptr = AsPtr(object->first); + RAW_VLOG(11, "Ignored live object at %p of %"PRIuS" bytes", + ptr, object->second); + live_objects-> + push_back(AllocObject(ptr, object->second, MUST_BE_ON_HEAP)); + // we do this liveness check for ignored_objects before doing any + // live heap walking to make sure it does not fail needlessly: + size_t object_size; + if (!(heap_profile->FindAlloc(ptr, &object_size) && + object->second == object_size)) { + RAW_LOG(FATAL, "Object at %p of %"PRIuS" bytes from an" + " IgnoreObject() has disappeared", ptr, object->second); + } + } + IgnoreLiveObjectsLocked("ignored objects", ""); + } + + // Treat objects that were allocated when a Disabler was live as + // roots. I.e., if X was allocated while a Disabler was active, + // and Y is reachable from X, arrange that neither X nor Y are + // treated as leaks. + heap_profile->IterateAllocs(MakeIgnoredObjectsLiveCallbackLocked); + IgnoreLiveObjectsLocked("disabled objects", ""); + + // Make code-address-disabled objects live and ignored: + // This in particular makes all thread-specific data live + // because the basic data structure to hold pointers to thread-specific data + // is allocated from libpthreads and we have range-disabled that + // library code with UseProcMapsLocked(DISABLE_LIBRARY_ALLOCS); + // so now we declare all thread-specific data reachable from there as live. + heap_profile->IterateAllocs(MakeDisabledLiveCallbackLocked); + IgnoreLiveObjectsLocked("disabled code", ""); + + // Actually make global data live: + if (FLAGS_heap_check_ignore_global_live) { + bool have_null_region_callers = false; + for (LibraryLiveObjectsStacks::iterator l = library_live_objects->begin(); + l != library_live_objects->end(); ++l) { + RAW_CHECK(live_objects->empty(), ""); + // Process library_live_objects in l->second + // filtering them by MemoryRegionMap: + // It's safe to iterate over MemoryRegionMap + // w/o locks here as we are inside MemoryRegionMap::Lock(): + RAW_DCHECK(MemoryRegionMap::LockIsHeld(), ""); + // The only change to MemoryRegionMap possible in this loop + // is region addition as a result of allocating more memory + // for live_objects. This won't invalidate the RegionIterator + // or the intent of the loop. + // --see the comment by MemoryRegionMap::BeginRegionLocked(). + for (MemoryRegionMap::RegionIterator region = + MemoryRegionMap::BeginRegionLocked(); + region != MemoryRegionMap::EndRegionLocked(); ++region) { + // "region" from MemoryRegionMap is to be subtracted from + // (tentatively live) regions in l->second + // if it has a stack inside or it was allocated by + // a non-special caller (not one covered by a range + // in global_region_caller_ranges). + // This will in particular exclude all memory chunks used + // by the heap itself as well as what's been allocated with + // any allocator on top of mmap. + bool subtract = true; + if (!region->is_stack && global_region_caller_ranges) { + if (region->caller() == static_cast(NULL)) { + have_null_region_callers = true; + } else { + GlobalRegionCallerRangeMap::const_iterator iter + = global_region_caller_ranges->upper_bound(region->caller()); + if (iter != global_region_caller_ranges->end()) { + RAW_DCHECK(iter->first > region->caller(), ""); + if (iter->second < region->caller()) { // in special region + subtract = false; + } + } + } + } + if (subtract) { + // The loop puts the result of filtering l->second into live_objects: + for (LiveObjectsStack::const_iterator i = l->second.begin(); + i != l->second.end(); ++i) { + // subtract *region from *i + uintptr_t start = AsInt(i->ptr); + uintptr_t end = start + i->size; + if (region->start_addr <= start && end <= region->end_addr) { + // full deletion due to subsumption + } else if (start < region->start_addr && + region->end_addr < end) { // cutting-out split + live_objects->push_back(AllocObject(i->ptr, + region->start_addr - start, + IN_GLOBAL_DATA)); + live_objects->push_back(AllocObject(AsPtr(region->end_addr), + end - region->end_addr, + IN_GLOBAL_DATA)); + } else if (region->end_addr > start && + region->start_addr <= start) { // cut from start + live_objects->push_back(AllocObject(AsPtr(region->end_addr), + end - region->end_addr, + IN_GLOBAL_DATA)); + } else if (region->start_addr > start && + region->start_addr < end) { // cut from end + live_objects->push_back(AllocObject(i->ptr, + region->start_addr - start, + IN_GLOBAL_DATA)); + } else { // pass: no intersection + live_objects->push_back(AllocObject(i->ptr, i->size, + IN_GLOBAL_DATA)); + } + } + // Move live_objects back into l->second + // for filtering by the next region. + live_objects->swap(l->second); + live_objects->clear(); + } + } + // Now get and use live_objects from the final version of l->second: + if (VLOG_IS_ON(11)) { + for (LiveObjectsStack::const_iterator i = l->second.begin(); + i != l->second.end(); ++i) { + RAW_VLOG(11, "Library live region at %p of %"PRIuPTR" bytes", + i->ptr, i->size); + } + } + live_objects->swap(l->second); + IgnoreLiveObjectsLocked("in globals of\n ", l->first.c_str()); + } + if (have_null_region_callers) { + RAW_LOG(ERROR, "Have memory regions w/o callers: " + "might report false leaks"); + } + Allocator::DeleteAndNull(&library_live_objects); + } +} + +// Callback for ListAllProcessThreads in IgnoreAllLiveObjectsLocked below +// to test/verify that we have just the one main thread, in which case +// we can do everything in that main thread, +// so that CPU profiler can collect all its samples. +// Returns the number of threads in the process. +static int IsOneThread(void* parameter, int num_threads, + pid_t* thread_pids, va_list ap) { + if (num_threads != 1) { + RAW_LOG(WARNING, "Have threads: Won't CPU-profile the bulk of leak " + "checking work happening in IgnoreLiveThreadsLocked!"); + } + ResumeAllProcessThreads(num_threads, thread_pids); + return num_threads; +} + +// Dummy for IgnoreAllLiveObjectsLocked below. +// Making it global helps with compiler warnings. +static va_list dummy_ap; + +// static +void HeapLeakChecker::IgnoreAllLiveObjectsLocked(const void* self_stack_top) { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + RAW_CHECK(live_objects == NULL, ""); + live_objects = new(Allocator::Allocate(sizeof(LiveObjectsStack))) + LiveObjectsStack; + stack_tops = new(Allocator::Allocate(sizeof(StackTopSet))) StackTopSet; + // reset the counts + live_objects_total = 0; + live_bytes_total = 0; + // Reduce max_heap_object_size to FLAGS_heap_check_max_pointer_offset + // for the time of leak check. + // FLAGS_heap_check_max_pointer_offset caps max_heap_object_size + // to manage reasonably low chances of random bytes + // appearing to be pointing into large actually leaked heap objects. + const size_t old_max_heap_object_size = max_heap_object_size; + max_heap_object_size = ( + FLAGS_heap_check_max_pointer_offset != -1 + ? min(size_t(FLAGS_heap_check_max_pointer_offset), max_heap_object_size) + : max_heap_object_size); + // Record global data as live: + if (FLAGS_heap_check_ignore_global_live) { + library_live_objects = + new(Allocator::Allocate(sizeof(LibraryLiveObjectsStacks))) + LibraryLiveObjectsStacks; + } + // Ignore all thread stacks: + thread_listing_status = CALLBACK_NOT_STARTED; + bool need_to_ignore_non_thread_objects = true; + self_thread_pid = getpid(); + self_thread_stack_top = self_stack_top; + if (FLAGS_heap_check_ignore_thread_live) { + // In case we are doing CPU profiling we'd like to do all the work + // in the main thread, not in the special thread created by + // ListAllProcessThreads, so that CPU profiler can collect all its samples. + // The machinery of ListAllProcessThreads conflicts with the CPU profiler + // by also relying on signals and ::sigaction. + // We can do this (run everything in the main thread) safely + // only if there's just the main thread itself in our process. + // This variable reflects these two conditions: + bool want_and_can_run_in_main_thread = + ProfilingIsEnabledForAllThreads() && + ListAllProcessThreads(NULL, IsOneThread) == 1; + // When the normal path of ListAllProcessThreads below is taken, + // we fully suspend the threads right here before any liveness checking + // and keep them suspended for the whole time of liveness checking + // inside of the IgnoreLiveThreadsLocked callback. + // (The threads can't (de)allocate due to lock on the delete hook but + // if not suspended they could still mess with the pointer + // graph while we walk it). + int r = want_and_can_run_in_main_thread + ? IgnoreLiveThreadsLocked(NULL, 1, &self_thread_pid, dummy_ap) + : ListAllProcessThreads(NULL, IgnoreLiveThreadsLocked); + need_to_ignore_non_thread_objects = r < 0; + if (r < 0) { + RAW_LOG(WARNING, "Thread finding failed with %d errno=%d", r, errno); + if (thread_listing_status == CALLBACK_COMPLETED) { + RAW_LOG(INFO, "Thread finding callback " + "finished ok; hopefully everything is fine"); + need_to_ignore_non_thread_objects = false; + } else if (thread_listing_status == CALLBACK_STARTED) { + RAW_LOG(FATAL, "Thread finding callback was " + "interrupted or crashed; can't fix this"); + } else { // CALLBACK_NOT_STARTED + RAW_LOG(ERROR, "Could not find thread stacks. " + "Will likely report false leak positives."); + } + } else if (r != 0) { + RAW_LOG(ERROR, "Thread stacks not found for %d threads. " + "Will likely report false leak positives.", r); + } else { + RAW_VLOG(11, "Thread stacks appear to be found for all threads"); + } + } else { + RAW_LOG(WARNING, "Not looking for thread stacks; " + "objects reachable only from there " + "will be reported as leaks"); + } + // Do all other live data ignoring here if we did not do it + // within thread listing callback with all threads stopped. + if (need_to_ignore_non_thread_objects) { + if (FLAGS_heap_check_ignore_global_live) { + UseProcMapsLocked(RECORD_GLOBAL_DATA); + } + IgnoreNonThreadLiveObjectsLocked(); + } + if (live_objects_total) { + RAW_VLOG(10, "Ignoring %"PRId64" reachable objects of %"PRId64" bytes", + live_objects_total, live_bytes_total); + } + // Free these: we made them here and heap_profile never saw them + Allocator::DeleteAndNull(&live_objects); + Allocator::DeleteAndNull(&stack_tops); + max_heap_object_size = old_max_heap_object_size; // reset this var +} + +// Alignment at which we should consider pointer positions +// in IgnoreLiveObjectsLocked. Will normally use the value of +// FLAGS_heap_check_pointer_source_alignment. +static size_t pointer_source_alignment = kPointerSourceAlignment; +// Global lock for HeapLeakChecker::DoNoLeaks +// to protect pointer_source_alignment. +static SpinLock alignment_checker_lock(SpinLock::LINKER_INITIALIZED); + +// This function changes the live bits in the heap_profile-table's state: +// we only record the live objects to be skipped. +// +// When checking if a byte sequence points to a heap object we use +// HeapProfileTable::FindInsideAlloc to handle both pointers to +// the start and inside of heap-allocated objects. +// The "inside" case needs to be checked to support +// at least the following relatively common cases: +// - C++ arrays allocated with new FooClass[size] for classes +// with destructors have their size recorded in a sizeof(int) field +// before the place normal pointers point to. +// - basic_string<>-s for e.g. the C++ library of gcc 3.4 +// have the meta-info in basic_string<...>::_Rep recorded +// before the place normal pointers point to. +// - Multiple-inherited objects have their pointers when cast to +// different base classes pointing inside of the actually +// allocated object. +// - Sometimes reachability pointers point to member objects of heap objects, +// and then those member objects point to the full heap object. +// - Third party UnicodeString: it stores a 32-bit refcount +// (in both 32-bit and 64-bit binaries) as the first uint32 +// in the allocated memory and a normal pointer points at +// the second uint32 behind the refcount. +// By finding these additional objects here +// we slightly increase the chance to mistake random memory bytes +// for a pointer and miss a leak in a particular run of a binary. +// +/*static*/ void HeapLeakChecker::IgnoreLiveObjectsLocked(const char* name, + const char* name2) { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + int64 live_object_count = 0; + int64 live_byte_count = 0; + while (!live_objects->empty()) { + const char* object = + reinterpret_cast(live_objects->back().ptr); + size_t size = live_objects->back().size; + const ObjectPlacement place = live_objects->back().place; + live_objects->pop_back(); + if (place == MUST_BE_ON_HEAP && heap_profile->MarkAsLive(object)) { + live_object_count += 1; + live_byte_count += size; + } + RAW_VLOG(13, "Looking for heap pointers in %p of %"PRIuS" bytes", + object, size); + const char* const whole_object = object; + size_t const whole_size = size; + // Try interpretting any byte sequence in object,size as a heap pointer: + const size_t remainder = AsInt(object) % pointer_source_alignment; + if (remainder) { + object += pointer_source_alignment - remainder; + if (size >= pointer_source_alignment - remainder) { + size -= pointer_source_alignment - remainder; + } else { + size = 0; + } + } + if (size < sizeof(void*)) continue; + +#ifdef NO_FRAME_POINTER + // Frame pointer omission requires us to use libunwind, which uses direct + // mmap and munmap system calls, and that needs special handling. + if (name2 == kUnnamedProcSelfMapEntry) { + static const uintptr_t page_mask = ~(getpagesize() - 1); + const uintptr_t addr = reinterpret_cast(object); + if ((addr & page_mask) == 0 && (size & page_mask) == 0) { + // This is an object we slurped from /proc/self/maps. + // It may or may not be readable at this point. + // + // In case all the above conditions made a mistake, and the object is + // not related to libunwind, we also verify that it's not readable + // before ignoring it. + if (msync(const_cast(object), size, MS_ASYNC) != 0) { + // Skip unreadable object, so we don't crash trying to sweep it. + RAW_VLOG(0, "Ignoring inaccessible object [%p, %p) " + "(msync error %d (%s))", + object, object + size, errno, strerror(errno)); + continue; + } + } + } +#endif + + const char* const max_object = object + size - sizeof(void*); + while (object <= max_object) { + // potentially unaligned load: + const uintptr_t addr = *reinterpret_cast(object); + // Do fast check before the more expensive HaveOnHeapLocked lookup: + // this code runs for all memory words that are potentially pointers: + const bool can_be_on_heap = + // Order tests by the likelyhood of the test failing in 64/32 bit modes. + // Yes, this matters: we either lose 5..6% speed in 32 bit mode + // (which is already slower) or by a factor of 1.5..1.91 in 64 bit mode. + // After the alignment test got dropped the above performance figures + // must have changed; might need to revisit this. +#if defined(__x86_64__) + addr <= max_heap_address && // <= is for 0-sized object with max addr + min_heap_address <= addr; +#else + min_heap_address <= addr && + addr <= max_heap_address; // <= is for 0-sized object with max addr +#endif + if (can_be_on_heap) { + const void* ptr = reinterpret_cast(addr); + // Too expensive (inner loop): manually uncomment when debugging: + // RAW_VLOG(17, "Trying pointer to %p at %p", ptr, object); + size_t object_size; + if (HaveOnHeapLocked(&ptr, &object_size) && + heap_profile->MarkAsLive(ptr)) { + // We take the (hopefully low) risk here of encountering by accident + // a byte sequence in memory that matches an address of + // a heap object which is in fact leaked. + // I.e. in very rare and probably not repeatable/lasting cases + // we might miss some real heap memory leaks. + RAW_VLOG(14, "Found pointer to %p of %"PRIuS" bytes at %p " + "inside %p of size %"PRIuS"", + ptr, object_size, object, whole_object, whole_size); + if (VLOG_IS_ON(15)) { + // log call stacks to help debug how come something is not a leak + HeapProfileTable::AllocInfo alloc; + if (!heap_profile->FindAllocDetails(ptr, &alloc)) { + RAW_LOG(FATAL, "FindAllocDetails failed on ptr %p", ptr); + } + RAW_LOG(INFO, "New live %p object's alloc stack:", ptr); + for (int i = 0; i < alloc.stack_depth; ++i) { + RAW_LOG(INFO, " @ %p", alloc.call_stack[i]); + } + } + live_object_count += 1; + live_byte_count += object_size; + live_objects->push_back(AllocObject(ptr, object_size, + IGNORED_ON_HEAP)); + } + } + object += pointer_source_alignment; + } + } + live_objects_total += live_object_count; + live_bytes_total += live_byte_count; + if (live_object_count) { + RAW_VLOG(10, "Removed %"PRId64" live heap objects of %"PRId64" bytes: %s%s", + live_object_count, live_byte_count, name, name2); + } +} + +//---------------------------------------------------------------------- +// HeapLeakChecker leak check disabling components +//---------------------------------------------------------------------- + +// static +void HeapLeakChecker::DisableChecksIn(const char* pattern) { + RAW_LOG(WARNING, "DisableChecksIn(%s) is ignored", pattern); +} + +// static +void HeapLeakChecker::DoIgnoreObject(const void* ptr) { + SpinLockHolder l(&heap_checker_lock); + if (!heap_checker_on) return; + size_t object_size; + if (!HaveOnHeapLocked(&ptr, &object_size)) { + RAW_LOG(ERROR, "No live heap object at %p to ignore", ptr); + } else { + RAW_VLOG(10, "Going to ignore live object at %p of %"PRIuS" bytes", + ptr, object_size); + if (ignored_objects == NULL) { + ignored_objects = new(Allocator::Allocate(sizeof(IgnoredObjectsMap))) + IgnoredObjectsMap; + } + if (!ignored_objects->insert(make_pair(AsInt(ptr), object_size)).second) { + RAW_LOG(WARNING, "Object at %p is already being ignored", ptr); + } + } +} + +// static +void HeapLeakChecker::UnIgnoreObject(const void* ptr) { + SpinLockHolder l(&heap_checker_lock); + if (!heap_checker_on) return; + size_t object_size; + if (!HaveOnHeapLocked(&ptr, &object_size)) { + RAW_LOG(FATAL, "No live heap object at %p to un-ignore", ptr); + } else { + bool found = false; + if (ignored_objects) { + IgnoredObjectsMap::iterator object = ignored_objects->find(AsInt(ptr)); + if (object != ignored_objects->end() && object_size == object->second) { + ignored_objects->erase(object); + found = true; + RAW_VLOG(10, "Now not going to ignore live object " + "at %p of %"PRIuS" bytes", ptr, object_size); + } + } + if (!found) RAW_LOG(FATAL, "Object at %p has not been ignored", ptr); + } +} + +//---------------------------------------------------------------------- +// HeapLeakChecker non-static functions +//---------------------------------------------------------------------- + +char* HeapLeakChecker::MakeProfileNameLocked() { + RAW_DCHECK(lock_->IsHeld(), ""); + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + const int len = profile_name_prefix->size() + strlen(name_) + 5 + + strlen(HeapProfileTable::kFileExt) + 1; + char* file_name = reinterpret_cast(Allocator::Allocate(len)); + snprintf(file_name, len, "%s.%s-end%s", + profile_name_prefix->c_str(), name_, + HeapProfileTable::kFileExt); + return file_name; +} + +void HeapLeakChecker::Create(const char *name, bool make_start_snapshot) { + SpinLockHolder l(lock_); + name_ = NULL; // checker is inactive + start_snapshot_ = NULL; + has_checked_ = false; + inuse_bytes_increase_ = 0; + inuse_allocs_increase_ = 0; + keep_profiles_ = false; + char* n = new char[strlen(name) + 1]; // do this before we lock + IgnoreObject(n); // otherwise it might be treated as live due to our stack + { // Heap activity in other threads is paused for this whole scope. + SpinLockHolder al(&alignment_checker_lock); + SpinLockHolder hl(&heap_checker_lock); + MemoryRegionMap::LockHolder ml; + if (heap_checker_on && profile_name_prefix != NULL) { + RAW_DCHECK(strchr(name, '/') == NULL, "must be a simple name"); + memcpy(n, name, strlen(name) + 1); + name_ = n; // checker is active + if (make_start_snapshot) { + start_snapshot_ = heap_profile->TakeSnapshot(); + } + + const HeapProfileTable::Stats& t = heap_profile->total(); + const size_t start_inuse_bytes = t.alloc_size - t.free_size; + const size_t start_inuse_allocs = t.allocs - t.frees; + RAW_VLOG(10, "Start check \"%s\" profile: %"PRIuS" bytes " + "in %"PRIuS" objects", + name_, start_inuse_bytes, start_inuse_allocs); + } else { + RAW_LOG(WARNING, "Heap checker is not active, " + "hence checker \"%s\" will do nothing!", name); + RAW_LOG(WARNING, "To activate set the HEAPCHECK environment variable.\n"); + } + } + if (name_ == NULL) { + UnIgnoreObject(n); + delete[] n; // must be done after we unlock + } +} + +HeapLeakChecker::HeapLeakChecker(const char *name) : lock_(new SpinLock) { + RAW_DCHECK(strcmp(name, "_main_") != 0, "_main_ is reserved"); + Create(name, true/*create start_snapshot_*/); +} + +HeapLeakChecker::HeapLeakChecker() : lock_(new SpinLock) { + if (FLAGS_heap_check_before_constructors) { + // We want to check for leaks of objects allocated during global + // constructors (i.e., objects allocated already). So we do not + // create a baseline snapshot and hence check for leaks of objects + // that may have already been created. + Create("_main_", false); + } else { + // We want to ignore leaks of objects allocated during global + // constructors (i.e., objects allocated already). So we snapshot + // the current heap contents and use them as a baseline that is + // not reported by the leak checker. + Create("_main_", true); + } +} + +ssize_t HeapLeakChecker::BytesLeaked() const { + SpinLockHolder l(lock_); + if (!has_checked_) { + RAW_LOG(FATAL, "*NoLeaks|SameHeap must execute before this call"); + } + return inuse_bytes_increase_; +} + +ssize_t HeapLeakChecker::ObjectsLeaked() const { + SpinLockHolder l(lock_); + if (!has_checked_) { + RAW_LOG(FATAL, "*NoLeaks|SameHeap must execute before this call"); + } + return inuse_allocs_increase_; +} + +// Save pid of main thread for using in naming dump files +static int32 main_thread_pid = getpid(); +#ifdef HAVE_PROGRAM_INVOCATION_NAME +extern char* program_invocation_name; +extern char* program_invocation_short_name; +static const char* invocation_name() { return program_invocation_short_name; } +static string invocation_path() { return program_invocation_name; } +#else +static const char* invocation_name() { return ""; } +static string invocation_path() { return ""; } +#endif + +// Prints commands that users can run to get more information +// about the reported leaks. +static void SuggestPprofCommand(const char* pprof_file_arg) { + // Extra help information to print for the user when the test is + // being run in a way where the straightforward pprof command will + // not suffice. + string extra_help; + + // Common header info to print for remote runs + const string remote_header = + "This program is being executed remotely and therefore the pprof\n" + "command printed above will not work. Either run this program\n" + "locally, or adjust the pprof command as follows to allow it to\n" + "work on your local machine:\n"; + + // Extra command for fetching remote data + string fetch_cmd; + + RAW_LOG(WARNING, + "\n\n" + "If the preceding stack traces are not enough to find " + "the leaks, try running THIS shell command:\n\n" + "%s%s %s \"%s\" --inuse_objects --lines --heapcheck " + " --edgefraction=1e-10 --nodefraction=1e-10 --gv\n" + "\n" + "%s" + "If you are still puzzled about why the leaks are " + "there, try rerunning this program with " + "HEAP_CHECK_TEST_POINTER_ALIGNMENT=1 and/or with " + "HEAP_CHECK_MAX_POINTER_OFFSET=-1\n" + "If the leak report occurs in a small fraction of runs, " + "try running with TCMALLOC_MAX_FREE_QUEUE_SIZE of few hundred MB " + "or with TCMALLOC_RECLAIM_MEMORY=false, " // only works for debugalloc + "it might help find leaks more repeatably\n", + fetch_cmd.c_str(), + "pprof", // works as long as pprof is on your path + invocation_path().c_str(), + pprof_file_arg, + extra_help.c_str() + ); +} + +bool HeapLeakChecker::DoNoLeaks(ShouldSymbolize should_symbolize) { + SpinLockHolder l(lock_); + // The locking also helps us keep the messages + // for the two checks close together. + SpinLockHolder al(&alignment_checker_lock); + + // thread-safe: protected by alignment_checker_lock + static bool have_disabled_hooks_for_symbolize = false; + // Once we've checked for leaks and symbolized the results once, it's + // not safe to do it again. This is because in order to symbolize + // safely, we had to disable all the malloc hooks here, so we no + // longer can be confident we've collected all the data we need. + if (have_disabled_hooks_for_symbolize) { + RAW_LOG(FATAL, "Must not call heap leak checker manually after " + " program-exit's automatic check."); + } + + HeapProfileTable::Snapshot* leaks = NULL; + char* pprof_file = NULL; + + { + // Heap activity in other threads is paused during this function + // (i.e. until we got all profile difference info). + SpinLockHolder hl(&heap_checker_lock); + if (heap_checker_on == false) { + if (name_ != NULL) { // leak checking enabled when created the checker + RAW_LOG(WARNING, "Heap leak checker got turned off after checker " + "\"%s\" has been created, no leak check is being done for it!", + name_); + } + return true; + } + + // Update global_region_caller_ranges. They may need to change since + // e.g. initialization because shared libraries might have been loaded or + // unloaded. + Allocator::DeleteAndNullIfNot(&global_region_caller_ranges); + ProcMapsResult pm_result = UseProcMapsLocked(DISABLE_LIBRARY_ALLOCS); + RAW_CHECK(pm_result == PROC_MAPS_USED, ""); + + // Keep track of number of internally allocated objects so we + // can detect leaks in the heap-leak-checket itself + const int initial_allocs = Allocator::alloc_count(); + + if (name_ == NULL) { + RAW_LOG(FATAL, "Heap leak checker must not be turned on " + "after construction of a HeapLeakChecker"); + } + + MemoryRegionMap::LockHolder ml; + int a_local_var; // Use our stack ptr to make stack data live: + + // Make the heap profile, other threads are locked out. + HeapProfileTable::Snapshot* base = + reinterpret_cast(start_snapshot_); + RAW_DCHECK(FLAGS_heap_check_pointer_source_alignment > 0, ""); + pointer_source_alignment = FLAGS_heap_check_pointer_source_alignment; + IgnoreAllLiveObjectsLocked(&a_local_var); + leaks = heap_profile->NonLiveSnapshot(base); + + inuse_bytes_increase_ = static_cast(leaks->total().alloc_size); + inuse_allocs_increase_ = static_cast(leaks->total().allocs); + if (leaks->Empty()) { + heap_profile->ReleaseSnapshot(leaks); + leaks = NULL; + + // We can only check for internal leaks along the no-user-leak + // path since in the leak path we temporarily release + // heap_checker_lock and another thread can come in and disturb + // allocation counts. + if (Allocator::alloc_count() != initial_allocs) { + RAW_LOG(FATAL, "Internal HeapChecker leak of %d objects ; %d -> %d", + Allocator::alloc_count() - initial_allocs, + initial_allocs, Allocator::alloc_count()); + } + } else if (FLAGS_heap_check_test_pointer_alignment) { + if (pointer_source_alignment == 1) { + RAW_LOG(WARNING, "--heap_check_test_pointer_alignment has no effect: " + "--heap_check_pointer_source_alignment was already set to 1"); + } else { + // Try with reduced pointer aligment + pointer_source_alignment = 1; + IgnoreAllLiveObjectsLocked(&a_local_var); + HeapProfileTable::Snapshot* leaks_wo_align = + heap_profile->NonLiveSnapshot(base); + pointer_source_alignment = FLAGS_heap_check_pointer_source_alignment; + if (leaks_wo_align->Empty()) { + RAW_LOG(WARNING, "Found no leaks without pointer alignment: " + "something might be placing pointers at " + "unaligned addresses! This needs to be fixed."); + } else { + RAW_LOG(INFO, "Found leaks without pointer alignment as well: " + "unaligned pointers must not be the cause of leaks."); + RAW_LOG(INFO, "--heap_check_test_pointer_alignment did not help " + "to diagnose the leaks."); + } + heap_profile->ReleaseSnapshot(leaks_wo_align); + } + } + + if (leaks != NULL) { + pprof_file = MakeProfileNameLocked(); + } + } + + has_checked_ = true; + if (leaks == NULL) { + if (FLAGS_heap_check_max_pointer_offset == -1) { + RAW_LOG(WARNING, + "Found no leaks without max_pointer_offset restriction: " + "it's possible that the default value of " + "heap_check_max_pointer_offset flag is too low. " + "Do you use pointers with larger than that offsets " + "pointing in the middle of heap-allocated objects?"); + } + const HeapProfileTable::Stats& stats = heap_profile->total(); + RAW_VLOG(heap_checker_info_level, + "No leaks found for check \"%s\" " + "(but no 100%% guarantee that there aren't any): " + "found %"PRId64" reachable heap objects of %"PRId64" bytes", + name_, + int64(stats.allocs - stats.frees), + int64(stats.alloc_size - stats.free_size)); + } else { + if (should_symbolize == SYMBOLIZE) { + // To turn addresses into symbols, we need to fork, which is a + // problem if both parent and child end up trying to call the + // same malloc-hooks we've set up, at the same time. To avoid + // trouble, we turn off the hooks before symbolizing. Note that + // this makes it unsafe to ever leak-report again! Luckily, we + // typically only want to report once in a program's run, at the + // very end. + if (MallocHook::GetNewHook() == NewHook) + MallocHook::SetNewHook(NULL); + if (MallocHook::GetDeleteHook() == DeleteHook) + MallocHook::SetDeleteHook(NULL); + MemoryRegionMap::Shutdown(); + // Make sure all the hooks really got unset: + RAW_CHECK(MallocHook::GetNewHook() == NULL, ""); + RAW_CHECK(MallocHook::GetDeleteHook() == NULL, ""); + RAW_CHECK(MallocHook::GetMmapHook() == NULL, ""); + RAW_CHECK(MallocHook::GetSbrkHook() == NULL, ""); + have_disabled_hooks_for_symbolize = true; + leaks->ReportLeaks(name_, pprof_file, true); // true = should_symbolize + } else { + leaks->ReportLeaks(name_, pprof_file, false); + } + if (FLAGS_heap_check_identify_leaks) { + leaks->ReportIndividualObjects(); + } + + SuggestPprofCommand(pprof_file); + + { + SpinLockHolder hl(&heap_checker_lock); + heap_profile->ReleaseSnapshot(leaks); + Allocator::Free(pprof_file); + } + } + + return (leaks == NULL); +} + +HeapLeakChecker::~HeapLeakChecker() { + if (name_ != NULL) { // had leak checking enabled when created the checker + if (!has_checked_) { + RAW_LOG(FATAL, "Some *NoLeaks|SameHeap method" + " must be called on any created HeapLeakChecker"); + } + + // Deallocate any snapshot taken at start + if (start_snapshot_ != NULL) { + SpinLockHolder l(&heap_checker_lock); + heap_profile->ReleaseSnapshot( + reinterpret_cast(start_snapshot_)); + } + + UnIgnoreObject(name_); + delete[] name_; + name_ = NULL; + } + delete lock_; +} + +//---------------------------------------------------------------------- +// HeapLeakChecker overall heap check components +//---------------------------------------------------------------------- + +// static +bool HeapLeakChecker::IsActive() { + SpinLockHolder l(&heap_checker_lock); + return heap_checker_on; +} + +vector* HeapCleaner::heap_cleanups_ = NULL; + +// When a HeapCleaner object is intialized, add its function to the static list +// of cleaners to be run before leaks checking. +HeapCleaner::HeapCleaner(void_function f) { + if (heap_cleanups_ == NULL) + heap_cleanups_ = new vector; + heap_cleanups_->push_back(f); +} + +// Run all of the cleanup functions and delete the vector. +void HeapCleaner::RunHeapCleanups() { + if (!heap_cleanups_) + return; + for (int i = 0; i < heap_cleanups_->size(); i++) { + void (*f)(void) = (*heap_cleanups_)[i]; + f(); + } + delete heap_cleanups_; + heap_cleanups_ = NULL; +} + +// Program exit heap cleanup registered as a module object destructor. +// Will not get executed when we crash on a signal. +// +void HeapLeakChecker_RunHeapCleanups() { + if (FLAGS_heap_check == "local") // don't check heap in this mode + return; + { SpinLockHolder l(&heap_checker_lock); + // can get here (via forks?) with other pids + if (heap_checker_pid != getpid()) return; + } + HeapCleaner::RunHeapCleanups(); + if (!FLAGS_heap_check_after_destructors) HeapLeakChecker::DoMainHeapCheck(); +} + +static bool internal_init_start_has_run = false; + +// Called exactly once, before main() (but hopefully just before). +// This picks a good unique name for the dumped leak checking heap profiles. +// +// Because we crash when InternalInitStart is called more than once, +// it's fine that we hold heap_checker_lock only around pieces of +// this function: this is still enough for thread-safety w.r.t. other functions +// of this module. +// We can't hold heap_checker_lock throughout because it would deadlock +// on a memory allocation since our new/delete hooks can be on. +// +void HeapLeakChecker_InternalInitStart() { + { SpinLockHolder l(&heap_checker_lock); + RAW_CHECK(!internal_init_start_has_run, + "Heap-check constructor called twice. Perhaps you both linked" + " in the heap checker, and also used LD_PRELOAD to load it?"); + internal_init_start_has_run = true; + +#ifdef ADDRESS_SANITIZER + // AddressSanitizer's custom malloc conflicts with HeapChecker. + FLAGS_heap_check = ""; +#endif + + if (FLAGS_heap_check.empty()) { + // turns out we do not need checking in the end; can stop profiling + HeapLeakChecker::TurnItselfOffLocked(); + return; + } else if (RunningOnValgrind()) { + // There is no point in trying -- we'll just fail. + RAW_LOG(WARNING, "Can't run under Valgrind; will turn itself off"); + HeapLeakChecker::TurnItselfOffLocked(); + return; + } + } + + // Changing this to false can be useful when debugging heap-checker itself: + if (!FLAGS_heap_check_run_under_gdb && IsDebuggerAttached()) { + RAW_LOG(WARNING, "Someone is ptrace()ing us; will turn itself off"); + SpinLockHolder l(&heap_checker_lock); + HeapLeakChecker::TurnItselfOffLocked(); + return; + } + + { SpinLockHolder l(&heap_checker_lock); + if (!constructor_heap_profiling) { + RAW_LOG(FATAL, "Can not start so late. You have to enable heap checking " + "with HEAPCHECK=."); + } + } + + // Set all flags + RAW_DCHECK(FLAGS_heap_check_pointer_source_alignment > 0, ""); + if (FLAGS_heap_check == "minimal") { + // The least we can check. + FLAGS_heap_check_before_constructors = false; // from after main + // (ignore more) + FLAGS_heap_check_after_destructors = false; // to after cleanup + // (most data is live) + FLAGS_heap_check_ignore_thread_live = true; // ignore all live + FLAGS_heap_check_ignore_global_live = true; // ignore all live + } else if (FLAGS_heap_check == "normal") { + // Faster than 'minimal' and not much stricter. + FLAGS_heap_check_before_constructors = true; // from no profile (fast) + FLAGS_heap_check_after_destructors = false; // to after cleanup + // (most data is live) + FLAGS_heap_check_ignore_thread_live = true; // ignore all live + FLAGS_heap_check_ignore_global_live = true; // ignore all live + } else if (FLAGS_heap_check == "strict") { + // A bit stricter than 'normal': global destructors must fully clean up + // after themselves if they are present. + FLAGS_heap_check_before_constructors = true; // from no profile (fast) + FLAGS_heap_check_after_destructors = true; // to after destructors + // (less data live) + FLAGS_heap_check_ignore_thread_live = true; // ignore all live + FLAGS_heap_check_ignore_global_live = true; // ignore all live + } else if (FLAGS_heap_check == "draconian") { + // Drop not very portable and not very exact live heap flooding. + FLAGS_heap_check_before_constructors = true; // from no profile (fast) + FLAGS_heap_check_after_destructors = true; // to after destructors + // (need them) + FLAGS_heap_check_ignore_thread_live = false; // no live flood (stricter) + FLAGS_heap_check_ignore_global_live = false; // no live flood (stricter) + } else if (FLAGS_heap_check == "as-is") { + // do nothing: use other flags as is + } else if (FLAGS_heap_check == "local") { + // do nothing + } else { + RAW_LOG(FATAL, "Unsupported heap_check flag: %s", + FLAGS_heap_check.c_str()); + } + // FreeBSD doesn't seem to honor atexit execution order: + // http://code.google.com/p/gperftools/issues/detail?id=375 + // Since heap-checking before destructors depends on atexit running + // at the right time, on FreeBSD we always check after, even in the + // less strict modes. This just means FreeBSD is always a bit + // stricter in its checking than other OSes. +#ifdef __FreeBSD__ + FLAGS_heap_check_after_destructors = true; +#endif + + { SpinLockHolder l(&heap_checker_lock); + RAW_DCHECK(heap_checker_pid == getpid(), ""); + heap_checker_on = true; + RAW_DCHECK(heap_profile, ""); + HeapLeakChecker::ProcMapsResult pm_result = HeapLeakChecker::UseProcMapsLocked(HeapLeakChecker::DISABLE_LIBRARY_ALLOCS); + // might neeed to do this more than once + // if one later dynamically loads libraries that we want disabled + if (pm_result != HeapLeakChecker::PROC_MAPS_USED) { // can't function + HeapLeakChecker::TurnItselfOffLocked(); + return; + } + } + + // make a good place and name for heap profile leak dumps + string* profile_prefix = + new string(FLAGS_heap_check_dump_directory + "/" + invocation_name()); + + // Finalize prefix for dumping leak checking profiles. + const int32 our_pid = getpid(); // safest to call getpid() outside lock + { SpinLockHolder l(&heap_checker_lock); + // main_thread_pid might still be 0 if this function is being called before + // global constructors. In that case, our pid *is* the main pid. + if (main_thread_pid == 0) + main_thread_pid = our_pid; + } + char pid_buf[15]; + snprintf(pid_buf, sizeof(pid_buf), ".%d", main_thread_pid); + *profile_prefix += pid_buf; + { SpinLockHolder l(&heap_checker_lock); + RAW_DCHECK(profile_name_prefix == NULL, ""); + profile_name_prefix = profile_prefix; + } + + // Make sure new/delete hooks are installed properly + // and heap profiler is indeed able to keep track + // of the objects being allocated. + // We test this to make sure we are indeed checking for leaks. + char* test_str = new char[5]; + size_t size; + { SpinLockHolder l(&heap_checker_lock); + RAW_CHECK(heap_profile->FindAlloc(test_str, &size), + "our own new/delete not linked?"); + } + delete[] test_str; + { SpinLockHolder l(&heap_checker_lock); + // This check can fail when it should not if another thread allocates + // into this same spot right this moment, + // which is unlikely since this code runs in InitGoogle. + RAW_CHECK(!heap_profile->FindAlloc(test_str, &size), + "our own new/delete not linked?"); + } + // If we crash in the above code, it probably means that + // "nm | grep new" will show that tcmalloc's new/delete + // implementation did not get linked-in into this binary + // (i.e. nm will list __builtin_new and __builtin_vec_new as undefined). + // If this happens, it is a BUILD bug to be fixed. + + RAW_VLOG(heap_checker_info_level, + "WARNING: Perftools heap leak checker is active " + "-- Performance may suffer"); + + if (FLAGS_heap_check != "local") { + HeapLeakChecker* main_hc = new HeapLeakChecker(); + SpinLockHolder l(&heap_checker_lock); + RAW_DCHECK(main_heap_checker == NULL, + "Repeated creation of main_heap_checker"); + main_heap_checker = main_hc; + do_main_heap_check = true; + } + + { SpinLockHolder l(&heap_checker_lock); + RAW_CHECK(heap_checker_on && constructor_heap_profiling, + "Leak checking is expected to be fully turned on now"); + } + + // For binaries built in debug mode, this will set release queue of + // debugallocation.cc to 100M to make it less likely for real leaks to + // be hidden due to reuse of heap memory object addresses. + // Running a test with --malloc_reclaim_memory=0 would help find leaks even + // better, but the test might run out of memory as a result. + // The scenario is that a heap object at address X is allocated and freed, + // but some other data-structure still retains a pointer to X. + // Then the same heap memory is used for another object, which is leaked, + // but the leak is not noticed due to the pointer to the original object at X. + // TODO(csilvers): support this in some manner. +#if 0 + SetCommandLineOptionWithMode("max_free_queue_size", "104857600", // 100M + SET_FLAG_IF_DEFAULT); +#endif +} + +// We want this to run early as well, but not so early as +// ::BeforeConstructors (we want flag assignments to have already +// happened, for instance). Initializer-registration does the trick. +REGISTER_MODULE_INITIALIZER(init_start, HeapLeakChecker_InternalInitStart()); +REGISTER_MODULE_DESTRUCTOR(init_start, HeapLeakChecker_RunHeapCleanups()); + +// static +bool HeapLeakChecker::NoGlobalLeaksMaybeSymbolize( + ShouldSymbolize should_symbolize) { + // we never delete or change main_heap_checker once it's set: + HeapLeakChecker* main_hc = GlobalChecker(); + if (main_hc) { + RAW_VLOG(10, "Checking for whole-program memory leaks"); + return main_hc->DoNoLeaks(should_symbolize); + } + return true; +} + +// static +bool HeapLeakChecker::DoMainHeapCheck() { + if (FLAGS_heap_check_delay_seconds > 0) { + sleep(FLAGS_heap_check_delay_seconds); + } + { SpinLockHolder l(&heap_checker_lock); + if (!do_main_heap_check) return false; + RAW_DCHECK(heap_checker_pid == getpid(), ""); + do_main_heap_check = false; // will do it now; no need to do it more + } + + // The program is over, so it's safe to symbolize addresses (which + // requires a fork) because no serious work is expected to be done + // after this. Symbolizing is really useful -- knowing what + // function has a leak is better than knowing just an address -- + // and while we can only safely symbolize once in a program run, + // now is the time (after all, there's no "later" that would be better). + if (!NoGlobalLeaksMaybeSymbolize(SYMBOLIZE)) { + if (FLAGS_heap_check_identify_leaks) { + RAW_LOG(FATAL, "Whole-program memory leaks found."); + } + RAW_LOG(ERROR, "Exiting with error code (instead of crashing) " + "because of whole-program memory leaks"); + _exit(1); // we don't want to call atexit() routines! + } + return true; +} + +// static +HeapLeakChecker* HeapLeakChecker::GlobalChecker() { + SpinLockHolder l(&heap_checker_lock); + return main_heap_checker; +} + +// static +bool HeapLeakChecker::NoGlobalLeaks() { + // symbolizing requires a fork, which isn't safe to do in general. + return NoGlobalLeaksMaybeSymbolize(DO_NOT_SYMBOLIZE); +} + +// static +void HeapLeakChecker::CancelGlobalCheck() { + SpinLockHolder l(&heap_checker_lock); + if (do_main_heap_check) { + RAW_VLOG(heap_checker_info_level, + "Canceling the automatic at-exit whole-program memory leak check"); + do_main_heap_check = false; + } +} + +// static +void HeapLeakChecker::BeforeConstructorsLocked() { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + RAW_CHECK(!constructor_heap_profiling, + "BeforeConstructorsLocked called multiple times"); +#ifdef ADDRESS_SANITIZER + // AddressSanitizer's custom malloc conflicts with HeapChecker. + return; +#endif + // Set hooks early to crash if 'new' gets called before we make heap_profile, + // and make sure no other hooks existed: + RAW_CHECK(MallocHook::AddNewHook(&NewHook), ""); + RAW_CHECK(MallocHook::AddDeleteHook(&DeleteHook), ""); + constructor_heap_profiling = true; + MemoryRegionMap::Init(1); + // Set up MemoryRegionMap with (at least) one caller stack frame to record + // (important that it's done before HeapProfileTable creation below). + Allocator::Init(); + RAW_CHECK(heap_profile == NULL, ""); + heap_profile = new(Allocator::Allocate(sizeof(HeapProfileTable))) + HeapProfileTable(&Allocator::Allocate, &Allocator::Free); + RAW_VLOG(10, "Starting tracking the heap"); + heap_checker_on = true; +} + +// static +void HeapLeakChecker::TurnItselfOffLocked() { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + // Set FLAGS_heap_check to "", for users who test for it + if (!FLAGS_heap_check.empty()) // be a noop in the common case + FLAGS_heap_check.clear(); // because clear() could allocate memory + if (constructor_heap_profiling) { + RAW_CHECK(heap_checker_on, ""); + RAW_VLOG(heap_checker_info_level, "Turning perftools heap leak checking off"); + heap_checker_on = false; + // Unset our hooks checking they were set: + RAW_CHECK(MallocHook::RemoveNewHook(&NewHook), ""); + RAW_CHECK(MallocHook::RemoveDeleteHook(&DeleteHook), ""); + Allocator::DeleteAndNull(&heap_profile); + // free our optional global data: + Allocator::DeleteAndNullIfNot(&ignored_objects); + Allocator::DeleteAndNullIfNot(&disabled_ranges); + Allocator::DeleteAndNullIfNot(&global_region_caller_ranges); + Allocator::Shutdown(); + MemoryRegionMap::Shutdown(); + } + RAW_CHECK(!heap_checker_on, ""); +} + +extern bool heap_leak_checker_bcad_variable; // in heap-checker-bcad.cc + +static bool has_called_before_constructors = false; + +// TODO(maxim): inline this function with +// MallocHook_InitAtFirstAllocation_HeapLeakChecker, and also rename +// HeapLeakChecker::BeforeConstructorsLocked. +void HeapLeakChecker_BeforeConstructors() { + SpinLockHolder l(&heap_checker_lock); + // We can be called from several places: the first mmap/sbrk/alloc call + // or the first global c-tor from heap-checker-bcad.cc: + // Do not re-execute initialization: + if (has_called_before_constructors) return; + has_called_before_constructors = true; + + heap_checker_pid = getpid(); // set it always + heap_leak_checker_bcad_variable = true; + // just to reference it, so that heap-checker-bcad.o is linked in + + // This function can be called *very* early, before the normal + // global-constructor that sets FLAGS_verbose. Set it manually now, + // so the RAW_LOG messages here are controllable. + const char* verbose_str = GetenvBeforeMain("PERFTOOLS_VERBOSE"); + if (verbose_str && atoi(verbose_str)) { // different than the default of 0? + FLAGS_verbose = atoi(verbose_str); + } + + bool need_heap_check = true; + // The user indicates a desire for heap-checking via the HEAPCHECK + // environment variable. If it's not set, there's no way to do + // heap-checking. + if (!GetenvBeforeMain("HEAPCHECK")) { + need_heap_check = false; + } +#ifdef HAVE_GETEUID + if (need_heap_check && getuid() != geteuid()) { + // heap-checker writes out files. Thus, for security reasons, we don't + // recognize the env. var. to turn on heap-checking if we're setuid. + RAW_LOG(WARNING, ("HeapChecker: ignoring HEAPCHECK because " + "program seems to be setuid\n")); + need_heap_check = false; + } +#endif + if (need_heap_check) { + HeapLeakChecker::BeforeConstructorsLocked(); + } +} + +// This function overrides the weak function defined in malloc_hook.cc and +// called by one of the initial malloc hooks (malloc_hook.cc) when the very +// first memory allocation or an mmap/sbrk happens. This ensures that +// HeapLeakChecker is initialized and installs all its hooks early enough to +// track absolutely all memory allocations and all memory region acquisitions +// via mmap and sbrk. +extern "C" void MallocHook_InitAtFirstAllocation_HeapLeakChecker() { + HeapLeakChecker_BeforeConstructors(); +} + +// This function is executed after all global object destructors run. +void HeapLeakChecker_AfterDestructors() { + { SpinLockHolder l(&heap_checker_lock); + // can get here (via forks?) with other pids + if (heap_checker_pid != getpid()) return; + } + if (FLAGS_heap_check_after_destructors) { + if (HeapLeakChecker::DoMainHeapCheck()) { + const struct timespec sleep_time = { 0, 500000000 }; // 500 ms + nanosleep(&sleep_time, NULL); + // Need this hack to wait for other pthreads to exit. + // Otherwise tcmalloc find errors + // on a free() call from pthreads. + } + } + SpinLockHolder l(&heap_checker_lock); + RAW_CHECK(!do_main_heap_check, "should have done it"); +} + +//---------------------------------------------------------------------- +// HeapLeakChecker disabling helpers +//---------------------------------------------------------------------- + +// These functions are at the end of the file to prevent their inlining: + +// static +void HeapLeakChecker::DisableChecksFromToLocked(const void* start_address, + const void* end_address, + int max_depth) { + RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + RAW_DCHECK(start_address < end_address, ""); + if (disabled_ranges == NULL) { + disabled_ranges = new(Allocator::Allocate(sizeof(DisabledRangeMap))) + DisabledRangeMap; + } + RangeValue value; + value.start_address = AsInt(start_address); + value.max_depth = max_depth; + if (disabled_ranges->insert(make_pair(AsInt(end_address), value)).second) { + RAW_VLOG(10, "Disabling leak checking in stack traces " + "under frame addresses between %p..%p", + start_address, end_address); + } else { // check that this is just a verbatim repetition + RangeValue const& val = disabled_ranges->find(AsInt(end_address))->second; + if (val.max_depth != value.max_depth || + val.start_address != value.start_address) { + RAW_LOG(FATAL, "Two DisableChecksToHereFrom calls conflict: " + "(%p, %p, %d) vs. (%p, %p, %d)", + AsPtr(val.start_address), end_address, val.max_depth, + start_address, end_address, max_depth); + } + } +} + +// static +inline bool HeapLeakChecker::HaveOnHeapLocked(const void** ptr, + size_t* object_size) { + // Commented-out because HaveOnHeapLocked is very performance-critical: + // RAW_DCHECK(heap_checker_lock.IsHeld(), ""); + const uintptr_t addr = AsInt(*ptr); + if (heap_profile->FindInsideAlloc( + *ptr, max_heap_object_size, ptr, object_size)) { + RAW_VLOG(16, "Got pointer into %p at +%"PRIuPTR" offset", + *ptr, addr - AsInt(*ptr)); + return true; + } + return false; +} + +// static +const void* HeapLeakChecker::GetAllocCaller(void* ptr) { + // this is used only in the unittest, so the heavy checks are fine + HeapProfileTable::AllocInfo info; + { SpinLockHolder l(&heap_checker_lock); + RAW_CHECK(heap_profile->FindAllocDetails(ptr, &info), ""); + } + RAW_CHECK(info.stack_depth >= 1, ""); + return info.call_stack[0]; +} diff --git a/src/thirdparty/gperftools-2.0/src/heap-profile-table.cc b/src/thirdparty/gperftools-2.0/src/heap-profile-table.cc new file mode 100644 index 000000000..8b2ed337b --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/heap-profile-table.cc @@ -0,0 +1,696 @@ +// Copyright (c) 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// Maxim Lifantsev (refactoring) +// + +#include + +#ifdef HAVE_UNISTD_H +#include // for write() +#endif +#include // for open() +#ifdef HAVE_GLOB_H +#include +#ifndef GLOB_NOMATCH // true on some old cygwins +# define GLOB_NOMATCH 0 +#endif +#endif +#ifdef HAVE_INTTYPES_H +#include // for PRIxPTR +#endif +#ifdef HAVE_POLL_H +#include +#endif +#include +#include +#include +#include +#include // for sort(), equal(), and copy() + +#include "heap-profile-table.h" + +#include "base/logging.h" +#include "raw_printer.h" +#include "symbolize.h" +#include +#include +#include "memory_region_map.h" +#include "base/commandlineflags.h" +#include "base/logging.h" // for the RawFD I/O commands +#include "base/sysinfo.h" + +using std::sort; +using std::equal; +using std::copy; +using std::string; +using std::map; + +using tcmalloc::FillProcSelfMaps; // from sysinfo.h +using tcmalloc::DumpProcSelfMaps; // from sysinfo.h + +//---------------------------------------------------------------------- + +DEFINE_bool(cleanup_old_heap_profiles, + EnvToBool("HEAP_PROFILE_CLEANUP", true), + "At initialization time, delete old heap profiles."); + +DEFINE_int32(heap_check_max_leaks, + EnvToInt("HEAP_CHECK_MAX_LEAKS", 20), + "The maximum number of leak reports to print."); + +//---------------------------------------------------------------------- + +// header of the dumped heap profile +static const char kProfileHeader[] = "heap profile: "; +static const char kProcSelfMapsHeader[] = "\nMAPPED_LIBRARIES:\n"; + +//---------------------------------------------------------------------- + +const char HeapProfileTable::kFileExt[] = ".heap"; + +//---------------------------------------------------------------------- + +// Size for alloc_table_ and mmap_table_. +static const int kHashTableSize = 179999; +/*static*/ const int HeapProfileTable::kMaxStackDepth; + +//---------------------------------------------------------------------- + +// We strip out different number of stack frames in debug mode +// because less inlining happens in that case +#ifdef NDEBUG +static const int kStripFrames = 2; +#else +static const int kStripFrames = 3; +#endif + +// For sorting Stats or Buckets by in-use space +static bool ByAllocatedSpace(HeapProfileTable::Stats* a, + HeapProfileTable::Stats* b) { + // Return true iff "a" has more allocated space than "b" + return (a->alloc_size - a->free_size) > (b->alloc_size - b->free_size); +} + +//---------------------------------------------------------------------- + +HeapProfileTable::HeapProfileTable(Allocator alloc, DeAllocator dealloc) + : alloc_(alloc), dealloc_(dealloc) { + // Initialize the overall profile stats. + memset(&total_, 0, sizeof(total_)); + + // Make the malloc table. + const int alloc_table_bytes = kHashTableSize * sizeof(*alloc_table_); + alloc_table_ = reinterpret_cast(alloc_(alloc_table_bytes)); + memset(alloc_table_, 0, alloc_table_bytes); + num_alloc_buckets_ = 0; + + // Initialize the mmap table. + mmap_table_ = NULL; + num_available_mmap_buckets_ = 0; + + // Make malloc and mmap allocation maps. + alloc_address_map_ = + new(alloc_(sizeof(AllocationMap))) AllocationMap(alloc_, dealloc_); + mmap_address_map_ = NULL; +} + +HeapProfileTable::~HeapProfileTable() { + DeallocateBucketTable(alloc_table_); + alloc_table_ = NULL; + DeallocateBucketTable(mmap_table_); + mmap_table_ = NULL; + DeallocateAllocationMap(alloc_address_map_); + alloc_address_map_ = NULL; + DeallocateAllocationMap(mmap_address_map_); + mmap_address_map_ = NULL; +} + +void HeapProfileTable::DeallocateAllocationMap(AllocationMap* allocation) { + if (allocation != NULL) { + alloc_address_map_->~AllocationMap(); + dealloc_(allocation); + } +} + +void HeapProfileTable::DeallocateBucketTable(Bucket** table) { + if (table != NULL) { + for (int b = 0; b < kHashTableSize; b++) { + for (Bucket* x = table[b]; x != 0; /**/) { + Bucket* b = x; + x = x->next; + dealloc_(b->stack); + dealloc_(b); + } + } + dealloc_(table); + } +} + +HeapProfileTable::Bucket* HeapProfileTable::GetBucket( + int depth, const void* const key[], Bucket** table, + int* bucket_count) { + // Make hash-value + uintptr_t h = 0; + for (int i = 0; i < depth; i++) { + h += reinterpret_cast(key[i]); + h += h << 10; + h ^= h >> 6; + } + h += h << 3; + h ^= h >> 11; + + // Lookup stack trace in table + unsigned int buck = ((unsigned int) h) % kHashTableSize; + for (Bucket* b = table[buck]; b != 0; b = b->next) { + if ((b->hash == h) && + (b->depth == depth) && + equal(key, key + depth, b->stack)) { + return b; + } + } + + // Create new bucket + const size_t key_size = sizeof(key[0]) * depth; + const void** kcopy = reinterpret_cast(alloc_(key_size)); + copy(key, key + depth, kcopy); + Bucket* b = reinterpret_cast(alloc_(sizeof(Bucket))); + memset(b, 0, sizeof(*b)); + b->hash = h; + b->depth = depth; + b->stack = kcopy; + b->next = table[buck]; + table[buck] = b; + if (bucket_count != NULL) { + ++(*bucket_count); + } + return b; +} + +int HeapProfileTable::GetCallerStackTrace( + int skip_count, void* stack[kMaxStackDepth]) { + return MallocHook::GetCallerStackTrace( + stack, kMaxStackDepth, kStripFrames + skip_count + 1); +} + +void HeapProfileTable::RecordAlloc( + const void* ptr, size_t bytes, int stack_depth, + const void* const call_stack[]) { + Bucket* b = GetBucket(stack_depth, call_stack, alloc_table_, + &num_alloc_buckets_); + b->allocs++; + b->alloc_size += bytes; + total_.allocs++; + total_.alloc_size += bytes; + + AllocValue v; + v.set_bucket(b); // also did set_live(false); set_ignore(false) + v.bytes = bytes; + alloc_address_map_->Insert(ptr, v); +} + +void HeapProfileTable::RecordFree(const void* ptr) { + AllocValue v; + if (alloc_address_map_->FindAndRemove(ptr, &v)) { + Bucket* b = v.bucket(); + b->frees++; + b->free_size += v.bytes; + total_.frees++; + total_.free_size += v.bytes; + } +} + +bool HeapProfileTable::FindAlloc(const void* ptr, size_t* object_size) const { + const AllocValue* alloc_value = alloc_address_map_->Find(ptr); + if (alloc_value != NULL) *object_size = alloc_value->bytes; + return alloc_value != NULL; +} + +bool HeapProfileTable::FindAllocDetails(const void* ptr, + AllocInfo* info) const { + const AllocValue* alloc_value = alloc_address_map_->Find(ptr); + if (alloc_value != NULL) { + info->object_size = alloc_value->bytes; + info->call_stack = alloc_value->bucket()->stack; + info->stack_depth = alloc_value->bucket()->depth; + } + return alloc_value != NULL; +} + +bool HeapProfileTable::FindInsideAlloc(const void* ptr, + size_t max_size, + const void** object_ptr, + size_t* object_size) const { + const AllocValue* alloc_value = + alloc_address_map_->FindInside(&AllocValueSize, max_size, ptr, object_ptr); + if (alloc_value != NULL) *object_size = alloc_value->bytes; + return alloc_value != NULL; +} + +bool HeapProfileTable::MarkAsLive(const void* ptr) { + AllocValue* alloc = alloc_address_map_->FindMutable(ptr); + if (alloc && !alloc->live()) { + alloc->set_live(true); + return true; + } + return false; +} + +void HeapProfileTable::MarkAsIgnored(const void* ptr) { + AllocValue* alloc = alloc_address_map_->FindMutable(ptr); + if (alloc) { + alloc->set_ignore(true); + } +} + +// We'd be happier using snprintfer, but we don't to reduce dependencies. +int HeapProfileTable::UnparseBucket(const Bucket& b, + char* buf, int buflen, int bufsize, + const char* extra, + Stats* profile_stats) { + if (profile_stats != NULL) { + profile_stats->allocs += b.allocs; + profile_stats->alloc_size += b.alloc_size; + profile_stats->frees += b.frees; + profile_stats->free_size += b.free_size; + } + int printed = + snprintf(buf + buflen, bufsize - buflen, "%6d: %8"PRId64" [%6d: %8"PRId64"] @%s", + b.allocs - b.frees, + b.alloc_size - b.free_size, + b.allocs, + b.alloc_size, + extra); + // If it looks like the snprintf failed, ignore the fact we printed anything + if (printed < 0 || printed >= bufsize - buflen) return buflen; + buflen += printed; + for (int d = 0; d < b.depth; d++) { + printed = snprintf(buf + buflen, bufsize - buflen, " 0x%08" PRIxPTR, + reinterpret_cast(b.stack[d])); + if (printed < 0 || printed >= bufsize - buflen) return buflen; + buflen += printed; + } + printed = snprintf(buf + buflen, bufsize - buflen, "\n"); + if (printed < 0 || printed >= bufsize - buflen) return buflen; + buflen += printed; + return buflen; +} + +HeapProfileTable::Bucket** +HeapProfileTable::MakeSortedBucketList() const { + Bucket** list = reinterpret_cast(alloc_(sizeof(Bucket) * + (num_alloc_buckets_ + num_available_mmap_buckets_))); + + RAW_DCHECK(mmap_table_ != NULL || num_available_mmap_buckets_ == 0, ""); + + int n = 0; + + for (int b = 0; b < kHashTableSize; b++) { + for (Bucket* x = alloc_table_[b]; x != 0; x = x->next) { + list[n++] = x; + } + } + RAW_DCHECK(n == num_alloc_buckets_, ""); + + if (mmap_table_ != NULL) { + for (int b = 0; b < kHashTableSize; b++) { + for (Bucket* x = mmap_table_[b]; x != 0; x = x->next) { + list[n++] = x; + } + } + } + RAW_DCHECK(n == num_alloc_buckets_ + num_available_mmap_buckets_, ""); + + sort(list, list + num_alloc_buckets_ + num_available_mmap_buckets_, + ByAllocatedSpace); + + return list; +} + +void HeapProfileTable::RefreshMMapData() { + // Make the table + static const int mmap_table_bytes = kHashTableSize * sizeof(*mmap_table_); + if (mmap_table_ == NULL) { + mmap_table_ = reinterpret_cast(alloc_(mmap_table_bytes)); + memset(mmap_table_, 0, mmap_table_bytes); + } + num_available_mmap_buckets_ = 0; + + ClearMMapData(); + mmap_address_map_ = + new(alloc_(sizeof(AllocationMap))) AllocationMap(alloc_, dealloc_); + + MemoryRegionMap::LockHolder l; + for (MemoryRegionMap::RegionIterator r = + MemoryRegionMap::BeginRegionLocked(); + r != MemoryRegionMap::EndRegionLocked(); ++r) { + Bucket* b = + GetBucket(r->call_stack_depth, r->call_stack, mmap_table_, NULL); + if (b->alloc_size == 0) { + num_available_mmap_buckets_ += 1; + } + b->allocs += 1; + b->alloc_size += r->end_addr - r->start_addr; + + AllocValue v; + v.set_bucket(b); + v.bytes = r->end_addr - r->start_addr; + mmap_address_map_->Insert(reinterpret_cast(r->start_addr), v); + } +} + +void HeapProfileTable::ClearMMapData() { + if (mmap_address_map_ != NULL) { + mmap_address_map_->Iterate(ZeroBucketCountsIterator, this); + mmap_address_map_->~AllocationMap(); + dealloc_(mmap_address_map_); + mmap_address_map_ = NULL; + } +} + +void HeapProfileTable::IterateOrderedAllocContexts( + AllocContextIterator callback) const { + Bucket** list = MakeSortedBucketList(); + AllocContextInfo info; + for (int i = 0; i < num_alloc_buckets_; ++i) { + *static_cast(&info) = *static_cast(list[i]); + info.stack_depth = list[i]->depth; + info.call_stack = list[i]->stack; + callback(info); + } + dealloc_(list); +} + +int HeapProfileTable::FillOrderedProfile(char buf[], int size) const { + Bucket** list = MakeSortedBucketList(); + + // Our file format is "bucket, bucket, ..., bucket, proc_self_maps_info". + // In the cases buf is too small, we'd rather leave out the last + // buckets than leave out the /proc/self/maps info. To ensure that, + // we actually print the /proc/self/maps info first, then move it to + // the end of the buffer, then write the bucket info into whatever + // is remaining, and then move the maps info one last time to close + // any gaps. Whew! + int map_length = snprintf(buf, size, "%s", kProcSelfMapsHeader); + if (map_length < 0 || map_length >= size) return 0; + bool dummy; // "wrote_all" -- did /proc/self/maps fit in its entirety? + map_length += FillProcSelfMaps(buf + map_length, size - map_length, &dummy); + RAW_DCHECK(map_length <= size, ""); + char* const map_start = buf + size - map_length; // move to end + memmove(map_start, buf, map_length); + size -= map_length; + + Stats stats; + memset(&stats, 0, sizeof(stats)); + int bucket_length = snprintf(buf, size, "%s", kProfileHeader); + if (bucket_length < 0 || bucket_length >= size) return 0; + Bucket total_with_mmap(total_); + if (mmap_table_ != NULL) { + total_with_mmap.alloc_size += MemoryRegionMap::MapSize(); + total_with_mmap.free_size += MemoryRegionMap::UnmapSize(); + } + bucket_length = UnparseBucket(total_with_mmap, buf, bucket_length, size, + " heapprofile", &stats); + for (int i = 0; i < num_alloc_buckets_; i++) { + bucket_length = UnparseBucket(*list[i], buf, bucket_length, size, "", + &stats); + } + RAW_DCHECK(bucket_length < size, ""); + + dealloc_(list); + + RAW_DCHECK(buf + bucket_length <= map_start, ""); + memmove(buf + bucket_length, map_start, map_length); // close the gap + + return bucket_length + map_length; +} + +inline +void HeapProfileTable::DumpNonLiveIterator(const void* ptr, AllocValue* v, + const DumpArgs& args) { + if (v->live()) { + v->set_live(false); + return; + } + if (v->ignore()) { + return; + } + Bucket b; + memset(&b, 0, sizeof(b)); + b.allocs = 1; + b.alloc_size = v->bytes; + b.depth = v->bucket()->depth; + b.stack = v->bucket()->stack; + char buf[1024]; + int len = UnparseBucket(b, buf, 0, sizeof(buf), "", args.profile_stats); + RawWrite(args.fd, buf, len); +} + +inline void HeapProfileTable::ZeroBucketCountsIterator( + const void* ptr, AllocValue* v, HeapProfileTable* heap_profile) { + Bucket* b = v->bucket(); + if (b != NULL) { + b->allocs = 0; + b->alloc_size = 0; + b->free_size = 0; + b->frees = 0; + } +} + +// Callback from NonLiveSnapshot; adds entry to arg->dest +// if not the entry is not live and is not present in arg->base. +void HeapProfileTable::AddIfNonLive(const void* ptr, AllocValue* v, + AddNonLiveArgs* arg) { + if (v->live()) { + v->set_live(false); + } else { + if (arg->base != NULL && arg->base->map_.Find(ptr) != NULL) { + // Present in arg->base, so do not save + } else { + arg->dest->Add(ptr, *v); + } + } +} + +bool HeapProfileTable::WriteProfile(const char* file_name, + const Bucket& total, + AllocationMap* allocations) { + RAW_VLOG(1, "Dumping non-live heap profile to %s", file_name); + RawFD fd = RawOpenForWriting(file_name); + if (fd != kIllegalRawFD) { + RawWrite(fd, kProfileHeader, strlen(kProfileHeader)); + char buf[512]; + int len = UnparseBucket(total, buf, 0, sizeof(buf), " heapprofile", + NULL); + RawWrite(fd, buf, len); + const DumpArgs args(fd, NULL); + allocations->Iterate(DumpNonLiveIterator, args); + RawWrite(fd, kProcSelfMapsHeader, strlen(kProcSelfMapsHeader)); + DumpProcSelfMaps(fd); + RawClose(fd); + return true; + } else { + RAW_LOG(ERROR, "Failed dumping filtered heap profile to %s", file_name); + return false; + } +} + +void HeapProfileTable::CleanupOldProfiles(const char* prefix) { + if (!FLAGS_cleanup_old_heap_profiles) + return; + string pattern = string(prefix) + ".*" + kFileExt; +#if defined(HAVE_GLOB_H) + glob_t g; + const int r = glob(pattern.c_str(), GLOB_ERR, NULL, &g); + if (r == 0 || r == GLOB_NOMATCH) { + const int prefix_length = strlen(prefix); + for (int i = 0; i < g.gl_pathc; i++) { + const char* fname = g.gl_pathv[i]; + if ((strlen(fname) >= prefix_length) && + (memcmp(fname, prefix, prefix_length) == 0)) { + RAW_VLOG(1, "Removing old heap profile %s", fname); + unlink(fname); + } + } + } + globfree(&g); +#else /* HAVE_GLOB_H */ + RAW_LOG(WARNING, "Unable to remove old heap profiles (can't run glob())"); +#endif +} + +HeapProfileTable::Snapshot* HeapProfileTable::TakeSnapshot() { + Snapshot* s = new (alloc_(sizeof(Snapshot))) Snapshot(alloc_, dealloc_); + alloc_address_map_->Iterate(AddToSnapshot, s); + return s; +} + +void HeapProfileTable::ReleaseSnapshot(Snapshot* s) { + s->~Snapshot(); + dealloc_(s); +} + +// Callback from TakeSnapshot; adds a single entry to snapshot +void HeapProfileTable::AddToSnapshot(const void* ptr, AllocValue* v, + Snapshot* snapshot) { + snapshot->Add(ptr, *v); +} + +HeapProfileTable::Snapshot* HeapProfileTable::NonLiveSnapshot( + Snapshot* base) { + RAW_VLOG(2, "NonLiveSnapshot input: %d %d\n", + int(total_.allocs - total_.frees), + int(total_.alloc_size - total_.free_size)); + + Snapshot* s = new (alloc_(sizeof(Snapshot))) Snapshot(alloc_, dealloc_); + AddNonLiveArgs args; + args.dest = s; + args.base = base; + alloc_address_map_->Iterate(AddIfNonLive, &args); + RAW_VLOG(2, "NonLiveSnapshot output: %d %d\n", + int(s->total_.allocs - s->total_.frees), + int(s->total_.alloc_size - s->total_.free_size)); + return s; +} + +// Information kept per unique bucket seen +struct HeapProfileTable::Snapshot::Entry { + int count; + int bytes; + Bucket* bucket; + Entry() : count(0), bytes(0) { } + + // Order by decreasing bytes + bool operator<(const Entry& x) const { + return this->bytes > x.bytes; + } +}; + +// State used to generate leak report. We keep a mapping from Bucket pointer +// the collected stats for that bucket. +struct HeapProfileTable::Snapshot::ReportState { + map buckets_; +}; + +// Callback from ReportLeaks; updates ReportState. +void HeapProfileTable::Snapshot::ReportCallback(const void* ptr, + AllocValue* v, + ReportState* state) { + Entry* e = &state->buckets_[v->bucket()]; // Creates empty Entry first time + e->bucket = v->bucket(); + e->count++; + e->bytes += v->bytes; +} + +void HeapProfileTable::Snapshot::ReportLeaks(const char* checker_name, + const char* filename, + bool should_symbolize) { + // This is only used by the heap leak checker, but is intimately + // tied to the allocation map that belongs in this module and is + // therefore placed here. + RAW_LOG(ERROR, "Leak check %s detected leaks of %"PRIuS" bytes " + "in %"PRIuS" objects", + checker_name, + size_t(total_.alloc_size), + size_t(total_.allocs)); + + // Group objects by Bucket + ReportState state; + map_.Iterate(&ReportCallback, &state); + + // Sort buckets by decreasing leaked size + const int n = state.buckets_.size(); + Entry* entries = new Entry[n]; + int dst = 0; + for (map::const_iterator iter = state.buckets_.begin(); + iter != state.buckets_.end(); + ++iter) { + entries[dst++] = iter->second; + } + sort(entries, entries + n); + + // Report a bounded number of leaks to keep the leak report from + // growing too long. + const int to_report = + (FLAGS_heap_check_max_leaks > 0 && + n > FLAGS_heap_check_max_leaks) ? FLAGS_heap_check_max_leaks : n; + RAW_LOG(ERROR, "The %d largest leaks:", to_report); + + // Print + SymbolTable symbolization_table; + for (int i = 0; i < to_report; i++) { + const Entry& e = entries[i]; + for (int j = 0; j < e.bucket->depth; j++) { + symbolization_table.Add(e.bucket->stack[j]); + } + } + static const int kBufSize = 2<<10; + char buffer[kBufSize]; + if (should_symbolize) + symbolization_table.Symbolize(); + for (int i = 0; i < to_report; i++) { + const Entry& e = entries[i]; + base::RawPrinter printer(buffer, kBufSize); + printer.Printf("Leak of %d bytes in %d objects allocated from:\n", + e.bytes, e.count); + for (int j = 0; j < e.bucket->depth; j++) { + const void* pc = e.bucket->stack[j]; + printer.Printf("\t@ %"PRIxPTR" %s\n", + reinterpret_cast(pc), symbolization_table.GetSymbol(pc)); + } + RAW_LOG(ERROR, "%s", buffer); + } + + if (to_report < n) { + RAW_LOG(ERROR, "Skipping leaks numbered %d..%d", + to_report, n-1); + } + delete[] entries; + + // TODO: Dump the sorted Entry list instead of dumping raw data? + // (should be much shorter) + if (!HeapProfileTable::WriteProfile(filename, total_, &map_)) { + RAW_LOG(ERROR, "Could not write pprof profile to %s", filename); + } +} + +void HeapProfileTable::Snapshot::ReportObject(const void* ptr, + AllocValue* v, + char* unused) { + // Perhaps also log the allocation stack trace (unsymbolized) + // on this line in case somebody finds it useful. + RAW_LOG(ERROR, "leaked %"PRIuS" byte object %p", v->bytes, ptr); +} + +void HeapProfileTable::Snapshot::ReportIndividualObjects() { + char unused; + map_.Iterate(ReportObject, &unused); +} diff --git a/src/thirdparty/gperftools-2.0/src/heap-profile-table.h b/src/thirdparty/gperftools-2.0/src/heap-profile-table.h new file mode 100644 index 000000000..abd3184e6 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/heap-profile-table.h @@ -0,0 +1,422 @@ +// Copyright (c) 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// Maxim Lifantsev (refactoring) +// + +#ifndef BASE_HEAP_PROFILE_TABLE_H_ +#define BASE_HEAP_PROFILE_TABLE_H_ + +#include "addressmap-inl.h" +#include "base/basictypes.h" +#include "base/logging.h" // for RawFD + +// Table to maintain a heap profile data inside, +// i.e. the set of currently active heap memory allocations. +// thread-unsafe and non-reentrant code: +// each instance object must be used by one thread +// at a time w/o self-recursion. +// +// TODO(maxim): add a unittest for this class. +class HeapProfileTable { + public: + + // Extension to be used for heap pforile files. + static const char kFileExt[]; + + // Longest stack trace we record. + static const int kMaxStackDepth = 32; + + // data types ---------------------------- + + // Profile stats. + struct Stats { + int32 allocs; // Number of allocation calls + int32 frees; // Number of free calls + int64 alloc_size; // Total size of all allocated objects so far + int64 free_size; // Total size of all freed objects so far + + // semantic equality + bool Equivalent(const Stats& x) const { + return allocs - frees == x.allocs - x.frees && + alloc_size - free_size == x.alloc_size - x.free_size; + } + }; + + // Info we can return about an allocation. + struct AllocInfo { + size_t object_size; // size of the allocation + const void* const* call_stack; // call stack that made the allocation call + int stack_depth; // depth of call_stack + bool live; + bool ignored; + }; + + // Info we return about an allocation context. + // An allocation context is a unique caller stack trace + // of an allocation operation. + struct AllocContextInfo : public Stats { + int stack_depth; // Depth of stack trace + const void* const* call_stack; // Stack trace + }; + + // Memory (de)allocator interface we'll use. + typedef void* (*Allocator)(size_t size); + typedef void (*DeAllocator)(void* ptr); + + // interface --------------------------- + + HeapProfileTable(Allocator alloc, DeAllocator dealloc); + ~HeapProfileTable(); + + // Collect the stack trace for the function that asked to do the + // allocation for passing to RecordAlloc() below. + // + // The stack trace is stored in 'stack'. The stack depth is returned. + // + // 'skip_count' gives the number of stack frames between this call + // and the memory allocation function. + static int GetCallerStackTrace(int skip_count, void* stack[kMaxStackDepth]); + + // Record an allocation at 'ptr' of 'bytes' bytes. 'stack_depth' + // and 'call_stack' identifying the function that requested the + // allocation. They can be generated using GetCallerStackTrace() above. + void RecordAlloc(const void* ptr, size_t bytes, + int stack_depth, const void* const call_stack[]); + + // Record the deallocation of memory at 'ptr'. + void RecordFree(const void* ptr); + + // Return true iff we have recorded an allocation at 'ptr'. + // If yes, fill *object_size with the allocation byte size. + bool FindAlloc(const void* ptr, size_t* object_size) const; + // Same as FindAlloc, but fills all of *info. + bool FindAllocDetails(const void* ptr, AllocInfo* info) const; + + // Return true iff "ptr" points into a recorded allocation + // If yes, fill *object_ptr with the actual allocation address + // and *object_size with the allocation byte size. + // max_size specifies largest currently possible allocation size. + bool FindInsideAlloc(const void* ptr, size_t max_size, + const void** object_ptr, size_t* object_size) const; + + // If "ptr" points to a recorded allocation and it's not marked as live + // mark it as live and return true. Else return false. + // All allocations start as non-live. + bool MarkAsLive(const void* ptr); + + // If "ptr" points to a recorded allocation, mark it as "ignored". + // Ignored objects are treated like other objects, except that they + // are skipped in heap checking reports. + void MarkAsIgnored(const void* ptr); + + // Return current total (de)allocation statistics. It doesn't contain + // mmap'ed regions. + const Stats& total() const { return total_; } + + // Allocation data iteration callback: gets passed object pointer and + // fully-filled AllocInfo. + typedef void (*AllocIterator)(const void* ptr, const AllocInfo& info); + + // Iterate over the allocation profile data calling "callback" + // for every allocation. + void IterateAllocs(AllocIterator callback) const { + alloc_address_map_->Iterate(MapArgsAllocIterator, callback); + } + + // Allocation context profile data iteration callback + typedef void (*AllocContextIterator)(const AllocContextInfo& info); + + // Iterate over the allocation context profile data calling "callback" + // for every allocation context. Allocation contexts are ordered by the + // size of allocated space. + void IterateOrderedAllocContexts(AllocContextIterator callback) const; + + // Fill profile data into buffer 'buf' of size 'size' + // and return the actual size occupied by the dump in 'buf'. + // The profile buckets are dumped in the decreasing order + // of currently allocated bytes. + // We do not provision for 0-terminating 'buf'. + int FillOrderedProfile(char buf[], int size) const; + + // Cleanup any old profile files matching prefix + ".*" + kFileExt. + static void CleanupOldProfiles(const char* prefix); + + // Return a snapshot of the current contents of *this. + // Caller must call ReleaseSnapshot() on result when no longer needed. + // The result is only valid while this exists and until + // the snapshot is discarded by calling ReleaseSnapshot(). + class Snapshot; + Snapshot* TakeSnapshot(); + + // Release a previously taken snapshot. snapshot must not + // be used after this call. + void ReleaseSnapshot(Snapshot* snapshot); + + // Return a snapshot of every non-live, non-ignored object in *this. + // If "base" is non-NULL, skip any objects present in "base". + // As a side-effect, clears the "live" bit on every live object in *this. + // Caller must call ReleaseSnapshot() on result when no longer needed. + Snapshot* NonLiveSnapshot(Snapshot* base); + + // Refresh the internal mmap information from MemoryRegionMap. Results of + // FillOrderedProfile and IterateOrderedAllocContexts will contain mmap'ed + // memory regions as at calling RefreshMMapData. + void RefreshMMapData(); + + // Clear the internal mmap information. Results of FillOrderedProfile and + // IterateOrderedAllocContexts won't contain mmap'ed memory regions after + // calling ClearMMapData. + void ClearMMapData(); + + private: + + // data types ---------------------------- + + // Hash table bucket to hold (de)allocation stats + // for a given allocation call stack trace. + struct Bucket : public Stats { + uintptr_t hash; // Hash value of the stack trace + int depth; // Depth of stack trace + const void** stack; // Stack trace + Bucket* next; // Next entry in hash-table + }; + + // Info stored in the address map + struct AllocValue { + // Access to the stack-trace bucket + Bucket* bucket() const { + return reinterpret_cast(bucket_rep & ~uintptr_t(kMask)); + } + // This also does set_live(false). + void set_bucket(Bucket* b) { bucket_rep = reinterpret_cast(b); } + size_t bytes; // Number of bytes in this allocation + + // Access to the allocation liveness flag (for leak checking) + bool live() const { return bucket_rep & kLive; } + void set_live(bool l) { + bucket_rep = (bucket_rep & ~uintptr_t(kLive)) | (l ? kLive : 0); + } + + // Should this allocation be ignored if it looks like a leak? + bool ignore() const { return bucket_rep & kIgnore; } + void set_ignore(bool r) { + bucket_rep = (bucket_rep & ~uintptr_t(kIgnore)) | (r ? kIgnore : 0); + } + + private: + // We store a few bits in the bottom bits of bucket_rep. + // (Alignment is at least four, so we have at least two bits.) + static const int kLive = 1; + static const int kIgnore = 2; + static const int kMask = kLive | kIgnore; + + uintptr_t bucket_rep; + }; + + // helper for FindInsideAlloc + static size_t AllocValueSize(const AllocValue& v) { return v.bytes; } + + typedef AddressMap AllocationMap; + + // Arguments that need to be passed DumpNonLiveIterator callback below. + struct DumpArgs { + RawFD fd; // file to write to + Stats* profile_stats; // stats to update (may be NULL) + + DumpArgs(RawFD a, Stats* d) + : fd(a), profile_stats(d) { } + }; + + // helpers ---------------------------- + + // Unparse bucket b and print its portion of profile dump into buf. + // We return the amount of space in buf that we use. We start printing + // at buf + buflen, and promise not to go beyond buf + bufsize. + // We do not provision for 0-terminating 'buf'. + // + // If profile_stats is non-NULL, we update *profile_stats by + // counting bucket b. + // + // "extra" is appended to the unparsed bucket. Typically it is empty, + // but may be set to something like " heapprofile" for the total + // bucket to indicate the type of the profile. + static int UnparseBucket(const Bucket& b, + char* buf, int buflen, int bufsize, + const char* extra, + Stats* profile_stats); + + // Deallocate a given allocation map. + void DeallocateAllocationMap(AllocationMap* allocation); + + // Deallocate a given bucket table. + void DeallocateBucketTable(Bucket** table); + + // Get the bucket for the caller stack trace 'key' of depth 'depth' from a + // bucket hash map 'table' creating the bucket if needed. '*bucket_count' + // is incremented both when 'bucket_count' is not NULL and when a new + // bucket object is created. + Bucket* GetBucket(int depth, const void* const key[], Bucket** table, + int* bucket_count); + + // Helper for IterateAllocs to do callback signature conversion + // from AllocationMap::Iterate to AllocIterator. + static void MapArgsAllocIterator(const void* ptr, AllocValue* v, + AllocIterator callback) { + AllocInfo info; + info.object_size = v->bytes; + info.call_stack = v->bucket()->stack; + info.stack_depth = v->bucket()->depth; + info.live = v->live(); + info.ignored = v->ignore(); + callback(ptr, info); + } + + // Helper for DumpNonLiveProfile to do object-granularity + // heap profile dumping. It gets passed to AllocationMap::Iterate. + inline static void DumpNonLiveIterator(const void* ptr, AllocValue* v, + const DumpArgs& args); + + // Helper for filling size variables in buckets by zero. + inline static void ZeroBucketCountsIterator( + const void* ptr, AllocValue* v, HeapProfileTable* heap_profile); + + // Helper for IterateOrderedAllocContexts and FillOrderedProfile. + // Creates a sorted list of Buckets whose length is num_alloc_buckets_ + + // num_avaliable_mmap_buckets_. + // The caller is responsible for deallocating the returned list. + Bucket** MakeSortedBucketList() const; + + // Helper for TakeSnapshot. Saves object to snapshot. + static void AddToSnapshot(const void* ptr, AllocValue* v, Snapshot* s); + + // Arguments passed to AddIfNonLive + struct AddNonLiveArgs { + Snapshot* dest; + Snapshot* base; + }; + + // Helper for NonLiveSnapshot. Adds the object to the destination + // snapshot if it is non-live. + static void AddIfNonLive(const void* ptr, AllocValue* v, + AddNonLiveArgs* arg); + + // Write contents of "*allocations" as a heap profile to + // "file_name". "total" must contain the total of all entries in + // "*allocations". + static bool WriteProfile(const char* file_name, + const Bucket& total, + AllocationMap* allocations); + + // data ---------------------------- + + // Memory (de)allocator that we use. + Allocator alloc_; + DeAllocator dealloc_; + + // Overall profile stats; we use only the Stats part, + // but make it a Bucket to pass to UnparseBucket. + // It doesn't contain mmap'ed regions. + Bucket total_; + + // Bucket hash table for malloc. + // We hand-craft one instead of using one of the pre-written + // ones because we do not want to use malloc when operating on the table. + // It is only few lines of code, so no big deal. + Bucket** alloc_table_; + int num_alloc_buckets_; + + // Bucket hash table for mmap. + // This table is filled with the information from MemoryRegionMap by calling + // RefreshMMapData. + Bucket** mmap_table_; + int num_available_mmap_buckets_; + + // Map of all currently allocated objects and mapped regions we know about. + AllocationMap* alloc_address_map_; + AllocationMap* mmap_address_map_; + + DISALLOW_COPY_AND_ASSIGN(HeapProfileTable); +}; + +class HeapProfileTable::Snapshot { + public: + const Stats& total() const { return total_; } + + // Report anything in this snapshot as a leak. + // May use new/delete for temporary storage. + // If should_symbolize is true, will fork (which is not threadsafe) + // to turn addresses into symbol names. Set to false for maximum safety. + // Also writes a heap profile to "filename" that contains + // all of the objects in this snapshot. + void ReportLeaks(const char* checker_name, const char* filename, + bool should_symbolize); + + // Report the addresses of all leaked objects. + // May use new/delete for temporary storage. + void ReportIndividualObjects(); + + bool Empty() const { + return (total_.allocs == 0) && (total_.alloc_size == 0); + } + + private: + friend class HeapProfileTable; + + // Total count/size are stored in a Bucket so we can reuse UnparseBucket + Bucket total_; + + // We share the Buckets managed by the parent table, but have our + // own object->bucket map. + AllocationMap map_; + + Snapshot(Allocator alloc, DeAllocator dealloc) : map_(alloc, dealloc) { + memset(&total_, 0, sizeof(total_)); + } + + // Callback used to populate a Snapshot object with entries found + // in another allocation map. + inline void Add(const void* ptr, const AllocValue& v) { + map_.Insert(ptr, v); + total_.allocs++; + total_.alloc_size += v.bytes; + } + + // Helpers for sorting and generating leak reports + struct Entry; + struct ReportState; + static void ReportCallback(const void* ptr, AllocValue* v, ReportState*); + static void ReportObject(const void* ptr, AllocValue* v, char*); + + DISALLOW_COPY_AND_ASSIGN(Snapshot); +}; + +#endif // BASE_HEAP_PROFILE_TABLE_H_ diff --git a/src/thirdparty/gperftools-2.0/src/heap-profiler.cc b/src/thirdparty/gperftools-2.0/src/heap-profiler.cc new file mode 100644 index 000000000..09a3911a4 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/heap-profiler.cc @@ -0,0 +1,555 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// TODO: Log large allocations + +#include +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_INTTYPES_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include // for open() +#endif +#ifdef HAVE_MMAP +#include +#endif +#include +#include +#include + +#include +#include + +#include + +#include "base/logging.h" +#include "base/basictypes.h" // for PRId64, among other things +#include "base/googleinit.h" +#include "base/commandlineflags.h" +#include "malloc_hook-inl.h" +#include "tcmalloc_guard.h" +#include +#include +#include "base/spinlock.h" +#include "base/low_level_alloc.h" +#include "base/sysinfo.h" // for GetUniquePathFromEnv() +#include "heap-profile-table.h" +#include "memory_region_map.h" + + +#ifndef PATH_MAX +#ifdef MAXPATHLEN +#define PATH_MAX MAXPATHLEN +#else +#define PATH_MAX 4096 // seems conservative for max filename len! +#endif +#endif + +using STL_NAMESPACE::string; +using STL_NAMESPACE::sort; + +//---------------------------------------------------------------------- +// Flags that control heap-profiling +// +// The thread-safety of the profiler depends on these being immutable +// after main starts, so don't change them. +//---------------------------------------------------------------------- + +DEFINE_int64(heap_profile_allocation_interval, + EnvToInt64("HEAP_PROFILE_ALLOCATION_INTERVAL", 1 << 30 /*1GB*/), + "If non-zero, dump heap profiling information once every " + "specified number of bytes allocated by the program since " + "the last dump."); +DEFINE_int64(heap_profile_deallocation_interval, + EnvToInt64("HEAP_PROFILE_DEALLOCATION_INTERVAL", 0), + "If non-zero, dump heap profiling information once every " + "specified number of bytes deallocated by the program " + "since the last dump."); +// We could also add flags that report whenever inuse_bytes changes by +// X or -X, but there hasn't been a need for that yet, so we haven't. +DEFINE_int64(heap_profile_inuse_interval, + EnvToInt64("HEAP_PROFILE_INUSE_INTERVAL", 100 << 20 /*100MB*/), + "If non-zero, dump heap profiling information whenever " + "the high-water memory usage mark increases by the specified " + "number of bytes."); +DEFINE_bool(mmap_log, + EnvToBool("HEAP_PROFILE_MMAP_LOG", false), + "Should mmap/munmap calls be logged?"); +DEFINE_bool(mmap_profile, + EnvToBool("HEAP_PROFILE_MMAP", false), + "If heap-profiling is on, also profile mmap, mremap, and sbrk)"); +DEFINE_bool(only_mmap_profile, + EnvToBool("HEAP_PROFILE_ONLY_MMAP", false), + "If heap-profiling is on, only profile mmap, mremap, and sbrk; " + "do not profile malloc/new/etc"); + + +//---------------------------------------------------------------------- +// Locking +//---------------------------------------------------------------------- + +// A pthread_mutex has way too much lock contention to be used here. +// +// I would like to use Mutex, but it can call malloc(), +// which can cause us to fall into an infinite recursion. +// +// So we use a simple spinlock. +static SpinLock heap_lock(SpinLock::LINKER_INITIALIZED); + +//---------------------------------------------------------------------- +// Simple allocator for heap profiler's internal memory +//---------------------------------------------------------------------- + +static LowLevelAlloc::Arena *heap_profiler_memory; + +static void* ProfilerMalloc(size_t bytes) { + return LowLevelAlloc::AllocWithArena(bytes, heap_profiler_memory); +} +static void ProfilerFree(void* p) { + LowLevelAlloc::Free(p); +} + +// We use buffers of this size in DoGetHeapProfile. +static const int kProfileBufferSize = 1 << 20; + +// This is a last-ditch buffer we use in DumpProfileLocked in case we +// can't allocate more memory from ProfilerMalloc. We expect this +// will be used by HeapProfileEndWriter when the application has to +// exit due to out-of-memory. This buffer is allocated in +// HeapProfilerStart. Access to this must be protected by heap_lock. +static char* global_profiler_buffer = NULL; + + +//---------------------------------------------------------------------- +// Profiling control/state data +//---------------------------------------------------------------------- + +// Access to all of these is protected by heap_lock. +static bool is_on = false; // If are on as a subsytem. +static bool dumping = false; // Dumping status to prevent recursion +static char* filename_prefix = NULL; // Prefix used for profile file names + // (NULL if no need for dumping yet) +static int dump_count = 0; // How many dumps so far +static int64 last_dump_alloc = 0; // alloc_size when did we last dump +static int64 last_dump_free = 0; // free_size when did we last dump +static int64 high_water_mark = 0; // In-use-bytes at last high-water dump + +static HeapProfileTable* heap_profile = NULL; // the heap profile table + +//---------------------------------------------------------------------- +// Profile generation +//---------------------------------------------------------------------- + +// Input must be a buffer of size at least 1MB. +static char* DoGetHeapProfileLocked(char* buf, int buflen) { + // We used to be smarter about estimating the required memory and + // then capping it to 1MB and generating the profile into that. + if (buf == NULL || buflen < 1) + return NULL; + + RAW_DCHECK(heap_lock.IsHeld(), ""); + int bytes_written = 0; + if (is_on) { + if (FLAGS_mmap_profile) { + heap_profile->RefreshMMapData(); + } + bytes_written = heap_profile->FillOrderedProfile(buf, buflen - 1); + if (FLAGS_mmap_profile) { + heap_profile->ClearMMapData(); + } + } + buf[bytes_written] = '\0'; + RAW_DCHECK(bytes_written == strlen(buf), ""); + + return buf; +} + +extern "C" char* GetHeapProfile() { + // Use normal malloc: we return the profile to the user to free it: + char* buffer = reinterpret_cast(malloc(kProfileBufferSize)); + SpinLockHolder l(&heap_lock); + return DoGetHeapProfileLocked(buffer, kProfileBufferSize); +} + +// defined below +static void NewHook(const void* ptr, size_t size); +static void DeleteHook(const void* ptr); + +// Helper for HeapProfilerDump. +static void DumpProfileLocked(const char* reason) { + RAW_DCHECK(heap_lock.IsHeld(), ""); + RAW_DCHECK(is_on, ""); + RAW_DCHECK(!dumping, ""); + + if (filename_prefix == NULL) return; // we do not yet need dumping + + dumping = true; + + // Make file name + char file_name[1000]; + dump_count++; + snprintf(file_name, sizeof(file_name), "%s.%04d%s", + filename_prefix, dump_count, HeapProfileTable::kFileExt); + + // Dump the profile + RAW_VLOG(0, "Dumping heap profile to %s (%s)", file_name, reason); + // We must use file routines that don't access memory, since we hold + // a memory lock now. + RawFD fd = RawOpenForWriting(file_name); + if (fd == kIllegalRawFD) { + RAW_LOG(ERROR, "Failed dumping heap profile to %s", file_name); + dumping = false; + return; + } + + // This case may be impossible, but it's best to be safe. + // It's safe to use the global buffer: we're protected by heap_lock. + if (global_profiler_buffer == NULL) { + global_profiler_buffer = + reinterpret_cast(ProfilerMalloc(kProfileBufferSize)); + } + + char* profile = DoGetHeapProfileLocked(global_profiler_buffer, + kProfileBufferSize); + RawWrite(fd, profile, strlen(profile)); + RawClose(fd); + + dumping = false; +} + +//---------------------------------------------------------------------- +// Profile collection +//---------------------------------------------------------------------- + +// Dump a profile after either an allocation or deallocation, if +// the memory use has changed enough since the last dump. +static void MaybeDumpProfileLocked() { + if (!dumping) { + const HeapProfileTable::Stats& total = heap_profile->total(); + const int64 inuse_bytes = total.alloc_size - total.free_size; + bool need_to_dump = false; + char buf[128]; + if (FLAGS_heap_profile_allocation_interval > 0 && + total.alloc_size >= + last_dump_alloc + FLAGS_heap_profile_allocation_interval) { + snprintf(buf, sizeof(buf), ("%"PRId64" MB allocated cumulatively, " + "%"PRId64" MB currently in use"), + total.alloc_size >> 20, inuse_bytes >> 20); + need_to_dump = true; + } else if (FLAGS_heap_profile_deallocation_interval > 0 && + total.free_size >= + last_dump_free + FLAGS_heap_profile_deallocation_interval) { + snprintf(buf, sizeof(buf), ("%"PRId64" MB freed cumulatively, " + "%"PRId64" MB currently in use"), + total.free_size >> 20, inuse_bytes >> 20); + need_to_dump = true; + } else if (FLAGS_heap_profile_inuse_interval > 0 && + inuse_bytes > + high_water_mark + FLAGS_heap_profile_inuse_interval) { + snprintf(buf, sizeof(buf), "%"PRId64" MB currently in use", + inuse_bytes >> 20); + need_to_dump = true; + } + if (need_to_dump) { + DumpProfileLocked(buf); + + last_dump_alloc = total.alloc_size; + last_dump_free = total.free_size; + if (inuse_bytes > high_water_mark) + high_water_mark = inuse_bytes; + } + } +} + +// Record an allocation in the profile. +static void RecordAlloc(const void* ptr, size_t bytes, int skip_count) { + // Take the stack trace outside the critical section. + void* stack[HeapProfileTable::kMaxStackDepth]; + int depth = HeapProfileTable::GetCallerStackTrace(skip_count + 1, stack); + SpinLockHolder l(&heap_lock); + if (is_on) { + heap_profile->RecordAlloc(ptr, bytes, depth, stack); + MaybeDumpProfileLocked(); + } +} + +// Record a deallocation in the profile. +static void RecordFree(const void* ptr) { + SpinLockHolder l(&heap_lock); + if (is_on) { + heap_profile->RecordFree(ptr); + MaybeDumpProfileLocked(); + } +} + +//---------------------------------------------------------------------- +// Allocation/deallocation hooks for MallocHook +//---------------------------------------------------------------------- + +// static +void NewHook(const void* ptr, size_t size) { + if (ptr != NULL) RecordAlloc(ptr, size, 0); +} + +// static +void DeleteHook(const void* ptr) { + if (ptr != NULL) RecordFree(ptr); +} + +// TODO(jandrews): Re-enable stack tracing +#ifdef TODO_REENABLE_STACK_TRACING +static void RawInfoStackDumper(const char* message, void*) { + RAW_LOG(INFO, "%.*s", static_cast(strlen(message) - 1), message); + // -1 is to chop the \n which will be added by RAW_LOG +} +#endif + +static void MmapHook(const void* result, const void* start, size_t size, + int prot, int flags, int fd, off_t offset) { + if (FLAGS_mmap_log) { // log it + // We use PRIxS not just '%p' to avoid deadlocks + // in pretty-printing of NULL as "nil". + // TODO(maxim): instead should use a safe snprintf reimplementation + RAW_LOG(INFO, + "mmap(start=0x%"PRIxPTR", len=%"PRIuS", prot=0x%x, flags=0x%x, " + "fd=%d, offset=0x%x) = 0x%"PRIxPTR"", + (uintptr_t) start, size, prot, flags, fd, (unsigned int) offset, + (uintptr_t) result); +#ifdef TODO_REENABLE_STACK_TRACING + DumpStackTrace(1, RawInfoStackDumper, NULL); +#endif + } +} + +static void MremapHook(const void* result, const void* old_addr, + size_t old_size, size_t new_size, + int flags, const void* new_addr) { + if (FLAGS_mmap_log) { // log it + // We use PRIxS not just '%p' to avoid deadlocks + // in pretty-printing of NULL as "nil". + // TODO(maxim): instead should use a safe snprintf reimplementation + RAW_LOG(INFO, + "mremap(old_addr=0x%"PRIxPTR", old_size=%"PRIuS", " + "new_size=%"PRIuS", flags=0x%x, new_addr=0x%"PRIxPTR") = " + "0x%"PRIxPTR"", + (uintptr_t) old_addr, old_size, new_size, flags, + (uintptr_t) new_addr, (uintptr_t) result); +#ifdef TODO_REENABLE_STACK_TRACING + DumpStackTrace(1, RawInfoStackDumper, NULL); +#endif + } +} + +static void MunmapHook(const void* ptr, size_t size) { + if (FLAGS_mmap_log) { // log it + // We use PRIxS not just '%p' to avoid deadlocks + // in pretty-printing of NULL as "nil". + // TODO(maxim): instead should use a safe snprintf reimplementation + RAW_LOG(INFO, "munmap(start=0x%"PRIxPTR", len=%"PRIuS")", + (uintptr_t) ptr, size); +#ifdef TODO_REENABLE_STACK_TRACING + DumpStackTrace(1, RawInfoStackDumper, NULL); +#endif + } +} + +static void SbrkHook(const void* result, ptrdiff_t increment) { + if (FLAGS_mmap_log) { // log it + RAW_LOG(INFO, "sbrk(inc=%"PRIdS") = 0x%"PRIxPTR"", + increment, (uintptr_t) result); +#ifdef TODO_REENABLE_STACK_TRACING + DumpStackTrace(1, RawInfoStackDumper, NULL); +#endif + } +} + +//---------------------------------------------------------------------- +// Starting/stopping/dumping +//---------------------------------------------------------------------- + +extern "C" void HeapProfilerStart(const char* prefix) { + SpinLockHolder l(&heap_lock); + + if (is_on) return; + + is_on = true; + + RAW_VLOG(0, "Starting tracking the heap"); + + // This should be done before the hooks are set up, since it should + // call new, and we want that to be accounted for correctly. + MallocExtension::Initialize(); + + if (FLAGS_only_mmap_profile) { + FLAGS_mmap_profile = true; + } + + if (FLAGS_mmap_profile) { + // Ask MemoryRegionMap to record all mmap, mremap, and sbrk + // call stack traces of at least size kMaxStackDepth: + MemoryRegionMap::Init(HeapProfileTable::kMaxStackDepth); + } + + if (FLAGS_mmap_log) { + // Install our hooks to do the logging: + RAW_CHECK(MallocHook::AddMmapHook(&MmapHook), ""); + RAW_CHECK(MallocHook::AddMremapHook(&MremapHook), ""); + RAW_CHECK(MallocHook::AddMunmapHook(&MunmapHook), ""); + RAW_CHECK(MallocHook::AddSbrkHook(&SbrkHook), ""); + } + + heap_profiler_memory = + LowLevelAlloc::NewArena(0, LowLevelAlloc::DefaultArena()); + + // Reserve space now for the heap profiler, so we can still write a + // heap profile even if the application runs out of memory. + global_profiler_buffer = + reinterpret_cast(ProfilerMalloc(kProfileBufferSize)); + + heap_profile = new(ProfilerMalloc(sizeof(HeapProfileTable))) + HeapProfileTable(ProfilerMalloc, ProfilerFree); + + last_dump_alloc = 0; + last_dump_free = 0; + high_water_mark = 0; + + // We do not reset dump_count so if the user does a sequence of + // HeapProfilerStart/HeapProfileStop, we will get a continuous + // sequence of profiles. + + if (FLAGS_only_mmap_profile == false) { + // Now set the hooks that capture new/delete and malloc/free. + RAW_CHECK(MallocHook::AddNewHook(&NewHook), ""); + RAW_CHECK(MallocHook::AddDeleteHook(&DeleteHook), ""); + } + + // Copy filename prefix + RAW_DCHECK(filename_prefix == NULL, ""); + const int prefix_length = strlen(prefix); + filename_prefix = reinterpret_cast(ProfilerMalloc(prefix_length + 1)); + memcpy(filename_prefix, prefix, prefix_length); + filename_prefix[prefix_length] = '\0'; +} + +extern "C" int IsHeapProfilerRunning() { + SpinLockHolder l(&heap_lock); + return is_on ? 1 : 0; // return an int, because C code doesn't have bool +} + +extern "C" void HeapProfilerStop() { + SpinLockHolder l(&heap_lock); + + if (!is_on) return; + + if (FLAGS_only_mmap_profile == false) { + // Unset our new/delete hooks, checking they were set: + RAW_CHECK(MallocHook::RemoveNewHook(&NewHook), ""); + RAW_CHECK(MallocHook::RemoveDeleteHook(&DeleteHook), ""); + } + if (FLAGS_mmap_log) { + // Restore mmap/sbrk hooks, checking that our hooks were set: + RAW_CHECK(MallocHook::RemoveMmapHook(&MmapHook), ""); + RAW_CHECK(MallocHook::RemoveMremapHook(&MremapHook), ""); + RAW_CHECK(MallocHook::RemoveSbrkHook(&SbrkHook), ""); + RAW_CHECK(MallocHook::RemoveMunmapHook(&MunmapHook), ""); + } + + // free profile + heap_profile->~HeapProfileTable(); + ProfilerFree(heap_profile); + heap_profile = NULL; + + // free output-buffer memory + ProfilerFree(global_profiler_buffer); + + // free prefix + ProfilerFree(filename_prefix); + filename_prefix = NULL; + + if (!LowLevelAlloc::DeleteArena(heap_profiler_memory)) { + RAW_LOG(FATAL, "Memory leak in HeapProfiler:"); + } + + if (FLAGS_mmap_profile) { + MemoryRegionMap::Shutdown(); + } + + is_on = false; +} + +extern "C" void HeapProfilerDump(const char *reason) { + SpinLockHolder l(&heap_lock); + if (is_on && !dumping) { + DumpProfileLocked(reason); + } +} + +//---------------------------------------------------------------------- +// Initialization/finalization code +//---------------------------------------------------------------------- + +// Initialization code +static void HeapProfilerInit() { + // Everything after this point is for setting up the profiler based on envvar + char fname[PATH_MAX]; + if (!GetUniquePathFromEnv("HEAPPROFILE", fname)) { + return; + } + // We do a uid check so we don't write out files in a setuid executable. +#ifdef HAVE_GETEUID + if (getuid() != geteuid()) { + RAW_LOG(WARNING, ("HeapProfiler: ignoring HEAPPROFILE because " + "program seems to be setuid\n")); + return; + } +#endif + + HeapProfileTable::CleanupOldProfiles(fname); + + HeapProfilerStart(fname); +} + +// class used for finalization -- dumps the heap-profile at program exit +struct HeapProfileEndWriter { + ~HeapProfileEndWriter() { HeapProfilerDump("Exiting"); } +}; + +// We want to make sure tcmalloc is up and running before starting the profiler +static const TCMallocGuard tcmalloc_initializer; +REGISTER_MODULE_INITIALIZER(heapprofiler, HeapProfilerInit()); +static HeapProfileEndWriter heap_profile_end_writer; diff --git a/src/thirdparty/gperftools-2.0/src/internal_logging.cc b/src/thirdparty/gperftools-2.0/src/internal_logging.cc new file mode 100644 index 000000000..2189d8466 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/internal_logging.cc @@ -0,0 +1,193 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Sanjay Ghemawat + +#include +#include "internal_logging.h" +#include // for va_end, va_start +#include // for vsnprintf, va_list, etc +#include // for abort +#include // for strlen, memcpy +#ifdef HAVE_UNISTD_H +#include // for write() +#endif + +#include +#include "base/logging.h" // for perftools_vsnprintf +#include "base/spinlock.h" // for SpinLockHolder, SpinLock + +static const int kLogBufSize = 800; + +// Variables for storing crash output. Allocated statically since we +// may not be able to heap-allocate while crashing. +static SpinLock crash_lock(base::LINKER_INITIALIZED); +static bool crashed = false; +static const int kStatsBufferSize = 16 << 10; +static char stats_buffer[kStatsBufferSize] = { 0 }; + +namespace tcmalloc { + +static void WriteMessage(const char* msg, int length) { + write(STDERR_FILENO, msg, length); +} + +void (*log_message_writer)(const char* msg, int length) = WriteMessage; + + +class Logger { + public: + bool Add(const LogItem& item); + bool AddStr(const char* str, int n); + bool AddNum(uint64_t num, int base); // base must be 10 or 16. + + static const int kBufSize = 200; + char* p_; + char* end_; + char buf_[kBufSize]; +}; + +void Log(LogMode mode, const char* filename, int line, + LogItem a, LogItem b, LogItem c, LogItem d) { + Logger state; + state.p_ = state.buf_; + state.end_ = state.buf_ + sizeof(state.buf_); + state.AddStr(filename, strlen(filename)) + && state.AddStr(":", 1) + && state.AddNum(line, 10) + && state.AddStr("]", 1) + && state.Add(a) + && state.Add(b) + && state.Add(c) + && state.Add(d); + + // Teminate with newline + if (state.p_ >= state.end_) { + state.p_ = state.end_ - 1; + } + *state.p_ = '\n'; + state.p_++; + + int msglen = state.p_ - state.buf_; + if (mode == kLog) { + (*log_message_writer)(state.buf_, msglen); + return; + } + + bool first_crash = false; + { + SpinLockHolder l(&crash_lock); + if (!crashed) { + crashed = true; + first_crash = true; + } + } + + (*log_message_writer)(state.buf_, msglen); + if (first_crash && mode == kCrashWithStats) { + MallocExtension::instance()->GetStats(stats_buffer, kStatsBufferSize); + (*log_message_writer)(stats_buffer, strlen(stats_buffer)); + } + + abort(); +} + +bool Logger::Add(const LogItem& item) { + // Separate items with spaces + if (p_ < end_) { + *p_ = ' '; + p_++; + } + + switch (item.tag_) { + case LogItem::kStr: + return AddStr(item.u_.str, strlen(item.u_.str)); + case LogItem::kUnsigned: + return AddNum(item.u_.unum, 10); + case LogItem::kSigned: + if (item.u_.snum < 0) { + // The cast to uint64_t is intentionally before the negation + // so that we do not attempt to negate -2^63. + return AddStr("-", 1) + && AddNum(- static_cast(item.u_.snum), 10); + } else { + return AddNum(static_cast(item.u_.snum), 10); + } + case LogItem::kPtr: + return AddStr("0x", 2) + && AddNum(reinterpret_cast(item.u_.ptr), 16); + default: + return false; + } +} + +bool Logger::AddStr(const char* str, int n) { + if (end_ - p_ < n) { + return false; + } else { + memcpy(p_, str, n); + p_ += n; + return true; + } +} + +bool Logger::AddNum(uint64_t num, int base) { + static const char kDigits[] = "0123456789abcdef"; + char space[22]; // more than enough for 2^64 in smallest supported base (10) + char* end = space + sizeof(space); + char* pos = end; + do { + pos--; + *pos = kDigits[num % base]; + num /= base; + } while (num > 0 && pos > space); + return AddStr(pos, end - pos); +} + +} // end tcmalloc namespace + +void TCMalloc_Printer::printf(const char* format, ...) { + if (left_ > 0) { + va_list ap; + va_start(ap, format); + const int r = perftools_vsnprintf(buf_, left_, format, ap); + va_end(ap); + if (r < 0) { + // Perhaps an old glibc that returns -1 on truncation? + left_ = 0; + } else if (r > left_) { + // Truncation + left_ = 0; + } else { + left_ -= r; + buf_ += r; + } + } +} diff --git a/src/thirdparty/gperftools-2.0/src/internal_logging.h b/src/thirdparty/gperftools-2.0/src/internal_logging.h new file mode 100644 index 000000000..02670346c --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/internal_logging.h @@ -0,0 +1,143 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Internal logging and related utility routines. + +#ifndef TCMALLOC_INTERNAL_LOGGING_H_ +#define TCMALLOC_INTERNAL_LOGGING_H_ + +#include +#include // for size_t +#if defined HAVE_STDINT_H +#include +#elif defined HAVE_INTTYPES_H +#include +#else +#include +#endif + +//------------------------------------------------------------------- +// Utility routines +//------------------------------------------------------------------- + +// Safe logging helper: we write directly to the stderr file +// descriptor and avoid FILE buffering because that may invoke +// malloc(). +// +// Example: +// Log(kLog, __FILE__, __LINE__, "error", bytes); + +namespace tcmalloc { +enum LogMode { + kLog, // Just print the message + kCrash, // Print the message and crash + kCrashWithStats // Print the message, some stats, and crash +}; + +class Logger; + +// A LogItem holds any of the argument types that can be passed to Log() +class LogItem { + public: + LogItem() : tag_(kEnd) { } + LogItem(const char* v) : tag_(kStr) { u_.str = v; } + LogItem(int v) : tag_(kSigned) { u_.snum = v; } + LogItem(long v) : tag_(kSigned) { u_.snum = v; } + LogItem(long long v) : tag_(kSigned) { u_.snum = v; } + LogItem(unsigned int v) : tag_(kUnsigned) { u_.unum = v; } + LogItem(unsigned long v) : tag_(kUnsigned) { u_.unum = v; } + LogItem(unsigned long long v) : tag_(kUnsigned) { u_.unum = v; } + LogItem(const void* v) : tag_(kPtr) { u_.ptr = v; } + private: + friend class Logger; + enum Tag { + kStr, + kSigned, + kUnsigned, + kPtr, + kEnd + }; + Tag tag_; + union { + const char* str; + const void* ptr; + int64_t snum; + uint64_t unum; + } u_; +}; + +extern PERFTOOLS_DLL_DECL void Log(LogMode mode, const char* filename, int line, + LogItem a, LogItem b = LogItem(), + LogItem c = LogItem(), LogItem d = LogItem()); + +// Tests can override this function to collect logging messages. +extern PERFTOOLS_DLL_DECL void (*log_message_writer)(const char* msg, int length); + +} // end tcmalloc namespace + +// Like assert(), but executed even in NDEBUG mode +#undef CHECK_CONDITION +#define CHECK_CONDITION(cond) \ +do { \ + if (!(cond)) { \ + ::tcmalloc::Log(::tcmalloc::kCrash, __FILE__, __LINE__, #cond); \ + } \ +} while (0) + +// Our own version of assert() so we can avoid hanging by trying to do +// all kinds of goofy printing while holding the malloc lock. +#ifndef NDEBUG +#define ASSERT(cond) CHECK_CONDITION(cond) +#else +#define ASSERT(cond) ((void) 0) +#endif + +// Print into buffer +class TCMalloc_Printer { + private: + char* buf_; // Where should we write next + int left_; // Space left in buffer (including space for \0) + + public: + // REQUIRES: "length > 0" + TCMalloc_Printer(char* buf, int length) : buf_(buf), left_(length) { + buf[0] = '\0'; + } + + void printf(const char* format, ...) +#ifdef HAVE___ATTRIBUTE__ + __attribute__ ((__format__ (__printf__, 2, 3))) +#endif +; +}; + +#endif // TCMALLOC_INTERNAL_LOGGING_H_ diff --git a/src/thirdparty/gperftools-2.0/src/libc_override.h b/src/thirdparty/gperftools-2.0/src/libc_override.h new file mode 100644 index 000000000..666d14de7 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/libc_override.h @@ -0,0 +1,90 @@ +// Copyright (c) 2011, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// This .h file imports the code that causes tcmalloc to override libc +// versions of malloc/free/new/delete/etc. That is, it provides the +// logic that makes it so calls to malloc(10) go through tcmalloc, +// rather than the default (libc) malloc. +// +// This file also provides a method: ReplaceSystemAlloc(), that every +// libc_override_*.h file it #includes is required to provide. This +// is called when first setting up tcmalloc -- that is, when a global +// constructor in tcmalloc.cc is executed -- to do any initialization +// work that may be required for this OS. (Note we cannot entirely +// control when tcmalloc is initialized, and the system may do some +// mallocs and frees before this routine is called.) It may be a +// noop. +// +// Every libc has its own way of doing this, and sometimes the compiler +// matters too, so we have a different file for each libc, and often +// for different compilers and OS's. + +#ifndef TCMALLOC_LIBC_OVERRIDE_INL_H_ +#define TCMALLOC_LIBC_OVERRIDE_INL_H_ + +#include +#ifdef HAVE_FEATURES_H +#include // for __GLIBC__ +#endif +#include + +static void ReplaceSystemAlloc(); // defined in the .h files below + +// For windows, there are two ways to get tcmalloc. If we're +// patching, then src/windows/patch_function.cc will do the necessary +// overriding here. Otherwise, we doing the 'redefine' trick, where +// we remove malloc/new/etc from mscvcrt.dll, and just need to define +// them now. +#if defined(_WIN32) && defined(WIN32_DO_PATCHING) +void PatchWindowsFunctions(); // in src/windows/patch_function.cc +static void ReplaceSystemAlloc() { PatchWindowsFunctions(); } + +#elif defined(_WIN32) && !defined(WIN32_DO_PATCHING) +#include "libc_override_redefine.h" + +#elif defined(__APPLE__) +#include "libc_override_osx.h" + +#elif defined(__GLIBC__) +#include "libc_override_glibc.h" + +// Not all gcc systems necessarily support weak symbols, but all the +// ones I know of do, so for now just assume they all do. +#elif defined(__GNUC__) +#include "libc_override_gcc_and_weak.h" + +#else +#error Need to add support for your libc/OS here + +#endif + +#endif // TCMALLOC_LIBC_OVERRIDE_INL_H_ diff --git a/src/thirdparty/gperftools-2.0/src/libc_override_gcc_and_weak.h b/src/thirdparty/gperftools-2.0/src/libc_override_gcc_and_weak.h new file mode 100644 index 000000000..070ebf72a --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/libc_override_gcc_and_weak.h @@ -0,0 +1,99 @@ +// Copyright (c) 2011, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// Used to override malloc routines on systems that define the +// memory allocation routines to be weak symbols in their libc +// (almost all unix-based systems are like this), on gcc, which +// suppports the 'alias' attribute. + +#ifndef TCMALLOC_LIBC_OVERRIDE_GCC_AND_WEAK_INL_H_ +#define TCMALLOC_LIBC_OVERRIDE_GCC_AND_WEAK_INL_H_ + +#ifdef HAVE_SYS_CDEFS_H +#include // for __THROW +#endif +#include + +#ifndef __THROW // I guess we're not on a glibc-like system +# define __THROW // __THROW is just an optimization, so ok to make it "" +#endif + +#ifndef __GNUC__ +# error libc_override_gcc_and_weak.h is for gcc distributions only. +#endif + +#define ALIAS(tc_fn) __attribute__ ((alias (#tc_fn))) + +void* operator new(size_t size) throw (std::bad_alloc) + ALIAS(tc_new); +void operator delete(void* p) __THROW + ALIAS(tc_delete); +void* operator new[](size_t size) throw (std::bad_alloc) + ALIAS(tc_newarray); +void operator delete[](void* p) __THROW + ALIAS(tc_deletearray); +void* operator new(size_t size, const std::nothrow_t& nt) __THROW + ALIAS(tc_new_nothrow); +void* operator new[](size_t size, const std::nothrow_t& nt) __THROW + ALIAS(tc_newarray_nothrow); +void operator delete(void* p, const std::nothrow_t& nt) __THROW + ALIAS(tc_delete_nothrow); +void operator delete[](void* p, const std::nothrow_t& nt) __THROW + ALIAS(tc_deletearray_nothrow); + +extern "C" { + void* malloc(size_t size) __THROW ALIAS(tc_malloc); + void free(void* ptr) __THROW ALIAS(tc_free); + void* realloc(void* ptr, size_t size) __THROW ALIAS(tc_realloc); + void* calloc(size_t n, size_t size) __THROW ALIAS(tc_calloc); + void cfree(void* ptr) __THROW ALIAS(tc_cfree); + void* memalign(size_t align, size_t s) __THROW ALIAS(tc_memalign); + void* valloc(size_t size) __THROW ALIAS(tc_valloc); + void* pvalloc(size_t size) __THROW ALIAS(tc_pvalloc); + int posix_memalign(void** r, size_t a, size_t s) __THROW + ALIAS(tc_posix_memalign); + void malloc_stats(void) __THROW ALIAS(tc_malloc_stats); + int mallopt(int cmd, int value) __THROW ALIAS(tc_mallopt); +#ifdef HAVE_STRUCT_MALLINFO + struct mallinfo mallinfo(void) __THROW ALIAS(tc_mallinfo); +#endif + size_t malloc_size(void* p) __THROW ALIAS(tc_malloc_size); + size_t malloc_usable_size(void* p) __THROW ALIAS(tc_malloc_size); +} // extern "C" + +#undef ALIAS + +// No need to do anything at tcmalloc-registration time: we do it all +// via overriding weak symbols (at link time). +static void ReplaceSystemAlloc() { } + +#endif // TCMALLOC_LIBC_OVERRIDE_GCC_AND_WEAK_INL_H_ diff --git a/src/thirdparty/gperftools-2.0/src/libc_override_glibc.h b/src/thirdparty/gperftools-2.0/src/libc_override_glibc.h new file mode 100644 index 000000000..16badcc42 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/libc_override_glibc.h @@ -0,0 +1,148 @@ +// Copyright (c) 2011, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// Used to override malloc routines on systems that are using glibc. + +#ifndef TCMALLOC_LIBC_OVERRIDE_GLIBC_INL_H_ +#define TCMALLOC_LIBC_OVERRIDE_GLIBC_INL_H_ + +#include +#include // for __GLIBC__ +#ifdef HAVE_SYS_CDEFS_H +#include // for __THROW +#endif +#include + +#ifndef __GLIBC__ +# error libc_override_glibc.h is for glibc distributions only. +#endif + +// In glibc, the memory-allocation methods are weak symbols, so we can +// just override them with our own. If we're using gcc, we can use +// __attribute__((alias)) to do the overriding easily (exception: +// Mach-O, which doesn't support aliases). Otherwise we have to use a +// function call. +#if !defined(__GNUC__) || defined(__MACH__) + +// This also defines ReplaceSystemAlloc(). +# include "libc_override_redefine.h" // defines functions malloc()/etc + +#else // #if !defined(__GNUC__) || defined(__MACH__) + +// If we get here, we're a gcc system, so do all the overriding we do +// with gcc. This does the overriding of all the 'normal' memory +// allocation. This also defines ReplaceSystemAlloc(). +# include "libc_override_gcc_and_weak.h" + +// We also have to do some glibc-specific overriding. Some library +// routines on RedHat 9 allocate memory using malloc() and free it +// using __libc_free() (or vice-versa). Since we provide our own +// implementations of malloc/free, we need to make sure that the +// __libc_XXX variants (defined as part of glibc) also point to the +// same implementations. Since it only matters for redhat, we +// do it inside the gcc #ifdef, since redhat uses gcc. +// TODO(csilvers): only do this if we detect we're an old enough glibc? + +#define ALIAS(tc_fn) __attribute__ ((alias (#tc_fn))) +extern "C" { + void* __libc_malloc(size_t size) ALIAS(tc_malloc); + void __libc_free(void* ptr) ALIAS(tc_free); + void* __libc_realloc(void* ptr, size_t size) ALIAS(tc_realloc); + void* __libc_calloc(size_t n, size_t size) ALIAS(tc_calloc); + void __libc_cfree(void* ptr) ALIAS(tc_cfree); + void* __libc_memalign(size_t align, size_t s) ALIAS(tc_memalign); + void* __libc_valloc(size_t size) ALIAS(tc_valloc); + void* __libc_pvalloc(size_t size) ALIAS(tc_pvalloc); + int __posix_memalign(void** r, size_t a, size_t s) ALIAS(tc_posix_memalign); +} // extern "C" +#undef ALIAS + +#endif // #if defined(__GNUC__) && !defined(__MACH__) + + +// We also have to hook libc malloc. While our work with weak symbols +// should make sure libc malloc is never called in most situations, it +// can be worked around by shared libraries with the DEEPBIND +// environment variable set. The below hooks libc to call our malloc +// routines even in that situation. In other situations, this hook +// should never be called. +extern "C" { +static void* glibc_override_malloc(size_t size, const void *caller) { + return tc_malloc(size); +} +static void* glibc_override_realloc(void *ptr, size_t size, + const void *caller) { + return tc_realloc(ptr, size); +} +static void glibc_override_free(void *ptr, const void *caller) { + tc_free(ptr); +} +static void* glibc_override_memalign(size_t align, size_t size, + const void *caller) { + return tc_memalign(align, size); +} + +// We should be using __malloc_initialize_hook here, like the #if 0 +// code below. (See http://swoolley.org/man.cgi/3/malloc_hook.) +// However, this causes weird linker errors with programs that link +// with -static, so instead we just assign the vars directly at +// static-constructor time. That should serve the same effect of +// making sure the hooks are set before the first malloc call the +// program makes. +#if 0 +#include // for __malloc_hook, etc. +void glibc_override_malloc_init_hook(void) { + __malloc_hook = glibc_override_malloc; + __realloc_hook = glibc_override_realloc; + __free_hook = glibc_override_free; + __memalign_hook = glibc_override_memalign; +} + +void (* MALLOC_HOOK_MAYBE_VOLATILE __malloc_initialize_hook)(void) + = &glibc_override_malloc_init_hook; +#endif + +void* (* MALLOC_HOOK_MAYBE_VOLATILE __malloc_hook)(size_t, const void*) + = &glibc_override_malloc; +void* (* MALLOC_HOOK_MAYBE_VOLATILE __realloc_hook)(void*, size_t, const void*) + = &glibc_override_realloc; +void (* MALLOC_HOOK_MAYBE_VOLATILE __free_hook)(void*, const void*) + = &glibc_override_free; +void* (* MALLOC_HOOK_MAYBE_VOLATILE __memalign_hook)(size_t,size_t, const void*) + = &glibc_override_memalign; + +} // extern "C" + +// No need to write ReplaceSystemAlloc(); one of the #includes above +// did it for us. + +#endif // TCMALLOC_LIBC_OVERRIDE_GLIBC_INL_H_ diff --git a/src/thirdparty/gperftools-2.0/src/libc_override_osx.h b/src/thirdparty/gperftools-2.0/src/libc_override_osx.h new file mode 100644 index 000000000..78a0ef2f9 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/libc_override_osx.h @@ -0,0 +1,275 @@ +// Copyright (c) 2011, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// Used to override malloc routines on OS X systems. We use the +// malloc-zone functionality built into OS X to register our malloc +// routine. +// +// 1) We used to use the normal 'override weak libc malloc/etc' +// technique for OS X. This is not optimal because mach does not +// support the 'alias' attribute, so we had to have forwarding +// functions. It also does not work very well with OS X shared +// libraries (dylibs) -- in general, the shared libs don't use +// tcmalloc unless run with the DYLD_FORCE_FLAT_NAMESPACE envvar. +// +// 2) Another approach would be to use an interposition array: +// static const interpose_t interposers[] __attribute__((section("__DATA, __interpose"))) = { +// { (void *)tc_malloc, (void *)malloc }, +// { (void *)tc_free, (void *)free }, +// }; +// This requires the user to set the DYLD_INSERT_LIBRARIES envvar, so +// is not much better. +// +// 3) Registering a new malloc zone avoids all these issues: +// http://www.opensource.apple.com/source/Libc/Libc-583/include/malloc/malloc.h +// http://www.opensource.apple.com/source/Libc/Libc-583/gen/malloc.c +// If we make tcmalloc the default malloc zone (undocumented but +// possible) then all new allocs use it, even those in shared +// libraries. Allocs done before tcmalloc was installed, or in libs +// that aren't using tcmalloc for some reason, will correctly go +// through the malloc-zone interface when free-ing, and will pick up +// the libc free rather than tcmalloc free. So it should "never" +// cause a crash (famous last words). +// +// 4) The routines one must define for one's own malloc have changed +// between OS X versions. This requires some hoops on our part, but +// is only really annoying when it comes to posix_memalign. The right +// behavior there depends on what OS version tcmalloc was compiled on, +// but also what OS version the program is running on. For now, we +// punt and don't implement our own posix_memalign. Apps that really +// care can use tc_posix_memalign directly. + +#ifndef TCMALLOC_LIBC_OVERRIDE_OSX_INL_H_ +#define TCMALLOC_LIBC_OVERRIDE_OSX_INL_H_ + +#include +#ifdef HAVE_FEATURES_H +#include +#endif +#include + +#if !defined(__APPLE__) +# error libc_override_glibc-osx.h is for OS X distributions only. +#endif + +#include +#include + +// from AvailabilityMacros.h +#if defined(MAC_OS_X_VERSION_10_6) && \ + MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 +extern "C" { + // This function is only available on 10.6 (and later) but the + // LibSystem headers do not use AvailabilityMacros.h to handle weak + // importing automatically. This prototype is a copy of the one in + // with the WEAK_IMPORT_ATTRBIUTE added. + extern malloc_zone_t *malloc_default_purgeable_zone(void) + WEAK_IMPORT_ATTRIBUTE; +} +#endif + +// We need to provide wrappers around all the libc functions. +namespace { +size_t mz_size(malloc_zone_t* zone, const void* ptr) { + if (MallocExtension::instance()->GetOwnership(ptr) != MallocExtension::kOwned) + return 0; // malloc_zone semantics: return 0 if we don't own the memory + + // TODO(csilvers): change this method to take a const void*, one day. + return MallocExtension::instance()->GetAllocatedSize(const_cast(ptr)); +} + +void* mz_malloc(malloc_zone_t* zone, size_t size) { + return tc_malloc(size); +} + +void* mz_calloc(malloc_zone_t* zone, size_t num_items, size_t size) { + return tc_calloc(num_items, size); +} + +void* mz_valloc(malloc_zone_t* zone, size_t size) { + return tc_valloc(size); +} + +void mz_free(malloc_zone_t* zone, void* ptr) { + return tc_free(ptr); +} + +void* mz_realloc(malloc_zone_t* zone, void* ptr, size_t size) { + return tc_realloc(ptr, size); +} + +void* mz_memalign(malloc_zone_t* zone, size_t align, size_t size) { + return tc_memalign(align, size); +} + +void mz_destroy(malloc_zone_t* zone) { + // A no-op -- we will not be destroyed! +} + +// malloc_introspection callbacks. I'm not clear on what all of these do. +kern_return_t mi_enumerator(task_t task, void *, + unsigned type_mask, vm_address_t zone_address, + memory_reader_t reader, + vm_range_recorder_t recorder) { + // Should enumerate all the pointers we have. Seems like a lot of work. + return KERN_FAILURE; +} + +size_t mi_good_size(malloc_zone_t *zone, size_t size) { + // I think it's always safe to return size, but we maybe could do better. + return size; +} + +boolean_t mi_check(malloc_zone_t *zone) { + return MallocExtension::instance()->VerifyAllMemory(); +} + +void mi_print(malloc_zone_t *zone, boolean_t verbose) { + int bufsize = 8192; + if (verbose) + bufsize = 102400; // I picked this size arbitrarily + char* buffer = new char[bufsize]; + MallocExtension::instance()->GetStats(buffer, bufsize); + fprintf(stdout, "%s", buffer); + delete[] buffer; +} + +void mi_log(malloc_zone_t *zone, void *address) { + // I don't think we support anything like this +} + +void mi_force_lock(malloc_zone_t *zone) { + // Hopefully unneeded by us! +} + +void mi_force_unlock(malloc_zone_t *zone) { + // Hopefully unneeded by us! +} + +void mi_statistics(malloc_zone_t *zone, malloc_statistics_t *stats) { + // TODO(csilvers): figure out how to fill these out + stats->blocks_in_use = 0; + stats->size_in_use = 0; + stats->max_size_in_use = 0; + stats->size_allocated = 0; +} + +boolean_t mi_zone_locked(malloc_zone_t *zone) { + return false; // Hopefully unneeded by us! +} + +} // unnamed namespace + +// OS X doesn't have pvalloc, cfree, malloc_statc, etc, so we can just +// define our own. :-) OS X supplies posix_memalign in some versions +// but not others, either strongly or weakly linked, in a way that's +// difficult enough to code to correctly, that I just don't try to +// support either memalign() or posix_memalign(). If you need them +// and are willing to code to tcmalloc, you can use tc_posix_memalign(). +extern "C" { + void cfree(void* p) { tc_cfree(p); } + void* pvalloc(size_t s) { return tc_pvalloc(s); } + void malloc_stats(void) { tc_malloc_stats(); } + int mallopt(int cmd, int v) { return tc_mallopt(cmd, v); } + // No struct mallinfo on OS X, so don't define mallinfo(). + // An alias for malloc_size(), which OS X defines. + size_t malloc_usable_size(void* p) { return tc_malloc_size(p); } +} // extern "C" + +static void ReplaceSystemAlloc() { + static malloc_introspection_t tcmalloc_introspection; + memset(&tcmalloc_introspection, 0, sizeof(tcmalloc_introspection)); + + tcmalloc_introspection.enumerator = &mi_enumerator; + tcmalloc_introspection.good_size = &mi_good_size; + tcmalloc_introspection.check = &mi_check; + tcmalloc_introspection.print = &mi_print; + tcmalloc_introspection.log = &mi_log; + tcmalloc_introspection.force_lock = &mi_force_lock; + tcmalloc_introspection.force_unlock = &mi_force_unlock; + + static malloc_zone_t tcmalloc_zone; + memset(&tcmalloc_zone, 0, sizeof(malloc_zone_t)); + + // Start with a version 4 zone which is used for OS X 10.4 and 10.5. + tcmalloc_zone.version = 4; + tcmalloc_zone.zone_name = "tcmalloc"; + tcmalloc_zone.size = &mz_size; + tcmalloc_zone.malloc = &mz_malloc; + tcmalloc_zone.calloc = &mz_calloc; + tcmalloc_zone.valloc = &mz_valloc; + tcmalloc_zone.free = &mz_free; + tcmalloc_zone.realloc = &mz_realloc; + tcmalloc_zone.destroy = &mz_destroy; + tcmalloc_zone.batch_malloc = NULL; + tcmalloc_zone.batch_free = NULL; + tcmalloc_zone.introspect = &tcmalloc_introspection; + + // from AvailabilityMacros.h +#if defined(MAC_OS_X_VERSION_10_6) && \ + MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + // Switch to version 6 on OSX 10.6 to support memalign. + tcmalloc_zone.version = 6; + tcmalloc_zone.free_definite_size = NULL; + tcmalloc_zone.memalign = &mz_memalign; + tcmalloc_introspection.zone_locked = &mi_zone_locked; + + // Request the default purgable zone to force its creation. The + // current default zone is registered with the purgable zone for + // doing tiny and small allocs. Sadly, it assumes that the default + // zone is the szone implementation from OS X and will crash if it + // isn't. By creating the zone now, this will be true and changing + // the default zone won't cause a problem. This only needs to + // happen when actually running on OS X 10.6 and higher (note the + // ifdef above only checks if we were *compiled* with 10.6 or + // higher; at runtime we have to check if this symbol is defined.) + if (malloc_default_purgeable_zone) { + malloc_default_purgeable_zone(); + } +#endif + + // Register the tcmalloc zone. At this point, it will not be the + // default zone. + malloc_zone_register(&tcmalloc_zone); + + // Unregister and reregister the default zone. Unregistering swaps + // the specified zone with the last one registered which for the + // default zone makes the more recently registered zone the default + // zone. The default zone is then re-registered to ensure that + // allocations made from it earlier will be handled correctly. + // Things are not guaranteed to work that way, but it's how they work now. + malloc_zone_t *default_zone = malloc_default_zone(); + malloc_zone_unregister(default_zone); + malloc_zone_register(default_zone); +} + +#endif // TCMALLOC_LIBC_OVERRIDE_OSX_INL_H_ diff --git a/src/thirdparty/gperftools-2.0/src/libc_override_redefine.h b/src/thirdparty/gperftools-2.0/src/libc_override_redefine.h new file mode 100644 index 000000000..d8d999ce7 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/libc_override_redefine.h @@ -0,0 +1,93 @@ +// Copyright (c) 2011, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// Used on systems that don't have their own definition of +// malloc/new/etc. (Typically this will be a windows msvcrt.dll that +// has been edited to remove the definitions.) We can just define our +// own as normal functions. +// +// This should also work on systems were all the malloc routines are +// defined as weak symbols, and there's no support for aliasing. + +#ifndef TCMALLOC_LIBC_OVERRIDE_REDEFINE_H_ +#define TCMALLOC_LIBC_OVERRIDE_REDEFINE_H_ + +#ifdef HAVE_SYS_CDEFS_H +#include // for __THROW +#endif + +#ifndef __THROW // I guess we're not on a glibc-like system +# define __THROW // __THROW is just an optimization, so ok to make it "" +#endif + +void* operator new(size_t size) { return tc_new(size); } +void operator delete(void* p) __THROW { tc_delete(p); } +void* operator new[](size_t size) { return tc_newarray(size); } +void operator delete[](void* p) __THROW { tc_deletearray(p); } +void* operator new(size_t size, const std::nothrow_t& nt) __THROW { + return tc_new_nothrow(size, nt); +} +void* operator new[](size_t size, const std::nothrow_t& nt) __THROW { + return tc_newarray_nothrow(size, nt); +} +void operator delete(void* ptr, const std::nothrow_t& nt) __THROW { + return tc_delete_nothrow(ptr, nt); +} +void operator delete[](void* ptr, const std::nothrow_t& nt) __THROW { + return tc_deletearray_nothrow(ptr, nt); +} +extern "C" { + void* malloc(size_t s) __THROW { return tc_malloc(s); } + void free(void* p) __THROW { tc_free(p); } + void* realloc(void* p, size_t s) __THROW { return tc_realloc(p, s); } + void* calloc(size_t n, size_t s) __THROW { return tc_calloc(n, s); } + void cfree(void* p) __THROW { tc_cfree(p); } + void* memalign(size_t a, size_t s) __THROW { return tc_memalign(a, s); } + void* valloc(size_t s) __THROW { return tc_valloc(s); } + void* pvalloc(size_t s) __THROW { return tc_pvalloc(s); } + int posix_memalign(void** r, size_t a, size_t s) __THROW { + return tc_posix_memalign(r, a, s); + } + void malloc_stats(void) __THROW { tc_malloc_stats(); } + int mallopt(int cmd, int v) __THROW { return tc_mallopt(cmd, v); } +#ifdef HAVE_STRUCT_MALLINFO + struct mallinfo mallinfo(void) __THROW { return tc_mallinfo(); } +#endif + size_t malloc_size(void* p) __THROW { return tc_malloc_size(p); } + size_t malloc_usable_size(void* p) __THROW { return tc_malloc_size(p); } +} // extern "C" + +// No need to do anything at tcmalloc-registration time: we do it all +// via overriding weak symbols (at link time). +static void ReplaceSystemAlloc() { } + +#endif // TCMALLOC_LIBC_OVERRIDE_REDEFINE_H_ diff --git a/src/thirdparty/gperftools-2.0/src/linked_list.h b/src/thirdparty/gperftools-2.0/src/linked_list.h new file mode 100644 index 000000000..4b0af1b9f --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/linked_list.h @@ -0,0 +1,102 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Some very basic linked list functions for dealing with using void * as +// storage. + +#ifndef TCMALLOC_LINKED_LIST_H_ +#define TCMALLOC_LINKED_LIST_H_ + +#include + +namespace tcmalloc { + +inline void *SLL_Next(void *t) { + return *(reinterpret_cast(t)); +} + +inline void SLL_SetNext(void *t, void *n) { + *(reinterpret_cast(t)) = n; +} + +inline void SLL_Push(void **list, void *element) { + SLL_SetNext(element, *list); + *list = element; +} + +inline void *SLL_Pop(void **list) { + void *result = *list; + *list = SLL_Next(*list); + return result; +} + +// Remove N elements from a linked list to which head points. head will be +// modified to point to the new head. start and end will point to the first +// and last nodes of the range. Note that end will point to NULL after this +// function is called. +inline void SLL_PopRange(void **head, int N, void **start, void **end) { + if (N == 0) { + *start = NULL; + *end = NULL; + return; + } + + void *tmp = *head; + for (int i = 1; i < N; ++i) { + tmp = SLL_Next(tmp); + } + + *start = *head; + *end = tmp; + *head = SLL_Next(tmp); + // Unlink range from list. + SLL_SetNext(tmp, NULL); +} + +inline void SLL_PushRange(void **head, void *start, void *end) { + if (!start) return; + SLL_SetNext(end, *head); + *head = start; +} + +inline size_t SLL_Size(void *head) { + int count = 0; + while (head) { + count++; + head = SLL_Next(head); + } + return count; +} + +} // namespace tcmalloc + +#endif // TCMALLOC_LINKED_LIST_H_ diff --git a/src/thirdparty/gperftools-2.0/src/malloc_extension.cc b/src/thirdparty/gperftools-2.0/src/malloc_extension.cc new file mode 100644 index 000000000..2d6497f4e --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/malloc_extension.cc @@ -0,0 +1,372 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#include +#include +#include +#include +#if defined HAVE_STDINT_H +#include +#elif defined HAVE_INTTYPES_H +#include +#else +#include +#endif +#include +#include "base/dynamic_annotations.h" +#include "base/sysinfo.h" // for FillProcSelfMaps +#ifndef NO_HEAP_CHECK +#include "gperftools/heap-checker.h" +#endif +#include "gperftools/malloc_extension.h" +#include "gperftools/malloc_extension_c.h" +#include "maybe_threads.h" + +using STL_NAMESPACE::string; +using STL_NAMESPACE::vector; + +static void DumpAddressMap(string* result) { + *result += "\nMAPPED_LIBRARIES:\n"; + // We keep doubling until we get a fit + const size_t old_resultlen = result->size(); + for (int amap_size = 10240; amap_size < 10000000; amap_size *= 2) { + result->resize(old_resultlen + amap_size); + bool wrote_all = false; + const int bytes_written = + tcmalloc::FillProcSelfMaps(&((*result)[old_resultlen]), amap_size, + &wrote_all); + if (wrote_all) { // we fit! + (*result)[old_resultlen + bytes_written] = '\0'; + result->resize(old_resultlen + bytes_written); + return; + } + } + result->reserve(old_resultlen); // just don't print anything +} + +// Note: this routine is meant to be called before threads are spawned. +void MallocExtension::Initialize() { + static bool initialize_called = false; + + if (initialize_called) return; + initialize_called = true; + +#ifdef __GLIBC__ + // GNU libc++ versions 3.3 and 3.4 obey the environment variables + // GLIBCPP_FORCE_NEW and GLIBCXX_FORCE_NEW respectively. Setting + // one of these variables forces the STL default allocator to call + // new() or delete() for each allocation or deletion. Otherwise + // the STL allocator tries to avoid the high cost of doing + // allocations by pooling memory internally. However, tcmalloc + // does allocations really fast, especially for the types of small + // items one sees in STL, so it's better off just using us. + // TODO: control whether we do this via an environment variable? + setenv("GLIBCPP_FORCE_NEW", "1", false /* no overwrite*/); + setenv("GLIBCXX_FORCE_NEW", "1", false /* no overwrite*/); + + // Now we need to make the setenv 'stick', which it may not do since + // the env is flakey before main() is called. But luckily stl only + // looks at this env var the first time it tries to do an alloc, and + // caches what it finds. So we just cause an stl alloc here. + string dummy("I need to be allocated"); + dummy += "!"; // so the definition of dummy isn't optimized out +#endif /* __GLIBC__ */ +} + +// SysAllocator implementation +SysAllocator::~SysAllocator() {} + +// Default implementation -- does nothing +MallocExtension::~MallocExtension() { } +bool MallocExtension::VerifyAllMemory() { return true; } +bool MallocExtension::VerifyNewMemory(const void* p) { return true; } +bool MallocExtension::VerifyArrayNewMemory(const void* p) { return true; } +bool MallocExtension::VerifyMallocMemory(const void* p) { return true; } + +bool MallocExtension::GetNumericProperty(const char* property, size_t* value) { + return false; +} + +bool MallocExtension::SetNumericProperty(const char* property, size_t value) { + return false; +} + +void MallocExtension::GetStats(char* buffer, int length) { + assert(length > 0); + buffer[0] = '\0'; +} + +bool MallocExtension::MallocMemoryStats(int* blocks, size_t* total, + int histogram[kMallocHistogramSize]) { + *blocks = 0; + *total = 0; + memset(histogram, 0, sizeof(*histogram) * kMallocHistogramSize); + return true; +} + +void** MallocExtension::ReadStackTraces(int* sample_period) { + return NULL; +} + +void** MallocExtension::ReadHeapGrowthStackTraces() { + return NULL; +} + +void MallocExtension::MarkThreadIdle() { + // Default implementation does nothing +} + +void MallocExtension::MarkThreadBusy() { + // Default implementation does nothing +} + +SysAllocator* MallocExtension::GetSystemAllocator() { + return NULL; +} + +void MallocExtension::SetSystemAllocator(SysAllocator *a) { + // Default implementation does nothing +} + +void MallocExtension::ReleaseToSystem(size_t num_bytes) { + // Default implementation does nothing +} + +void MallocExtension::ReleaseFreeMemory() { + ReleaseToSystem(static_cast(-1)); // SIZE_T_MAX +} + +void MallocExtension::SetMemoryReleaseRate(double rate) { + // Default implementation does nothing +} + +double MallocExtension::GetMemoryReleaseRate() { + return -1.0; +} + +size_t MallocExtension::GetEstimatedAllocatedSize(size_t size) { + return size; +} + +size_t MallocExtension::GetAllocatedSize(const void* p) { + assert(GetOwnership(p) != kNotOwned); + return 0; +} + +MallocExtension::Ownership MallocExtension::GetOwnership(const void* p) { + return kUnknownOwnership; +} + +void MallocExtension::GetFreeListSizes( + vector* v) { + v->clear(); +} + +// The current malloc extension object. + +static pthread_once_t module_init = PTHREAD_ONCE_INIT; +static MallocExtension* current_instance = NULL; + +static void InitModule() { + current_instance = new MallocExtension; +#ifndef NO_HEAP_CHECK + HeapLeakChecker::IgnoreObject(current_instance); +#endif +} + +MallocExtension* MallocExtension::instance() { + perftools_pthread_once(&module_init, InitModule); + return current_instance; +} + +void MallocExtension::Register(MallocExtension* implementation) { + perftools_pthread_once(&module_init, InitModule); + // When running under valgrind, our custom malloc is replaced with + // valgrind's one and malloc extensions will not work. (Note: + // callers should be responsible for checking that they are the + // malloc that is really being run, before calling Register. This + // is just here as an extra sanity check.) + if (!RunningOnValgrind()) { + current_instance = implementation; + } +} + +// ----------------------------------------------------------------------- +// Heap sampling support +// ----------------------------------------------------------------------- + +namespace { + +// Accessors +uintptr_t Count(void** entry) { + return reinterpret_cast(entry[0]); +} +uintptr_t Size(void** entry) { + return reinterpret_cast(entry[1]); +} +uintptr_t Depth(void** entry) { + return reinterpret_cast(entry[2]); +} +void* PC(void** entry, int i) { + return entry[3+i]; +} + +void PrintCountAndSize(MallocExtensionWriter* writer, + uintptr_t count, uintptr_t size) { + char buf[100]; + snprintf(buf, sizeof(buf), + "%6"PRIu64": %8"PRIu64" [%6"PRIu64": %8"PRIu64"] @", + static_cast(count), + static_cast(size), + static_cast(count), + static_cast(size)); + writer->append(buf, strlen(buf)); +} + +void PrintHeader(MallocExtensionWriter* writer, + const char* label, void** entries) { + // Compute the total count and total size + uintptr_t total_count = 0; + uintptr_t total_size = 0; + for (void** entry = entries; Count(entry) != 0; entry += 3 + Depth(entry)) { + total_count += Count(entry); + total_size += Size(entry); + } + + const char* const kTitle = "heap profile: "; + writer->append(kTitle, strlen(kTitle)); + PrintCountAndSize(writer, total_count, total_size); + writer->append(" ", 1); + writer->append(label, strlen(label)); + writer->append("\n", 1); +} + +void PrintStackEntry(MallocExtensionWriter* writer, void** entry) { + PrintCountAndSize(writer, Count(entry), Size(entry)); + + for (int i = 0; i < Depth(entry); i++) { + char buf[32]; + snprintf(buf, sizeof(buf), " %p", PC(entry, i)); + writer->append(buf, strlen(buf)); + } + writer->append("\n", 1); +} + +} + +void MallocExtension::GetHeapSample(MallocExtensionWriter* writer) { + int sample_period = 0; + void** entries = ReadStackTraces(&sample_period); + if (entries == NULL) { + const char* const kErrorMsg = + "This malloc implementation does not support sampling.\n" + "As of 2005/01/26, only tcmalloc supports sampling, and\n" + "you are probably running a binary that does not use\n" + "tcmalloc.\n"; + writer->append(kErrorMsg, strlen(kErrorMsg)); + return; + } + + char label[32]; + sprintf(label, "heap_v2/%d", sample_period); + PrintHeader(writer, label, entries); + for (void** entry = entries; Count(entry) != 0; entry += 3 + Depth(entry)) { + PrintStackEntry(writer, entry); + } + delete[] entries; + + DumpAddressMap(writer); +} + +void MallocExtension::GetHeapGrowthStacks(MallocExtensionWriter* writer) { + void** entries = ReadHeapGrowthStackTraces(); + if (entries == NULL) { + const char* const kErrorMsg = + "This malloc implementation does not support " + "ReadHeapGrowthStackTraces().\n" + "As of 2005/09/27, only tcmalloc supports this, and you\n" + "are probably running a binary that does not use tcmalloc.\n"; + writer->append(kErrorMsg, strlen(kErrorMsg)); + return; + } + + // Do not canonicalize the stack entries, so that we get a + // time-ordered list of stack traces, which may be useful if the + // client wants to focus on the latest stack traces. + PrintHeader(writer, "growth", entries); + for (void** entry = entries; Count(entry) != 0; entry += 3 + Depth(entry)) { + PrintStackEntry(writer, entry); + } + delete[] entries; + + DumpAddressMap(writer); +} + +void MallocExtension::Ranges(void* arg, RangeFunction func) { + // No callbacks by default +} + +// These are C shims that work on the current instance. + +#define C_SHIM(fn, retval, paramlist, arglist) \ + extern "C" PERFTOOLS_DLL_DECL retval MallocExtension_##fn paramlist { \ + return MallocExtension::instance()->fn arglist; \ + } + +C_SHIM(VerifyAllMemory, int, (void), ()); +C_SHIM(VerifyNewMemory, int, (const void* p), (p)); +C_SHIM(VerifyArrayNewMemory, int, (const void* p), (p)); +C_SHIM(VerifyMallocMemory, int, (const void* p), (p)); +C_SHIM(MallocMemoryStats, int, + (int* blocks, size_t* total, int histogram[kMallocHistogramSize]), + (blocks, total, histogram)); + +C_SHIM(GetStats, void, + (char* buffer, int buffer_length), (buffer, buffer_length)); +C_SHIM(GetNumericProperty, int, + (const char* property, size_t* value), (property, value)); +C_SHIM(SetNumericProperty, int, + (const char* property, size_t value), (property, value)); + +C_SHIM(MarkThreadIdle, void, (void), ()); +C_SHIM(MarkThreadBusy, void, (void), ()); +C_SHIM(ReleaseFreeMemory, void, (void), ()); +C_SHIM(ReleaseToSystem, void, (size_t num_bytes), (num_bytes)); +C_SHIM(GetEstimatedAllocatedSize, size_t, (size_t size), (size)); +C_SHIM(GetAllocatedSize, size_t, (const void* p), (p)); + +// Can't use the shim here because of the need to translate the enums. +extern "C" +MallocExtension_Ownership MallocExtension_GetOwnership(const void* p) { + return static_cast( + MallocExtension::instance()->GetOwnership(p)); +} diff --git a/src/thirdparty/gperftools-2.0/src/malloc_hook-inl.h b/src/thirdparty/gperftools-2.0/src/malloc_hook-inl.h new file mode 100644 index 000000000..27e5bdcaa --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/malloc_hook-inl.h @@ -0,0 +1,322 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// This has the implementation details of malloc_hook that are needed +// to use malloc-hook inside the tcmalloc system. It does not hold +// any of the client-facing calls that are used to add new hooks. + +#ifndef _MALLOC_HOOK_INL_H_ +#define _MALLOC_HOOK_INL_H_ + +#include +#include +#include "base/atomicops.h" +#include "base/basictypes.h" +#include + +namespace base { namespace internal { + +// The following (implementation) code is DEPRECATED. +// A simple atomic pointer class that can be initialized by the linker +// when you define a namespace-scope variable as: +// +// AtomicPtr my_global = { &initial_value }; +// +// This isn't suitable for a general atomic<> class because of the +// public access to data_. +template +class AtomicPtr { + public: + COMPILE_ASSERT(sizeof(PtrT) <= sizeof(AtomicWord), + PtrT_should_fit_in_AtomicWord); + + PtrT Get() const { + // Depending on the system, Acquire_Load(AtomicWord*) may have + // been defined to return an AtomicWord, Atomic32, or Atomic64. + // We hide that implementation detail here with an explicit cast. + // This prevents MSVC 2005, at least, from complaining (it has to + // do with __wp64; AtomicWord is __wp64, but Atomic32/64 aren't). + return reinterpret_cast(static_cast( + base::subtle::Acquire_Load(&data_))); + } + + // Sets the contained value to new_val and returns the old value, + // atomically, with acquire and release semantics. + // This is a full-barrier instruction. + PtrT Exchange(PtrT new_val); + + // Atomically executes: + // result = data_ + // if (data_ == old_val) + // data_ = new_val; + // return result; + // This is a full-barrier instruction. + PtrT CompareAndSwap(PtrT old_val, PtrT new_val); + + // Not private so that the class is an aggregate and can be + // initialized by the linker. Don't access this directly. + AtomicWord data_; +}; + +// These are initialized in malloc_hook.cc +extern AtomicPtr new_hook_; +extern AtomicPtr delete_hook_; +extern AtomicPtr premmap_hook_; +extern AtomicPtr mmap_hook_; +extern AtomicPtr munmap_hook_; +extern AtomicPtr mremap_hook_; +extern AtomicPtr presbrk_hook_; +extern AtomicPtr sbrk_hook_; +// End DEPRECATED code. + +// Maximum of 7 hooks means that HookList is 8 words. +static const int kHookListMaxValues = 7; + +// HookList: a class that provides synchronized insertions and removals and +// lockless traversal. Most of the implementation is in malloc_hook.cc. +template +struct PERFTOOLS_DLL_DECL HookList { + COMPILE_ASSERT(sizeof(T) <= sizeof(AtomicWord), T_should_fit_in_AtomicWord); + + // Adds value to the list. Note that duplicates are allowed. Thread-safe and + // blocking (acquires hooklist_spinlock). Returns true on success; false + // otherwise (failures include invalid value and no space left). + bool Add(T value); + + // Removes the first entry matching value from the list. Thread-safe and + // blocking (acquires hooklist_spinlock). Returns true on success; false + // otherwise (failures include invalid value and no value found). + bool Remove(T value); + + // Store up to n values of the list in output_array, and return the number of + // elements stored. Thread-safe and non-blocking. This is fast (one memory + // access) if the list is empty. + int Traverse(T* output_array, int n) const; + + // Fast inline implementation for fast path of Invoke*Hook. + bool empty() const { + return base::subtle::Acquire_Load(&priv_end) == 0; + } + + // This internal data is not private so that the class is an aggregate and can + // be initialized by the linker. Don't access this directly. Use the + // INIT_HOOK_LIST macro in malloc_hook.cc. + + // One more than the index of the last valid element in priv_data. During + // 'Remove' this may be past the last valid element in priv_data, but + // subsequent values will be 0. + AtomicWord priv_end; + AtomicWord priv_data[kHookListMaxValues]; +}; + +extern HookList new_hooks_; +extern HookList delete_hooks_; +extern HookList premmap_hooks_; +extern HookList mmap_hooks_; +extern HookList mmap_replacement_; +extern HookList munmap_hooks_; +extern HookList munmap_replacement_; +extern HookList mremap_hooks_; +extern HookList presbrk_hooks_; +extern HookList sbrk_hooks_; + +} } // namespace base::internal + +// The following method is DEPRECATED +inline MallocHook::NewHook MallocHook::GetNewHook() { + return base::internal::new_hook_.Get(); +} + +inline void MallocHook::InvokeNewHook(const void* p, size_t s) { + if (!base::internal::new_hooks_.empty()) { + InvokeNewHookSlow(p, s); + } + // The following code is DEPRECATED. + MallocHook::NewHook hook = MallocHook::GetNewHook(); + if (hook != NULL) (*hook)(p, s); + // End DEPRECATED code. +} + +// The following method is DEPRECATED +inline MallocHook::DeleteHook MallocHook::GetDeleteHook() { + return base::internal::delete_hook_.Get(); +} + +inline void MallocHook::InvokeDeleteHook(const void* p) { + if (!base::internal::delete_hooks_.empty()) { + InvokeDeleteHookSlow(p); + } + // The following code is DEPRECATED. + MallocHook::DeleteHook hook = MallocHook::GetDeleteHook(); + if (hook != NULL) (*hook)(p); + // End DEPRECATED code. +} + +// The following method is DEPRECATED +inline MallocHook::PreMmapHook MallocHook::GetPreMmapHook() { + return base::internal::premmap_hook_.Get(); +} + +inline void MallocHook::InvokePreMmapHook(const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset) { + if (!base::internal::premmap_hooks_.empty()) { + InvokePreMmapHookSlow(start, size, protection, flags, fd, offset); + } + // The following code is DEPRECATED. + MallocHook::PreMmapHook hook = MallocHook::GetPreMmapHook(); + if (hook != NULL) (*hook)(start, size, + protection, flags, + fd, offset); + // End DEPRECATED code. +} + +// The following method is DEPRECATED +inline MallocHook::MmapHook MallocHook::GetMmapHook() { + return base::internal::mmap_hook_.Get(); +} + +inline void MallocHook::InvokeMmapHook(const void* result, + const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset) { + if (!base::internal::mmap_hooks_.empty()) { + InvokeMmapHookSlow(result, start, size, protection, flags, fd, offset); + } + // The following code is DEPRECATED. + MallocHook::MmapHook hook = MallocHook::GetMmapHook(); + if (hook != NULL) (*hook)(result, + start, size, + protection, flags, + fd, offset); + // End DEPRECATED code. +} + +inline bool MallocHook::InvokeMmapReplacement(const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset, + void** result) { + if (!base::internal::mmap_replacement_.empty()) { + return InvokeMmapReplacementSlow(start, size, + protection, flags, + fd, offset, + result); + } + return false; +} + +// The following method is DEPRECATED +inline MallocHook::MunmapHook MallocHook::GetMunmapHook() { + return base::internal::munmap_hook_.Get(); +} + +inline void MallocHook::InvokeMunmapHook(const void* p, size_t size) { + if (!base::internal::munmap_hooks_.empty()) { + InvokeMunmapHookSlow(p, size); + } + // The following code is DEPRECATED. + MallocHook::MunmapHook hook = MallocHook::GetMunmapHook(); + if (hook != NULL) (*hook)(p, size); + // End DEPRECATED code. +} + +inline bool MallocHook::InvokeMunmapReplacement( + const void* p, size_t size, int* result) { + if (!base::internal::mmap_replacement_.empty()) { + return InvokeMunmapReplacementSlow(p, size, result); + } + return false; +} + +// The following method is DEPRECATED +inline MallocHook::MremapHook MallocHook::GetMremapHook() { + return base::internal::mremap_hook_.Get(); +} + +inline void MallocHook::InvokeMremapHook(const void* result, + const void* old_addr, + size_t old_size, + size_t new_size, + int flags, + const void* new_addr) { + if (!base::internal::mremap_hooks_.empty()) { + InvokeMremapHookSlow(result, old_addr, old_size, new_size, flags, new_addr); + } + // The following code is DEPRECATED. + MallocHook::MremapHook hook = MallocHook::GetMremapHook(); + if (hook != NULL) (*hook)(result, + old_addr, old_size, + new_size, flags, new_addr); + // End DEPRECATED code. +} + +// The following method is DEPRECATED +inline MallocHook::PreSbrkHook MallocHook::GetPreSbrkHook() { + return base::internal::presbrk_hook_.Get(); +} + +inline void MallocHook::InvokePreSbrkHook(ptrdiff_t increment) { + if (!base::internal::presbrk_hooks_.empty() && increment != 0) { + InvokePreSbrkHookSlow(increment); + } + // The following code is DEPRECATED. + MallocHook::PreSbrkHook hook = MallocHook::GetPreSbrkHook(); + if (hook != NULL && increment != 0) (*hook)(increment); + // End DEPRECATED code. +} + +// The following method is DEPRECATED +inline MallocHook::SbrkHook MallocHook::GetSbrkHook() { + return base::internal::sbrk_hook_.Get(); +} + +inline void MallocHook::InvokeSbrkHook(const void* result, + ptrdiff_t increment) { + if (!base::internal::sbrk_hooks_.empty() && increment != 0) { + InvokeSbrkHookSlow(result, increment); + } + // The following code is DEPRECATED. + MallocHook::SbrkHook hook = MallocHook::GetSbrkHook(); + if (hook != NULL && increment != 0) (*hook)(result, increment); + // End DEPRECATED code. +} + +#endif /* _MALLOC_HOOK_INL_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/malloc_hook.cc b/src/thirdparty/gperftools-2.0/src/malloc_hook.cc new file mode 100644 index 000000000..2f8608e41 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/malloc_hook.cc @@ -0,0 +1,723 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#include + +// Disable the glibc prototype of mremap(), as older versions of the +// system headers define this function with only four arguments, +// whereas newer versions allow an optional fifth argument: +#ifdef HAVE_MMAP +# define mremap glibc_mremap +# include +# undef mremap +#endif + +#include +#ifdef HAVE_STDINT_H +#include +#endif +#include +#include "base/logging.h" +#include "base/spinlock.h" +#include "maybe_threads.h" +#include "malloc_hook-inl.h" +#include + +// This #ifdef should almost never be set. Set NO_TCMALLOC_SAMPLES if +// you're porting to a system where you really can't get a stacktrace. +#ifdef NO_TCMALLOC_SAMPLES + // We use #define so code compiles even if you #include stacktrace.h somehow. +# define GetStackTrace(stack, depth, skip) (0) +#else +# include +#endif + +// __THROW is defined in glibc systems. It means, counter-intuitively, +// "This function will never throw an exception." It's an optional +// optimization tool, but we may need to use it to match glibc prototypes. +#ifndef __THROW // I guess we're not on a glibc system +# define __THROW // __THROW is just an optimization, so ok to make it "" +#endif + +using std::copy; + + +// Declaration of default weak initialization function, that can be overridden +// by linking-in a strong definition (as heap-checker.cc does). This is +// extern "C" so that it doesn't trigger gold's --detect-odr-violations warning, +// which only looks at C++ symbols. +// +// This function is declared here as weak, and defined later, rather than a more +// straightforward simple weak definition, as a workround for an icc compiler +// issue ((Intel reference 290819). This issue causes icc to resolve weak +// symbols too early, at compile rather than link time. By declaring it (weak) +// here, then defining it below after its use, we can avoid the problem. +extern "C" { +ATTRIBUTE_WEAK void MallocHook_InitAtFirstAllocation_HeapLeakChecker(); +} + +namespace { + +void RemoveInitialHooksAndCallInitializers(); // below. + +pthread_once_t once = PTHREAD_ONCE_INIT; + +// These hooks are installed in MallocHook as the only initial hooks. The first +// hook that is called will run RemoveInitialHooksAndCallInitializers (see the +// definition below) and then redispatch to any malloc hooks installed by +// RemoveInitialHooksAndCallInitializers. +// +// Note(llib): there is a possibility of a race in the event that there are +// multiple threads running before the first allocation. This is pretty +// difficult to achieve, but if it is then multiple threads may concurrently do +// allocations. The first caller will call +// RemoveInitialHooksAndCallInitializers via one of the initial hooks. A +// concurrent allocation may, depending on timing either: +// * still have its initial malloc hook installed, run that and block on waiting +// for the first caller to finish its call to +// RemoveInitialHooksAndCallInitializers, and proceed normally. +// * occur some time during the RemoveInitialHooksAndCallInitializers call, at +// which point there could be no initial hooks and the subsequent hooks that +// are about to be set up by RemoveInitialHooksAndCallInitializers haven't +// been installed yet. I think the worst we can get is that some allocations +// will not get reported to some hooks set by the initializers called from +// RemoveInitialHooksAndCallInitializers. + +void InitialNewHook(const void* ptr, size_t size) { + perftools_pthread_once(&once, &RemoveInitialHooksAndCallInitializers); + MallocHook::InvokeNewHook(ptr, size); +} + +void InitialPreMMapHook(const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset) { + perftools_pthread_once(&once, &RemoveInitialHooksAndCallInitializers); + MallocHook::InvokePreMmapHook(start, size, protection, flags, fd, offset); +} + +void InitialPreSbrkHook(ptrdiff_t increment) { + perftools_pthread_once(&once, &RemoveInitialHooksAndCallInitializers); + MallocHook::InvokePreSbrkHook(increment); +} + +// This function is called at most once by one of the above initial malloc +// hooks. It removes all initial hooks and initializes all other clients that +// want to get control at the very first memory allocation. The initializers +// may assume that the initial malloc hooks have been removed. The initializers +// may set up malloc hooks and allocate memory. +void RemoveInitialHooksAndCallInitializers() { + RAW_CHECK(MallocHook::RemoveNewHook(&InitialNewHook), ""); + RAW_CHECK(MallocHook::RemovePreMmapHook(&InitialPreMMapHook), ""); + RAW_CHECK(MallocHook::RemovePreSbrkHook(&InitialPreSbrkHook), ""); + + // HeapLeakChecker is currently the only module that needs to get control on + // the first memory allocation, but one can add other modules by following the + // same weak/strong function pattern. + MallocHook_InitAtFirstAllocation_HeapLeakChecker(); +} + +} // namespace + +// Weak default initialization function that must go after its use. +extern "C" void MallocHook_InitAtFirstAllocation_HeapLeakChecker() { + // Do nothing. +} + +namespace base { namespace internal { + +// The code below is DEPRECATED. +template +PtrT AtomicPtr::Exchange(PtrT new_val) { + base::subtle::MemoryBarrier(); // Release semantics. + // Depending on the system, NoBarrier_AtomicExchange(AtomicWord*) + // may have been defined to return an AtomicWord, Atomic32, or + // Atomic64. We hide that implementation detail here with an + // explicit cast. This prevents MSVC 2005, at least, from complaining. + PtrT old_val = reinterpret_cast(static_cast( + base::subtle::NoBarrier_AtomicExchange( + &data_, + reinterpret_cast(new_val)))); + base::subtle::MemoryBarrier(); // And acquire semantics. + return old_val; +} + +template +PtrT AtomicPtr::CompareAndSwap(PtrT old_val, PtrT new_val) { + base::subtle::MemoryBarrier(); // Release semantics. + PtrT retval = reinterpret_cast(static_cast( + base::subtle::NoBarrier_CompareAndSwap( + &data_, + reinterpret_cast(old_val), + reinterpret_cast(new_val)))); + base::subtle::MemoryBarrier(); // And acquire semantics. + return retval; +} + +AtomicPtr new_hook_ = { 0 }; +AtomicPtr delete_hook_ = { 0 }; +AtomicPtr premmap_hook_ = { 0 }; +AtomicPtr mmap_hook_ = { 0 }; +AtomicPtr munmap_hook_ = { 0 }; +AtomicPtr mremap_hook_ = { 0 }; +AtomicPtr presbrk_hook_ = { 0 }; +AtomicPtr sbrk_hook_ = { 0 }; +// End of DEPRECATED code section. + +// This lock is shared between all implementations of HookList::Add & Remove. +// The potential for contention is very small. This needs to be a SpinLock and +// not a Mutex since it's possible for Mutex locking to allocate memory (e.g., +// per-thread allocation in debug builds), which could cause infinite recursion. +static SpinLock hooklist_spinlock(base::LINKER_INITIALIZED); + +template +bool HookList::Add(T value_as_t) { + AtomicWord value = bit_cast(value_as_t); + if (value == 0) { + return false; + } + SpinLockHolder l(&hooklist_spinlock); + // Find the first slot in data that is 0. + int index = 0; + while ((index < kHookListMaxValues) && + (base::subtle::NoBarrier_Load(&priv_data[index]) != 0)) { + ++index; + } + if (index == kHookListMaxValues) { + return false; + } + AtomicWord prev_num_hooks = base::subtle::Acquire_Load(&priv_end); + base::subtle::Release_Store(&priv_data[index], value); + if (prev_num_hooks <= index) { + base::subtle::Release_Store(&priv_end, index + 1); + } + return true; +} + +template +bool HookList::Remove(T value_as_t) { + if (value_as_t == 0) { + return false; + } + SpinLockHolder l(&hooklist_spinlock); + AtomicWord hooks_end = base::subtle::Acquire_Load(&priv_end); + int index = 0; + while (index < hooks_end && value_as_t != bit_cast( + base::subtle::Acquire_Load(&priv_data[index]))) { + ++index; + } + if (index == hooks_end) { + return false; + } + base::subtle::Release_Store(&priv_data[index], 0); + if (hooks_end == index + 1) { + // Adjust hooks_end down to the lowest possible value. + hooks_end = index; + while ((hooks_end > 0) && + (base::subtle::Acquire_Load(&priv_data[hooks_end - 1]) == 0)) { + --hooks_end; + } + base::subtle::Release_Store(&priv_end, hooks_end); + } + return true; +} + +template +int HookList::Traverse(T* output_array, int n) const { + AtomicWord hooks_end = base::subtle::Acquire_Load(&priv_end); + int actual_hooks_end = 0; + for (int i = 0; i < hooks_end && n > 0; ++i) { + AtomicWord data = base::subtle::Acquire_Load(&priv_data[i]); + if (data != 0) { + *output_array++ = bit_cast(data); + ++actual_hooks_end; + --n; + } + } + return actual_hooks_end; +} + +// Initialize a HookList (optionally with the given initial_value in index 0). +#define INIT_HOOK_LIST { 0 } +#define INIT_HOOK_LIST_WITH_VALUE(initial_value) \ + { 1, { reinterpret_cast(initial_value) } } + +// Explicit instantiation for malloc_hook_test.cc. This ensures all the methods +// are instantiated. +template struct HookList; + +HookList new_hooks_ = + INIT_HOOK_LIST_WITH_VALUE(&InitialNewHook); +HookList delete_hooks_ = INIT_HOOK_LIST; +HookList premmap_hooks_ = + INIT_HOOK_LIST_WITH_VALUE(&InitialPreMMapHook); +HookList mmap_hooks_ = INIT_HOOK_LIST; +HookList munmap_hooks_ = INIT_HOOK_LIST; +HookList mremap_hooks_ = INIT_HOOK_LIST; +HookList presbrk_hooks_ = + INIT_HOOK_LIST_WITH_VALUE(InitialPreSbrkHook); +HookList sbrk_hooks_ = INIT_HOOK_LIST; + +// These lists contain either 0 or 1 hooks. +HookList mmap_replacement_ = { 0 }; +HookList munmap_replacement_ = { 0 }; + +#undef INIT_HOOK_LIST_WITH_VALUE +#undef INIT_HOOK_LIST + +} } // namespace base::internal + +// The code below is DEPRECATED. +using base::internal::new_hook_; +using base::internal::delete_hook_; +using base::internal::premmap_hook_; +using base::internal::mmap_hook_; +using base::internal::munmap_hook_; +using base::internal::mremap_hook_; +using base::internal::presbrk_hook_; +using base::internal::sbrk_hook_; +// End of DEPRECATED code section. + +using base::internal::kHookListMaxValues; +using base::internal::new_hooks_; +using base::internal::delete_hooks_; +using base::internal::premmap_hooks_; +using base::internal::mmap_hooks_; +using base::internal::mmap_replacement_; +using base::internal::munmap_hooks_; +using base::internal::munmap_replacement_; +using base::internal::mremap_hooks_; +using base::internal::presbrk_hooks_; +using base::internal::sbrk_hooks_; + +// These are available as C bindings as well as C++, hence their +// definition outside the MallocHook class. +extern "C" +int MallocHook_AddNewHook(MallocHook_NewHook hook) { + RAW_VLOG(10, "AddNewHook(%p)", hook); + return new_hooks_.Add(hook); +} + +extern "C" +int MallocHook_RemoveNewHook(MallocHook_NewHook hook) { + RAW_VLOG(10, "RemoveNewHook(%p)", hook); + return new_hooks_.Remove(hook); +} + +extern "C" +int MallocHook_AddDeleteHook(MallocHook_DeleteHook hook) { + RAW_VLOG(10, "AddDeleteHook(%p)", hook); + return delete_hooks_.Add(hook); +} + +extern "C" +int MallocHook_RemoveDeleteHook(MallocHook_DeleteHook hook) { + RAW_VLOG(10, "RemoveDeleteHook(%p)", hook); + return delete_hooks_.Remove(hook); +} + +extern "C" +int MallocHook_AddPreMmapHook(MallocHook_PreMmapHook hook) { + RAW_VLOG(10, "AddPreMmapHook(%p)", hook); + return premmap_hooks_.Add(hook); +} + +extern "C" +int MallocHook_RemovePreMmapHook(MallocHook_PreMmapHook hook) { + RAW_VLOG(10, "RemovePreMmapHook(%p)", hook); + return premmap_hooks_.Remove(hook); +} + +extern "C" +int MallocHook_SetMmapReplacement(MallocHook_MmapReplacement hook) { + RAW_VLOG(10, "SetMmapReplacement(%p)", hook); + // NOTE this is a best effort CHECK. Concurrent sets could succeed since + // this test is outside of the Add spin lock. + RAW_CHECK(mmap_replacement_.empty(), "Only one MMapReplacement is allowed."); + return mmap_replacement_.Add(hook); +} + +extern "C" +int MallocHook_RemoveMmapReplacement(MallocHook_MmapReplacement hook) { + RAW_VLOG(10, "RemoveMmapReplacement(%p)", hook); + return mmap_replacement_.Remove(hook); +} + +extern "C" +int MallocHook_AddMmapHook(MallocHook_MmapHook hook) { + RAW_VLOG(10, "AddMmapHook(%p)", hook); + return mmap_hooks_.Add(hook); +} + +extern "C" +int MallocHook_RemoveMmapHook(MallocHook_MmapHook hook) { + RAW_VLOG(10, "RemoveMmapHook(%p)", hook); + return mmap_hooks_.Remove(hook); +} + +extern "C" +int MallocHook_AddMunmapHook(MallocHook_MunmapHook hook) { + RAW_VLOG(10, "AddMunmapHook(%p)", hook); + return munmap_hooks_.Add(hook); +} + +extern "C" +int MallocHook_RemoveMunmapHook(MallocHook_MunmapHook hook) { + RAW_VLOG(10, "RemoveMunmapHook(%p)", hook); + return munmap_hooks_.Remove(hook); +} + +extern "C" +int MallocHook_SetMunmapReplacement(MallocHook_MunmapReplacement hook) { + RAW_VLOG(10, "SetMunmapReplacement(%p)", hook); + // NOTE this is a best effort CHECK. Concurrent sets could succeed since + // this test is outside of the Add spin lock. + RAW_CHECK(munmap_replacement_.empty(), + "Only one MunmapReplacement is allowed."); + return munmap_replacement_.Add(hook); +} + +extern "C" +int MallocHook_RemoveMunmapReplacement(MallocHook_MunmapReplacement hook) { + RAW_VLOG(10, "RemoveMunmapReplacement(%p)", hook); + return munmap_replacement_.Remove(hook); +} + +extern "C" +int MallocHook_AddMremapHook(MallocHook_MremapHook hook) { + RAW_VLOG(10, "AddMremapHook(%p)", hook); + return mremap_hooks_.Add(hook); +} + +extern "C" +int MallocHook_RemoveMremapHook(MallocHook_MremapHook hook) { + RAW_VLOG(10, "RemoveMremapHook(%p)", hook); + return mremap_hooks_.Remove(hook); +} + +extern "C" +int MallocHook_AddPreSbrkHook(MallocHook_PreSbrkHook hook) { + RAW_VLOG(10, "AddPreSbrkHook(%p)", hook); + return presbrk_hooks_.Add(hook); +} + +extern "C" +int MallocHook_RemovePreSbrkHook(MallocHook_PreSbrkHook hook) { + RAW_VLOG(10, "RemovePreSbrkHook(%p)", hook); + return presbrk_hooks_.Remove(hook); +} + +extern "C" +int MallocHook_AddSbrkHook(MallocHook_SbrkHook hook) { + RAW_VLOG(10, "AddSbrkHook(%p)", hook); + return sbrk_hooks_.Add(hook); +} + +extern "C" +int MallocHook_RemoveSbrkHook(MallocHook_SbrkHook hook) { + RAW_VLOG(10, "RemoveSbrkHook(%p)", hook); + return sbrk_hooks_.Remove(hook); +} + +// The code below is DEPRECATED. +extern "C" +MallocHook_NewHook MallocHook_SetNewHook(MallocHook_NewHook hook) { + RAW_VLOG(10, "SetNewHook(%p)", hook); + return new_hook_.Exchange(hook); +} + +extern "C" +MallocHook_DeleteHook MallocHook_SetDeleteHook(MallocHook_DeleteHook hook) { + RAW_VLOG(10, "SetDeleteHook(%p)", hook); + return delete_hook_.Exchange(hook); +} + +extern "C" +MallocHook_PreMmapHook MallocHook_SetPreMmapHook(MallocHook_PreMmapHook hook) { + RAW_VLOG(10, "SetPreMmapHook(%p)", hook); + return premmap_hook_.Exchange(hook); +} + +extern "C" +MallocHook_MmapHook MallocHook_SetMmapHook(MallocHook_MmapHook hook) { + RAW_VLOG(10, "SetMmapHook(%p)", hook); + return mmap_hook_.Exchange(hook); +} + +extern "C" +MallocHook_MunmapHook MallocHook_SetMunmapHook(MallocHook_MunmapHook hook) { + RAW_VLOG(10, "SetMunmapHook(%p)", hook); + return munmap_hook_.Exchange(hook); +} + +extern "C" +MallocHook_MremapHook MallocHook_SetMremapHook(MallocHook_MremapHook hook) { + RAW_VLOG(10, "SetMremapHook(%p)", hook); + return mremap_hook_.Exchange(hook); +} + +extern "C" +MallocHook_PreSbrkHook MallocHook_SetPreSbrkHook(MallocHook_PreSbrkHook hook) { + RAW_VLOG(10, "SetPreSbrkHook(%p)", hook); + return presbrk_hook_.Exchange(hook); +} + +extern "C" +MallocHook_SbrkHook MallocHook_SetSbrkHook(MallocHook_SbrkHook hook) { + RAW_VLOG(10, "SetSbrkHook(%p)", hook); + return sbrk_hook_.Exchange(hook); +} +// End of DEPRECATED code section. + +// Note: embedding the function calls inside the traversal of HookList would be +// very confusing, as it is legal for a hook to remove itself and add other +// hooks. Doing traversal first, and then calling the hooks ensures we only +// call the hooks registered at the start. +#define INVOKE_HOOKS(HookType, hook_list, args) do { \ + HookType hooks[kHookListMaxValues]; \ + int num_hooks = hook_list.Traverse(hooks, kHookListMaxValues); \ + for (int i = 0; i < num_hooks; ++i) { \ + (*hooks[i])args; \ + } \ + } while (0) + +// There should only be one replacement. Return the result of the first +// one, or false if there is none. +#define INVOKE_REPLACEMENT(HookType, hook_list, args) do { \ + HookType hooks[kHookListMaxValues]; \ + int num_hooks = hook_list.Traverse(hooks, kHookListMaxValues); \ + return (num_hooks > 0 && (*hooks[0])args); \ + } while (0) + + +void MallocHook::InvokeNewHookSlow(const void* p, size_t s) { + INVOKE_HOOKS(NewHook, new_hooks_, (p, s)); +} + +void MallocHook::InvokeDeleteHookSlow(const void* p) { + INVOKE_HOOKS(DeleteHook, delete_hooks_, (p)); +} + +void MallocHook::InvokePreMmapHookSlow(const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset) { + INVOKE_HOOKS(PreMmapHook, premmap_hooks_, (start, size, protection, flags, fd, + offset)); +} + +void MallocHook::InvokeMmapHookSlow(const void* result, + const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset) { + INVOKE_HOOKS(MmapHook, mmap_hooks_, (result, start, size, protection, flags, + fd, offset)); +} + +bool MallocHook::InvokeMmapReplacementSlow(const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset, + void** result) { + INVOKE_REPLACEMENT(MmapReplacement, mmap_replacement_, + (start, size, protection, flags, fd, offset, result)); +} + +void MallocHook::InvokeMunmapHookSlow(const void* p, size_t s) { + INVOKE_HOOKS(MunmapHook, munmap_hooks_, (p, s)); +} + +bool MallocHook::InvokeMunmapReplacementSlow(const void* p, + size_t s, + int* result) { + INVOKE_REPLACEMENT(MunmapReplacement, munmap_replacement_, (p, s, result)); +} + +void MallocHook::InvokeMremapHookSlow(const void* result, + const void* old_addr, + size_t old_size, + size_t new_size, + int flags, + const void* new_addr) { + INVOKE_HOOKS(MremapHook, mremap_hooks_, (result, old_addr, old_size, new_size, + flags, new_addr)); +} + +void MallocHook::InvokePreSbrkHookSlow(ptrdiff_t increment) { + INVOKE_HOOKS(PreSbrkHook, presbrk_hooks_, (increment)); +} + +void MallocHook::InvokeSbrkHookSlow(const void* result, ptrdiff_t increment) { + INVOKE_HOOKS(SbrkHook, sbrk_hooks_, (result, increment)); +} + +#undef INVOKE_HOOKS + +DEFINE_ATTRIBUTE_SECTION_VARS(google_malloc); +DECLARE_ATTRIBUTE_SECTION_VARS(google_malloc); + // actual functions are in debugallocation.cc or tcmalloc.cc +DEFINE_ATTRIBUTE_SECTION_VARS(malloc_hook); +DECLARE_ATTRIBUTE_SECTION_VARS(malloc_hook); + // actual functions are in this file, malloc_hook.cc, and low_level_alloc.cc + +#define ADDR_IN_ATTRIBUTE_SECTION(addr, name) \ + (reinterpret_cast(ATTRIBUTE_SECTION_START(name)) <= \ + reinterpret_cast(addr) && \ + reinterpret_cast(addr) < \ + reinterpret_cast(ATTRIBUTE_SECTION_STOP(name))) + +// Return true iff 'caller' is a return address within a function +// that calls one of our hooks via MallocHook:Invoke*. +// A helper for GetCallerStackTrace. +static inline bool InHookCaller(const void* caller) { + return ADDR_IN_ATTRIBUTE_SECTION(caller, google_malloc) || + ADDR_IN_ATTRIBUTE_SECTION(caller, malloc_hook); + // We can use one section for everything except tcmalloc_or_debug + // due to its special linkage mode, which prevents merging of the sections. +} + +#undef ADDR_IN_ATTRIBUTE_SECTION + +static bool checked_sections = false; + +static inline void CheckInHookCaller() { + if (!checked_sections) { + INIT_ATTRIBUTE_SECTION_VARS(google_malloc); + if (ATTRIBUTE_SECTION_START(google_malloc) == + ATTRIBUTE_SECTION_STOP(google_malloc)) { + RAW_LOG(ERROR, "google_malloc section is missing, " + "thus InHookCaller is broken!"); + } + INIT_ATTRIBUTE_SECTION_VARS(malloc_hook); + if (ATTRIBUTE_SECTION_START(malloc_hook) == + ATTRIBUTE_SECTION_STOP(malloc_hook)) { + RAW_LOG(ERROR, "malloc_hook section is missing, " + "thus InHookCaller is broken!"); + } + checked_sections = true; + } +} + +// We can improve behavior/compactness of this function +// if we pass a generic test function (with a generic arg) +// into the implementations for GetStackTrace instead of the skip_count. +extern "C" int MallocHook_GetCallerStackTrace(void** result, int max_depth, + int skip_count) { +#if defined(NO_TCMALLOC_SAMPLES) + return 0; +#elif !defined(HAVE_ATTRIBUTE_SECTION_START) + // Fall back to GetStackTrace and good old but fragile frame skip counts. + // Note: this path is inaccurate when a hook is not called directly by an + // allocation function but is daisy-chained through another hook, + // search for MallocHook::(Get|Set|Invoke)* to find such cases. + return GetStackTrace(result, max_depth, skip_count + int(DEBUG_MODE)); + // due to -foptimize-sibling-calls in opt mode + // there's no need for extra frame skip here then +#else + CheckInHookCaller(); + // MallocHook caller determination via InHookCaller works, use it: + static const int kMaxSkip = 32 + 6 + 3; + // Constant tuned to do just one GetStackTrace call below in practice + // and not get many frames that we don't actually need: + // currently max passsed max_depth is 32, + // max passed/needed skip_count is 6 + // and 3 is to account for some hook daisy chaining. + static const int kStackSize = kMaxSkip + 1; + void* stack[kStackSize]; + int depth = GetStackTrace(stack, kStackSize, 1); // skip this function frame + if (depth == 0) // silenty propagate cases when GetStackTrace does not work + return 0; + for (int i = 0; i < depth; ++i) { // stack[0] is our immediate caller + if (InHookCaller(stack[i])) { + RAW_VLOG(10, "Found hooked allocator at %d: %p <- %p", + i, stack[i], stack[i+1]); + i += 1; // skip hook caller frame + depth -= i; // correct depth + if (depth > max_depth) depth = max_depth; + copy(stack + i, stack + i + depth, result); + if (depth < max_depth && depth + i == kStackSize) { + // get frames for the missing depth + depth += + GetStackTrace(result + depth, max_depth - depth, 1 + kStackSize); + } + return depth; + } + } + RAW_LOG(WARNING, "Hooked allocator frame not found, returning empty trace"); + // If this happens try increasing kMaxSkip + // or else something must be wrong with InHookCaller, + // e.g. for every section used in InHookCaller + // all functions in that section must be inside the same library. + return 0; +#endif +} + +// On systems where we know how, we override mmap/munmap/mremap/sbrk +// to provide support for calling the related hooks (in addition, +// of course, to doing what these functions normally do). + +#if defined(__linux) +# include "malloc_hook_mmap_linux.h" + +#elif defined(__FreeBSD__) +# include "malloc_hook_mmap_freebsd.h" + +#else + +/*static*/void* MallocHook::UnhookedMMap(void *start, size_t length, int prot, + int flags, int fd, off_t offset) { + void* result; + if (!MallocHook::InvokeMmapReplacement( + start, length, prot, flags, fd, offset, &result)) { + result = mmap(start, length, prot, flags, fd, offset); + } + return result; +} + +/*static*/int MallocHook::UnhookedMUnmap(void *start, size_t length) { + int result; + if (!MallocHook::InvokeMunmapReplacement(start, length, &result)) { + result = munmap(start, length); + } + return result; +} + +#endif diff --git a/src/thirdparty/gperftools-2.0/src/malloc_hook_mmap_freebsd.h b/src/thirdparty/gperftools-2.0/src/malloc_hook_mmap_freebsd.h new file mode 100644 index 000000000..dae868c3e --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/malloc_hook_mmap_freebsd.h @@ -0,0 +1,165 @@ +// Copyright (c) 2011, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Override mmap/munmap/mremap/sbrk to provide support for calling the +// related hooks (in addition, of course, to doing what these +// functions normally do). + +#ifndef __FreeBSD__ +# error Should only be including malloc_hook_mmap_freebsd.h on FreeBSD systems. +#endif + +#include +#include +#include +#include + +// Make sure mmap doesn't get #define'd away by +#undef mmap + +// According to the FreeBSD documentation, use syscall if you do not +// need 64-bit alignment otherwise use __syscall. Indeed, syscall +// doesn't work correctly in most situations on 64-bit. It's return +// type is 'int' so for things like SYS_mmap, it actually truncates +// the returned address to 32-bits. +#if defined(__amd64__) || defined(__x86_64__) +# define MALLOC_HOOK_SYSCALL __syscall +#else +# define MALLOC_HOOK_SYSCALL syscall +#endif + + +extern "C" { + void* mmap(void *start, size_t length,int prot, int flags, + int fd, off_t offset) __THROW + ATTRIBUTE_SECTION(malloc_hook); + int munmap(void* start, size_t length) __THROW + ATTRIBUTE_SECTION(malloc_hook); + void* sbrk(intptr_t increment) __THROW + ATTRIBUTE_SECTION(malloc_hook); +} + +static inline void* do_mmap(void *start, size_t length, + int prot, int flags, + int fd, off_t offset) __THROW { + return (void *)MALLOC_HOOK_SYSCALL(SYS_mmap, + start, length, prot, flags, fd, offset); +} + +static inline void* do_sbrk(intptr_t increment) { + void* curbrk = 0; + +#if defined(__x86_64__) || defined(__amd64__) +# ifdef PIC + __asm__ __volatile__( + "movq .curbrk@GOTPCREL(%%rip), %%rdx;" + "movq (%%rdx), %%rax;" + "movq %%rax, %0;" + : "=r" (curbrk) + :: "%rdx", "%rax"); +# else + __asm__ __volatile__( + "movq .curbrk(%%rip), %%rax;" + "movq %%rax, %0;" + : "=r" (curbrk) + :: "%rax"); +# endif +#else + __asm__ __volatile__( + "movl .curbrk, %%eax;" + "movl %%eax, %0;" + : "=r" (curbrk) + :: "%eax"); +#endif + + if (increment == 0) { + return curbrk; + } + + char* prevbrk = static_cast(curbrk); + void* newbrk = prevbrk + increment; + + if (brk(newbrk) == -1) { + return reinterpret_cast(static_cast(-1)); + } + + return prevbrk; +} + + +extern "C" void* mmap(void *start, size_t length, int prot, int flags, + int fd, off_t offset) __THROW { + MallocHook::InvokePreMmapHook(start, length, prot, flags, fd, offset); + void *result; + if (!MallocHook::InvokeMmapReplacement( + start, length, prot, flags, fd, offset, &result)) { + result = do_mmap(start, length, prot, flags, fd, + static_cast(offset)); // avoid sign extension + } + MallocHook::InvokeMmapHook(result, start, length, prot, flags, fd, offset); + return result; +} + +extern "C" int munmap(void* start, size_t length) __THROW { + MallocHook::InvokeMunmapHook(start, length); + int result; + if (!MallocHook::InvokeMunmapReplacement(start, length, &result)) { + result = MALLOC_HOOK_SYSCALL(SYS_munmap, start, length); + } + + return result; +} + +extern "C" void* sbrk(intptr_t increment) __THROW { + MallocHook::InvokePreSbrkHook(increment); + void *result = do_sbrk(increment); + MallocHook::InvokeSbrkHook(result, increment); + return result; +} + +/*static*/void* MallocHook::UnhookedMMap(void *start, size_t length, int prot, + int flags, int fd, off_t offset) { + void* result; + if (!MallocHook::InvokeMmapReplacement( + start, length, prot, flags, fd, offset, &result)) { + result = do_mmap(start, length, prot, flags, fd, offset); + } + + return result; +} + +/*static*/int MallocHook::UnhookedMUnmap(void *start, size_t length) { + int result; + if (!MallocHook::InvokeMunmapReplacement(start, length, &result)) { + result = MALLOC_HOOK_SYSCALL(SYS_munmap, start, length); + } + return result; +} + +#undef MALLOC_HOOK_SYSCALL diff --git a/src/thirdparty/gperftools-2.0/src/malloc_hook_mmap_linux.h b/src/thirdparty/gperftools-2.0/src/malloc_hook_mmap_linux.h new file mode 100644 index 000000000..dc79f8bb1 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/malloc_hook_mmap_linux.h @@ -0,0 +1,234 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +// We define mmap() and mmap64(), which somewhat reimplements libc's mmap +// syscall stubs. Unfortunately libc only exports the stubs via weak symbols +// (which we're overriding with our mmap64() and mmap() wrappers) so we can't +// just call through to them. + +#ifndef __linux +# error Should only be including malloc_hook_mmap_linux.h on linux systems. +#endif + +#include +#include +#include +#include +#include "base/linux_syscall_support.h" + +// The x86-32 case and the x86-64 case differ: +// 32b has a mmap2() syscall, 64b does not. +// 64b and 32b have different calling conventions for mmap(). + +// I test for 64-bit first so I don't have to do things like +// '#if (defined(__mips__) && !defined(__MIPS64__))' as a mips32 check. +#if defined(__x86_64__) || defined(__PPC64__) || (defined(_MIPS_SIM) && _MIPS_SIM == _ABI64) + +static inline void* do_mmap64(void *start, size_t length, + int prot, int flags, + int fd, __off64_t offset) __THROW { + return sys_mmap(start, length, prot, flags, fd, offset); +} + +#define MALLOC_HOOK_HAVE_DO_MMAP64 1 + +#elif defined(__i386__) || defined(__PPC__) || defined(__mips__) || \ + defined(__arm__) + +static inline void* do_mmap64(void *start, size_t length, + int prot, int flags, + int fd, __off64_t offset) __THROW { + void *result; + + // Try mmap2() unless it's not supported + static bool have_mmap2 = true; + if (have_mmap2) { + static int pagesize = 0; + if (!pagesize) pagesize = getpagesize(); + + // Check that the offset is page aligned + if (offset & (pagesize - 1)) { + result = MAP_FAILED; + errno = EINVAL; + goto out; + } + + result = (void *)syscall(SYS_mmap2, + start, length, prot, flags, fd, + (off_t) (offset / pagesize)); + if (result != MAP_FAILED || errno != ENOSYS) goto out; + + // We don't have mmap2() after all - don't bother trying it in future + have_mmap2 = false; + } + + if (((off_t)offset) != offset) { + // If we're trying to map a 64-bit offset, fail now since we don't + // have 64-bit mmap() support. + result = MAP_FAILED; + errno = EINVAL; + goto out; + } + +#ifdef __NR_mmap + { + // Fall back to old 32-bit offset mmap() call + // Old syscall interface cannot handle six args, so pass in an array + int32 args[6] = { (int32) start, (int32) length, prot, flags, fd, + (off_t) offset }; + result = (void *)syscall(SYS_mmap, args); + } +#else + // Some Linux ports like ARM EABI Linux has no mmap, just mmap2. + result = MAP_FAILED; +#endif + + out: + return result; +} + +#define MALLOC_HOOK_HAVE_DO_MMAP64 1 + +#endif // #if defined(__x86_64__) + + +#ifdef MALLOC_HOOK_HAVE_DO_MMAP64 + +// We use do_mmap64 abstraction to put MallocHook::InvokeMmapHook +// calls right into mmap and mmap64, so that the stack frames in the caller's +// stack are at the same offsets for all the calls of memory allocating +// functions. + +// Put all callers of MallocHook::Invoke* in this module into +// malloc_hook section, +// so that MallocHook::GetCallerStackTrace can function accurately: + +// Make sure mmap doesn't get #define'd away by +# undef mmap + +extern "C" { + void* mmap64(void *start, size_t length, int prot, int flags, + int fd, __off64_t offset ) __THROW + ATTRIBUTE_SECTION(malloc_hook); + void* mmap(void *start, size_t length,int prot, int flags, + int fd, off_t offset) __THROW + ATTRIBUTE_SECTION(malloc_hook); + int munmap(void* start, size_t length) __THROW + ATTRIBUTE_SECTION(malloc_hook); + void* mremap(void* old_addr, size_t old_size, size_t new_size, + int flags, ...) __THROW + ATTRIBUTE_SECTION(malloc_hook); + void* sbrk(ptrdiff_t increment) __THROW + ATTRIBUTE_SECTION(malloc_hook); +} + +extern "C" void* mmap64(void *start, size_t length, int prot, int flags, + int fd, __off64_t offset) __THROW { + MallocHook::InvokePreMmapHook(start, length, prot, flags, fd, offset); + void *result; + if (!MallocHook::InvokeMmapReplacement( + start, length, prot, flags, fd, offset, &result)) { + result = do_mmap64(start, length, prot, flags, fd, offset); + } + MallocHook::InvokeMmapHook(result, start, length, prot, flags, fd, offset); + return result; +} + +# if !defined(__USE_FILE_OFFSET64) || !defined(__REDIRECT_NTH) + +extern "C" void* mmap(void *start, size_t length, int prot, int flags, + int fd, off_t offset) __THROW { + MallocHook::InvokePreMmapHook(start, length, prot, flags, fd, offset); + void *result; + if (!MallocHook::InvokeMmapReplacement( + start, length, prot, flags, fd, offset, &result)) { + result = do_mmap64(start, length, prot, flags, fd, + static_cast(offset)); // avoid sign extension + } + MallocHook::InvokeMmapHook(result, start, length, prot, flags, fd, offset); + return result; +} + +# endif // !defined(__USE_FILE_OFFSET64) || !defined(__REDIRECT_NTH) + +extern "C" int munmap(void* start, size_t length) __THROW { + MallocHook::InvokeMunmapHook(start, length); + int result; + if (!MallocHook::InvokeMunmapReplacement(start, length, &result)) { + result = sys_munmap(start, length); + } + return result; +} + +extern "C" void* mremap(void* old_addr, size_t old_size, size_t new_size, + int flags, ...) __THROW { + va_list ap; + va_start(ap, flags); + void *new_address = va_arg(ap, void *); + va_end(ap); + void* result = sys_mremap(old_addr, old_size, new_size, flags, new_address); + MallocHook::InvokeMremapHook(result, old_addr, old_size, new_size, flags, + new_address); + return result; +} + +// libc's version: +extern "C" void* __sbrk(ptrdiff_t increment); + +extern "C" void* sbrk(ptrdiff_t increment) __THROW { + MallocHook::InvokePreSbrkHook(increment); + void *result = __sbrk(increment); + MallocHook::InvokeSbrkHook(result, increment); + return result; +} + +/*static*/void* MallocHook::UnhookedMMap(void *start, size_t length, int prot, + int flags, int fd, off_t offset) { + void* result; + if (!MallocHook::InvokeMmapReplacement( + start, length, prot, flags, fd, offset, &result)) { + result = do_mmap64(start, length, prot, flags, fd, offset); + } + return result; +} + +/*static*/int MallocHook::UnhookedMUnmap(void *start, size_t length) { + int result; + if (!MallocHook::InvokeMunmapReplacement(start, length, &result)) { + result = syscall(SYS_munmap, start, length); + } + return result; +} + +#undef MALLOC_HOOK_HAVE_DO_MMAP64 + +#endif // #ifdef MALLOC_HOOK_HAVE_DO_MMAP64 diff --git a/src/thirdparty/gperftools-2.0/src/maybe_threads.cc b/src/thirdparty/gperftools-2.0/src/maybe_threads.cc new file mode 100644 index 000000000..15c8a23dc --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/maybe_threads.cc @@ -0,0 +1,133 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Paul Menage +// +// Some wrappers for pthread functions so that we can be LD_PRELOADed +// against non-pthreads apps. +// +// This module will behave very strangely if some pthreads functions +// exist and others don't. + +#include "config.h" +#include +#include // for memcmp +#include // for __isthreaded on FreeBSD +// We don't actually need strings. But including this header seems to +// stop the compiler trying to short-circuit our pthreads existence +// tests and claiming that the address of a function is always +// non-zero. I have no idea why ... +#include +#include "maybe_threads.h" +#include "base/basictypes.h" + +// __THROW is defined in glibc systems. It means, counter-intuitively, +// "This function will never throw an exception." It's an optional +// optimization tool, but we may need to use it to match glibc prototypes. +#ifndef __THROW // I guess we're not on a glibc system +# define __THROW // __THROW is just an optimization, so ok to make it "" +#endif + +// These are the methods we're going to conditionally include. +extern "C" { + int pthread_key_create (pthread_key_t*, void (*)(void*)) + __THROW ATTRIBUTE_WEAK; + void *pthread_getspecific(pthread_key_t) + __THROW ATTRIBUTE_WEAK; + int pthread_setspecific(pthread_key_t, const void*) + __THROW ATTRIBUTE_WEAK; + int pthread_once(pthread_once_t *, void (*)(void)) + ATTRIBUTE_WEAK; +} + +#define MAX_PERTHREAD_VALS 16 +static void *perftools_pthread_specific_vals[MAX_PERTHREAD_VALS]; +static int next_key; + +int perftools_pthread_key_create(pthread_key_t *key, + void (*destr_function) (void *)) { + if (pthread_key_create) { + return pthread_key_create(key, destr_function); + } else { + assert(next_key < MAX_PERTHREAD_VALS); + *key = (pthread_key_t)(next_key++); + return 0; + } +} + +void *perftools_pthread_getspecific(pthread_key_t key) { + if (pthread_getspecific) { + return pthread_getspecific(key); + } else { + return perftools_pthread_specific_vals[(int)key]; + } +} + +int perftools_pthread_setspecific(pthread_key_t key, void *val) { + if (pthread_setspecific) { + return pthread_setspecific(key, val); + } else { + perftools_pthread_specific_vals[(int)key] = val; + return 0; + } +} + + +static pthread_once_t pthread_once_init = PTHREAD_ONCE_INIT; +int perftools_pthread_once(pthread_once_t *ctl, + void (*init_routine) (void)) { +#ifdef __FreeBSD__ + // On __FreeBSD__, calling pthread_once on a system that is not + // linked with -pthread is silently a noop. :-( Luckily, we have a + // workaround: FreeBSD exposes __isthreaded in , which is + // set to 1 when the first thread is spawned. So on those systems, + // we can use our own separate pthreads-once mechanism, which is + // used until __isthreaded is 1 (which will never be true if the app + // is not linked with -pthread). + static bool pthread_once_ran_before_threads = false; + if (pthread_once_ran_before_threads) { + return 0; + } + if (!__isthreaded) { + init_routine(); + pthread_once_ran_before_threads = true; + return 0; + } +#endif + if (pthread_once) { + return pthread_once(ctl, init_routine); + } else { + if (memcmp(ctl, &pthread_once_init, sizeof(*ctl)) == 0) { + init_routine(); + ++*(char*)(ctl); // make it so it's no longer equal to init + } + return 0; + } +} diff --git a/src/thirdparty/gperftools-2.0/src/maybe_threads.h b/src/thirdparty/gperftools-2.0/src/maybe_threads.h new file mode 100644 index 000000000..5f35e00cd --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/maybe_threads.h @@ -0,0 +1,52 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Paul Menage + +//------------------------------------------------------------------- +// Some wrappers for pthread functions so that we can be LD_PRELOADed +// against non-pthreads apps. +//------------------------------------------------------------------- + +#ifndef GOOGLE_MAYBE_THREADS_H_ +#define GOOGLE_MAYBE_THREADS_H_ + +#ifdef HAVE_PTHREAD +#include +#endif + +int perftools_pthread_key_create(pthread_key_t *key, + void (*destr_function) (void *)); +void *perftools_pthread_getspecific(pthread_key_t key); +int perftools_pthread_setspecific(pthread_key_t key, void *val); +int perftools_pthread_once(pthread_once_t *ctl, + void (*init_routine) (void)); + +#endif /* GOOGLE_MAYBE_THREADS_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/memfs_malloc.cc b/src/thirdparty/gperftools-2.0/src/memfs_malloc.cc new file mode 100644 index 000000000..b59f6d9e4 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/memfs_malloc.cc @@ -0,0 +1,267 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Arun Sharma +// +// A tcmalloc system allocator that uses a memory based filesystem such as +// tmpfs or hugetlbfs +// +// Since these only exist on linux, we only register this allocator there. + +#ifdef __linux + +#include +#include // for errno, EINVAL +#include // for PRId64 +#include // for PATH_MAX +#include // for size_t, NULL +#ifdef HAVE_STDINT_H +#include // for int64_t, uintptr_t +#endif +#include // for snprintf +#include // for mkstemp +#include // for strerror +#include // for mmap, MAP_FAILED, etc +#include // for fstatfs, statfs +#include // for ftruncate, off_t, unlink +#include // for operator new +#include + +#include +#include "base/basictypes.h" +#include "base/googleinit.h" +#include "base/sysinfo.h" +#include "internal_logging.h" + +// TODO(sanjay): Move the code below into the tcmalloc namespace +using tcmalloc::kLog; +using tcmalloc::kCrash; +using tcmalloc::Log; +using std::string; + +DEFINE_string(memfs_malloc_path, EnvToString("TCMALLOC_MEMFS_MALLOC_PATH", ""), + "Path where hugetlbfs or tmpfs is mounted. The caller is " + "responsible for ensuring that the path is unique and does " + "not conflict with another process"); +DEFINE_int64(memfs_malloc_limit_mb, + EnvToInt("TCMALLOC_MEMFS_LIMIT_MB", 0), + "Limit total allocation size to the " + "specified number of MiB. 0 == no limit."); +DEFINE_bool(memfs_malloc_abort_on_fail, + EnvToBool("TCMALLOC_MEMFS_ABORT_ON_FAIL", false), + "abort() whenever memfs_malloc fails to satisfy an allocation " + "for any reason."); +DEFINE_bool(memfs_malloc_ignore_mmap_fail, + EnvToBool("TCMALLOC_MEMFS_IGNORE_MMAP_FAIL", false), + "Ignore failures from mmap"); +DEFINE_bool(memfs_malloc_map_private, + EnvToBool("TCMALLOC_MEMFS_MAP_PRIVATE", false), + "Use MAP_PRIVATE with mmap"); + +// Hugetlbfs based allocator for tcmalloc +class HugetlbSysAllocator: public SysAllocator { +public: + explicit HugetlbSysAllocator(SysAllocator* fallback) + : failed_(true), // To disable allocator until Initialize() is called. + big_page_size_(0), + hugetlb_fd_(-1), + hugetlb_base_(0), + fallback_(fallback) { + } + + void* Alloc(size_t size, size_t *actual_size, size_t alignment); + bool Initialize(); + + bool failed_; // Whether failed to allocate memory. + +private: + void* AllocInternal(size_t size, size_t *actual_size, size_t alignment); + + int64 big_page_size_; + int hugetlb_fd_; // file descriptor for hugetlb + off_t hugetlb_base_; + + SysAllocator* fallback_; // Default system allocator to fall back to. +}; +static char hugetlb_space[sizeof(HugetlbSysAllocator)]; + +// No locking needed here since we assume that tcmalloc calls +// us with an internal lock held (see tcmalloc/system-alloc.cc). +void* HugetlbSysAllocator::Alloc(size_t size, size_t *actual_size, + size_t alignment) { + if (failed_) { + return fallback_->Alloc(size, actual_size, alignment); + } + + // We don't respond to allocation requests smaller than big_page_size_ unless + // the caller is ok to take more than they asked for. Used by MetaDataAlloc. + if (actual_size == NULL && size < big_page_size_) { + return fallback_->Alloc(size, actual_size, alignment); + } + + // Enforce huge page alignment. Be careful to deal with overflow. + size_t new_alignment = alignment; + if (new_alignment < big_page_size_) new_alignment = big_page_size_; + size_t aligned_size = ((size + new_alignment - 1) / + new_alignment) * new_alignment; + if (aligned_size < size) { + return fallback_->Alloc(size, actual_size, alignment); + } + + void* result = AllocInternal(aligned_size, actual_size, new_alignment); + if (result != NULL) { + return result; + } + Log(kLog, __FILE__, __LINE__, + "HugetlbSysAllocator: (failed, allocated)", failed_, hugetlb_base_); + if (FLAGS_memfs_malloc_abort_on_fail) { + Log(kCrash, __FILE__, __LINE__, + "memfs_malloc_abort_on_fail is set"); + } + return fallback_->Alloc(size, actual_size, alignment); +} + +void* HugetlbSysAllocator::AllocInternal(size_t size, size_t* actual_size, + size_t alignment) { + // Ask for extra memory if alignment > pagesize + size_t extra = 0; + if (alignment > big_page_size_) { + extra = alignment - big_page_size_; + } + + // Test if this allocation would put us over the limit. + off_t limit = FLAGS_memfs_malloc_limit_mb*1024*1024; + if (limit > 0 && hugetlb_base_ + size + extra > limit) { + // Disable the allocator when there's less than one page left. + if (limit - hugetlb_base_ < big_page_size_) { + Log(kLog, __FILE__, __LINE__, "reached memfs_malloc_limit_mb"); + failed_ = true; + } + else { + Log(kLog, __FILE__, __LINE__, + "alloc too large (size, bytes left)", size, limit-hugetlb_base_); + } + return NULL; + } + + // This is not needed for hugetlbfs, but needed for tmpfs. Annoyingly + // hugetlbfs returns EINVAL for ftruncate. + int ret = ftruncate(hugetlb_fd_, hugetlb_base_ + size + extra); + if (ret != 0 && errno != EINVAL) { + Log(kLog, __FILE__, __LINE__, + "ftruncate failed", strerror(errno)); + failed_ = true; + return NULL; + } + + // Note: size + extra does not overflow since: + // size + alignment < (1<(MAP_FAILED)) { + if (!FLAGS_memfs_malloc_ignore_mmap_fail) { + Log(kLog, __FILE__, __LINE__, + "mmap failed (size, error)", size + extra, strerror(errno)); + failed_ = true; + } + return NULL; + } + uintptr_t ptr = reinterpret_cast(result); + + // Adjust the return memory so it is aligned + size_t adjust = 0; + if ((ptr & (alignment - 1)) != 0) { + adjust = alignment - (ptr & (alignment - 1)); + } + ptr += adjust; + hugetlb_base_ += (size + extra); + + if (actual_size) { + *actual_size = size + extra - adjust; + } + + return reinterpret_cast(ptr); +} + +bool HugetlbSysAllocator::Initialize() { + char path[PATH_MAX]; + const int pathlen = FLAGS_memfs_malloc_path.size(); + if (pathlen + 8 > sizeof(path)) { + Log(kCrash, __FILE__, __LINE__, "XX fatal: memfs_malloc_path too long"); + return false; + } + memcpy(path, FLAGS_memfs_malloc_path.data(), pathlen); + memcpy(path + pathlen, ".XXXXXX", 8); // Also copies terminating \0 + + int hugetlb_fd = mkstemp(path); + if (hugetlb_fd == -1) { + Log(kLog, __FILE__, __LINE__, + "warning: unable to create memfs_malloc_path", + path, strerror(errno)); + return false; + } + + // Cleanup memory on process exit + if (unlink(path) == -1) { + Log(kCrash, __FILE__, __LINE__, + "fatal: error unlinking memfs_malloc_path", path, strerror(errno)); + return false; + } + + // Use fstatfs to figure out the default page size for memfs + struct statfs sfs; + if (fstatfs(hugetlb_fd, &sfs) == -1) { + Log(kCrash, __FILE__, __LINE__, + "fatal: error fstatfs of memfs_malloc_path", strerror(errno)); + return false; + } + int64 page_size = sfs.f_bsize; + + hugetlb_fd_ = hugetlb_fd; + big_page_size_ = page_size; + failed_ = false; + return true; +} + +REGISTER_MODULE_INITIALIZER(memfs_malloc, { + if (FLAGS_memfs_malloc_path.length()) { + SysAllocator* alloc = MallocExtension::instance()->GetSystemAllocator(); + HugetlbSysAllocator* hp = new (hugetlb_space) HugetlbSysAllocator(alloc); + if (hp->Initialize()) { + MallocExtension::instance()->SetSystemAllocator(hp); + } + } +}); + +#endif /* ifdef __linux */ diff --git a/src/thirdparty/gperftools-2.0/src/memory_region_map.cc b/src/thirdparty/gperftools-2.0/src/memory_region_map.cc new file mode 100644 index 000000000..1a8117248 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/memory_region_map.cc @@ -0,0 +1,652 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Maxim Lifantsev + */ + +// +// Background and key design points of MemoryRegionMap. +// +// MemoryRegionMap is a low-level module with quite atypical requirements that +// result in some degree of non-triviality of the implementation and design. +// +// MemoryRegionMap collects info about *all* memory regions created with +// mmap, munmap, mremap, sbrk. +// They key word above is 'all': all that are happening in a process +// during its lifetime frequently starting even before global object +// constructor execution. +// +// This is needed by the primary client of MemoryRegionMap: +// HeapLeakChecker uses the regions and the associated stack traces +// to figure out what part of the memory is the heap: +// if MemoryRegionMap were to miss some (early) regions, leak checking would +// stop working correctly. +// +// To accomplish the goal of functioning before/during global object +// constructor execution MemoryRegionMap is done as a singleton service +// that relies on own on-demand initialized static constructor-less data, +// and only relies on other low-level modules that can also function properly +// even before global object constructors run. +// +// Accomplishing the goal of collecting data about all mmap, munmap, mremap, +// sbrk occurrences is a more involved: conceptually to do this one needs to +// record some bits of data in particular about any mmap or sbrk call, +// but to do that one needs to allocate memory for that data at some point, +// but all memory allocations in the end themselves come from an mmap +// or sbrk call (that's how the address space of the process grows). +// +// Also note that we need to do all the above recording from +// within an mmap/sbrk hook which is sometimes/frequently is made by a memory +// allocator, including the allocator MemoryRegionMap itself must rely on. +// In the case of heap-checker usage this includes even the very first +// mmap/sbrk call happening in the program: heap-checker gets activated due to +// a link-time installed mmap/sbrk hook and it initializes MemoryRegionMap +// and asks it to record info about this very first call right from that +// very first hook invocation. +// +// MemoryRegionMap is doing its memory allocations via LowLevelAlloc: +// unlike more complex standard memory allocator, LowLevelAlloc cooperates with +// MemoryRegionMap by not holding any of its own locks while it calls mmap +// to get memory, thus we are able to call LowLevelAlloc from +// our mmap/sbrk hooks without causing a deadlock in it. +// For the same reason of deadlock prevention the locking in MemoryRegionMap +// itself is write-recursive which is an exception to Google's mutex usage. +// +// We still need to break the infinite cycle of mmap calling our hook, +// which asks LowLevelAlloc for memory to record this mmap, +// which (sometimes) causes mmap, which calls our hook, and so on. +// We do this as follows: on a recursive call of MemoryRegionMap's +// mmap/sbrk/mremap hook we record the data about the allocation in a +// static fixed-sized stack (saved_regions), when the recursion unwinds +// but before returning from the outer hook call we unwind this stack and +// move the data from saved_regions to its permanent place in the RegionSet, +// which can cause more allocations and mmap-s and recursion and unwinding, +// but the whole process ends eventually due to the fact that for the small +// allocations we are doing LowLevelAlloc reuses one mmap call and parcels out +// the memory it created to satisfy several of our allocation requests. +// + +// ========================================================================= // + +#include + +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_INTTYPES_H +#include +#endif +#ifdef HAVE_MMAP +#include +#elif !defined(MAP_FAILED) +#define MAP_FAILED -1 // the only thing we need from mman.h +#endif +#ifdef HAVE_PTHREAD +#include // for pthread_t, pthread_self() +#endif +#include + +#include +#include + +#include "memory_region_map.h" + +#include "base/logging.h" +#include "base/low_level_alloc.h" +#include "malloc_hook-inl.h" + +#include +#include + +// MREMAP_FIXED is a linux extension. How it's used in this file, +// setting it to 0 is equivalent to saying, "This feature isn't +// supported", which is right. +#ifndef MREMAP_FIXED +# define MREMAP_FIXED 0 +#endif + +using std::max; + +// ========================================================================= // + +int MemoryRegionMap::client_count_ = 0; +int MemoryRegionMap::max_stack_depth_ = 0; +MemoryRegionMap::RegionSet* MemoryRegionMap::regions_ = NULL; +LowLevelAlloc::Arena* MemoryRegionMap::arena_ = NULL; +SpinLock MemoryRegionMap::lock_(SpinLock::LINKER_INITIALIZED); +SpinLock MemoryRegionMap::owner_lock_( // ACQUIRED_AFTER(lock_) + SpinLock::LINKER_INITIALIZED); +int MemoryRegionMap::recursion_count_ = 0; // GUARDED_BY(owner_lock_) +pthread_t MemoryRegionMap::lock_owner_tid_; // GUARDED_BY(owner_lock_) +int64 MemoryRegionMap::map_size_ = 0; +int64 MemoryRegionMap::unmap_size_ = 0; + +// ========================================================================= // + +// Simple hook into execution of global object constructors, +// so that we do not call pthread_self() when it does not yet work. +static bool libpthread_initialized = false; +static bool initializer = (libpthread_initialized = true, true); + +static inline bool current_thread_is(pthread_t should_be) { + // Before main() runs, there's only one thread, so we're always that thread + if (!libpthread_initialized) return true; + // this starts working only sometime well into global constructor execution: + return pthread_equal(pthread_self(), should_be); +} + +// ========================================================================= // + +// Constructor-less place-holder to store a RegionSet in. +union MemoryRegionMap::RegionSetRep { + char rep[sizeof(RegionSet)]; + void* align_it; // do not need a better alignment for 'rep' than this + RegionSet* region_set() { return reinterpret_cast(rep); } +}; + +// The bytes where MemoryRegionMap::regions_ will point to. +// We use RegionSetRep with noop c-tor so that global construction +// does not interfere. +static MemoryRegionMap::RegionSetRep regions_rep; + +// ========================================================================= // + +// Has InsertRegionLocked been called recursively +// (or rather should we *not* use regions_ to record a hooked mmap). +static bool recursive_insert = false; + +void MemoryRegionMap::Init(int max_stack_depth) { + RAW_VLOG(10, "MemoryRegionMap Init"); + RAW_CHECK(max_stack_depth >= 0, ""); + // Make sure we don't overflow the memory in region stacks: + RAW_CHECK(max_stack_depth <= kMaxStackDepth, + "need to increase kMaxStackDepth?"); + Lock(); + client_count_ += 1; + max_stack_depth_ = max(max_stack_depth_, max_stack_depth); + if (client_count_ > 1) { + // not first client: already did initialization-proper + Unlock(); + RAW_VLOG(10, "MemoryRegionMap Init increment done"); + return; + } + // Set our hooks and make sure they were installed: + RAW_CHECK(MallocHook::AddMmapHook(&MmapHook), ""); + RAW_CHECK(MallocHook::AddMremapHook(&MremapHook), ""); + RAW_CHECK(MallocHook::AddSbrkHook(&SbrkHook), ""); + RAW_CHECK(MallocHook::AddMunmapHook(&MunmapHook), ""); + // We need to set recursive_insert since the NewArena call itself + // will already do some allocations with mmap which our hooks will catch + // recursive_insert allows us to buffer info about these mmap calls. + // Note that Init() can be (and is) sometimes called + // already from within an mmap/sbrk hook. + recursive_insert = true; + arena_ = LowLevelAlloc::NewArena(0, LowLevelAlloc::DefaultArena()); + recursive_insert = false; + HandleSavedRegionsLocked(&InsertRegionLocked); // flush the buffered ones + // Can't instead use HandleSavedRegionsLocked(&DoInsertRegionLocked) before + // recursive_insert = false; as InsertRegionLocked will also construct + // regions_ on demand for us. + Unlock(); + RAW_VLOG(10, "MemoryRegionMap Init done"); +} + +bool MemoryRegionMap::Shutdown() { + RAW_VLOG(10, "MemoryRegionMap Shutdown"); + Lock(); + RAW_CHECK(client_count_ > 0, ""); + client_count_ -= 1; + if (client_count_ != 0) { // not last client; need not really shutdown + Unlock(); + RAW_VLOG(10, "MemoryRegionMap Shutdown decrement done"); + return true; + } + RAW_CHECK(MallocHook::RemoveMmapHook(&MmapHook), ""); + RAW_CHECK(MallocHook::RemoveMremapHook(&MremapHook), ""); + RAW_CHECK(MallocHook::RemoveSbrkHook(&SbrkHook), ""); + RAW_CHECK(MallocHook::RemoveMunmapHook(&MunmapHook), ""); + if (regions_) regions_->~RegionSet(); + regions_ = NULL; + bool deleted_arena = LowLevelAlloc::DeleteArena(arena_); + if (deleted_arena) { + arena_ = 0; + } else { + RAW_LOG(WARNING, "Can't delete LowLevelAlloc arena: it's being used"); + } + Unlock(); + RAW_VLOG(10, "MemoryRegionMap Shutdown done"); + return deleted_arena; +} + +// Invariants (once libpthread_initialized is true): +// * While lock_ is not held, recursion_count_ is 0 (and +// lock_owner_tid_ is the previous owner, but we don't rely on +// that). +// * recursion_count_ and lock_owner_tid_ are only written while +// both lock_ and owner_lock_ are held. They may be read under +// just owner_lock_. +// * At entry and exit of Lock() and Unlock(), the current thread +// owns lock_ iff pthread_equal(lock_owner_tid_, pthread_self()) +// && recursion_count_ > 0. +void MemoryRegionMap::Lock() { + { + SpinLockHolder l(&owner_lock_); + if (recursion_count_ > 0 && current_thread_is(lock_owner_tid_)) { + RAW_CHECK(lock_.IsHeld(), "Invariants violated"); + recursion_count_++; + RAW_CHECK(recursion_count_ <= 5, + "recursive lock nesting unexpectedly deep"); + return; + } + } + lock_.Lock(); + { + SpinLockHolder l(&owner_lock_); + RAW_CHECK(recursion_count_ == 0, + "Last Unlock didn't reset recursion_count_"); + if (libpthread_initialized) + lock_owner_tid_ = pthread_self(); + recursion_count_ = 1; + } +} + +void MemoryRegionMap::Unlock() { + SpinLockHolder l(&owner_lock_); + RAW_CHECK(recursion_count_ > 0, "unlock when not held"); + RAW_CHECK(lock_.IsHeld(), + "unlock when not held, and recursion_count_ is wrong"); + RAW_CHECK(current_thread_is(lock_owner_tid_), "unlock by non-holder"); + recursion_count_--; + if (recursion_count_ == 0) { + lock_.Unlock(); + } +} + +bool MemoryRegionMap::LockIsHeld() { + SpinLockHolder l(&owner_lock_); + return lock_.IsHeld() && current_thread_is(lock_owner_tid_); +} + +const MemoryRegionMap::Region* +MemoryRegionMap::DoFindRegionLocked(uintptr_t addr) { + RAW_CHECK(LockIsHeld(), "should be held (by this thread)"); + if (regions_ != NULL) { + Region sample; + sample.SetRegionSetKey(addr); + RegionSet::iterator region = regions_->lower_bound(sample); + if (region != regions_->end()) { + RAW_CHECK(addr <= region->end_addr, ""); + if (region->start_addr <= addr && addr < region->end_addr) { + return &(*region); + } + } + } + return NULL; +} + +bool MemoryRegionMap::FindRegion(uintptr_t addr, Region* result) { + Lock(); + const Region* region = DoFindRegionLocked(addr); + if (region != NULL) *result = *region; // create it as an independent copy + Unlock(); + return region != NULL; +} + +bool MemoryRegionMap::FindAndMarkStackRegion(uintptr_t stack_top, + Region* result) { + Lock(); + const Region* region = DoFindRegionLocked(stack_top); + if (region != NULL) { + RAW_VLOG(10, "Stack at %p is inside region %p..%p", + reinterpret_cast(stack_top), + reinterpret_cast(region->start_addr), + reinterpret_cast(region->end_addr)); + const_cast(region)->set_is_stack(); // now we know + // cast is safe (set_is_stack does not change the set ordering key) + *result = *region; // create *result as an independent copy + } + Unlock(); + return region != NULL; +} + +MemoryRegionMap::RegionIterator MemoryRegionMap::BeginRegionLocked() { + RAW_CHECK(LockIsHeld(), "should be held (by this thread)"); + RAW_CHECK(regions_ != NULL, ""); + return regions_->begin(); +} + +MemoryRegionMap::RegionIterator MemoryRegionMap::EndRegionLocked() { + RAW_CHECK(LockIsHeld(), "should be held (by this thread)"); + RAW_CHECK(regions_ != NULL, ""); + return regions_->end(); +} + +inline void MemoryRegionMap::DoInsertRegionLocked(const Region& region) { + RAW_VLOG(12, "Inserting region %p..%p from %p", + reinterpret_cast(region.start_addr), + reinterpret_cast(region.end_addr), + reinterpret_cast(region.caller())); + RegionSet::const_iterator i = regions_->lower_bound(region); + if (i != regions_->end() && i->start_addr <= region.start_addr) { + RAW_DCHECK(region.end_addr <= i->end_addr, ""); // lower_bound ensures this + return; // 'region' is a subset of an already recorded region; do nothing + // We can be stricter and allow this only when *i has been created via + // an mmap with MAP_NORESERVE flag set. + } + if (DEBUG_MODE) { + RAW_CHECK(i == regions_->end() || !region.Overlaps(*i), + "Wow, overlapping memory regions"); + Region sample; + sample.SetRegionSetKey(region.start_addr); + i = regions_->lower_bound(sample); + RAW_CHECK(i == regions_->end() || !region.Overlaps(*i), + "Wow, overlapping memory regions"); + } + region.AssertIsConsistent(); // just making sure + // This inserts and allocates permanent storage for region + // and its call stack data: it's safe to do it now: + regions_->insert(region); + RAW_VLOG(12, "Inserted region %p..%p :", + reinterpret_cast(region.start_addr), + reinterpret_cast(region.end_addr)); + if (VLOG_IS_ON(12)) LogAllLocked(); +} + +// These variables are local to MemoryRegionMap::InsertRegionLocked() +// and MemoryRegionMap::HandleSavedRegionsLocked() +// and are file-level to ensure that they are initialized at load time. + +// Number of unprocessed region inserts. +static int saved_regions_count = 0; + +// Unprocessed inserts (must be big enough to hold all allocations that can +// be caused by a InsertRegionLocked call). +// Region has no constructor, so that c-tor execution does not interfere +// with the any-time use of the static memory behind saved_regions. +static MemoryRegionMap::Region saved_regions[20]; + +inline void MemoryRegionMap::HandleSavedRegionsLocked( + void (*insert_func)(const Region& region)) { + while (saved_regions_count > 0) { + // Making a local-var copy of the region argument to insert_func + // including its stack (w/o doing any memory allocations) is important: + // in many cases the memory in saved_regions + // will get written-to during the (*insert_func)(r) call below. + Region r = saved_regions[--saved_regions_count]; + (*insert_func)(r); + } +} + +inline void MemoryRegionMap::InsertRegionLocked(const Region& region) { + RAW_CHECK(LockIsHeld(), "should be held (by this thread)"); + // We can be called recursively, because RegionSet constructor + // and DoInsertRegionLocked() (called below) can call the allocator. + // recursive_insert tells us if that's the case. When this happens, + // region insertion information is recorded in saved_regions[], + // and taken into account when the recursion unwinds. + // Do the insert: + if (recursive_insert) { // recursion: save in saved_regions + RAW_VLOG(12, "Saving recursive insert of region %p..%p from %p", + reinterpret_cast(region.start_addr), + reinterpret_cast(region.end_addr), + reinterpret_cast(region.caller())); + RAW_CHECK(saved_regions_count < arraysize(saved_regions), ""); + // Copy 'region' to saved_regions[saved_regions_count] + // together with the contents of its call_stack, + // then increment saved_regions_count. + saved_regions[saved_regions_count++] = region; + } else { // not a recusrive call + if (regions_ == NULL) { // init regions_ + RAW_VLOG(12, "Initializing region set"); + regions_ = regions_rep.region_set(); + recursive_insert = true; + new(regions_) RegionSet(); + HandleSavedRegionsLocked(&DoInsertRegionLocked); + recursive_insert = false; + } + recursive_insert = true; + // Do the actual insertion work to put new regions into regions_: + DoInsertRegionLocked(region); + HandleSavedRegionsLocked(&DoInsertRegionLocked); + recursive_insert = false; + } +} + +// We strip out different number of stack frames in debug mode +// because less inlining happens in that case +#ifdef NDEBUG +static const int kStripFrames = 1; +#else +static const int kStripFrames = 3; +#endif + +void MemoryRegionMap::RecordRegionAddition(const void* start, size_t size) { + // Record start/end info about this memory acquisition call in a new region: + Region region; + region.Create(start, size); + // First get the call stack info into the local varible 'region': + const int depth = + max_stack_depth_ > 0 + ? MallocHook::GetCallerStackTrace(const_cast(region.call_stack), + max_stack_depth_, kStripFrames + 1) + : 0; + region.set_call_stack_depth(depth); // record stack info fully + RAW_VLOG(10, "New global region %p..%p from %p", + reinterpret_cast(region.start_addr), + reinterpret_cast(region.end_addr), + reinterpret_cast(region.caller())); + // Note: none of the above allocates memory. + Lock(); // recursively lock + map_size_ += size; + InsertRegionLocked(region); + // This will (eventually) allocate storage for and copy over the stack data + // from region.call_stack_data_ that is pointed by region.call_stack(). + Unlock(); +} + +void MemoryRegionMap::RecordRegionRemoval(const void* start, size_t size) { + Lock(); + if (recursive_insert) { + // First remove the removed region from saved_regions, if it's + // there, to prevent overrunning saved_regions in recursive + // map/unmap call sequences, and also from later inserting regions + // which have already been unmapped. + uintptr_t start_addr = reinterpret_cast(start); + uintptr_t end_addr = start_addr + size; + int put_pos = 0; + int old_count = saved_regions_count; + for (int i = 0; i < old_count; ++i, ++put_pos) { + Region& r = saved_regions[i]; + if (r.start_addr == start_addr && r.end_addr == end_addr) { + // An exact match, so it's safe to remove. + --saved_regions_count; + --put_pos; + RAW_VLOG(10, ("Insta-Removing saved region %p..%p; " + "now have %d saved regions"), + reinterpret_cast(start_addr), + reinterpret_cast(end_addr), + saved_regions_count); + } else { + if (put_pos < i) { + saved_regions[put_pos] = saved_regions[i]; + } + } + } + } + if (regions_ == NULL) { // We must have just unset the hooks, + // but this thread was already inside the hook. + Unlock(); + return; + } + if (!recursive_insert) { + HandleSavedRegionsLocked(&InsertRegionLocked); + } + // first handle adding saved regions if any + uintptr_t start_addr = reinterpret_cast(start); + uintptr_t end_addr = start_addr + size; + // subtract start_addr, end_addr from all the regions + RAW_VLOG(10, "Removing global region %p..%p; have %"PRIuS" regions", + reinterpret_cast(start_addr), + reinterpret_cast(end_addr), + regions_->size()); + Region sample; + sample.SetRegionSetKey(start_addr); + // Only iterate over the regions that might overlap start_addr..end_addr: + for (RegionSet::iterator region = regions_->lower_bound(sample); + region != regions_->end() && region->start_addr < end_addr; + /*noop*/) { + RAW_VLOG(13, "Looking at region %p..%p", + reinterpret_cast(region->start_addr), + reinterpret_cast(region->end_addr)); + if (start_addr <= region->start_addr && + region->end_addr <= end_addr) { // full deletion + RAW_VLOG(12, "Deleting region %p..%p", + reinterpret_cast(region->start_addr), + reinterpret_cast(region->end_addr)); + RegionSet::iterator d = region; + ++region; + regions_->erase(d); + continue; + } else if (region->start_addr < start_addr && + end_addr < region->end_addr) { // cutting-out split + RAW_VLOG(12, "Splitting region %p..%p in two", + reinterpret_cast(region->start_addr), + reinterpret_cast(region->end_addr)); + // Make another region for the start portion: + // The new region has to be the start portion because we can't + // just modify region->end_addr as it's the sorting key. + Region r = *region; + r.set_end_addr(start_addr); + InsertRegionLocked(r); + // cut *region from start: + const_cast(*region).set_start_addr(end_addr); + } else if (end_addr > region->start_addr && + start_addr <= region->start_addr) { // cut from start + RAW_VLOG(12, "Start-chopping region %p..%p", + reinterpret_cast(region->start_addr), + reinterpret_cast(region->end_addr)); + const_cast(*region).set_start_addr(end_addr); + } else if (start_addr > region->start_addr && + start_addr < region->end_addr) { // cut from end + RAW_VLOG(12, "End-chopping region %p..%p", + reinterpret_cast(region->start_addr), + reinterpret_cast(region->end_addr)); + // Can't just modify region->end_addr (it's the sorting key): + Region r = *region; + r.set_end_addr(start_addr); + RegionSet::iterator d = region; + ++region; + // It's safe to erase before inserting since r is independent of *d: + // r contains an own copy of the call stack: + regions_->erase(d); + InsertRegionLocked(r); + continue; + } + ++region; + } + RAW_VLOG(12, "Removed region %p..%p; have %"PRIuS" regions", + reinterpret_cast(start_addr), + reinterpret_cast(end_addr), + regions_->size()); + if (VLOG_IS_ON(12)) LogAllLocked(); + unmap_size_ += size; + Unlock(); +} + +void MemoryRegionMap::MmapHook(const void* result, + const void* start, size_t size, + int prot, int flags, + int fd, off_t offset) { + // TODO(maxim): replace all 0x%"PRIxS" by %p when RAW_VLOG uses a safe + // snprintf reimplementation that does not malloc to pretty-print NULL + RAW_VLOG(10, "MMap = 0x%"PRIxPTR" of %"PRIuS" at %"PRIu64" " + "prot %d flags %d fd %d offs %"PRId64, + reinterpret_cast(result), size, + reinterpret_cast(start), prot, flags, fd, + static_cast(offset)); + if (result != reinterpret_cast(MAP_FAILED) && size != 0) { + RecordRegionAddition(result, size); + } +} + +void MemoryRegionMap::MunmapHook(const void* ptr, size_t size) { + RAW_VLOG(10, "MUnmap of %p %"PRIuS"", ptr, size); + if (size != 0) { + RecordRegionRemoval(ptr, size); + } +} + +void MemoryRegionMap::MremapHook(const void* result, + const void* old_addr, size_t old_size, + size_t new_size, int flags, + const void* new_addr) { + RAW_VLOG(10, "MRemap = 0x%"PRIxPTR" of 0x%"PRIxPTR" %"PRIuS" " + "to %"PRIuS" flags %d new_addr=0x%"PRIxPTR, + (uintptr_t)result, (uintptr_t)old_addr, + old_size, new_size, flags, + flags & MREMAP_FIXED ? (uintptr_t)new_addr : 0); + if (result != reinterpret_cast(-1)) { + RecordRegionRemoval(old_addr, old_size); + RecordRegionAddition(result, new_size); + } +} + +extern "C" void* __sbrk(ptrdiff_t increment); // defined in libc + +void MemoryRegionMap::SbrkHook(const void* result, ptrdiff_t increment) { + RAW_VLOG(10, "Sbrk = 0x%"PRIxPTR" of %"PRIdS"", (uintptr_t)result, increment); + if (result != reinterpret_cast(-1)) { + if (increment > 0) { + void* new_end = sbrk(0); + RecordRegionAddition(result, reinterpret_cast(new_end) - + reinterpret_cast(result)); + } else if (increment < 0) { + void* new_end = sbrk(0); + RecordRegionRemoval(new_end, reinterpret_cast(result) - + reinterpret_cast(new_end)); + } + } +} + +void MemoryRegionMap::LogAllLocked() { + RAW_CHECK(LockIsHeld(), "should be held (by this thread)"); + RAW_LOG(INFO, "List of regions:"); + uintptr_t previous = 0; + for (RegionSet::const_iterator r = regions_->begin(); + r != regions_->end(); ++r) { + RAW_LOG(INFO, "Memory region 0x%"PRIxPTR"..0x%"PRIxPTR" " + "from 0x%"PRIxPTR" stack=%d", + r->start_addr, r->end_addr, r->caller(), r->is_stack); + RAW_CHECK(previous < r->end_addr, "wow, we messed up the set order"); + // this must be caused by uncontrolled recursive operations on regions_ + previous = r->end_addr; + } + RAW_LOG(INFO, "End of regions list"); +} diff --git a/src/thirdparty/gperftools-2.0/src/memory_region_map.h b/src/thirdparty/gperftools-2.0/src/memory_region_map.h new file mode 100644 index 000000000..988ea7073 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/memory_region_map.h @@ -0,0 +1,340 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Maxim Lifantsev + */ + +#ifndef BASE_MEMORY_REGION_MAP_H_ +#define BASE_MEMORY_REGION_MAP_H_ + +#include + +#ifdef HAVE_PTHREAD +#include +#endif +#include +#include +#include "base/stl_allocator.h" +#include "base/spinlock.h" +#include "base/thread_annotations.h" +#include "base/low_level_alloc.h" + +// TODO(maxim): add a unittest: +// execute a bunch of mmaps and compare memory map what strace logs +// execute a bunch of mmap/munmup and compare memory map with +// own accounting of what those mmaps generated + +// Thread-safe class to collect and query the map of all memory regions +// in a process that have been created with mmap, munmap, mremap, sbrk. +// For each memory region, we keep track of (and provide to users) +// the stack trace that allocated that memory region. +// The recorded stack trace depth is bounded by +// a user-supplied max_stack_depth parameter of Init(). +// After initialization with Init() +// (which can happened even before global object constructor execution) +// we collect the map by installing and monitoring MallocHook-s +// to mmap, munmap, mremap, sbrk. +// At any time one can query this map via provided interface. +// For more details on the design of MemoryRegionMap +// see the comment at the top of our .cc file. +class MemoryRegionMap { + private: + // Max call stack recording depth supported by Init(). Set it to be + // high enough for all our clients. Note: we do not define storage + // for this (doing that requires special handling in windows), so + // don't take the address of it! + static const int kMaxStackDepth = 32; + + public: + // interface ================================================================ + + // Every client of MemoryRegionMap must call Init() before first use, + // and Shutdown() after last use. This allows us to reference count + // this (singleton) class properly. MemoryRegionMap assumes it's the + // only client of MallocHooks, so a client can only register other + // MallocHooks after calling Init() and must unregister them before + // calling Shutdown(). + + // Initialize this module to record memory allocation stack traces. + // Stack traces that have more than "max_stack_depth" frames + // are automatically shrunk to "max_stack_depth" when they are recorded. + // Init() can be called more than once w/o harm, largest max_stack_depth + // will be the effective one. + // It will install mmap, munmap, mremap, sbrk hooks + // and initialize arena_ and our hook and locks, hence one can use + // MemoryRegionMap::Lock()/Unlock() to manage the locks. + // Uses Lock/Unlock inside. + static void Init(int max_stack_depth); + + // Try to shutdown this module undoing what Init() did. + // Returns true iff could do full shutdown (or it was not attempted). + // Full shutdown is attempted when the number of Shutdown() calls equals + // the number of Init() calls. + static bool Shutdown(); + + // Locks to protect our internal data structures. + // These also protect use of arena_ if our Init() has been done. + // The lock is recursive. + static void Lock() EXCLUSIVE_LOCK_FUNCTION(lock_); + static void Unlock() UNLOCK_FUNCTION(lock_); + + // Returns true when the lock is held by this thread (for use in RAW_CHECK-s). + static bool LockIsHeld(); + + // Locker object that acquires the MemoryRegionMap::Lock + // for the duration of its lifetime (a C++ scope). + class LockHolder { + public: + LockHolder() { Lock(); } + ~LockHolder() { Unlock(); } + private: + DISALLOW_COPY_AND_ASSIGN(LockHolder); + }; + + // A memory region that we know about through malloc_hook-s. + // This is essentially an interface through which MemoryRegionMap + // exports the collected data to its clients. Thread-compatible. + struct Region { + uintptr_t start_addr; // region start address + uintptr_t end_addr; // region end address + int call_stack_depth; // number of caller stack frames that we saved + const void* call_stack[kMaxStackDepth]; // caller address stack array + // filled to call_stack_depth size + bool is_stack; // does this region contain a thread's stack: + // a user of MemoryRegionMap supplies this info + + // Convenience accessor for call_stack[0], + // i.e. (the program counter of) the immediate caller + // of this region's allocation function, + // but it also returns NULL when call_stack_depth is 0, + // i.e whe we weren't able to get the call stack. + // This usually happens in recursive calls, when the stack-unwinder + // calls mmap() which in turn calls the stack-unwinder. + uintptr_t caller() const { + return reinterpret_cast(call_stack_depth >= 1 + ? call_stack[0] : NULL); + } + + // Return true iff this region overlaps region x. + bool Overlaps(const Region& x) const { + return start_addr < x.end_addr && end_addr > x.start_addr; + } + + private: // helpers for MemoryRegionMap + friend class MemoryRegionMap; + + // The ways we create Region-s: + void Create(const void* start, size_t size) { + start_addr = reinterpret_cast(start); + end_addr = start_addr + size; + is_stack = false; // not a stack till marked such + call_stack_depth = 0; + AssertIsConsistent(); + } + void set_call_stack_depth(int depth) { + RAW_DCHECK(call_stack_depth == 0, ""); // only one such set is allowed + call_stack_depth = depth; + AssertIsConsistent(); + } + + // The ways we modify Region-s: + void set_is_stack() { is_stack = true; } + void set_start_addr(uintptr_t addr) { + start_addr = addr; + AssertIsConsistent(); + } + void set_end_addr(uintptr_t addr) { + end_addr = addr; + AssertIsConsistent(); + } + + // Verifies that *this contains consistent data, crashes if not the case. + void AssertIsConsistent() const { + RAW_DCHECK(start_addr < end_addr, ""); + RAW_DCHECK(call_stack_depth >= 0 && + call_stack_depth <= kMaxStackDepth, ""); + } + + // Post-default construction helper to make a Region suitable + // for searching in RegionSet regions_. + void SetRegionSetKey(uintptr_t addr) { + // make sure *this has no usable data: + if (DEBUG_MODE) memset(this, 0xFF, sizeof(*this)); + end_addr = addr; + } + + // Note: call_stack[kMaxStackDepth] as a member lets us make Region + // a simple self-contained struct with correctly behaving bit-vise copying. + // This simplifies the code of this module but wastes some memory: + // in most-often use case of this module (leak checking) + // only one call_stack element out of kMaxStackDepth is actually needed. + // Making the storage for call_stack variable-sized, + // substantially complicates memory management for the Region-s: + // as they need to be created and manipulated for some time + // w/o any memory allocations, yet are also given out to the users. + }; + + // Find the region that covers addr and write its data into *result if found, + // in which case *result gets filled so that it stays fully functional + // even when the underlying region gets removed from MemoryRegionMap. + // Returns success. Uses Lock/Unlock inside. + static bool FindRegion(uintptr_t addr, Region* result); + + // Find the region that contains stack_top, mark that region as + // a stack region, and write its data into *result if found, + // in which case *result gets filled so that it stays fully functional + // even when the underlying region gets removed from MemoryRegionMap. + // Returns success. Uses Lock/Unlock inside. + static bool FindAndMarkStackRegion(uintptr_t stack_top, Region* result); + + private: // our internal types ============================================== + + // Region comparator for sorting with STL + struct RegionCmp { + bool operator()(const Region& x, const Region& y) const { + return x.end_addr < y.end_addr; + } + }; + + // We allocate STL objects in our own arena. + struct MyAllocator { + static void *Allocate(size_t n) { + return LowLevelAlloc::AllocWithArena(n, arena_); + } + static void Free(const void *p, size_t /* n */) { + LowLevelAlloc::Free(const_cast(p)); + } + }; + + // Set of the memory regions + typedef std::set > RegionSet; + + public: // more in-depth interface ========================================== + + // STL iterator with values of Region + typedef RegionSet::const_iterator RegionIterator; + + // Return the begin/end iterators to all the regions. + // These need Lock/Unlock protection around their whole usage (loop). + // Even when the same thread causes modifications during such a loop + // (which are permitted due to recursive locking) + // the loop iterator will still be valid as long as its region + // has not been deleted, but EndRegionLocked should be + // re-evaluated whenever the set of regions has changed. + static RegionIterator BeginRegionLocked(); + static RegionIterator EndRegionLocked(); + + // Return the accumulated sizes of mapped and unmapped regions. + static int64 MapSize() { return map_size_; } + static int64 UnmapSize() { return unmap_size_; } + + // Effectively private type from our .cc ================================= + // public to let us declare global objects: + union RegionSetRep; + + private: + // representation =========================================================== + + // Counter of clients of this module that have called Init(). + static int client_count_; + + // Maximal number of caller stack frames to save (>= 0). + static int max_stack_depth_; + + // Arena used for our allocations in regions_. + static LowLevelAlloc::Arena* arena_; + + // Set of the mmap/sbrk/mremap-ed memory regions + // To be accessed *only* when Lock() is held. + // Hence we protect the non-recursive lock used inside of arena_ + // with our recursive Lock(). This lets a user prevent deadlocks + // when threads are stopped by ListAllProcessThreads at random spots + // simply by acquiring our recursive Lock() before that. + static RegionSet* regions_; + + // Lock to protect regions_ variable and the data behind. + static SpinLock lock_; + // Lock to protect the recursive lock itself. + static SpinLock owner_lock_; + + // Recursion count for the recursive lock. + static int recursion_count_; + // The thread id of the thread that's inside the recursive lock. + static pthread_t lock_owner_tid_; + + // Total size of all mapped pages so far + static int64 map_size_; + // Total size of all unmapped pages so far + static int64 unmap_size_; + + // helpers ================================================================== + + // Helper for FindRegion and FindAndMarkStackRegion: + // returns the region covering 'addr' or NULL; assumes our lock_ is held. + static const Region* DoFindRegionLocked(uintptr_t addr); + + // Verifying wrapper around regions_->insert(region) + // To be called to do InsertRegionLocked's work only! + inline static void DoInsertRegionLocked(const Region& region); + // Handle regions saved by InsertRegionLocked into a tmp static array + // by calling insert_func on them. + inline static void HandleSavedRegionsLocked( + void (*insert_func)(const Region& region)); + // Wrapper around DoInsertRegionLocked + // that handles the case of recursive allocator calls. + inline static void InsertRegionLocked(const Region& region); + + // Record addition of a memory region at address "start" of size "size" + // (called from our mmap/mremap/sbrk hooks). + static void RecordRegionAddition(const void* start, size_t size); + // Record deletion of a memory region at address "start" of size "size" + // (called from our munmap/mremap/sbrk hooks). + static void RecordRegionRemoval(const void* start, size_t size); + + // Hooks for MallocHook + static void MmapHook(const void* result, + const void* start, size_t size, + int prot, int flags, + int fd, off_t offset); + static void MunmapHook(const void* ptr, size_t size); + static void MremapHook(const void* result, const void* old_addr, + size_t old_size, size_t new_size, int flags, + const void* new_addr); + static void SbrkHook(const void* result, ptrdiff_t increment); + + // Log all memory regions; Useful for debugging only. + // Assumes Lock() is held + static void LogAllLocked(); + + DISALLOW_COPY_AND_ASSIGN(MemoryRegionMap); +}; + +#endif // BASE_MEMORY_REGION_MAP_H_ diff --git a/src/thirdparty/gperftools-2.0/src/packed-cache-inl.h b/src/thirdparty/gperftools-2.0/src/packed-cache-inl.h new file mode 100644 index 000000000..77f42b6b3 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/packed-cache-inl.h @@ -0,0 +1,238 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Geoff Pike +// +// This file provides a minimal cache that can hold a pair +// with little if any wasted space. The types of the key and value +// must be unsigned integral types or at least have unsigned semantics +// for >>, casting, and similar operations. +// +// Synchronization is not provided. However, the cache is implemented +// as an array of cache entries whose type is chosen at compile time. +// If a[i] is atomic on your hardware for the chosen array type then +// raciness will not necessarily lead to bugginess. The cache entries +// must be large enough to hold a partial key and a value packed +// together. The partial keys are bit strings of length +// kKeybits - kHashbits, and the values are bit strings of length kValuebits. +// +// In an effort to use minimal space, every cache entry represents +// some pair; the class provides no way to mark a cache +// entry as empty or uninitialized. In practice, you may want to have +// reserved keys or values to get around this limitation. For example, in +// tcmalloc's PageID-to-sizeclass cache, a value of 0 is used as +// "unknown sizeclass." +// +// Usage Considerations +// -------------------- +// +// kHashbits controls the size of the cache. The best value for +// kHashbits will of course depend on the application. Perhaps try +// tuning the value of kHashbits by measuring different values on your +// favorite benchmark. Also remember not to be a pig; other +// programs that need resources may suffer if you are. +// +// The main uses for this class will be when performance is +// critical and there's a convenient type to hold the cache's +// entries. As described above, the number of bits required +// for a cache entry is (kKeybits - kHashbits) + kValuebits. Suppose +// kKeybits + kValuebits is 43. Then it probably makes sense to +// chose kHashbits >= 11 so that cache entries fit in a uint32. +// +// On the other hand, suppose kKeybits = kValuebits = 64. Then +// using this class may be less worthwhile. You'll probably +// be using 128 bits for each entry anyway, so maybe just pick +// a hash function, H, and use an array indexed by H(key): +// void Put(K key, V value) { a_[H(key)] = pair(key, value); } +// V GetOrDefault(K key, V default) { const pair &p = a_[H(key)]; ... } +// etc. +// +// Further Details +// --------------- +// +// For caches used only by one thread, the following is true: +// 1. For a cache c, +// (c.Put(key, value), c.GetOrDefault(key, 0)) == value +// and +// (c.Put(key, value), <...>, c.GetOrDefault(key, 0)) == value +// if the elided code contains no c.Put calls. +// +// 2. Has(key) will return false if no pair with that key +// has ever been Put. However, a newly initialized cache will have +// some pairs already present. When you create a new +// cache, you must specify an "initial value." The initialization +// procedure is equivalent to Clear(initial_value), which is +// equivalent to Put(k, initial_value) for all keys k from 0 to +// 2^kHashbits - 1. +// +// 3. If key and key' differ then the only way Put(key, value) may +// cause Has(key') to change is that Has(key') may change from true to +// false. Furthermore, a Put() call that doesn't change Has(key') +// doesn't change GetOrDefault(key', ...) either. +// +// Implementation details: +// +// This is a direct-mapped cache with 2^kHashbits entries; the hash +// function simply takes the low bits of the key. We store whole keys +// if a whole key plus a whole value fits in an entry. Otherwise, an +// entry is the high bits of a key and a value, packed together. +// E.g., a 20 bit key and a 7 bit value only require a uint16 for each +// entry if kHashbits >= 11. +// +// Alternatives to this scheme will be added as needed. + +#ifndef TCMALLOC_PACKED_CACHE_INL_H_ +#define TCMALLOC_PACKED_CACHE_INL_H_ + +#include "config.h" +#include // for size_t +#ifdef HAVE_STDINT_H +#include // for uintptr_t +#endif +#include "base/basictypes.h" +#include "internal_logging.h" + +// A safe way of doing "(1 << n) - 1" -- without worrying about overflow +// Note this will all be resolved to a constant expression at compile-time +#define N_ONES_(IntType, N) \ + ( (N) == 0 ? 0 : ((static_cast(1) << ((N)-1))-1 + \ + (static_cast(1) << ((N)-1))) ) + +// The types K and V provide upper bounds on the number of valid keys +// and values, but we explicitly require the keys to be less than +// 2^kKeybits and the values to be less than 2^kValuebits. The size of +// the table is controlled by kHashbits, and the type of each entry in +// the cache is T. See also the big comment at the top of the file. +template +class PackedCache { + public: + typedef uintptr_t K; + typedef size_t V; +#ifdef TCMALLOC_SMALL_BUT_SLOW + // Decrease the size map cache if running in the small memory mode. + static const int kHashbits = 12; +#else + static const int kHashbits = 16; +#endif + static const int kValuebits = 7; + static const bool kUseWholeKeys = kKeybits + kValuebits <= 8 * sizeof(T); + + explicit PackedCache(V initial_value) { + COMPILE_ASSERT(kKeybits <= sizeof(K) * 8, key_size); + COMPILE_ASSERT(kValuebits <= sizeof(V) * 8, value_size); + COMPILE_ASSERT(kHashbits <= kKeybits, hash_function); + COMPILE_ASSERT(kKeybits - kHashbits + kValuebits <= kTbits, + entry_size_must_be_big_enough); + Clear(initial_value); + } + + void Put(K key, V value) { + ASSERT(key == (key & kKeyMask)); + ASSERT(value == (value & kValueMask)); + array_[Hash(key)] = KeyToUpper(key) | value; + } + + bool Has(K key) const { + ASSERT(key == (key & kKeyMask)); + return KeyMatch(array_[Hash(key)], key); + } + + V GetOrDefault(K key, V default_value) const { + // As with other code in this class, we touch array_ as few times + // as we can. Assuming entries are read atomically (e.g., their + // type is uintptr_t on most hardware) then certain races are + // harmless. + ASSERT(key == (key & kKeyMask)); + T entry = array_[Hash(key)]; + return KeyMatch(entry, key) ? EntryToValue(entry) : default_value; + } + + void Clear(V value) { + ASSERT(value == (value & kValueMask)); + for (int i = 0; i < 1 << kHashbits; i++) { + ASSERT(kUseWholeKeys || KeyToUpper(i) == 0); + array_[i] = kUseWholeKeys ? (value | KeyToUpper(i)) : value; + } + } + + private: + // We are going to pack a value and the upper part of a key (or a + // whole key) into an entry of type T. The UPPER type is for the + // upper part of a key, after the key has been masked and shifted + // for inclusion in an entry. + typedef T UPPER; + + static V EntryToValue(T t) { return t & kValueMask; } + + // If we have space for a whole key, we just shift it left. + // Otherwise kHashbits determines where in a K to find the upper + // part of the key, and kValuebits determines where in the entry to + // put it. + static UPPER KeyToUpper(K k) { + if (kUseWholeKeys) { + return static_cast(k) << kValuebits; + } else { + const int shift = kHashbits - kValuebits; + // Assume kHashbits >= kValuebits. It'd be easy to lift this assumption. + return static_cast(k >> shift) & kUpperMask; + } + } + + static size_t Hash(K key) { + return static_cast(key) & N_ONES_(size_t, kHashbits); + } + + // Does the entry match the relevant part of the given key? + static bool KeyMatch(T entry, K key) { + return kUseWholeKeys ? + (entry >> kValuebits == key) : + ((KeyToUpper(key) ^ entry) & kUpperMask) == 0; + } + + static const int kTbits = 8 * sizeof(T); + static const int kUpperbits = kUseWholeKeys ? kKeybits : kKeybits - kHashbits; + + // For masking a K. + static const K kKeyMask = N_ONES_(K, kKeybits); + + // For masking a T. + static const T kUpperMask = N_ONES_(T, kUpperbits) << kValuebits; + + // For masking a V or a T. + static const V kValueMask = N_ONES_(V, kValuebits); + + // array_ is the cache. Its elements are volatile because any + // thread can write any array element at any time. + volatile T array_[1 << kHashbits]; +}; + +#undef N_ONES_ + +#endif // TCMALLOC_PACKED_CACHE_INL_H_ diff --git a/src/thirdparty/gperftools-2.0/src/page_heap.cc b/src/thirdparty/gperftools-2.0/src/page_heap.cc new file mode 100644 index 000000000..18bdb947b --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/page_heap.cc @@ -0,0 +1,483 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#include +#ifdef HAVE_INTTYPES_H +#include // for PRIuPTR +#endif +#include // for MallocRange, etc +#include "base/basictypes.h" +#include "base/commandlineflags.h" +#include "internal_logging.h" // for ASSERT, TCMalloc_Printer, etc +#include "page_heap_allocator.h" // for PageHeapAllocator +#include "static_vars.h" // for Static +#include "system-alloc.h" // for TCMalloc_SystemAlloc, etc + +DEFINE_double(tcmalloc_release_rate, + EnvToDouble("TCMALLOC_RELEASE_RATE", 1.0), + "Rate at which we release unused memory to the system. " + "Zero means we never release memory back to the system. " + "Increase this flag to return memory faster; decrease it " + "to return memory slower. Reasonable rates are in the " + "range [0,10]"); + +namespace tcmalloc { + +PageHeap::PageHeap() + : pagemap_(MetaDataAlloc), + pagemap_cache_(0), + scavenge_counter_(0), + // Start scavenging at kMaxPages list + release_index_(kMaxPages) { + COMPILE_ASSERT(kNumClasses <= (1 << PageMapCache::kValuebits), valuebits); + DLL_Init(&large_.normal); + DLL_Init(&large_.returned); + for (int i = 0; i < kMaxPages; i++) { + DLL_Init(&free_[i].normal); + DLL_Init(&free_[i].returned); + } +} + +Span* PageHeap::SearchFreeAndLargeLists(Length n) { + ASSERT(Check()); + ASSERT(n > 0); + + // Find first size >= n that has a non-empty list + for (Length s = n; s < kMaxPages; s++) { + Span* ll = &free_[s].normal; + // If we're lucky, ll is non-empty, meaning it has a suitable span. + if (!DLL_IsEmpty(ll)) { + ASSERT(ll->next->location == Span::ON_NORMAL_FREELIST); + return Carve(ll->next, n); + } + // Alternatively, maybe there's a usable returned span. + ll = &free_[s].returned; + if (!DLL_IsEmpty(ll)) { + ASSERT(ll->next->location == Span::ON_RETURNED_FREELIST); + return Carve(ll->next, n); + } + } + // No luck in free lists, our last chance is in a larger class. + return AllocLarge(n); // May be NULL +} + +Span* PageHeap::New(Length n) { + ASSERT(Check()); + ASSERT(n > 0); + + Span* result = SearchFreeAndLargeLists(n); + if (result != NULL) + return result; + + // Grow the heap and try again. + if (!GrowHeap(n)) { + ASSERT(Check()); + return NULL; + } + return SearchFreeAndLargeLists(n); +} + +Span* PageHeap::AllocLarge(Length n) { + // find the best span (closest to n in size). + // The following loops implements address-ordered best-fit. + Span *best = NULL; + + // Search through normal list + for (Span* span = large_.normal.next; + span != &large_.normal; + span = span->next) { + if (span->length >= n) { + if ((best == NULL) + || (span->length < best->length) + || ((span->length == best->length) && (span->start < best->start))) { + best = span; + ASSERT(best->location == Span::ON_NORMAL_FREELIST); + } + } + } + + // Search through released list in case it has a better fit + for (Span* span = large_.returned.next; + span != &large_.returned; + span = span->next) { + if (span->length >= n) { + if ((best == NULL) + || (span->length < best->length) + || ((span->length == best->length) && (span->start < best->start))) { + best = span; + ASSERT(best->location == Span::ON_RETURNED_FREELIST); + } + } + } + + return best == NULL ? NULL : Carve(best, n); +} + +Span* PageHeap::Split(Span* span, Length n) { + ASSERT(0 < n); + ASSERT(n < span->length); + ASSERT(span->location == Span::IN_USE); + ASSERT(span->sizeclass == 0); + Event(span, 'T', n); + + const int extra = span->length - n; + Span* leftover = NewSpan(span->start + n, extra); + ASSERT(leftover->location == Span::IN_USE); + Event(leftover, 'U', extra); + RecordSpan(leftover); + pagemap_.set(span->start + n - 1, span); // Update map from pageid to span + span->length = n; + + return leftover; +} + +Span* PageHeap::Carve(Span* span, Length n) { + ASSERT(n > 0); + ASSERT(span->location != Span::IN_USE); + const int old_location = span->location; + RemoveFromFreeList(span); + span->location = Span::IN_USE; + Event(span, 'A', n); + + const int extra = span->length - n; + ASSERT(extra >= 0); + if (extra > 0) { + Span* leftover = NewSpan(span->start + n, extra); + leftover->location = old_location; + Event(leftover, 'S', extra); + RecordSpan(leftover); + PrependToFreeList(leftover); // Skip coalescing - no candidates possible + span->length = n; + pagemap_.set(span->start + n - 1, span); + } + ASSERT(Check()); + return span; +} + +void PageHeap::Delete(Span* span) { + ASSERT(Check()); + ASSERT(span->location == Span::IN_USE); + ASSERT(span->length > 0); + ASSERT(GetDescriptor(span->start) == span); + ASSERT(GetDescriptor(span->start + span->length - 1) == span); + const Length n = span->length; + span->sizeclass = 0; + span->sample = 0; + span->location = Span::ON_NORMAL_FREELIST; + Event(span, 'D', span->length); + MergeIntoFreeList(span); // Coalesces if possible + IncrementalScavenge(n); + ASSERT(Check()); +} + +void PageHeap::MergeIntoFreeList(Span* span) { + ASSERT(span->location != Span::IN_USE); + + // Coalesce -- we guarantee that "p" != 0, so no bounds checking + // necessary. We do not bother resetting the stale pagemap + // entries for the pieces we are merging together because we only + // care about the pagemap entries for the boundaries. + // + // Note that only similar spans are merged together. For example, + // we do not coalesce "returned" spans with "normal" spans. + const PageID p = span->start; + const Length n = span->length; + Span* prev = GetDescriptor(p-1); + if (prev != NULL && prev->location == span->location) { + // Merge preceding span into this span + ASSERT(prev->start + prev->length == p); + const Length len = prev->length; + RemoveFromFreeList(prev); + DeleteSpan(prev); + span->start -= len; + span->length += len; + pagemap_.set(span->start, span); + Event(span, 'L', len); + } + Span* next = GetDescriptor(p+n); + if (next != NULL && next->location == span->location) { + // Merge next span into this span + ASSERT(next->start == p+n); + const Length len = next->length; + RemoveFromFreeList(next); + DeleteSpan(next); + span->length += len; + pagemap_.set(span->start + span->length - 1, span); + Event(span, 'R', len); + } + + PrependToFreeList(span); +} + +void PageHeap::PrependToFreeList(Span* span) { + ASSERT(span->location != Span::IN_USE); + SpanList* list = (span->length < kMaxPages) ? &free_[span->length] : &large_; + if (span->location == Span::ON_NORMAL_FREELIST) { + stats_.free_bytes += (span->length << kPageShift); + DLL_Prepend(&list->normal, span); + } else { + stats_.unmapped_bytes += (span->length << kPageShift); + DLL_Prepend(&list->returned, span); + } +} + +void PageHeap::RemoveFromFreeList(Span* span) { + ASSERT(span->location != Span::IN_USE); + if (span->location == Span::ON_NORMAL_FREELIST) { + stats_.free_bytes -= (span->length << kPageShift); + } else { + stats_.unmapped_bytes -= (span->length << kPageShift); + } + DLL_Remove(span); +} + +void PageHeap::IncrementalScavenge(Length n) { + // Fast path; not yet time to release memory + scavenge_counter_ -= n; + if (scavenge_counter_ >= 0) return; // Not yet time to scavenge + + const double rate = FLAGS_tcmalloc_release_rate; + if (rate <= 1e-6) { + // Tiny release rate means that releasing is disabled. + scavenge_counter_ = kDefaultReleaseDelay; + return; + } + + Length released_pages = ReleaseAtLeastNPages(1); + + if (released_pages == 0) { + // Nothing to scavenge, delay for a while. + scavenge_counter_ = kDefaultReleaseDelay; + } else { + // Compute how long to wait until we return memory. + // FLAGS_tcmalloc_release_rate==1 means wait for 1000 pages + // after releasing one page. + const double mult = 1000.0 / rate; + double wait = mult * static_cast(released_pages); + if (wait > kMaxReleaseDelay) { + // Avoid overflow and bound to reasonable range. + wait = kMaxReleaseDelay; + } + scavenge_counter_ = static_cast(wait); + } +} + +Length PageHeap::ReleaseLastNormalSpan(SpanList* slist) { + Span* s = slist->normal.prev; + ASSERT(s->location == Span::ON_NORMAL_FREELIST); + RemoveFromFreeList(s); + const Length n = s->length; + TCMalloc_SystemRelease(reinterpret_cast(s->start << kPageShift), + static_cast(s->length << kPageShift)); + s->location = Span::ON_RETURNED_FREELIST; + MergeIntoFreeList(s); // Coalesces if possible. + return n; +} + +Length PageHeap::ReleaseAtLeastNPages(Length num_pages) { + Length released_pages = 0; + Length prev_released_pages = -1; + + // Round robin through the lists of free spans, releasing the last + // span in each list. Stop after releasing at least num_pages. + while (released_pages < num_pages) { + if (released_pages == prev_released_pages) { + // Last iteration of while loop made no progress. + break; + } + prev_released_pages = released_pages; + + for (int i = 0; i < kMaxPages+1 && released_pages < num_pages; + i++, release_index_++) { + if (release_index_ > kMaxPages) release_index_ = 0; + SpanList* slist = (release_index_ == kMaxPages) ? + &large_ : &free_[release_index_]; + if (!DLL_IsEmpty(&slist->normal)) { + Length released_len = ReleaseLastNormalSpan(slist); + released_pages += released_len; + } + } + } + return released_pages; +} + +void PageHeap::RegisterSizeClass(Span* span, size_t sc) { + // Associate span object with all interior pages as well + ASSERT(span->location == Span::IN_USE); + ASSERT(GetDescriptor(span->start) == span); + ASSERT(GetDescriptor(span->start+span->length-1) == span); + Event(span, 'C', sc); + span->sizeclass = sc; + for (Length i = 1; i < span->length-1; i++) { + pagemap_.set(span->start+i, span); + } +} + +void PageHeap::GetSmallSpanStats(SmallSpanStats* result) { + for (int s = 0; s < kMaxPages; s++) { + result->normal_length[s] = DLL_Length(&free_[s].normal); + result->returned_length[s] = DLL_Length(&free_[s].returned); + } +} + +void PageHeap::GetLargeSpanStats(LargeSpanStats* result) { + result->spans = 0; + result->normal_pages = 0; + result->returned_pages = 0; + for (Span* s = large_.normal.next; s != &large_.normal; s = s->next) { + result->normal_pages += s->length;; + result->spans++; + } + for (Span* s = large_.returned.next; s != &large_.returned; s = s->next) { + result->returned_pages += s->length; + result->spans++; + } +} + +bool PageHeap::GetNextRange(PageID start, base::MallocRange* r) { + Span* span = reinterpret_cast(pagemap_.Next(start)); + if (span == NULL) { + return false; + } + r->address = span->start << kPageShift; + r->length = span->length << kPageShift; + r->fraction = 0; + switch (span->location) { + case Span::IN_USE: + r->type = base::MallocRange::INUSE; + r->fraction = 1; + if (span->sizeclass > 0) { + // Only some of the objects in this span may be in use. + const size_t osize = Static::sizemap()->class_to_size(span->sizeclass); + r->fraction = (1.0 * osize * span->refcount) / r->length; + } + break; + case Span::ON_NORMAL_FREELIST: + r->type = base::MallocRange::FREE; + break; + case Span::ON_RETURNED_FREELIST: + r->type = base::MallocRange::UNMAPPED; + break; + default: + r->type = base::MallocRange::UNKNOWN; + break; + } + return true; +} + +static void RecordGrowth(size_t growth) { + StackTrace* t = Static::stacktrace_allocator()->New(); + t->depth = GetStackTrace(t->stack, kMaxStackDepth-1, 3); + t->size = growth; + t->stack[kMaxStackDepth-1] = reinterpret_cast(Static::growth_stacks()); + Static::set_growth_stacks(t); +} + +bool PageHeap::GrowHeap(Length n) { + ASSERT(kMaxPages >= kMinSystemAlloc); + if (n > kMaxValidPages) return false; + Length ask = (n>kMinSystemAlloc) ? n : static_cast(kMinSystemAlloc); + size_t actual_size; + void* ptr = TCMalloc_SystemAlloc(ask << kPageShift, &actual_size, kPageSize); + if (ptr == NULL) { + if (n < ask) { + // Try growing just "n" pages + ask = n; + ptr = TCMalloc_SystemAlloc(ask << kPageShift, &actual_size, kPageSize); + } + if (ptr == NULL) return false; + } + ask = actual_size >> kPageShift; + RecordGrowth(ask << kPageShift); + + uint64_t old_system_bytes = stats_.system_bytes; + stats_.system_bytes += (ask << kPageShift); + const PageID p = reinterpret_cast(ptr) >> kPageShift; + ASSERT(p > 0); + + // If we have already a lot of pages allocated, just pre allocate a bunch of + // memory for the page map. This prevents fragmentation by pagemap metadata + // when a program keeps allocating and freeing large blocks. + + if (old_system_bytes < kPageMapBigAllocationThreshold + && stats_.system_bytes >= kPageMapBigAllocationThreshold) { + pagemap_.PreallocateMoreMemory(); + } + + // Make sure pagemap_ has entries for all of the new pages. + // Plus ensure one before and one after so coalescing code + // does not need bounds-checking. + if (pagemap_.Ensure(p-1, ask+2)) { + // Pretend the new area is allocated and then Delete() it to cause + // any necessary coalescing to occur. + Span* span = NewSpan(p, ask); + RecordSpan(span); + Delete(span); + ASSERT(Check()); + return true; + } else { + // We could not allocate memory within "pagemap_" + // TODO: Once we can return memory to the system, return the new span + return false; + } +} + +bool PageHeap::Check() { + ASSERT(free_[0].normal.next == &free_[0].normal); + ASSERT(free_[0].returned.next == &free_[0].returned); + return true; +} + +bool PageHeap::CheckExpensive() { + bool result = Check(); + CheckList(&large_.normal, kMaxPages, 1000000000, Span::ON_NORMAL_FREELIST); + CheckList(&large_.returned, kMaxPages, 1000000000, Span::ON_RETURNED_FREELIST); + for (Length s = 1; s < kMaxPages; s++) { + CheckList(&free_[s].normal, s, s, Span::ON_NORMAL_FREELIST); + CheckList(&free_[s].returned, s, s, Span::ON_RETURNED_FREELIST); + } + return result; +} + +bool PageHeap::CheckList(Span* list, Length min_pages, Length max_pages, + int freelist) { + for (Span* s = list->next; s != list; s = s->next) { + CHECK_CONDITION(s->location == freelist); // NORMAL or RETURNED + CHECK_CONDITION(s->length >= min_pages); + CHECK_CONDITION(s->length <= max_pages); + CHECK_CONDITION(GetDescriptor(s->start) == s); + CHECK_CONDITION(GetDescriptor(s->start+s->length-1) == s); + } + return true; +} + +} // namespace tcmalloc diff --git a/src/thirdparty/gperftools-2.0/src/page_heap.h b/src/thirdparty/gperftools-2.0/src/page_heap.h new file mode 100644 index 000000000..37188010a --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/page_heap.h @@ -0,0 +1,294 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#ifndef TCMALLOC_PAGE_HEAP_H_ +#define TCMALLOC_PAGE_HEAP_H_ + +#include +#include // for size_t +#ifdef HAVE_STDINT_H +#include // for uint64_t, int64_t, uint16_t +#endif +#include +#include "base/basictypes.h" +#include "common.h" +#include "packed-cache-inl.h" +#include "pagemap.h" +#include "span.h" + +// We need to dllexport PageHeap just for the unittest. MSVC complains +// that we don't dllexport the PageHeap members, but we don't need to +// test those, so I just suppress this warning. +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4251) +#endif + +// This #ifdef should almost never be set. Set NO_TCMALLOC_SAMPLES if +// you're porting to a system where you really can't get a stacktrace. +// Because we control the definition of GetStackTrace, all clients of +// GetStackTrace should #include us rather than stacktrace.h. +#ifdef NO_TCMALLOC_SAMPLES + // We use #define so code compiles even if you #include stacktrace.h somehow. +# define GetStackTrace(stack, depth, skip) (0) +#else +# include +#endif + +namespace base { +struct MallocRange; +} + +namespace tcmalloc { + +// ------------------------------------------------------------------------- +// Map from page-id to per-page data +// ------------------------------------------------------------------------- + +// We use PageMap2<> for 32-bit and PageMap3<> for 64-bit machines. +// We also use a simple one-level cache for hot PageID-to-sizeclass mappings, +// because sometimes the sizeclass is all the information we need. + +// Selector class -- general selector uses 3-level map +template class MapSelector { + public: + typedef TCMalloc_PageMap3 Type; + typedef PackedCache CacheType; +}; + +// A two-level map for 32-bit machines +template <> class MapSelector<32> { + public: + typedef TCMalloc_PageMap2<32-kPageShift> Type; + typedef PackedCache<32-kPageShift, uint16_t> CacheType; +}; + +// ------------------------------------------------------------------------- +// Page-level allocator +// * Eager coalescing +// +// Heap for page-level allocation. We allow allocating and freeing a +// contiguous runs of pages (called a "span"). +// ------------------------------------------------------------------------- + +class PERFTOOLS_DLL_DECL PageHeap { + public: + PageHeap(); + + // Allocate a run of "n" pages. Returns zero if out of memory. + // Caller should not pass "n == 0" -- instead, n should have + // been rounded up already. + Span* New(Length n); + + // Delete the span "[p, p+n-1]". + // REQUIRES: span was returned by earlier call to New() and + // has not yet been deleted. + void Delete(Span* span); + + // Mark an allocated span as being used for small objects of the + // specified size-class. + // REQUIRES: span was returned by an earlier call to New() + // and has not yet been deleted. + void RegisterSizeClass(Span* span, size_t sc); + + // Split an allocated span into two spans: one of length "n" pages + // followed by another span of length "span->length - n" pages. + // Modifies "*span" to point to the first span of length "n" pages. + // Returns a pointer to the second span. + // + // REQUIRES: "0 < n < span->length" + // REQUIRES: span->location == IN_USE + // REQUIRES: span->sizeclass == 0 + Span* Split(Span* span, Length n); + + // Return the descriptor for the specified page. Returns NULL if + // this PageID was not allocated previously. + inline Span* GetDescriptor(PageID p) const { + return reinterpret_cast(pagemap_.get(p)); + } + + // If this page heap is managing a range with starting page # >= start, + // store info about the range in *r and return true. Else return false. + bool GetNextRange(PageID start, base::MallocRange* r); + + // Page heap statistics + struct Stats { + Stats() : system_bytes(0), free_bytes(0), unmapped_bytes(0) {} + uint64_t system_bytes; // Total bytes allocated from system + uint64_t free_bytes; // Total bytes on normal freelists + uint64_t unmapped_bytes; // Total bytes on returned freelists + }; + inline Stats stats() const { return stats_; } + + struct SmallSpanStats { + // For each free list of small spans, the length (in spans) of the + // normal and returned free lists for that size. + int64 normal_length[kMaxPages]; + int64 returned_length[kMaxPages]; + }; + void GetSmallSpanStats(SmallSpanStats* result); + + // Stats for free large spans (i.e., spans with more than kMaxPages pages). + struct LargeSpanStats { + int64 spans; // Number of such spans + int64 normal_pages; // Combined page length of normal large spans + int64 returned_pages; // Combined page length of unmapped spans + }; + void GetLargeSpanStats(LargeSpanStats* result); + + bool Check(); + // Like Check() but does some more comprehensive checking. + bool CheckExpensive(); + bool CheckList(Span* list, Length min_pages, Length max_pages, + int freelist); // ON_NORMAL_FREELIST or ON_RETURNED_FREELIST + + // Try to release at least num_pages for reuse by the OS. Returns + // the actual number of pages released, which may be less than + // num_pages if there weren't enough pages to release. The result + // may also be larger than num_pages since page_heap might decide to + // release one large range instead of fragmenting it into two + // smaller released and unreleased ranges. + Length ReleaseAtLeastNPages(Length num_pages); + + // Return 0 if we have no information, or else the correct sizeclass for p. + // Reads and writes to pagemap_cache_ do not require locking. + // The entries are 64 bits on 64-bit hardware and 16 bits on + // 32-bit hardware, and we don't mind raciness as long as each read of + // an entry yields a valid entry, not a partially updated entry. + size_t GetSizeClassIfCached(PageID p) const { + return pagemap_cache_.GetOrDefault(p, 0); + } + void CacheSizeClass(PageID p, size_t cl) const { pagemap_cache_.Put(p, cl); } + + private: + // Allocates a big block of memory for the pagemap once we reach more than + // 128MB + static const size_t kPageMapBigAllocationThreshold = 128 << 20; + + // Minimum number of pages to fetch from system at a time. Must be + // significantly bigger than kBlockSize to amortize system-call + // overhead, and also to reduce external fragementation. Also, we + // should keep this value big because various incarnations of Linux + // have small limits on the number of mmap() regions per + // address-space. + // REQUIRED: kMinSystemAlloc <= kMaxPages; + static const int kMinSystemAlloc = kMaxPages; + + // Never delay scavenging for more than the following number of + // deallocated pages. With 4K pages, this comes to 4GB of + // deallocation. + static const int kMaxReleaseDelay = 1 << 20; + + // If there is nothing to release, wait for so many pages before + // scavenging again. With 4K pages, this comes to 1GB of memory. + static const int kDefaultReleaseDelay = 1 << 18; + + // Pick the appropriate map and cache types based on pointer size + typedef MapSelector::Type PageMap; + typedef MapSelector::CacheType PageMapCache; + PageMap pagemap_; + mutable PageMapCache pagemap_cache_; + + // We segregate spans of a given size into two circular linked + // lists: one for normal spans, and one for spans whose memory + // has been returned to the system. + struct SpanList { + Span normal; + Span returned; + }; + + // List of free spans of length >= kMaxPages + SpanList large_; + + // Array mapping from span length to a doubly linked list of free spans + SpanList free_[kMaxPages]; + + // Statistics on system, free, and unmapped bytes + Stats stats_; + + Span* SearchFreeAndLargeLists(Length n); + + bool GrowHeap(Length n); + + // REQUIRES: span->length >= n + // REQUIRES: span->location != IN_USE + // Remove span from its free list, and move any leftover part of + // span into appropriate free lists. Also update "span" to have + // length exactly "n" and mark it as non-free so it can be returned + // to the client. After all that, decrease free_pages_ by n and + // return span. + Span* Carve(Span* span, Length n); + + void RecordSpan(Span* span) { + pagemap_.set(span->start, span); + if (span->length > 1) { + pagemap_.set(span->start + span->length - 1, span); + } + } + + // Allocate a large span of length == n. If successful, returns a + // span of exactly the specified length. Else, returns NULL. + Span* AllocLarge(Length n); + + // Coalesce span with neighboring spans if possible, prepend to + // appropriate free list, and adjust stats. + void MergeIntoFreeList(Span* span); + + // Prepends span to appropriate free list, and adjusts stats. + void PrependToFreeList(Span* span); + + // Removes span from its free list, and adjust stats. + void RemoveFromFreeList(Span* span); + + // Incrementally release some memory to the system. + // IncrementalScavenge(n) is called whenever n pages are freed. + void IncrementalScavenge(Length n); + + // Release the last span on the normal portion of this list. + // Return the length of that span. + Length ReleaseLastNormalSpan(SpanList* slist); + + + // Number of pages to deallocate before doing more scavenging + int64_t scavenge_counter_; + + // Index of last free list where we released memory to the OS. + int release_index_; +}; + +} // namespace tcmalloc + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#endif // TCMALLOC_PAGE_HEAP_H_ diff --git a/src/thirdparty/gperftools-2.0/src/page_heap_allocator.h b/src/thirdparty/gperftools-2.0/src/page_heap_allocator.h new file mode 100644 index 000000000..d83528203 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/page_heap_allocator.h @@ -0,0 +1,113 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#ifndef TCMALLOC_PAGE_HEAP_ALLOCATOR_H_ +#define TCMALLOC_PAGE_HEAP_ALLOCATOR_H_ + +#include // for NULL, size_t + +#include "common.h" // for MetaDataAlloc +#include "internal_logging.h" // for ASSERT + +namespace tcmalloc { + +// Simple allocator for objects of a specified type. External locking +// is required before accessing one of these objects. +template +class PageHeapAllocator { + public: + // We use an explicit Init function because these variables are statically + // allocated and their constructors might not have run by the time some + // other static variable tries to allocate memory. + void Init() { + ASSERT(sizeof(T) <= kAllocIncrement); + inuse_ = 0; + free_area_ = NULL; + free_avail_ = 0; + free_list_ = NULL; + // Reserve some space at the beginning to avoid fragmentation. + Delete(New()); + } + + T* New() { + // Consult free list + void* result; + if (free_list_ != NULL) { + result = free_list_; + free_list_ = *(reinterpret_cast(result)); + } else { + if (free_avail_ < sizeof(T)) { + // Need more room. We assume that MetaDataAlloc returns + // suitably aligned memory. + free_area_ = reinterpret_cast(MetaDataAlloc(kAllocIncrement)); + if (free_area_ == NULL) { + Log(kCrash, __FILE__, __LINE__, + "FATAL ERROR: Out of memory trying to allocate internal " + "tcmalloc data (bytes, object-size)", + kAllocIncrement, sizeof(T)); + } + free_avail_ = kAllocIncrement; + } + result = free_area_; + free_area_ += sizeof(T); + free_avail_ -= sizeof(T); + } + inuse_++; + return reinterpret_cast(result); + } + + void Delete(T* p) { + *(reinterpret_cast(p)) = free_list_; + free_list_ = p; + inuse_--; + } + + int inuse() const { return inuse_; } + + private: + // How much to allocate from system at a time + static const int kAllocIncrement = 128 << 10; + + // Free area from which to carve new objects + char* free_area_; + size_t free_avail_; + + // Free list of already carved objects + void* free_list_; + + // Number of allocated but unfreed objects + int inuse_; +}; + +} // namespace tcmalloc + +#endif // TCMALLOC_PAGE_HEAP_ALLOCATOR_H_ diff --git a/src/thirdparty/gperftools-2.0/src/pagemap.h b/src/thirdparty/gperftools-2.0/src/pagemap.h new file mode 100644 index 000000000..27cb3da05 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/pagemap.h @@ -0,0 +1,323 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// A data structure used by the caching malloc. It maps from page# to +// a pointer that contains info about that page. We use two +// representations: one for 32-bit addresses, and another for 64 bit +// addresses. Both representations provide the same interface. The +// first representation is implemented as a flat array, the seconds as +// a three-level radix tree that strips away approximately 1/3rd of +// the bits every time. +// +// The BITS parameter should be the number of bits required to hold +// a page number. E.g., with 32 bit pointers and 4K pages (i.e., +// page offset fits in lower 12 bits), BITS == 20. + +#ifndef TCMALLOC_PAGEMAP_H_ +#define TCMALLOC_PAGEMAP_H_ + +#include "config.h" + +#include // for NULL, size_t +#include // for memset +#if defined HAVE_STDINT_H +#include +#elif defined HAVE_INTTYPES_H +#include +#else +#include +#endif +#include "internal_logging.h" // for ASSERT + +// Single-level array +template +class TCMalloc_PageMap1 { + private: + static const int LENGTH = 1 << BITS; + + void** array_; + + public: + typedef uintptr_t Number; + + explicit TCMalloc_PageMap1(void* (*allocator)(size_t)) { + array_ = reinterpret_cast((*allocator)(sizeof(void*) << BITS)); + memset(array_, 0, sizeof(void*) << BITS); + } + + // Ensure that the map contains initialized entries "x .. x+n-1". + // Returns true if successful, false if we could not allocate memory. + bool Ensure(Number x, size_t n) { + // Nothing to do since flat array was allocated at start. All + // that's left is to check for overflow (that is, we don't want to + // ensure a number y where array_[y] would be an out-of-bounds + // access). + return n <= LENGTH - x; // an overflow-free way to do "x + n <= LENGTH" + } + + void PreallocateMoreMemory() {} + + // Return the current value for KEY. Returns NULL if not yet set, + // or if k is out of range. + void* get(Number k) const { + if ((k >> BITS) > 0) { + return NULL; + } + return array_[k]; + } + + // REQUIRES "k" is in range "[0,2^BITS-1]". + // REQUIRES "k" has been ensured before. + // + // Sets the value 'v' for key 'k'. + void set(Number k, void* v) { + array_[k] = v; + } + + // Return the first non-NULL pointer found in this map for + // a page number >= k. Returns NULL if no such number is found. + void* Next(Number k) const { + while (k < (1 << BITS)) { + if (array_[k] != NULL) return array_[k]; + k++; + } + return NULL; + } +}; + +// Two-level radix tree +template +class TCMalloc_PageMap2 { + private: + // Put 32 entries in the root and (2^BITS)/32 entries in each leaf. + static const int ROOT_BITS = 5; + static const int ROOT_LENGTH = 1 << ROOT_BITS; + + static const int LEAF_BITS = BITS - ROOT_BITS; + static const int LEAF_LENGTH = 1 << LEAF_BITS; + + // Leaf node + struct Leaf { + void* values[LEAF_LENGTH]; + }; + + Leaf* root_[ROOT_LENGTH]; // Pointers to 32 child nodes + void* (*allocator_)(size_t); // Memory allocator + + public: + typedef uintptr_t Number; + + explicit TCMalloc_PageMap2(void* (*allocator)(size_t)) { + allocator_ = allocator; + memset(root_, 0, sizeof(root_)); + } + + void* get(Number k) const { + const Number i1 = k >> LEAF_BITS; + const Number i2 = k & (LEAF_LENGTH-1); + if ((k >> BITS) > 0 || root_[i1] == NULL) { + return NULL; + } + return root_[i1]->values[i2]; + } + + void set(Number k, void* v) { + ASSERT(k >> BITS == 0); + const Number i1 = k >> LEAF_BITS; + const Number i2 = k & (LEAF_LENGTH-1); + root_[i1]->values[i2] = v; + } + + bool Ensure(Number start, size_t n) { + for (Number key = start; key <= start + n - 1; ) { + const Number i1 = key >> LEAF_BITS; + + // Check for overflow + if (i1 >= ROOT_LENGTH) + return false; + + // Make 2nd level node if necessary + if (root_[i1] == NULL) { + Leaf* leaf = reinterpret_cast((*allocator_)(sizeof(Leaf))); + if (leaf == NULL) return false; + memset(leaf, 0, sizeof(*leaf)); + root_[i1] = leaf; + } + + // Advance key past whatever is covered by this leaf node + key = ((key >> LEAF_BITS) + 1) << LEAF_BITS; + } + return true; + } + + void PreallocateMoreMemory() { + // Allocate enough to keep track of all possible pages + Ensure(0, 1 << BITS); + } + + void* Next(Number k) const { + while (k < (1 << BITS)) { + const Number i1 = k >> LEAF_BITS; + Leaf* leaf = root_[i1]; + if (leaf != NULL) { + // Scan forward in leaf + for (Number i2 = k & (LEAF_LENGTH - 1); i2 < LEAF_LENGTH; i2++) { + if (leaf->values[i2] != NULL) { + return leaf->values[i2]; + } + } + } + // Skip to next top-level entry + k = (i1 + 1) << LEAF_BITS; + } + return NULL; + } +}; + +// Three-level radix tree +template +class TCMalloc_PageMap3 { + private: + // How many bits should we consume at each interior level + static const int INTERIOR_BITS = (BITS + 2) / 3; // Round-up + static const int INTERIOR_LENGTH = 1 << INTERIOR_BITS; + + // How many bits should we consume at leaf level + static const int LEAF_BITS = BITS - 2*INTERIOR_BITS; + static const int LEAF_LENGTH = 1 << LEAF_BITS; + + // Interior node + struct Node { + Node* ptrs[INTERIOR_LENGTH]; + }; + + // Leaf node + struct Leaf { + void* values[LEAF_LENGTH]; + }; + + Node* root_; // Root of radix tree + void* (*allocator_)(size_t); // Memory allocator + + Node* NewNode() { + Node* result = reinterpret_cast((*allocator_)(sizeof(Node))); + if (result != NULL) { + memset(result, 0, sizeof(*result)); + } + return result; + } + + public: + typedef uintptr_t Number; + + explicit TCMalloc_PageMap3(void* (*allocator)(size_t)) { + allocator_ = allocator; + root_ = NewNode(); + } + + void* get(Number k) const { + const Number i1 = k >> (LEAF_BITS + INTERIOR_BITS); + const Number i2 = (k >> LEAF_BITS) & (INTERIOR_LENGTH-1); + const Number i3 = k & (LEAF_LENGTH-1); + if ((k >> BITS) > 0 || + root_->ptrs[i1] == NULL || root_->ptrs[i1]->ptrs[i2] == NULL) { + return NULL; + } + return reinterpret_cast(root_->ptrs[i1]->ptrs[i2])->values[i3]; + } + + void set(Number k, void* v) { + ASSERT(k >> BITS == 0); + const Number i1 = k >> (LEAF_BITS + INTERIOR_BITS); + const Number i2 = (k >> LEAF_BITS) & (INTERIOR_LENGTH-1); + const Number i3 = k & (LEAF_LENGTH-1); + reinterpret_cast(root_->ptrs[i1]->ptrs[i2])->values[i3] = v; + } + + bool Ensure(Number start, size_t n) { + for (Number key = start; key <= start + n - 1; ) { + const Number i1 = key >> (LEAF_BITS + INTERIOR_BITS); + const Number i2 = (key >> LEAF_BITS) & (INTERIOR_LENGTH-1); + + // Check for overflow + if (i1 >= INTERIOR_LENGTH || i2 >= INTERIOR_LENGTH) + return false; + + // Make 2nd level node if necessary + if (root_->ptrs[i1] == NULL) { + Node* n = NewNode(); + if (n == NULL) return false; + root_->ptrs[i1] = n; + } + + // Make leaf node if necessary + if (root_->ptrs[i1]->ptrs[i2] == NULL) { + Leaf* leaf = reinterpret_cast((*allocator_)(sizeof(Leaf))); + if (leaf == NULL) return false; + memset(leaf, 0, sizeof(*leaf)); + root_->ptrs[i1]->ptrs[i2] = reinterpret_cast(leaf); + } + + // Advance key past whatever is covered by this leaf node + key = ((key >> LEAF_BITS) + 1) << LEAF_BITS; + } + return true; + } + + void PreallocateMoreMemory() { + } + + void* Next(Number k) const { + while (k < (Number(1) << BITS)) { + const Number i1 = k >> (LEAF_BITS + INTERIOR_BITS); + const Number i2 = (k >> LEAF_BITS) & (INTERIOR_LENGTH-1); + if (root_->ptrs[i1] == NULL) { + // Advance to next top-level entry + k = (i1 + 1) << (LEAF_BITS + INTERIOR_BITS); + } else { + Leaf* leaf = reinterpret_cast(root_->ptrs[i1]->ptrs[i2]); + if (leaf != NULL) { + for (Number i3 = (k & (LEAF_LENGTH-1)); i3 < LEAF_LENGTH; i3++) { + if (leaf->values[i3] != NULL) { + return leaf->values[i3]; + } + } + } + // Advance to next interior entry + k = ((k >> LEAF_BITS) + 1) << LEAF_BITS; + } + } + return NULL; + } +}; + +#endif // TCMALLOC_PAGEMAP_H_ diff --git a/src/thirdparty/gperftools-2.0/src/pprof b/src/thirdparty/gperftools-2.0/src/pprof new file mode 100755 index 000000000..727eb4370 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/pprof @@ -0,0 +1,5348 @@ +#! /usr/bin/env perl + +# Copyright (c) 1998-2007, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# --- +# Program for printing the profile generated by common/profiler.cc, +# or by the heap profiler (common/debugallocation.cc) +# +# The profile contains a sequence of entries of the form: +# +# This program parses the profile, and generates user-readable +# output. +# +# Examples: +# +# % tools/pprof "program" "profile" +# Enters "interactive" mode +# +# % tools/pprof --text "program" "profile" +# Generates one line per procedure +# +# % tools/pprof --gv "program" "profile" +# Generates annotated call-graph and displays via "gv" +# +# % tools/pprof --gv --focus=Mutex "program" "profile" +# Restrict to code paths that involve an entry that matches "Mutex" +# +# % tools/pprof --gv --focus=Mutex --ignore=string "program" "profile" +# Restrict to code paths that involve an entry that matches "Mutex" +# and does not match "string" +# +# % tools/pprof --list=IBF_CheckDocid "program" "profile" +# Generates disassembly listing of all routines with at least one +# sample that match the --list= pattern. The listing is +# annotated with the flat and cumulative sample counts at each line. +# +# % tools/pprof --disasm=IBF_CheckDocid "program" "profile" +# Generates disassembly listing of all routines with at least one +# sample that match the --disasm= pattern. The listing is +# annotated with the flat and cumulative sample counts at each PC value. +# +# TODO: Use color to indicate files? + +use strict; +use warnings; +use Getopt::Long; + +my $PPROF_VERSION = "2.0"; + +# These are the object tools we use which can come from a +# user-specified location using --tools, from the PPROF_TOOLS +# environment variable, or from the environment. +my %obj_tool_map = ( + "objdump" => "objdump", + "nm" => "nm", + "addr2line" => "addr2line", + "c++filt" => "c++filt", + ## ConfigureObjTools may add architecture-specific entries: + #"nm_pdb" => "nm-pdb", # for reading windows (PDB-format) executables + #"addr2line_pdb" => "addr2line-pdb", # ditto + #"otool" => "otool", # equivalent of objdump on OS X +); +# NOTE: these are lists, so you can put in commandline flags if you want. +my @DOT = ("dot"); # leave non-absolute, since it may be in /usr/local +my @GV = ("gv"); +my @EVINCE = ("evince"); # could also be xpdf or perhaps acroread +my @KCACHEGRIND = ("kcachegrind"); +my @PS2PDF = ("ps2pdf"); +# These are used for dynamic profiles +my @URL_FETCHER = ("curl", "-s"); + +# These are the web pages that servers need to support for dynamic profiles +my $HEAP_PAGE = "/pprof/heap"; +my $PROFILE_PAGE = "/pprof/profile"; # must support cgi-param "?seconds=#" +my $PMUPROFILE_PAGE = "/pprof/pmuprofile(?:\\?.*)?"; # must support cgi-param + # ?seconds=#&event=x&period=n +my $GROWTH_PAGE = "/pprof/growth"; +my $CONTENTION_PAGE = "/pprof/contention"; +my $WALL_PAGE = "/pprof/wall(?:\\?.*)?"; # accepts options like namefilter +my $FILTEREDPROFILE_PAGE = "/pprof/filteredprofile(?:\\?.*)?"; +my $CENSUSPROFILE_PAGE = "/pprof/censusprofile(?:\\?.*)?"; # must support cgi-param + # "?seconds=#", + # "?tags_regexp=#" and + # "?type=#". +my $SYMBOL_PAGE = "/pprof/symbol"; # must support symbol lookup via POST +my $PROGRAM_NAME_PAGE = "/pprof/cmdline"; + +# These are the web pages that can be named on the command line. +# All the alternatives must begin with /. +my $PROFILES = "($HEAP_PAGE|$PROFILE_PAGE|$PMUPROFILE_PAGE|" . + "$GROWTH_PAGE|$CONTENTION_PAGE|$WALL_PAGE|" . + "$FILTEREDPROFILE_PAGE|$CENSUSPROFILE_PAGE)"; + +# default binary name +my $UNKNOWN_BINARY = "(unknown)"; + +# There is a pervasive dependency on the length (in hex characters, +# i.e., nibbles) of an address, distinguishing between 32-bit and +# 64-bit profiles. To err on the safe size, default to 64-bit here: +my $address_length = 16; + +my $dev_null = "/dev/null"; +if (! -e $dev_null && $^O =~ /MSWin/) { # $^O is the OS perl was built for + $dev_null = "nul"; +} + +# A list of paths to search for shared object files +my @prefix_list = (); + +# Special routine name that should not have any symbols. +# Used as separator to parse "addr2line -i" output. +my $sep_symbol = '_fini'; +my $sep_address = undef; + +##### Argument parsing ##### + +sub usage_string { + return < + is a space separated list of profile names. +pprof [options] + is a list of profile files where each file contains + the necessary symbol mappings as well as profile data (likely generated + with --raw). +pprof [options] + is a remote form. Symbols are obtained from host:port$SYMBOL_PAGE + + Each name can be: + /path/to/profile - a path to a profile file + host:port[/] - a location of a service to get profile from + + The / can be $HEAP_PAGE, $PROFILE_PAGE, /pprof/pmuprofile, + $GROWTH_PAGE, $CONTENTION_PAGE, /pprof/wall, + $CENSUSPROFILE_PAGE, or /pprof/filteredprofile. + For instance: + pprof http://myserver.com:80$HEAP_PAGE + If / is omitted, the service defaults to $PROFILE_PAGE (cpu profiling). +pprof --symbols + Maps addresses to symbol names. In this mode, stdin should be a + list of library mappings, in the same format as is found in the heap- + and cpu-profile files (this loosely matches that of /proc/self/maps + on linux), followed by a list of hex addresses to map, one per line. + + For more help with querying remote servers, including how to add the + necessary server-side support code, see this filename (or one like it): + + /usr/doc/gperftools-$PPROF_VERSION/pprof_remote_servers.html + +Options: + --cum Sort by cumulative data + --base= Subtract from before display + --interactive Run in interactive mode (interactive "help" gives help) [default] + --seconds= Length of time for dynamic profiles [default=30 secs] + --add_lib= Read additional symbols and line info from the given library + --lib_prefix= Comma separated list of library path prefixes + +Reporting Granularity: + --addresses Report at address level + --lines Report at source line level + --functions Report at function level [default] + --files Report at source file level + +Output type: + --text Generate text report + --callgrind Generate callgrind format to stdout + --gv Generate Postscript and display + --evince Generate PDF and display + --web Generate SVG and display + --list= Generate source listing of matching routines + --disasm= Generate disassembly of matching routines + --symbols Print demangled symbol names found at given addresses + --dot Generate DOT file to stdout + --ps Generate Postcript to stdout + --pdf Generate PDF to stdout + --svg Generate SVG to stdout + --gif Generate GIF to stdout + --raw Generate symbolized pprof data (useful with remote fetch) + +Heap-Profile Options: + --inuse_space Display in-use (mega)bytes [default] + --inuse_objects Display in-use objects + --alloc_space Display allocated (mega)bytes + --alloc_objects Display allocated objects + --show_bytes Display space in bytes + --drop_negative Ignore negative differences + +Contention-profile options: + --total_delay Display total delay at each region [default] + --contentions Display number of delays at each region + --mean_delay Display mean delay at each region + +Call-graph Options: + --nodecount= Show at most so many nodes [default=80] + --nodefraction= Hide nodes below *total [default=.005] + --edgefraction= Hide edges below *total [default=.001] + --maxdegree= Max incoming/outgoing edges per node [default=8] + --focus= Focus on nodes matching + --ignore= Ignore nodes matching + --scale= Set GV scaling [default=0] + --heapcheck Make nodes with non-0 object counts + (i.e. direct leak generators) more visible + +Miscellaneous: + --tools=[,...] \$PATH for object tool pathnames + --test Run unit tests + --help This message + --version Version information + +Environment Variables: + PPROF_TMPDIR Profiles directory. Defaults to \$HOME/pprof + PPROF_TOOLS Prefix for object tools pathnames + +Examples: + +pprof /bin/ls ls.prof + Enters "interactive" mode +pprof --text /bin/ls ls.prof + Outputs one line per procedure +pprof --web /bin/ls ls.prof + Displays annotated call-graph in web browser +pprof --gv /bin/ls ls.prof + Displays annotated call-graph via 'gv' +pprof --gv --focus=Mutex /bin/ls ls.prof + Restricts to code paths including a .*Mutex.* entry +pprof --gv --focus=Mutex --ignore=string /bin/ls ls.prof + Code paths including Mutex but not string +pprof --list=getdir /bin/ls ls.prof + (Per-line) annotated source listing for getdir() +pprof --disasm=getdir /bin/ls ls.prof + (Per-PC) annotated disassembly for getdir() + +pprof http://localhost:1234/ + Enters "interactive" mode +pprof --text localhost:1234 + Outputs one line per procedure for localhost:1234 +pprof --raw localhost:1234 > ./local.raw +pprof --text ./local.raw + Fetches a remote profile for later analysis and then + analyzes it in text mode. +EOF +} + +sub version_string { + return < \$main::opt_help, + "version!" => \$main::opt_version, + "cum!" => \$main::opt_cum, + "base=s" => \$main::opt_base, + "seconds=i" => \$main::opt_seconds, + "add_lib=s" => \$main::opt_lib, + "lib_prefix=s" => \$main::opt_lib_prefix, + "functions!" => \$main::opt_functions, + "lines!" => \$main::opt_lines, + "addresses!" => \$main::opt_addresses, + "files!" => \$main::opt_files, + "text!" => \$main::opt_text, + "callgrind!" => \$main::opt_callgrind, + "list=s" => \$main::opt_list, + "disasm=s" => \$main::opt_disasm, + "symbols!" => \$main::opt_symbols, + "gv!" => \$main::opt_gv, + "evince!" => \$main::opt_evince, + "web!" => \$main::opt_web, + "dot!" => \$main::opt_dot, + "ps!" => \$main::opt_ps, + "pdf!" => \$main::opt_pdf, + "svg!" => \$main::opt_svg, + "gif!" => \$main::opt_gif, + "raw!" => \$main::opt_raw, + "interactive!" => \$main::opt_interactive, + "nodecount=i" => \$main::opt_nodecount, + "nodefraction=f" => \$main::opt_nodefraction, + "edgefraction=f" => \$main::opt_edgefraction, + "maxdegree=i" => \$main::opt_maxdegree, + "focus=s" => \$main::opt_focus, + "ignore=s" => \$main::opt_ignore, + "scale=i" => \$main::opt_scale, + "heapcheck" => \$main::opt_heapcheck, + "inuse_space!" => \$main::opt_inuse_space, + "inuse_objects!" => \$main::opt_inuse_objects, + "alloc_space!" => \$main::opt_alloc_space, + "alloc_objects!" => \$main::opt_alloc_objects, + "show_bytes!" => \$main::opt_show_bytes, + "drop_negative!" => \$main::opt_drop_negative, + "total_delay!" => \$main::opt_total_delay, + "contentions!" => \$main::opt_contentions, + "mean_delay!" => \$main::opt_mean_delay, + "tools=s" => \$main::opt_tools, + "test!" => \$main::opt_test, + "debug!" => \$main::opt_debug, + # Undocumented flags used only by unittests: + "test_stride=i" => \$main::opt_test_stride, + ) || usage("Invalid option(s)"); + + # Deal with the standard --help and --version + if ($main::opt_help) { + print usage_string(); + exit(0); + } + + if ($main::opt_version) { + print version_string(); + exit(0); + } + + # Disassembly/listing/symbols mode requires address-level info + if ($main::opt_disasm || $main::opt_list || $main::opt_symbols) { + $main::opt_functions = 0; + $main::opt_lines = 0; + $main::opt_addresses = 1; + $main::opt_files = 0; + } + + # Check heap-profiling flags + if ($main::opt_inuse_space + + $main::opt_inuse_objects + + $main::opt_alloc_space + + $main::opt_alloc_objects > 1) { + usage("Specify at most on of --inuse/--alloc options"); + } + + # Check output granularities + my $grains = + $main::opt_functions + + $main::opt_lines + + $main::opt_addresses + + $main::opt_files + + 0; + if ($grains > 1) { + usage("Only specify one output granularity option"); + } + if ($grains == 0) { + $main::opt_functions = 1; + } + + # Check output modes + my $modes = + $main::opt_text + + $main::opt_callgrind + + ($main::opt_list eq '' ? 0 : 1) + + ($main::opt_disasm eq '' ? 0 : 1) + + ($main::opt_symbols == 0 ? 0 : 1) + + $main::opt_gv + + $main::opt_evince + + $main::opt_web + + $main::opt_dot + + $main::opt_ps + + $main::opt_pdf + + $main::opt_svg + + $main::opt_gif + + $main::opt_raw + + $main::opt_interactive + + 0; + if ($modes > 1) { + usage("Only specify one output mode"); + } + if ($modes == 0) { + if (-t STDOUT) { # If STDOUT is a tty, activate interactive mode + $main::opt_interactive = 1; + } else { + $main::opt_text = 1; + } + } + + if ($main::opt_test) { + RunUnitTests(); + # Should not return + exit(1); + } + + # Binary name and profile arguments list + $main::prog = ""; + @main::pfile_args = (); + + # Remote profiling without a binary (using $SYMBOL_PAGE instead) + if (@ARGV > 0) { + if (IsProfileURL($ARGV[0])) { + $main::use_symbol_page = 1; + } elsif (IsSymbolizedProfileFile($ARGV[0])) { + $main::use_symbolized_profile = 1; + $main::prog = $UNKNOWN_BINARY; # will be set later from the profile file + } + } + + if ($main::use_symbol_page || $main::use_symbolized_profile) { + # We don't need a binary! + my %disabled = ('--lines' => $main::opt_lines, + '--disasm' => $main::opt_disasm); + for my $option (keys %disabled) { + usage("$option cannot be used without a binary") if $disabled{$option}; + } + # Set $main::prog later... + scalar(@ARGV) || usage("Did not specify profile file"); + } elsif ($main::opt_symbols) { + # --symbols needs a binary-name (to run nm on, etc) but not profiles + $main::prog = shift(@ARGV) || usage("Did not specify program"); + } else { + $main::prog = shift(@ARGV) || usage("Did not specify program"); + scalar(@ARGV) || usage("Did not specify profile file"); + } + + # Parse profile file/location arguments + foreach my $farg (@ARGV) { + if ($farg =~ m/(.*)\@([0-9]+)(|\/.*)$/ ) { + my $machine = $1; + my $num_machines = $2; + my $path = $3; + for (my $i = 0; $i < $num_machines; $i++) { + unshift(@main::pfile_args, "$i.$machine$path"); + } + } else { + unshift(@main::pfile_args, $farg); + } + } + + if ($main::use_symbol_page) { + unless (IsProfileURL($main::pfile_args[0])) { + error("The first profile should be a remote form to use $SYMBOL_PAGE\n"); + } + CheckSymbolPage(); + $main::prog = FetchProgramName(); + } elsif (!$main::use_symbolized_profile) { # may not need objtools! + ConfigureObjTools($main::prog) + } + + # Break the opt_lib_prefix into the prefix_list array + @prefix_list = split (',', $main::opt_lib_prefix); + + # Remove trailing / from the prefixes, in the list to prevent + # searching things like /my/path//lib/mylib.so + foreach (@prefix_list) { + s|/+$||; + } +} + +sub Main() { + Init(); + $main::collected_profile = undef; + @main::profile_files = (); + $main::op_time = time(); + + # Printing symbols is special and requires a lot less info that most. + if ($main::opt_symbols) { + PrintSymbols(*STDIN); # Get /proc/maps and symbols output from stdin + return; + } + + # Fetch all profile data + FetchDynamicProfiles(); + + # this will hold symbols that we read from the profile files + my $symbol_map = {}; + + # Read one profile, pick the last item on the list + my $data = ReadProfile($main::prog, pop(@main::profile_files)); + my $profile = $data->{profile}; + my $pcs = $data->{pcs}; + my $libs = $data->{libs}; # Info about main program and shared libraries + $symbol_map = MergeSymbols($symbol_map, $data->{symbols}); + + # Add additional profiles, if available. + if (scalar(@main::profile_files) > 0) { + foreach my $pname (@main::profile_files) { + my $data2 = ReadProfile($main::prog, $pname); + $profile = AddProfile($profile, $data2->{profile}); + $pcs = AddPcs($pcs, $data2->{pcs}); + $symbol_map = MergeSymbols($symbol_map, $data2->{symbols}); + } + } + + # Subtract base from profile, if specified + if ($main::opt_base ne '') { + my $base = ReadProfile($main::prog, $main::opt_base); + $profile = SubtractProfile($profile, $base->{profile}); + $pcs = AddPcs($pcs, $base->{pcs}); + $symbol_map = MergeSymbols($symbol_map, $base->{symbols}); + } + + # Get total data in profile + my $total = TotalProfile($profile); + + # Collect symbols + my $symbols; + if ($main::use_symbolized_profile) { + $symbols = FetchSymbols($pcs, $symbol_map); + } elsif ($main::use_symbol_page) { + $symbols = FetchSymbols($pcs); + } else { + # TODO(csilvers): $libs uses the /proc/self/maps data from profile1, + # which may differ from the data from subsequent profiles, especially + # if they were run on different machines. Use appropriate libs for + # each pc somehow. + $symbols = ExtractSymbols($libs, $pcs); + } + + # Remove uniniteresting stack items + $profile = RemoveUninterestingFrames($symbols, $profile); + + # Focus? + if ($main::opt_focus ne '') { + $profile = FocusProfile($symbols, $profile, $main::opt_focus); + } + + # Ignore? + if ($main::opt_ignore ne '') { + $profile = IgnoreProfile($symbols, $profile, $main::opt_ignore); + } + + my $calls = ExtractCalls($symbols, $profile); + + # Reduce profiles to required output granularity, and also clean + # each stack trace so a given entry exists at most once. + my $reduced = ReduceProfile($symbols, $profile); + + # Get derived profiles + my $flat = FlatProfile($reduced); + my $cumulative = CumulativeProfile($reduced); + + # Print + if (!$main::opt_interactive) { + if ($main::opt_disasm) { + PrintDisassembly($libs, $flat, $cumulative, $main::opt_disasm); + } elsif ($main::opt_list) { + PrintListing($total, $libs, $flat, $cumulative, $main::opt_list, 0); + } elsif ($main::opt_text) { + # Make sure the output is empty when have nothing to report + # (only matters when --heapcheck is given but we must be + # compatible with old branches that did not pass --heapcheck always): + if ($total != 0) { + printf("Total: %s %s\n", Unparse($total), Units()); + } + PrintText($symbols, $flat, $cumulative, -1); + } elsif ($main::opt_raw) { + PrintSymbolizedProfile($symbols, $profile, $main::prog); + } elsif ($main::opt_callgrind) { + PrintCallgrind($calls); + } else { + if (PrintDot($main::prog, $symbols, $profile, $flat, $cumulative, $total)) { + if ($main::opt_gv) { + RunGV(TempName($main::next_tmpfile, "ps"), ""); + } elsif ($main::opt_evince) { + RunEvince(TempName($main::next_tmpfile, "pdf"), ""); + } elsif ($main::opt_web) { + my $tmp = TempName($main::next_tmpfile, "svg"); + RunWeb($tmp); + # The command we run might hand the file name off + # to an already running browser instance and then exit. + # Normally, we'd remove $tmp on exit (right now), + # but fork a child to remove $tmp a little later, so that the + # browser has time to load it first. + delete $main::tempnames{$tmp}; + if (fork() == 0) { + sleep 5; + unlink($tmp); + exit(0); + } + } + } else { + cleanup(); + exit(1); + } + } + } else { + InteractiveMode($profile, $symbols, $libs, $total); + } + + cleanup(); + exit(0); +} + +##### Entry Point ##### + +Main(); + +# Temporary code to detect if we're running on a Goobuntu system. +# These systems don't have the right stuff installed for the special +# Readline libraries to work, so as a temporary workaround, we default +# to using the normal stdio code, rather than the fancier readline-based +# code +sub ReadlineMightFail { + if (-e '/lib/libtermcap.so.2') { + return 0; # libtermcap exists, so readline should be okay + } else { + return 1; + } +} + +sub RunGV { + my $fname = shift; + my $bg = shift; # "" or " &" if we should run in background + if (!system(ShellEscape(@GV, "--version") . " >$dev_null 2>&1")) { + # Options using double dash are supported by this gv version. + # Also, turn on noantialias to better handle bug in gv for + # postscript files with large dimensions. + # TODO: Maybe we should not pass the --noantialias flag + # if the gv version is known to work properly without the flag. + system(ShellEscape(@GV, "--scale=$main::opt_scale", "--noantialias", $fname) + . $bg); + } else { + # Old gv version - only supports options that use single dash. + print STDERR ShellEscape(@GV, "-scale", $main::opt_scale) . "\n"; + system(ShellEscape(@GV, "-scale", "$main::opt_scale", $fname) . $bg); + } +} + +sub RunEvince { + my $fname = shift; + my $bg = shift; # "" or " &" if we should run in background + system(ShellEscape(@EVINCE, $fname) . $bg); +} + +sub RunWeb { + my $fname = shift; + print STDERR "Loading web page file:///$fname\n"; + + if (`uname` =~ /Darwin/) { + # OS X: open will use standard preference for SVG files. + system("/usr/bin/open", $fname); + return; + } + + # Some kind of Unix; try generic symlinks, then specific browsers. + # (Stop once we find one.) + # Works best if the browser is already running. + my @alt = ( + "/etc/alternatives/gnome-www-browser", + "/etc/alternatives/x-www-browser", + "google-chrome", + "firefox", + ); + foreach my $b (@alt) { + if (system($b, $fname) == 0) { + return; + } + } + + print STDERR "Could not load web browser.\n"; +} + +sub RunKcachegrind { + my $fname = shift; + my $bg = shift; # "" or " &" if we should run in background + print STDERR "Starting '@KCACHEGRIND " . $fname . $bg . "'\n"; + system(ShellEscape(@KCACHEGRIND, $fname) . $bg); +} + + +##### Interactive helper routines ##### + +sub InteractiveMode { + $| = 1; # Make output unbuffered for interactive mode + my ($orig_profile, $symbols, $libs, $total) = @_; + + print STDERR "Welcome to pprof! For help, type 'help'.\n"; + + # Use ReadLine if it's installed and input comes from a console. + if ( -t STDIN && + !ReadlineMightFail() && + defined(eval {require Term::ReadLine}) ) { + my $term = new Term::ReadLine 'pprof'; + while ( defined ($_ = $term->readline('(pprof) '))) { + $term->addhistory($_) if /\S/; + if (!InteractiveCommand($orig_profile, $symbols, $libs, $total, $_)) { + last; # exit when we get an interactive command to quit + } + } + } else { # don't have readline + while (1) { + print STDERR "(pprof) "; + $_ = ; + last if ! defined $_ ; + s/\r//g; # turn windows-looking lines into unix-looking lines + + # Save some flags that might be reset by InteractiveCommand() + my $save_opt_lines = $main::opt_lines; + + if (!InteractiveCommand($orig_profile, $symbols, $libs, $total, $_)) { + last; # exit when we get an interactive command to quit + } + + # Restore flags + $main::opt_lines = $save_opt_lines; + } + } +} + +# Takes two args: orig profile, and command to run. +# Returns 1 if we should keep going, or 0 if we were asked to quit +sub InteractiveCommand { + my($orig_profile, $symbols, $libs, $total, $command) = @_; + $_ = $command; # just to make future m//'s easier + if (!defined($_)) { + print STDERR "\n"; + return 0; + } + if (m/^\s*quit/) { + return 0; + } + if (m/^\s*help/) { + InteractiveHelpMessage(); + return 1; + } + # Clear all the mode options -- mode is controlled by "$command" + $main::opt_text = 0; + $main::opt_callgrind = 0; + $main::opt_disasm = 0; + $main::opt_list = 0; + $main::opt_gv = 0; + $main::opt_evince = 0; + $main::opt_cum = 0; + + if (m/^\s*(text|top)(\d*)\s*(.*)/) { + $main::opt_text = 1; + + my $line_limit = ($2 ne "") ? int($2) : 10; + + my $routine; + my $ignore; + ($routine, $ignore) = ParseInteractiveArgs($3); + + my $profile = ProcessProfile($total, $orig_profile, $symbols, "", $ignore); + my $reduced = ReduceProfile($symbols, $profile); + + # Get derived profiles + my $flat = FlatProfile($reduced); + my $cumulative = CumulativeProfile($reduced); + + PrintText($symbols, $flat, $cumulative, $line_limit); + return 1; + } + if (m/^\s*callgrind\s*([^ \n]*)/) { + $main::opt_callgrind = 1; + + # Get derived profiles + my $calls = ExtractCalls($symbols, $orig_profile); + my $filename = $1; + if ( $1 eq '' ) { + $filename = TempName($main::next_tmpfile, "callgrind"); + } + PrintCallgrind($calls, $filename); + if ( $1 eq '' ) { + RunKcachegrind($filename, " & "); + $main::next_tmpfile++; + } + + return 1; + } + if (m/^\s*(web)?list\s*(.+)/) { + my $html = (defined($1) && ($1 eq "web")); + $main::opt_list = 1; + + my $routine; + my $ignore; + ($routine, $ignore) = ParseInteractiveArgs($2); + + my $profile = ProcessProfile($total, $orig_profile, $symbols, "", $ignore); + my $reduced = ReduceProfile($symbols, $profile); + + # Get derived profiles + my $flat = FlatProfile($reduced); + my $cumulative = CumulativeProfile($reduced); + + PrintListing($total, $libs, $flat, $cumulative, $routine, $html); + return 1; + } + if (m/^\s*disasm\s*(.+)/) { + $main::opt_disasm = 1; + + my $routine; + my $ignore; + ($routine, $ignore) = ParseInteractiveArgs($1); + + # Process current profile to account for various settings + my $profile = ProcessProfile($total, $orig_profile, $symbols, "", $ignore); + my $reduced = ReduceProfile($symbols, $profile); + + # Get derived profiles + my $flat = FlatProfile($reduced); + my $cumulative = CumulativeProfile($reduced); + + PrintDisassembly($libs, $flat, $cumulative, $routine); + return 1; + } + if (m/^\s*(gv|web|evince)\s*(.*)/) { + $main::opt_gv = 0; + $main::opt_evince = 0; + $main::opt_web = 0; + if ($1 eq "gv") { + $main::opt_gv = 1; + } elsif ($1 eq "evince") { + $main::opt_evince = 1; + } elsif ($1 eq "web") { + $main::opt_web = 1; + } + + my $focus; + my $ignore; + ($focus, $ignore) = ParseInteractiveArgs($2); + + # Process current profile to account for various settings + my $profile = ProcessProfile($total, $orig_profile, $symbols, + $focus, $ignore); + my $reduced = ReduceProfile($symbols, $profile); + + # Get derived profiles + my $flat = FlatProfile($reduced); + my $cumulative = CumulativeProfile($reduced); + + if (PrintDot($main::prog, $symbols, $profile, $flat, $cumulative, $total)) { + if ($main::opt_gv) { + RunGV(TempName($main::next_tmpfile, "ps"), " &"); + } elsif ($main::opt_evince) { + RunEvince(TempName($main::next_tmpfile, "pdf"), " &"); + } elsif ($main::opt_web) { + RunWeb(TempName($main::next_tmpfile, "svg")); + } + $main::next_tmpfile++; + } + return 1; + } + if (m/^\s*$/) { + return 1; + } + print STDERR "Unknown command: try 'help'.\n"; + return 1; +} + + +sub ProcessProfile { + my $total_count = shift; + my $orig_profile = shift; + my $symbols = shift; + my $focus = shift; + my $ignore = shift; + + # Process current profile to account for various settings + my $profile = $orig_profile; + printf("Total: %s %s\n", Unparse($total_count), Units()); + if ($focus ne '') { + $profile = FocusProfile($symbols, $profile, $focus); + my $focus_count = TotalProfile($profile); + printf("After focusing on '%s': %s %s of %s (%0.1f%%)\n", + $focus, + Unparse($focus_count), Units(), + Unparse($total_count), ($focus_count*100.0) / $total_count); + } + if ($ignore ne '') { + $profile = IgnoreProfile($symbols, $profile, $ignore); + my $ignore_count = TotalProfile($profile); + printf("After ignoring '%s': %s %s of %s (%0.1f%%)\n", + $ignore, + Unparse($ignore_count), Units(), + Unparse($total_count), + ($ignore_count*100.0) / $total_count); + } + + return $profile; +} + +sub InteractiveHelpMessage { + print STDERR <{$k}; + my @addrs = split(/\n/, $k); + if ($#addrs >= 0) { + my $depth = $#addrs + 1; + # int(foo / 2**32) is the only reliable way to get rid of bottom + # 32 bits on both 32- and 64-bit systems. + print pack('L*', $count & 0xFFFFFFFF, int($count / 2**32)); + print pack('L*', $depth & 0xFFFFFFFF, int($depth / 2**32)); + + foreach my $full_addr (@addrs) { + my $addr = $full_addr; + $addr =~ s/0x0*//; # strip off leading 0x, zeroes + if (length($addr) > 16) { + print STDERR "Invalid address in profile: $full_addr\n"; + next; + } + my $low_addr = substr($addr, -8); # get last 8 hex chars + my $high_addr = substr($addr, -16, 8); # get up to 8 more hex chars + print pack('L*', hex('0x' . $low_addr), hex('0x' . $high_addr)); + } + } + } +} + +# Print symbols and profile data +sub PrintSymbolizedProfile { + my $symbols = shift; + my $profile = shift; + my $prog = shift; + + $SYMBOL_PAGE =~ m,[^/]+$,; # matches everything after the last slash + my $symbol_marker = $&; + + print '--- ', $symbol_marker, "\n"; + if (defined($prog)) { + print 'binary=', $prog, "\n"; + } + while (my ($pc, $name) = each(%{$symbols})) { + my $sep = ' '; + print '0x', $pc; + # We have a list of function names, which include the inlined + # calls. They are separated (and terminated) by --, which is + # illegal in function names. + for (my $j = 2; $j <= $#{$name}; $j += 3) { + print $sep, $name->[$j]; + $sep = '--'; + } + print "\n"; + } + print '---', "\n"; + + $PROFILE_PAGE =~ m,[^/]+$,; # matches everything after the last slash + my $profile_marker = $&; + print '--- ', $profile_marker, "\n"; + if (defined($main::collected_profile)) { + # if used with remote fetch, simply dump the collected profile to output. + open(SRC, "<$main::collected_profile"); + while () { + print $_; + } + close(SRC); + } else { + # dump a cpu-format profile to standard out + PrintProfileData($profile); + } +} + +# Print text output +sub PrintText { + my $symbols = shift; + my $flat = shift; + my $cumulative = shift; + my $line_limit = shift; + + my $total = TotalProfile($flat); + + # Which profile to sort by? + my $s = $main::opt_cum ? $cumulative : $flat; + + my $running_sum = 0; + my $lines = 0; + foreach my $k (sort { GetEntry($s, $b) <=> GetEntry($s, $a) || $a cmp $b } + keys(%{$cumulative})) { + my $f = GetEntry($flat, $k); + my $c = GetEntry($cumulative, $k); + $running_sum += $f; + + my $sym = $k; + if (exists($symbols->{$k})) { + $sym = $symbols->{$k}->[0] . " " . $symbols->{$k}->[1]; + if ($main::opt_addresses) { + $sym = $k . " " . $sym; + } + } + + if ($f != 0 || $c != 0) { + printf("%8s %6s %6s %8s %6s %s\n", + Unparse($f), + Percent($f, $total), + Percent($running_sum, $total), + Unparse($c), + Percent($c, $total), + $sym); + } + $lines++; + last if ($line_limit >= 0 && $lines >= $line_limit); + } +} + +# Callgrind format has a compression for repeated function and file +# names. You show the name the first time, and just use its number +# subsequently. This can cut down the file to about a third or a +# quarter of its uncompressed size. $key and $val are the key/value +# pair that would normally be printed by callgrind; $map is a map from +# value to number. +sub CompressedCGName { + my($key, $val, $map) = @_; + my $idx = $map->{$val}; + # For very short keys, providing an index hurts rather than helps. + if (length($val) <= 3) { + return "$key=$val\n"; + } elsif (defined($idx)) { + return "$key=($idx)\n"; + } else { + # scalar(keys $map) gives the number of items in the map. + $idx = scalar(keys(%{$map})) + 1; + $map->{$val} = $idx; + return "$key=($idx) $val\n"; + } +} + +# Print the call graph in a way that's suiteable for callgrind. +sub PrintCallgrind { + my $calls = shift; + my $filename; + my %filename_to_index_map; + my %fnname_to_index_map; + + if ($main::opt_interactive) { + $filename = shift; + print STDERR "Writing callgrind file to '$filename'.\n" + } else { + $filename = "&STDOUT"; + } + open(CG, ">$filename"); + printf CG ("events: Hits\n\n"); + foreach my $call ( map { $_->[0] } + sort { $a->[1] cmp $b ->[1] || + $a->[2] <=> $b->[2] } + map { /([^:]+):(\d+):([^ ]+)( -> ([^:]+):(\d+):(.+))?/; + [$_, $1, $2] } + keys %$calls ) { + my $count = int($calls->{$call}); + $call =~ /([^:]+):(\d+):([^ ]+)( -> ([^:]+):(\d+):(.+))?/; + my ( $caller_file, $caller_line, $caller_function, + $callee_file, $callee_line, $callee_function ) = + ( $1, $2, $3, $5, $6, $7 ); + + # TODO(csilvers): for better compression, collect all the + # caller/callee_files and functions first, before printing + # anything, and only compress those referenced more than once. + printf CG CompressedCGName("fl", $caller_file, \%filename_to_index_map); + printf CG CompressedCGName("fn", $caller_function, \%fnname_to_index_map); + if (defined $6) { + printf CG CompressedCGName("cfl", $callee_file, \%filename_to_index_map); + printf CG CompressedCGName("cfn", $callee_function, \%fnname_to_index_map); + printf CG ("calls=$count $callee_line\n"); + } + printf CG ("$caller_line $count\n\n"); + } +} + +# Print disassembly for all all routines that match $main::opt_disasm +sub PrintDisassembly { + my $libs = shift; + my $flat = shift; + my $cumulative = shift; + my $disasm_opts = shift; + + my $total = TotalProfile($flat); + + foreach my $lib (@{$libs}) { + my $symbol_table = GetProcedureBoundaries($lib->[0], $disasm_opts); + my $offset = AddressSub($lib->[1], $lib->[3]); + foreach my $routine (sort ByName keys(%{$symbol_table})) { + my $start_addr = $symbol_table->{$routine}->[0]; + my $end_addr = $symbol_table->{$routine}->[1]; + # See if there are any samples in this routine + my $length = hex(AddressSub($end_addr, $start_addr)); + my $addr = AddressAdd($start_addr, $offset); + for (my $i = 0; $i < $length; $i++) { + if (defined($cumulative->{$addr})) { + PrintDisassembledFunction($lib->[0], $offset, + $routine, $flat, $cumulative, + $start_addr, $end_addr, $total); + last; + } + $addr = AddressInc($addr); + } + } + } +} + +# Return reference to array of tuples of the form: +# [start_address, filename, linenumber, instruction, limit_address] +# E.g., +# ["0x806c43d", "/foo/bar.cc", 131, "ret", "0x806c440"] +sub Disassemble { + my $prog = shift; + my $offset = shift; + my $start_addr = shift; + my $end_addr = shift; + + my $objdump = $obj_tool_map{"objdump"}; + my $cmd = ShellEscape($objdump, "-C", "-d", "-l", "--no-show-raw-insn", + "--start-address=0x$start_addr", + "--stop-address=0x$end_addr", $prog); + open(OBJDUMP, "$cmd |") || error("$cmd: $!\n"); + my @result = (); + my $filename = ""; + my $linenumber = -1; + my $last = ["", "", "", ""]; + while () { + s/\r//g; # turn windows-looking lines into unix-looking lines + chop; + if (m|\s*([^:\s]+):(\d+)\s*$|) { + # Location line of the form: + # : + $filename = $1; + $linenumber = $2; + } elsif (m/^ +([0-9a-f]+):\s*(.*)/) { + # Disassembly line -- zero-extend address to full length + my $addr = HexExtend($1); + my $k = AddressAdd($addr, $offset); + $last->[4] = $k; # Store ending address for previous instruction + $last = [$k, $filename, $linenumber, $2, $end_addr]; + push(@result, $last); + } + } + close(OBJDUMP); + return @result; +} + +# The input file should contain lines of the form /proc/maps-like +# output (same format as expected from the profiles) or that looks +# like hex addresses (like "0xDEADBEEF"). We will parse all +# /proc/maps output, and for all the hex addresses, we will output +# "short" symbol names, one per line, in the same order as the input. +sub PrintSymbols { + my $maps_and_symbols_file = shift; + + # ParseLibraries expects pcs to be in a set. Fine by us... + my @pclist = (); # pcs in sorted order + my $pcs = {}; + my $map = ""; + foreach my $line (<$maps_and_symbols_file>) { + $line =~ s/\r//g; # turn windows-looking lines into unix-looking lines + if ($line =~ /\b(0x[0-9a-f]+)\b/i) { + push(@pclist, HexExtend($1)); + $pcs->{$pclist[-1]} = 1; + } else { + $map .= $line; + } + } + + my $libs = ParseLibraries($main::prog, $map, $pcs); + my $symbols = ExtractSymbols($libs, $pcs); + + foreach my $pc (@pclist) { + # ->[0] is the shortname, ->[2] is the full name + print(($symbols->{$pc}->[0] || "??") . "\n"); + } +} + + +# For sorting functions by name +sub ByName { + return ShortFunctionName($a) cmp ShortFunctionName($b); +} + +# Print source-listing for all all routines that match $list_opts +sub PrintListing { + my $total = shift; + my $libs = shift; + my $flat = shift; + my $cumulative = shift; + my $list_opts = shift; + my $html = shift; + + my $output = \*STDOUT; + my $fname = ""; + + if ($html) { + # Arrange to write the output to a temporary file + $fname = TempName($main::next_tmpfile, "html"); + $main::next_tmpfile++; + if (!open(TEMP, ">$fname")) { + print STDERR "$fname: $!\n"; + return; + } + $output = \*TEMP; + print $output HtmlListingHeader(); + printf $output ("
%s
Total: %s %s
\n", + $main::prog, Unparse($total), Units()); + } + + my $listed = 0; + foreach my $lib (@{$libs}) { + my $symbol_table = GetProcedureBoundaries($lib->[0], $list_opts); + my $offset = AddressSub($lib->[1], $lib->[3]); + foreach my $routine (sort ByName keys(%{$symbol_table})) { + # Print if there are any samples in this routine + my $start_addr = $symbol_table->{$routine}->[0]; + my $end_addr = $symbol_table->{$routine}->[1]; + my $length = hex(AddressSub($end_addr, $start_addr)); + my $addr = AddressAdd($start_addr, $offset); + for (my $i = 0; $i < $length; $i++) { + if (defined($cumulative->{$addr})) { + $listed += PrintSource( + $lib->[0], $offset, + $routine, $flat, $cumulative, + $start_addr, $end_addr, + $html, + $output); + last; + } + $addr = AddressInc($addr); + } + } + } + + if ($html) { + if ($listed > 0) { + print $output HtmlListingFooter(); + close($output); + RunWeb($fname); + } else { + close($output); + unlink($fname); + } + } +} + +sub HtmlListingHeader { + return <<'EOF'; + + + +Pprof listing + + + + +EOF +} + +sub HtmlListingFooter { + return <<'EOF'; + + +EOF +} + +sub HtmlEscape { + my $text = shift; + $text =~ s/&/&/g; + $text =~ s//>/g; + return $text; +} + +# Returns the indentation of the line, if it has any non-whitespace +# characters. Otherwise, returns -1. +sub Indentation { + my $line = shift; + if (m/^(\s*)\S/) { + return length($1); + } else { + return -1; + } +} + +# If the symbol table contains inlining info, Disassemble() may tag an +# instruction with a location inside an inlined function. But for +# source listings, we prefer to use the location in the function we +# are listing. So use MapToSymbols() to fetch full location +# information for each instruction and then pick out the first +# location from a location list (location list contains callers before +# callees in case of inlining). +# +# After this routine has run, each entry in $instructions contains: +# [0] start address +# [1] filename for function we are listing +# [2] line number for function we are listing +# [3] disassembly +# [4] limit address +# [5] most specific filename (may be different from [1] due to inlining) +# [6] most specific line number (may be different from [2] due to inlining) +sub GetTopLevelLineNumbers { + my ($lib, $offset, $instructions) = @_; + my $pcs = []; + for (my $i = 0; $i <= $#{$instructions}; $i++) { + push(@{$pcs}, $instructions->[$i]->[0]); + } + my $symbols = {}; + MapToSymbols($lib, $offset, $pcs, $symbols); + for (my $i = 0; $i <= $#{$instructions}; $i++) { + my $e = $instructions->[$i]; + push(@{$e}, $e->[1]); + push(@{$e}, $e->[2]); + my $addr = $e->[0]; + my $sym = $symbols->{$addr}; + if (defined($sym)) { + if ($#{$sym} >= 2 && $sym->[1] =~ m/^(.*):(\d+)$/) { + $e->[1] = $1; # File name + $e->[2] = $2; # Line number + } + } + } +} + +# Print source-listing for one routine +sub PrintSource { + my $prog = shift; + my $offset = shift; + my $routine = shift; + my $flat = shift; + my $cumulative = shift; + my $start_addr = shift; + my $end_addr = shift; + my $html = shift; + my $output = shift; + + # Disassemble all instructions (just to get line numbers) + my @instructions = Disassemble($prog, $offset, $start_addr, $end_addr); + GetTopLevelLineNumbers($prog, $offset, \@instructions); + + # Hack 1: assume that the first source file encountered in the + # disassembly contains the routine + my $filename = undef; + for (my $i = 0; $i <= $#instructions; $i++) { + if ($instructions[$i]->[2] >= 0) { + $filename = $instructions[$i]->[1]; + last; + } + } + if (!defined($filename)) { + print STDERR "no filename found in $routine\n"; + return 0; + } + + # Hack 2: assume that the largest line number from $filename is the + # end of the procedure. This is typically safe since if P1 contains + # an inlined call to P2, then P2 usually occurs earlier in the + # source file. If this does not work, we might have to compute a + # density profile or just print all regions we find. + my $lastline = 0; + for (my $i = 0; $i <= $#instructions; $i++) { + my $f = $instructions[$i]->[1]; + my $l = $instructions[$i]->[2]; + if (($f eq $filename) && ($l > $lastline)) { + $lastline = $l; + } + } + + # Hack 3: assume the first source location from "filename" is the start of + # the source code. + my $firstline = 1; + for (my $i = 0; $i <= $#instructions; $i++) { + if ($instructions[$i]->[1] eq $filename) { + $firstline = $instructions[$i]->[2]; + last; + } + } + + # Hack 4: Extend last line forward until its indentation is less than + # the indentation we saw on $firstline + my $oldlastline = $lastline; + { + if (!open(FILE, "<$filename")) { + print STDERR "$filename: $!\n"; + return 0; + } + my $l = 0; + my $first_indentation = -1; + while () { + s/\r//g; # turn windows-looking lines into unix-looking lines + $l++; + my $indent = Indentation($_); + if ($l >= $firstline) { + if ($first_indentation < 0 && $indent >= 0) { + $first_indentation = $indent; + last if ($first_indentation == 0); + } + } + if ($l >= $lastline && $indent >= 0) { + if ($indent >= $first_indentation) { + $lastline = $l+1; + } else { + last; + } + } + } + close(FILE); + } + + # Assign all samples to the range $firstline,$lastline, + # Hack 4: If an instruction does not occur in the range, its samples + # are moved to the next instruction that occurs in the range. + my $samples1 = {}; # Map from line number to flat count + my $samples2 = {}; # Map from line number to cumulative count + my $running1 = 0; # Unassigned flat counts + my $running2 = 0; # Unassigned cumulative counts + my $total1 = 0; # Total flat counts + my $total2 = 0; # Total cumulative counts + my %disasm = (); # Map from line number to disassembly + my $running_disasm = ""; # Unassigned disassembly + my $skip_marker = "---\n"; + if ($html) { + $skip_marker = ""; + for (my $l = $firstline; $l <= $lastline; $l++) { + $disasm{$l} = ""; + } + } + my $last_dis_filename = ''; + my $last_dis_linenum = -1; + my $last_touched_line = -1; # To detect gaps in disassembly for a line + foreach my $e (@instructions) { + # Add up counts for all address that fall inside this instruction + my $c1 = 0; + my $c2 = 0; + for (my $a = $e->[0]; $a lt $e->[4]; $a = AddressInc($a)) { + $c1 += GetEntry($flat, $a); + $c2 += GetEntry($cumulative, $a); + } + + if ($html) { + my $dis = sprintf(" %6s %6s \t\t%8s: %s ", + HtmlPrintNumber($c1), + HtmlPrintNumber($c2), + UnparseAddress($offset, $e->[0]), + CleanDisassembly($e->[3])); + + # Append the most specific source line associated with this instruction + if (length($dis) < 80) { $dis .= (' ' x (80 - length($dis))) }; + $dis = HtmlEscape($dis); + my $f = $e->[5]; + my $l = $e->[6]; + if ($f ne $last_dis_filename) { + $dis .= sprintf("%s:%d", + HtmlEscape(CleanFileName($f)), $l); + } elsif ($l ne $last_dis_linenum) { + # De-emphasize the unchanged file name portion + $dis .= sprintf("%s" . + ":%d", + HtmlEscape(CleanFileName($f)), $l); + } else { + # De-emphasize the entire location + $dis .= sprintf("%s:%d", + HtmlEscape(CleanFileName($f)), $l); + } + $last_dis_filename = $f; + $last_dis_linenum = $l; + $running_disasm .= $dis; + $running_disasm .= "\n"; + } + + $running1 += $c1; + $running2 += $c2; + $total1 += $c1; + $total2 += $c2; + my $file = $e->[1]; + my $line = $e->[2]; + if (($file eq $filename) && + ($line >= $firstline) && + ($line <= $lastline)) { + # Assign all accumulated samples to this line + AddEntry($samples1, $line, $running1); + AddEntry($samples2, $line, $running2); + $running1 = 0; + $running2 = 0; + if ($html) { + if ($line != $last_touched_line && $disasm{$line} ne '') { + $disasm{$line} .= "\n"; + } + $disasm{$line} .= $running_disasm; + $running_disasm = ''; + $last_touched_line = $line; + } + } + } + + # Assign any leftover samples to $lastline + AddEntry($samples1, $lastline, $running1); + AddEntry($samples2, $lastline, $running2); + if ($html) { + if ($lastline != $last_touched_line && $disasm{$lastline} ne '') { + $disasm{$lastline} .= "\n"; + } + $disasm{$lastline} .= $running_disasm; + } + + if ($html) { + printf $output ( + "

%s

%s\n
\n" .
+      "Total:%6s %6s (flat / cumulative %s)\n",
+      HtmlEscape(ShortFunctionName($routine)),
+      HtmlEscape(CleanFileName($filename)),
+      Unparse($total1),
+      Unparse($total2),
+      Units());
+  } else {
+    printf $output (
+      "ROUTINE ====================== %s in %s\n" .
+      "%6s %6s Total %s (flat / cumulative)\n",
+      ShortFunctionName($routine),
+      CleanFileName($filename),
+      Unparse($total1),
+      Unparse($total2),
+      Units());
+  }
+  if (!open(FILE, "<$filename")) {
+    print STDERR "$filename: $!\n";
+    return 0;
+  }
+  my $l = 0;
+  while () {
+    s/\r//g;         # turn windows-looking lines into unix-looking lines
+    $l++;
+    if ($l >= $firstline - 5 &&
+        (($l <= $oldlastline + 5) || ($l <= $lastline))) {
+      chop;
+      my $text = $_;
+      if ($l == $firstline) { print $output $skip_marker; }
+      my $n1 = GetEntry($samples1, $l);
+      my $n2 = GetEntry($samples2, $l);
+      if ($html) {
+        # Emit a span that has one of the following classes:
+        #    livesrc -- has samples
+        #    deadsrc -- has disassembly, but with no samples
+        #    nop     -- has no matching disasembly
+        # Also emit an optional span containing disassembly.
+        my $dis = $disasm{$l};
+        my $asm = "";
+        if (defined($dis) && $dis ne '') {
+          $asm = "" . $dis . "";
+        }
+        my $source_class = (($n1 + $n2 > 0) 
+                            ? "livesrc" 
+                            : (($asm ne "") ? "deadsrc" : "nop"));
+        printf $output (
+          "%5d " .
+          "%6s %6s %s%s\n",
+          $l, $source_class,
+          HtmlPrintNumber($n1),
+          HtmlPrintNumber($n2),
+          HtmlEscape($text),
+          $asm);
+      } else {
+        printf $output(
+          "%6s %6s %4d: %s\n",
+          UnparseAlt($n1),
+          UnparseAlt($n2),
+          $l,
+          $text);
+      }
+      if ($l == $lastline)  { print $output $skip_marker; }
+    };
+  }
+  close(FILE);
+  if ($html) {
+    print $output "
\n"; + } + return 1; +} + +# Return the source line for the specified file/linenumber. +# Returns undef if not found. +sub SourceLine { + my $file = shift; + my $line = shift; + + # Look in cache + if (!defined($main::source_cache{$file})) { + if (100 < scalar keys(%main::source_cache)) { + # Clear the cache when it gets too big + $main::source_cache = (); + } + + # Read all lines from the file + if (!open(FILE, "<$file")) { + print STDERR "$file: $!\n"; + $main::source_cache{$file} = []; # Cache the negative result + return undef; + } + my $lines = []; + push(@{$lines}, ""); # So we can use 1-based line numbers as indices + while () { + push(@{$lines}, $_); + } + close(FILE); + + # Save the lines in the cache + $main::source_cache{$file} = $lines; + } + + my $lines = $main::source_cache{$file}; + if (($line < 0) || ($line > $#{$lines})) { + return undef; + } else { + return $lines->[$line]; + } +} + +# Print disassembly for one routine with interspersed source if available +sub PrintDisassembledFunction { + my $prog = shift; + my $offset = shift; + my $routine = shift; + my $flat = shift; + my $cumulative = shift; + my $start_addr = shift; + my $end_addr = shift; + my $total = shift; + + # Disassemble all instructions + my @instructions = Disassemble($prog, $offset, $start_addr, $end_addr); + + # Make array of counts per instruction + my @flat_count = (); + my @cum_count = (); + my $flat_total = 0; + my $cum_total = 0; + foreach my $e (@instructions) { + # Add up counts for all address that fall inside this instruction + my $c1 = 0; + my $c2 = 0; + for (my $a = $e->[0]; $a lt $e->[4]; $a = AddressInc($a)) { + $c1 += GetEntry($flat, $a); + $c2 += GetEntry($cumulative, $a); + } + push(@flat_count, $c1); + push(@cum_count, $c2); + $flat_total += $c1; + $cum_total += $c2; + } + + # Print header with total counts + printf("ROUTINE ====================== %s\n" . + "%6s %6s %s (flat, cumulative) %.1f%% of total\n", + ShortFunctionName($routine), + Unparse($flat_total), + Unparse($cum_total), + Units(), + ($cum_total * 100.0) / $total); + + # Process instructions in order + my $current_file = ""; + for (my $i = 0; $i <= $#instructions; ) { + my $e = $instructions[$i]; + + # Print the new file name whenever we switch files + if ($e->[1] ne $current_file) { + $current_file = $e->[1]; + my $fname = $current_file; + $fname =~ s|^\./||; # Trim leading "./" + + # Shorten long file names + if (length($fname) >= 58) { + $fname = "..." . substr($fname, -55); + } + printf("-------------------- %s\n", $fname); + } + + # TODO: Compute range of lines to print together to deal with + # small reorderings. + my $first_line = $e->[2]; + my $last_line = $first_line; + my %flat_sum = (); + my %cum_sum = (); + for (my $l = $first_line; $l <= $last_line; $l++) { + $flat_sum{$l} = 0; + $cum_sum{$l} = 0; + } + + # Find run of instructions for this range of source lines + my $first_inst = $i; + while (($i <= $#instructions) && + ($instructions[$i]->[2] >= $first_line) && + ($instructions[$i]->[2] <= $last_line)) { + $e = $instructions[$i]; + $flat_sum{$e->[2]} += $flat_count[$i]; + $cum_sum{$e->[2]} += $cum_count[$i]; + $i++; + } + my $last_inst = $i - 1; + + # Print source lines + for (my $l = $first_line; $l <= $last_line; $l++) { + my $line = SourceLine($current_file, $l); + if (!defined($line)) { + $line = "?\n"; + next; + } else { + $line =~ s/^\s+//; + } + printf("%6s %6s %5d: %s", + UnparseAlt($flat_sum{$l}), + UnparseAlt($cum_sum{$l}), + $l, + $line); + } + + # Print disassembly + for (my $x = $first_inst; $x <= $last_inst; $x++) { + my $e = $instructions[$x]; + printf("%6s %6s %8s: %6s\n", + UnparseAlt($flat_count[$x]), + UnparseAlt($cum_count[$x]), + UnparseAddress($offset, $e->[0]), + CleanDisassembly($e->[3])); + } + } +} + +# Print DOT graph +sub PrintDot { + my $prog = shift; + my $symbols = shift; + my $raw = shift; + my $flat = shift; + my $cumulative = shift; + my $overall_total = shift; + + # Get total + my $local_total = TotalProfile($flat); + my $nodelimit = int($main::opt_nodefraction * $local_total); + my $edgelimit = int($main::opt_edgefraction * $local_total); + my $nodecount = $main::opt_nodecount; + + # Find nodes to include + my @list = (sort { abs(GetEntry($cumulative, $b)) <=> + abs(GetEntry($cumulative, $a)) + || $a cmp $b } + keys(%{$cumulative})); + my $last = $nodecount - 1; + if ($last > $#list) { + $last = $#list; + } + while (($last >= 0) && + (abs(GetEntry($cumulative, $list[$last])) <= $nodelimit)) { + $last--; + } + if ($last < 0) { + print STDERR "No nodes to print\n"; + return 0; + } + + if ($nodelimit > 0 || $edgelimit > 0) { + printf STDERR ("Dropping nodes with <= %s %s; edges with <= %s abs(%s)\n", + Unparse($nodelimit), Units(), + Unparse($edgelimit), Units()); + } + + # Open DOT output file + my $output; + my $escaped_dot = ShellEscape(@DOT); + my $escaped_ps2pdf = ShellEscape(@PS2PDF); + if ($main::opt_gv) { + my $escaped_outfile = ShellEscape(TempName($main::next_tmpfile, "ps")); + $output = "| $escaped_dot -Tps2 >$escaped_outfile"; + } elsif ($main::opt_evince) { + my $escaped_outfile = ShellEscape(TempName($main::next_tmpfile, "pdf")); + $output = "| $escaped_dot -Tps2 | $escaped_ps2pdf - $escaped_outfile"; + } elsif ($main::opt_ps) { + $output = "| $escaped_dot -Tps2"; + } elsif ($main::opt_pdf) { + $output = "| $escaped_dot -Tps2 | $escaped_ps2pdf - -"; + } elsif ($main::opt_web || $main::opt_svg) { + # We need to post-process the SVG, so write to a temporary file always. + my $escaped_outfile = ShellEscape(TempName($main::next_tmpfile, "svg")); + $output = "| $escaped_dot -Tsvg >$escaped_outfile"; + } elsif ($main::opt_gif) { + $output = "| $escaped_dot -Tgif"; + } else { + $output = ">&STDOUT"; + } + open(DOT, $output) || error("$output: $!\n"); + + # Title + printf DOT ("digraph \"%s; %s %s\" {\n", + $prog, + Unparse($overall_total), + Units()); + if ($main::opt_pdf) { + # The output is more printable if we set the page size for dot. + printf DOT ("size=\"8,11\"\n"); + } + printf DOT ("node [width=0.375,height=0.25];\n"); + + # Print legend + printf DOT ("Legend [shape=box,fontsize=24,shape=plaintext," . + "label=\"%s\\l%s\\l%s\\l%s\\l%s\\l\"];\n", + $prog, + sprintf("Total %s: %s", Units(), Unparse($overall_total)), + sprintf("Focusing on: %s", Unparse($local_total)), + sprintf("Dropped nodes with <= %s abs(%s)", + Unparse($nodelimit), Units()), + sprintf("Dropped edges with <= %s %s", + Unparse($edgelimit), Units()) + ); + + # Print nodes + my %node = (); + my $nextnode = 1; + foreach my $a (@list[0..$last]) { + # Pick font size + my $f = GetEntry($flat, $a); + my $c = GetEntry($cumulative, $a); + + my $fs = 8; + if ($local_total > 0) { + $fs = 8 + (50.0 * sqrt(abs($f * 1.0 / $local_total))); + } + + $node{$a} = $nextnode++; + my $sym = $a; + $sym =~ s/\s+/\\n/g; + $sym =~ s/::/\\n/g; + + # Extra cumulative info to print for non-leaves + my $extra = ""; + if ($f != $c) { + $extra = sprintf("\\rof %s (%s)", + Unparse($c), + Percent($c, $local_total)); + } + my $style = ""; + if ($main::opt_heapcheck) { + if ($f > 0) { + # make leak-causing nodes more visible (add a background) + $style = ",style=filled,fillcolor=gray" + } elsif ($f < 0) { + # make anti-leak-causing nodes (which almost never occur) + # stand out as well (triple border) + $style = ",peripheries=3" + } + } + + printf DOT ("N%d [label=\"%s\\n%s (%s)%s\\r" . + "\",shape=box,fontsize=%.1f%s];\n", + $node{$a}, + $sym, + Unparse($f), + Percent($f, $local_total), + $extra, + $fs, + $style, + ); + } + + # Get edges and counts per edge + my %edge = (); + my $n; + my $fullname_to_shortname_map = {}; + FillFullnameToShortnameMap($symbols, $fullname_to_shortname_map); + foreach my $k (keys(%{$raw})) { + # TODO: omit low %age edges + $n = $raw->{$k}; + my @translated = TranslateStack($symbols, $fullname_to_shortname_map, $k); + for (my $i = 1; $i <= $#translated; $i++) { + my $src = $translated[$i]; + my $dst = $translated[$i-1]; + #next if ($src eq $dst); # Avoid self-edges? + if (exists($node{$src}) && exists($node{$dst})) { + my $edge_label = "$src\001$dst"; + if (!exists($edge{$edge_label})) { + $edge{$edge_label} = 0; + } + $edge{$edge_label} += $n; + } + } + } + + # Print edges (process in order of decreasing counts) + my %indegree = (); # Number of incoming edges added per node so far + my %outdegree = (); # Number of outgoing edges added per node so far + foreach my $e (sort { $edge{$b} <=> $edge{$a} } keys(%edge)) { + my @x = split(/\001/, $e); + $n = $edge{$e}; + + # Initialize degree of kept incoming and outgoing edges if necessary + my $src = $x[0]; + my $dst = $x[1]; + if (!exists($outdegree{$src})) { $outdegree{$src} = 0; } + if (!exists($indegree{$dst})) { $indegree{$dst} = 0; } + + my $keep; + if ($indegree{$dst} == 0) { + # Keep edge if needed for reachability + $keep = 1; + } elsif (abs($n) <= $edgelimit) { + # Drop if we are below --edgefraction + $keep = 0; + } elsif ($outdegree{$src} >= $main::opt_maxdegree || + $indegree{$dst} >= $main::opt_maxdegree) { + # Keep limited number of in/out edges per node + $keep = 0; + } else { + $keep = 1; + } + + if ($keep) { + $outdegree{$src}++; + $indegree{$dst}++; + + # Compute line width based on edge count + my $fraction = abs($local_total ? (3 * ($n / $local_total)) : 0); + if ($fraction > 1) { $fraction = 1; } + my $w = $fraction * 2; + if ($w < 1 && ($main::opt_web || $main::opt_svg)) { + # SVG output treats line widths < 1 poorly. + $w = 1; + } + + # Dot sometimes segfaults if given edge weights that are too large, so + # we cap the weights at a large value + my $edgeweight = abs($n) ** 0.7; + if ($edgeweight > 100000) { $edgeweight = 100000; } + $edgeweight = int($edgeweight); + + my $style = sprintf("setlinewidth(%f)", $w); + if ($x[1] =~ m/\(inline\)/) { + $style .= ",dashed"; + } + + # Use a slightly squashed function of the edge count as the weight + printf DOT ("N%s -> N%s [label=%s, weight=%d, style=\"%s\"];\n", + $node{$x[0]}, + $node{$x[1]}, + Unparse($n), + $edgeweight, + $style); + } + } + + print DOT ("}\n"); + close(DOT); + + if ($main::opt_web || $main::opt_svg) { + # Rewrite SVG to be more usable inside web browser. + RewriteSvg(TempName($main::next_tmpfile, "svg")); + } + + return 1; +} + +sub RewriteSvg { + my $svgfile = shift; + + open(SVG, $svgfile) || die "open temp svg: $!"; + my @svg = ; + close(SVG); + unlink $svgfile; + my $svg = join('', @svg); + + # Dot's SVG output is + # + # + # + # ... + # + # + # + # Change it to + # + # + # $svg_javascript + # + # + # ... + # + # + # + + # Fix width, height; drop viewBox. + $svg =~ s/(?s) above first + my $svg_javascript = SvgJavascript(); + my $viewport = "\n"; + $svg =~ s/ above . + $svg =~ s/(.*)(<\/svg>)/$1<\/g>$2/; + $svg =~ s/$svgfile") || die "open $svgfile: $!"; + print SVG $svg; + close(SVG); + } +} + +sub SvgJavascript { + return <<'EOF'; + +EOF +} + +# Provides a map from fullname to shortname for cases where the +# shortname is ambiguous. The symlist has both the fullname and +# shortname for all symbols, which is usually fine, but sometimes -- +# such as overloaded functions -- two different fullnames can map to +# the same shortname. In that case, we use the address of the +# function to disambiguate the two. This function fills in a map that +# maps fullnames to modified shortnames in such cases. If a fullname +# is not present in the map, the 'normal' shortname provided by the +# symlist is the appropriate one to use. +sub FillFullnameToShortnameMap { + my $symbols = shift; + my $fullname_to_shortname_map = shift; + my $shortnames_seen_once = {}; + my $shortnames_seen_more_than_once = {}; + + foreach my $symlist (values(%{$symbols})) { + # TODO(csilvers): deal with inlined symbols too. + my $shortname = $symlist->[0]; + my $fullname = $symlist->[2]; + if ($fullname !~ /<[0-9a-fA-F]+>$/) { # fullname doesn't end in an address + next; # the only collisions we care about are when addresses differ + } + if (defined($shortnames_seen_once->{$shortname}) && + $shortnames_seen_once->{$shortname} ne $fullname) { + $shortnames_seen_more_than_once->{$shortname} = 1; + } else { + $shortnames_seen_once->{$shortname} = $fullname; + } + } + + foreach my $symlist (values(%{$symbols})) { + my $shortname = $symlist->[0]; + my $fullname = $symlist->[2]; + # TODO(csilvers): take in a list of addresses we care about, and only + # store in the map if $symlist->[1] is in that list. Saves space. + next if defined($fullname_to_shortname_map->{$fullname}); + if (defined($shortnames_seen_more_than_once->{$shortname})) { + if ($fullname =~ /<0*([^>]*)>$/) { # fullname has address at end of it + $fullname_to_shortname_map->{$fullname} = "$shortname\@$1"; + } + } + } +} + +# Return a small number that identifies the argument. +# Multiple calls with the same argument will return the same number. +# Calls with different arguments will return different numbers. +sub ShortIdFor { + my $key = shift; + my $id = $main::uniqueid{$key}; + if (!defined($id)) { + $id = keys(%main::uniqueid) + 1; + $main::uniqueid{$key} = $id; + } + return $id; +} + +# Translate a stack of addresses into a stack of symbols +sub TranslateStack { + my $symbols = shift; + my $fullname_to_shortname_map = shift; + my $k = shift; + + my @addrs = split(/\n/, $k); + my @result = (); + for (my $i = 0; $i <= $#addrs; $i++) { + my $a = $addrs[$i]; + + # Skip large addresses since they sometimes show up as fake entries on RH9 + if (length($a) > 8 && $a gt "7fffffffffffffff") { + next; + } + + if ($main::opt_disasm || $main::opt_list) { + # We want just the address for the key + push(@result, $a); + next; + } + + my $symlist = $symbols->{$a}; + if (!defined($symlist)) { + $symlist = [$a, "", $a]; + } + + # We can have a sequence of symbols for a particular entry + # (more than one symbol in the case of inlining). Callers + # come before callees in symlist, so walk backwards since + # the translated stack should contain callees before callers. + for (my $j = $#{$symlist}; $j >= 2; $j -= 3) { + my $func = $symlist->[$j-2]; + my $fileline = $symlist->[$j-1]; + my $fullfunc = $symlist->[$j]; + if (defined($fullname_to_shortname_map->{$fullfunc})) { + $func = $fullname_to_shortname_map->{$fullfunc}; + } + if ($j > 2) { + $func = "$func (inline)"; + } + + # Do not merge nodes corresponding to Callback::Run since that + # causes confusing cycles in dot display. Instead, we synthesize + # a unique name for this frame per caller. + if ($func =~ m/Callback.*::Run$/) { + my $caller = ($i > 0) ? $addrs[$i-1] : 0; + $func = "Run#" . ShortIdFor($caller); + } + + if ($main::opt_addresses) { + push(@result, "$a $func $fileline"); + } elsif ($main::opt_lines) { + if ($func eq '??' && $fileline eq '??:0') { + push(@result, "$a"); + } else { + push(@result, "$func $fileline"); + } + } elsif ($main::opt_functions) { + if ($func eq '??') { + push(@result, "$a"); + } else { + push(@result, $func); + } + } elsif ($main::opt_files) { + if ($fileline eq '??:0' || $fileline eq '') { + push(@result, "$a"); + } else { + my $f = $fileline; + $f =~ s/:\d+$//; + push(@result, $f); + } + } else { + push(@result, $a); + last; # Do not print inlined info + } + } + } + + # print join(",", @addrs), " => ", join(",", @result), "\n"; + return @result; +} + +# Generate percent string for a number and a total +sub Percent { + my $num = shift; + my $tot = shift; + if ($tot != 0) { + return sprintf("%.1f%%", $num * 100.0 / $tot); + } else { + return ($num == 0) ? "nan" : (($num > 0) ? "+inf" : "-inf"); + } +} + +# Generate pretty-printed form of number +sub Unparse { + my $num = shift; + if ($main::profile_type eq 'heap' || $main::profile_type eq 'growth') { + if ($main::opt_inuse_objects || $main::opt_alloc_objects) { + return sprintf("%d", $num); + } else { + if ($main::opt_show_bytes) { + return sprintf("%d", $num); + } else { + return sprintf("%.1f", $num / 1048576.0); + } + } + } elsif ($main::profile_type eq 'contention' && !$main::opt_contentions) { + return sprintf("%.3f", $num / 1e9); # Convert nanoseconds to seconds + } else { + return sprintf("%d", $num); + } +} + +# Alternate pretty-printed form: 0 maps to "." +sub UnparseAlt { + my $num = shift; + if ($num == 0) { + return "."; + } else { + return Unparse($num); + } +} + +# Alternate pretty-printed form: 0 maps to "" +sub HtmlPrintNumber { + my $num = shift; + if ($num == 0) { + return ""; + } else { + return Unparse($num); + } +} + +# Return output units +sub Units { + if ($main::profile_type eq 'heap' || $main::profile_type eq 'growth') { + if ($main::opt_inuse_objects || $main::opt_alloc_objects) { + return "objects"; + } else { + if ($main::opt_show_bytes) { + return "B"; + } else { + return "MB"; + } + } + } elsif ($main::profile_type eq 'contention' && !$main::opt_contentions) { + return "seconds"; + } else { + return "samples"; + } +} + +##### Profile manipulation code ##### + +# Generate flattened profile: +# If count is charged to stack [a,b,c,d], in generated profile, +# it will be charged to [a] +sub FlatProfile { + my $profile = shift; + my $result = {}; + foreach my $k (keys(%{$profile})) { + my $count = $profile->{$k}; + my @addrs = split(/\n/, $k); + if ($#addrs >= 0) { + AddEntry($result, $addrs[0], $count); + } + } + return $result; +} + +# Generate cumulative profile: +# If count is charged to stack [a,b,c,d], in generated profile, +# it will be charged to [a], [b], [c], [d] +sub CumulativeProfile { + my $profile = shift; + my $result = {}; + foreach my $k (keys(%{$profile})) { + my $count = $profile->{$k}; + my @addrs = split(/\n/, $k); + foreach my $a (@addrs) { + AddEntry($result, $a, $count); + } + } + return $result; +} + +# If the second-youngest PC on the stack is always the same, returns +# that pc. Otherwise, returns undef. +sub IsSecondPcAlwaysTheSame { + my $profile = shift; + + my $second_pc = undef; + foreach my $k (keys(%{$profile})) { + my @addrs = split(/\n/, $k); + if ($#addrs < 1) { + return undef; + } + if (not defined $second_pc) { + $second_pc = $addrs[1]; + } else { + if ($second_pc ne $addrs[1]) { + return undef; + } + } + } + return $second_pc; +} + +sub ExtractSymbolLocation { + my $symbols = shift; + my $address = shift; + # 'addr2line' outputs "??:0" for unknown locations; we do the + # same to be consistent. + my $location = "??:0:unknown"; + if (exists $symbols->{$address}) { + my $file = $symbols->{$address}->[1]; + if ($file eq "?") { + $file = "??:0" + } + $location = $file . ":" . $symbols->{$address}->[0]; + } + return $location; +} + +# Extracts a graph of calls. +sub ExtractCalls { + my $symbols = shift; + my $profile = shift; + + my $calls = {}; + while( my ($stack_trace, $count) = each %$profile ) { + my @address = split(/\n/, $stack_trace); + my $destination = ExtractSymbolLocation($symbols, $address[0]); + AddEntry($calls, $destination, $count); + for (my $i = 1; $i <= $#address; $i++) { + my $source = ExtractSymbolLocation($symbols, $address[$i]); + my $call = "$source -> $destination"; + AddEntry($calls, $call, $count); + $destination = $source; + } + } + + return $calls; +} + +sub RemoveUninterestingFrames { + my $symbols = shift; + my $profile = shift; + + # List of function names to skip + my %skip = (); + my $skip_regexp = 'NOMATCH'; + if ($main::profile_type eq 'heap' || $main::profile_type eq 'growth') { + foreach my $name ('calloc', + 'cfree', + 'malloc', + 'free', + 'memalign', + 'posix_memalign', + 'pvalloc', + 'valloc', + 'realloc', + 'tc_calloc', + 'tc_cfree', + 'tc_malloc', + 'tc_free', + 'tc_memalign', + 'tc_posix_memalign', + 'tc_pvalloc', + 'tc_valloc', + 'tc_realloc', + 'tc_new', + 'tc_delete', + 'tc_newarray', + 'tc_deletearray', + 'tc_new_nothrow', + 'tc_newarray_nothrow', + 'do_malloc', + '::do_malloc', # new name -- got moved to an unnamed ns + '::do_malloc_or_cpp_alloc', + 'DoSampledAllocation', + 'simple_alloc::allocate', + '__malloc_alloc_template::allocate', + '__builtin_delete', + '__builtin_new', + '__builtin_vec_delete', + '__builtin_vec_new', + 'operator new', + 'operator new[]', + # The entry to our memory-allocation routines on OS X + 'malloc_zone_malloc', + 'malloc_zone_calloc', + 'malloc_zone_valloc', + 'malloc_zone_realloc', + 'malloc_zone_memalign', + 'malloc_zone_free', + # These mark the beginning/end of our custom sections + '__start_google_malloc', + '__stop_google_malloc', + '__start_malloc_hook', + '__stop_malloc_hook') { + $skip{$name} = 1; + $skip{"_" . $name} = 1; # Mach (OS X) adds a _ prefix to everything + } + # TODO: Remove TCMalloc once everything has been + # moved into the tcmalloc:: namespace and we have flushed + # old code out of the system. + $skip_regexp = "TCMalloc|^tcmalloc::"; + } elsif ($main::profile_type eq 'contention') { + foreach my $vname ('base::RecordLockProfileData', + 'base::SubmitMutexProfileData', + 'base::SubmitSpinLockProfileData', + 'Mutex::Unlock', + 'Mutex::UnlockSlow', + 'Mutex::ReaderUnlock', + 'MutexLock::~MutexLock', + 'SpinLock::Unlock', + 'SpinLock::SlowUnlock', + 'SpinLockHolder::~SpinLockHolder') { + $skip{$vname} = 1; + } + } elsif ($main::profile_type eq 'cpu') { + # Drop signal handlers used for CPU profile collection + # TODO(dpeng): this should not be necessary; it's taken + # care of by the general 2nd-pc mechanism below. + foreach my $name ('ProfileData::Add', # historical + 'ProfileData::prof_handler', # historical + 'CpuProfiler::prof_handler', + '__FRAME_END__', + '__pthread_sighandler', + '__restore') { + $skip{$name} = 1; + } + } else { + # Nothing skipped for unknown types + } + + if ($main::profile_type eq 'cpu') { + # If all the second-youngest program counters are the same, + # this STRONGLY suggests that it is an artifact of measurement, + # i.e., stack frames pushed by the CPU profiler signal handler. + # Hence, we delete them. + # (The topmost PC is read from the signal structure, not from + # the stack, so it does not get involved.) + while (my $second_pc = IsSecondPcAlwaysTheSame($profile)) { + my $result = {}; + my $func = ''; + if (exists($symbols->{$second_pc})) { + $second_pc = $symbols->{$second_pc}->[0]; + } + print STDERR "Removing $second_pc from all stack traces.\n"; + foreach my $k (keys(%{$profile})) { + my $count = $profile->{$k}; + my @addrs = split(/\n/, $k); + splice @addrs, 1, 1; + my $reduced_path = join("\n", @addrs); + AddEntry($result, $reduced_path, $count); + } + $profile = $result; + } + } + + my $result = {}; + foreach my $k (keys(%{$profile})) { + my $count = $profile->{$k}; + my @addrs = split(/\n/, $k); + my @path = (); + foreach my $a (@addrs) { + if (exists($symbols->{$a})) { + my $func = $symbols->{$a}->[0]; + if ($skip{$func} || ($func =~ m/$skip_regexp/)) { + next; + } + } + push(@path, $a); + } + my $reduced_path = join("\n", @path); + AddEntry($result, $reduced_path, $count); + } + return $result; +} + +# Reduce profile to granularity given by user +sub ReduceProfile { + my $symbols = shift; + my $profile = shift; + my $result = {}; + my $fullname_to_shortname_map = {}; + FillFullnameToShortnameMap($symbols, $fullname_to_shortname_map); + foreach my $k (keys(%{$profile})) { + my $count = $profile->{$k}; + my @translated = TranslateStack($symbols, $fullname_to_shortname_map, $k); + my @path = (); + my %seen = (); + $seen{''} = 1; # So that empty keys are skipped + foreach my $e (@translated) { + # To avoid double-counting due to recursion, skip a stack-trace + # entry if it has already been seen + if (!$seen{$e}) { + $seen{$e} = 1; + push(@path, $e); + } + } + my $reduced_path = join("\n", @path); + AddEntry($result, $reduced_path, $count); + } + return $result; +} + +# Does the specified symbol array match the regexp? +sub SymbolMatches { + my $sym = shift; + my $re = shift; + if (defined($sym)) { + for (my $i = 0; $i < $#{$sym}; $i += 3) { + if ($sym->[$i] =~ m/$re/ || $sym->[$i+1] =~ m/$re/) { + return 1; + } + } + } + return 0; +} + +# Focus only on paths involving specified regexps +sub FocusProfile { + my $symbols = shift; + my $profile = shift; + my $focus = shift; + my $result = {}; + foreach my $k (keys(%{$profile})) { + my $count = $profile->{$k}; + my @addrs = split(/\n/, $k); + foreach my $a (@addrs) { + # Reply if it matches either the address/shortname/fileline + if (($a =~ m/$focus/) || SymbolMatches($symbols->{$a}, $focus)) { + AddEntry($result, $k, $count); + last; + } + } + } + return $result; +} + +# Focus only on paths not involving specified regexps +sub IgnoreProfile { + my $symbols = shift; + my $profile = shift; + my $ignore = shift; + my $result = {}; + foreach my $k (keys(%{$profile})) { + my $count = $profile->{$k}; + my @addrs = split(/\n/, $k); + my $matched = 0; + foreach my $a (@addrs) { + # Reply if it matches either the address/shortname/fileline + if (($a =~ m/$ignore/) || SymbolMatches($symbols->{$a}, $ignore)) { + $matched = 1; + last; + } + } + if (!$matched) { + AddEntry($result, $k, $count); + } + } + return $result; +} + +# Get total count in profile +sub TotalProfile { + my $profile = shift; + my $result = 0; + foreach my $k (keys(%{$profile})) { + $result += $profile->{$k}; + } + return $result; +} + +# Add A to B +sub AddProfile { + my $A = shift; + my $B = shift; + + my $R = {}; + # add all keys in A + foreach my $k (keys(%{$A})) { + my $v = $A->{$k}; + AddEntry($R, $k, $v); + } + # add all keys in B + foreach my $k (keys(%{$B})) { + my $v = $B->{$k}; + AddEntry($R, $k, $v); + } + return $R; +} + +# Merges symbol maps +sub MergeSymbols { + my $A = shift; + my $B = shift; + + my $R = {}; + foreach my $k (keys(%{$A})) { + $R->{$k} = $A->{$k}; + } + if (defined($B)) { + foreach my $k (keys(%{$B})) { + $R->{$k} = $B->{$k}; + } + } + return $R; +} + + +# Add A to B +sub AddPcs { + my $A = shift; + my $B = shift; + + my $R = {}; + # add all keys in A + foreach my $k (keys(%{$A})) { + $R->{$k} = 1 + } + # add all keys in B + foreach my $k (keys(%{$B})) { + $R->{$k} = 1 + } + return $R; +} + +# Subtract B from A +sub SubtractProfile { + my $A = shift; + my $B = shift; + + my $R = {}; + foreach my $k (keys(%{$A})) { + my $v = $A->{$k} - GetEntry($B, $k); + if ($v < 0 && $main::opt_drop_negative) { + $v = 0; + } + AddEntry($R, $k, $v); + } + if (!$main::opt_drop_negative) { + # Take care of when subtracted profile has more entries + foreach my $k (keys(%{$B})) { + if (!exists($A->{$k})) { + AddEntry($R, $k, 0 - $B->{$k}); + } + } + } + return $R; +} + +# Get entry from profile; zero if not present +sub GetEntry { + my $profile = shift; + my $k = shift; + if (exists($profile->{$k})) { + return $profile->{$k}; + } else { + return 0; + } +} + +# Add entry to specified profile +sub AddEntry { + my $profile = shift; + my $k = shift; + my $n = shift; + if (!exists($profile->{$k})) { + $profile->{$k} = 0; + } + $profile->{$k} += $n; +} + +# Add a stack of entries to specified profile, and add them to the $pcs +# list. +sub AddEntries { + my $profile = shift; + my $pcs = shift; + my $stack = shift; + my $count = shift; + my @k = (); + + foreach my $e (split(/\s+/, $stack)) { + my $pc = HexExtend($e); + $pcs->{$pc} = 1; + push @k, $pc; + } + AddEntry($profile, (join "\n", @k), $count); +} + +##### Code to profile a server dynamically ##### + +sub CheckSymbolPage { + my $url = SymbolPageURL(); + my $command = ShellEscape(@URL_FETCHER, $url); + open(SYMBOL, "$command |") or error($command); + my $line = ; + $line =~ s/\r//g; # turn windows-looking lines into unix-looking lines + close(SYMBOL); + unless (defined($line)) { + error("$url doesn't exist\n"); + } + + if ($line =~ /^num_symbols:\s+(\d+)$/) { + if ($1 == 0) { + error("Stripped binary. No symbols available.\n"); + } + } else { + error("Failed to get the number of symbols from $url\n"); + } +} + +sub IsProfileURL { + my $profile_name = shift; + if (-f $profile_name) { + printf STDERR "Using local file $profile_name.\n"; + return 0; + } + return 1; +} + +sub ParseProfileURL { + my $profile_name = shift; + + if (!defined($profile_name) || $profile_name eq "") { + return (); + } + + # Split profile URL - matches all non-empty strings, so no test. + $profile_name =~ m,^(https?://)?([^/]+)(.*?)(/|$PROFILES)?$,; + + my $proto = $1 || "http://"; + my $hostport = $2; + my $prefix = $3; + my $profile = $4 || "/"; + + my $host = $hostport; + $host =~ s/:.*//; + + my $baseurl = "$proto$hostport$prefix"; + return ($host, $baseurl, $profile); +} + +# We fetch symbols from the first profile argument. +sub SymbolPageURL { + my ($host, $baseURL, $path) = ParseProfileURL($main::pfile_args[0]); + return "$baseURL$SYMBOL_PAGE"; +} + +sub FetchProgramName() { + my ($host, $baseURL, $path) = ParseProfileURL($main::pfile_args[0]); + my $url = "$baseURL$PROGRAM_NAME_PAGE"; + my $command_line = ShellEscape(@URL_FETCHER, $url); + open(CMDLINE, "$command_line |") or error($command_line); + my $cmdline = ; + $cmdline =~ s/\r//g; # turn windows-looking lines into unix-looking lines + close(CMDLINE); + error("Failed to get program name from $url\n") unless defined($cmdline); + $cmdline =~ s/\x00.+//; # Remove argv[1] and latters. + $cmdline =~ s!\n!!g; # Remove LFs. + return $cmdline; +} + +# Gee, curl's -L (--location) option isn't reliable at least +# with its 7.12.3 version. Curl will forget to post data if +# there is a redirection. This function is a workaround for +# curl. Redirection happens on borg hosts. +sub ResolveRedirectionForCurl { + my $url = shift; + my $command_line = ShellEscape(@URL_FETCHER, "--head", $url); + open(CMDLINE, "$command_line |") or error($command_line); + while () { + s/\r//g; # turn windows-looking lines into unix-looking lines + if (/^Location: (.*)/) { + $url = $1; + } + } + close(CMDLINE); + return $url; +} + +# Add a timeout flat to URL_FETCHER. Returns a new list. +sub AddFetchTimeout { + my $timeout = shift; + my @fetcher = shift; + if (defined($timeout)) { + if (join(" ", @fetcher) =~ m/\bcurl -s/) { + push(@fetcher, "--max-time", sprintf("%d", $timeout)); + } elsif (join(" ", @fetcher) =~ m/\brpcget\b/) { + push(@fetcher, sprintf("--deadline=%d", $timeout)); + } + } + return @fetcher; +} + +# Reads a symbol map from the file handle name given as $1, returning +# the resulting symbol map. Also processes variables relating to symbols. +# Currently, the only variable processed is 'binary=' which updates +# $main::prog to have the correct program name. +sub ReadSymbols { + my $in = shift; + my $map = {}; + while (<$in>) { + s/\r//g; # turn windows-looking lines into unix-looking lines + # Removes all the leading zeroes from the symbols, see comment below. + if (m/^0x0*([0-9a-f]+)\s+(.+)/) { + $map->{$1} = $2; + } elsif (m/^---/) { + last; + } elsif (m/^([a-z][^=]*)=(.*)$/ ) { + my ($variable, $value) = ($1, $2); + for ($variable, $value) { + s/^\s+//; + s/\s+$//; + } + if ($variable eq "binary") { + if ($main::prog ne $UNKNOWN_BINARY && $main::prog ne $value) { + printf STDERR ("Warning: Mismatched binary name '%s', using '%s'.\n", + $main::prog, $value); + } + $main::prog = $value; + } else { + printf STDERR ("Ignoring unknown variable in symbols list: " . + "'%s' = '%s'\n", $variable, $value); + } + } + } + return $map; +} + +# Fetches and processes symbols to prepare them for use in the profile output +# code. If the optional 'symbol_map' arg is not given, fetches symbols from +# $SYMBOL_PAGE for all PC values found in profile. Otherwise, the raw symbols +# are assumed to have already been fetched into 'symbol_map' and are simply +# extracted and processed. +sub FetchSymbols { + my $pcset = shift; + my $symbol_map = shift; + + my %seen = (); + my @pcs = grep { !$seen{$_}++ } keys(%$pcset); # uniq + + if (!defined($symbol_map)) { + my $post_data = join("+", sort((map {"0x" . "$_"} @pcs))); + + open(POSTFILE, ">$main::tmpfile_sym"); + print POSTFILE $post_data; + close(POSTFILE); + + my $url = SymbolPageURL(); + + my $command_line; + if (join(" ", @URL_FETCHER) =~ m/\bcurl -s/) { + $url = ResolveRedirectionForCurl($url); + $command_line = ShellEscape(@URL_FETCHER, "-d", "\@$main::tmpfile_sym", + $url); + } else { + $command_line = (ShellEscape(@URL_FETCHER, "--post", $url) + . " < " . ShellEscape($main::tmpfile_sym)); + } + # We use c++filt in case $SYMBOL_PAGE gives us mangled symbols. + my $escaped_cppfilt = ShellEscape($obj_tool_map{"c++filt"}); + open(SYMBOL, "$command_line | $escaped_cppfilt |") or error($command_line); + $symbol_map = ReadSymbols(*SYMBOL{IO}); + close(SYMBOL); + } + + my $symbols = {}; + foreach my $pc (@pcs) { + my $fullname; + # For 64 bits binaries, symbols are extracted with 8 leading zeroes. + # Then /symbol reads the long symbols in as uint64, and outputs + # the result with a "0x%08llx" format which get rid of the zeroes. + # By removing all the leading zeroes in both $pc and the symbols from + # /symbol, the symbols match and are retrievable from the map. + my $shortpc = $pc; + $shortpc =~ s/^0*//; + # Each line may have a list of names, which includes the function + # and also other functions it has inlined. They are separated (in + # PrintSymbolizedProfile), by --, which is illegal in function names. + my $fullnames; + if (defined($symbol_map->{$shortpc})) { + $fullnames = $symbol_map->{$shortpc}; + } else { + $fullnames = "0x" . $pc; # Just use addresses + } + my $sym = []; + $symbols->{$pc} = $sym; + foreach my $fullname (split("--", $fullnames)) { + my $name = ShortFunctionName($fullname); + push(@{$sym}, $name, "?", $fullname); + } + } + return $symbols; +} + +sub BaseName { + my $file_name = shift; + $file_name =~ s!^.*/!!; # Remove directory name + return $file_name; +} + +sub MakeProfileBaseName { + my ($binary_name, $profile_name) = @_; + my ($host, $baseURL, $path) = ParseProfileURL($profile_name); + my $binary_shortname = BaseName($binary_name); + return sprintf("%s.%s.%s", + $binary_shortname, $main::op_time, $host); +} + +sub FetchDynamicProfile { + my $binary_name = shift; + my $profile_name = shift; + my $fetch_name_only = shift; + my $encourage_patience = shift; + + if (!IsProfileURL($profile_name)) { + return $profile_name; + } else { + my ($host, $baseURL, $path) = ParseProfileURL($profile_name); + if ($path eq "" || $path eq "/") { + # Missing type specifier defaults to cpu-profile + $path = $PROFILE_PAGE; + } + + my $profile_file = MakeProfileBaseName($binary_name, $profile_name); + + my $url = "$baseURL$path"; + my $fetch_timeout = undef; + if ($path =~ m/$PROFILE_PAGE|$PMUPROFILE_PAGE/) { + if ($path =~ m/[?]/) { + $url .= "&"; + } else { + $url .= "?"; + } + $url .= sprintf("seconds=%d", $main::opt_seconds); + $fetch_timeout = $main::opt_seconds * 1.01 + 60; + } else { + # For non-CPU profiles, we add a type-extension to + # the target profile file name. + my $suffix = $path; + $suffix =~ s,/,.,g; + $profile_file .= $suffix; + } + + my $profile_dir = $ENV{"PPROF_TMPDIR"} || ($ENV{HOME} . "/pprof"); + if (! -d $profile_dir) { + mkdir($profile_dir) + || die("Unable to create profile directory $profile_dir: $!\n"); + } + my $tmp_profile = "$profile_dir/.tmp.$profile_file"; + my $real_profile = "$profile_dir/$profile_file"; + + if ($fetch_name_only > 0) { + return $real_profile; + } + + my @fetcher = AddFetchTimeout($fetch_timeout, @URL_FETCHER); + my $cmd = ShellEscape(@fetcher, $url) . " > " . ShellEscape($tmp_profile); + if ($path =~ m/$PROFILE_PAGE|$PMUPROFILE_PAGE|$CENSUSPROFILE_PAGE/){ + print STDERR "Gathering CPU profile from $url for $main::opt_seconds seconds to\n ${real_profile}\n"; + if ($encourage_patience) { + print STDERR "Be patient...\n"; + } + } else { + print STDERR "Fetching $path profile from $url to\n ${real_profile}\n"; + } + + (system($cmd) == 0) || error("Failed to get profile: $cmd: $!\n"); + (system("mv", $tmp_profile, $real_profile) == 0) || error("Unable to rename profile\n"); + print STDERR "Wrote profile to $real_profile\n"; + $main::collected_profile = $real_profile; + return $main::collected_profile; + } +} + +# Collect profiles in parallel +sub FetchDynamicProfiles { + my $items = scalar(@main::pfile_args); + my $levels = log($items) / log(2); + + if ($items == 1) { + $main::profile_files[0] = FetchDynamicProfile($main::prog, $main::pfile_args[0], 0, 1); + } else { + # math rounding issues + if ((2 ** $levels) < $items) { + $levels++; + } + my $count = scalar(@main::pfile_args); + for (my $i = 0; $i < $count; $i++) { + $main::profile_files[$i] = FetchDynamicProfile($main::prog, $main::pfile_args[$i], 1, 0); + } + print STDERR "Fetching $count profiles, Be patient...\n"; + FetchDynamicProfilesRecurse($levels, 0, 0); + $main::collected_profile = join(" \\\n ", @main::profile_files); + } +} + +# Recursively fork a process to get enough processes +# collecting profiles +sub FetchDynamicProfilesRecurse { + my $maxlevel = shift; + my $level = shift; + my $position = shift; + + if (my $pid = fork()) { + $position = 0 | ($position << 1); + TryCollectProfile($maxlevel, $level, $position); + wait; + } else { + $position = 1 | ($position << 1); + TryCollectProfile($maxlevel, $level, $position); + cleanup(); + exit(0); + } +} + +# Collect a single profile +sub TryCollectProfile { + my $maxlevel = shift; + my $level = shift; + my $position = shift; + + if ($level >= ($maxlevel - 1)) { + if ($position < scalar(@main::pfile_args)) { + FetchDynamicProfile($main::prog, $main::pfile_args[$position], 0, 0); + } + } else { + FetchDynamicProfilesRecurse($maxlevel, $level+1, $position); + } +} + +##### Parsing code ##### + +# Provide a small streaming-read module to handle very large +# cpu-profile files. Stream in chunks along a sliding window. +# Provides an interface to get one 'slot', correctly handling +# endian-ness differences. A slot is one 32-bit or 64-bit word +# (depending on the input profile). We tell endianness and bit-size +# for the profile by looking at the first 8 bytes: in cpu profiles, +# the second slot is always 3 (we'll accept anything that's not 0). +BEGIN { + package CpuProfileStream; + + sub new { + my ($class, $file, $fname) = @_; + my $self = { file => $file, + base => 0, + stride => 512 * 1024, # must be a multiple of bitsize/8 + slots => [], + unpack_code => "", # N for big-endian, V for little + perl_is_64bit => 1, # matters if profile is 64-bit + }; + bless $self, $class; + # Let unittests adjust the stride + if ($main::opt_test_stride > 0) { + $self->{stride} = $main::opt_test_stride; + } + # Read the first two slots to figure out bitsize and endianness. + my $slots = $self->{slots}; + my $str; + read($self->{file}, $str, 8); + # Set the global $address_length based on what we see here. + # 8 is 32-bit (8 hexadecimal chars); 16 is 64-bit (16 hexadecimal chars). + $address_length = ($str eq (chr(0)x8)) ? 16 : 8; + if ($address_length == 8) { + if (substr($str, 6, 2) eq chr(0)x2) { + $self->{unpack_code} = 'V'; # Little-endian. + } elsif (substr($str, 4, 2) eq chr(0)x2) { + $self->{unpack_code} = 'N'; # Big-endian + } else { + ::error("$fname: header size >= 2**16\n"); + } + @$slots = unpack($self->{unpack_code} . "*", $str); + } else { + # If we're a 64-bit profile, check if we're a 64-bit-capable + # perl. Otherwise, each slot will be represented as a float + # instead of an int64, losing precision and making all the + # 64-bit addresses wrong. We won't complain yet, but will + # later if we ever see a value that doesn't fit in 32 bits. + my $has_q = 0; + eval { $has_q = pack("Q", "1") ? 1 : 1; }; + if (!$has_q) { + $self->{perl_is_64bit} = 0; + } + read($self->{file}, $str, 8); + if (substr($str, 4, 4) eq chr(0)x4) { + # We'd love to use 'Q', but it's a) not universal, b) not endian-proof. + $self->{unpack_code} = 'V'; # Little-endian. + } elsif (substr($str, 0, 4) eq chr(0)x4) { + $self->{unpack_code} = 'N'; # Big-endian + } else { + ::error("$fname: header size >= 2**32\n"); + } + my @pair = unpack($self->{unpack_code} . "*", $str); + # Since we know one of the pair is 0, it's fine to just add them. + @$slots = (0, $pair[0] + $pair[1]); + } + return $self; + } + + # Load more data when we access slots->get(X) which is not yet in memory. + sub overflow { + my ($self) = @_; + my $slots = $self->{slots}; + $self->{base} += $#$slots + 1; # skip over data we're replacing + my $str; + read($self->{file}, $str, $self->{stride}); + if ($address_length == 8) { # the 32-bit case + # This is the easy case: unpack provides 32-bit unpacking primitives. + @$slots = unpack($self->{unpack_code} . "*", $str); + } else { + # We need to unpack 32 bits at a time and combine. + my @b32_values = unpack($self->{unpack_code} . "*", $str); + my @b64_values = (); + for (my $i = 0; $i < $#b32_values; $i += 2) { + # TODO(csilvers): if this is a 32-bit perl, the math below + # could end up in a too-large int, which perl will promote + # to a double, losing necessary precision. Deal with that. + # Right now, we just die. + my ($lo, $hi) = ($b32_values[$i], $b32_values[$i+1]); + if ($self->{unpack_code} eq 'N') { # big-endian + ($lo, $hi) = ($hi, $lo); + } + my $value = $lo + $hi * (2**32); + if (!$self->{perl_is_64bit} && # check value is exactly represented + (($value % (2**32)) != $lo || int($value / (2**32)) != $hi)) { + ::error("Need a 64-bit perl to process this 64-bit profile.\n"); + } + push(@b64_values, $value); + } + @$slots = @b64_values; + } + } + + # Access the i-th long in the file (logically), or -1 at EOF. + sub get { + my ($self, $idx) = @_; + my $slots = $self->{slots}; + while ($#$slots >= 0) { + if ($idx < $self->{base}) { + # The only time we expect a reference to $slots[$i - something] + # after referencing $slots[$i] is reading the very first header. + # Since $stride > |header|, that shouldn't cause any lookback + # errors. And everything after the header is sequential. + print STDERR "Unexpected look-back reading CPU profile"; + return -1; # shrug, don't know what better to return + } elsif ($idx > $self->{base} + $#$slots) { + $self->overflow(); + } else { + return $slots->[$idx - $self->{base}]; + } + } + # If we get here, $slots is [], which means we've reached EOF + return -1; # unique since slots is supposed to hold unsigned numbers + } +} + +# Reads the top, 'header' section of a profile, and returns the last +# line of the header, commonly called a 'header line'. The header +# section of a profile consists of zero or more 'command' lines that +# are instructions to pprof, which pprof executes when reading the +# header. All 'command' lines start with a %. After the command +# lines is the 'header line', which is a profile-specific line that +# indicates what type of profile it is, and perhaps other global +# information about the profile. For instance, here's a header line +# for a heap profile: +# heap profile: 53: 38236 [ 5525: 1284029] @ heapprofile +# For historical reasons, the CPU profile does not contain a text- +# readable header line. If the profile looks like a CPU profile, +# this function returns "". If no header line could be found, this +# function returns undef. +# +# The following commands are recognized: +# %warn -- emit the rest of this line to stderr, prefixed by 'WARNING:' +# +# The input file should be in binmode. +sub ReadProfileHeader { + local *PROFILE = shift; + my $firstchar = ""; + my $line = ""; + read(PROFILE, $firstchar, 1); + seek(PROFILE, -1, 1); # unread the firstchar + if ($firstchar !~ /[[:print:]]/) { # is not a text character + return ""; + } + while (defined($line = )) { + $line =~ s/\r//g; # turn windows-looking lines into unix-looking lines + if ($line =~ /^%warn\s+(.*)/) { # 'warn' command + # Note this matches both '%warn blah\n' and '%warn\n'. + print STDERR "WARNING: $1\n"; # print the rest of the line + } elsif ($line =~ /^%/) { + print STDERR "Ignoring unknown command from profile header: $line"; + } else { + # End of commands, must be the header line. + return $line; + } + } + return undef; # got to EOF without seeing a header line +} + +sub IsSymbolizedProfileFile { + my $file_name = shift; + if (!(-e $file_name) || !(-r $file_name)) { + return 0; + } + # Check if the file contains a symbol-section marker. + open(TFILE, "<$file_name"); + binmode TFILE; + my $firstline = ReadProfileHeader(*TFILE); + close(TFILE); + if (!$firstline) { + return 0; + } + $SYMBOL_PAGE =~ m,[^/]+$,; # matches everything after the last slash + my $symbol_marker = $&; + return $firstline =~ /^--- *$symbol_marker/; +} + +# Parse profile generated by common/profiler.cc and return a reference +# to a map: +# $result->{version} Version number of profile file +# $result->{period} Sampling period (in microseconds) +# $result->{profile} Profile object +# $result->{map} Memory map info from profile +# $result->{pcs} Hash of all PC values seen, key is hex address +sub ReadProfile { + my $prog = shift; + my $fname = shift; + my $result; # return value + + $CONTENTION_PAGE =~ m,[^/]+$,; # matches everything after the last slash + my $contention_marker = $&; + $GROWTH_PAGE =~ m,[^/]+$,; # matches everything after the last slash + my $growth_marker = $&; + $SYMBOL_PAGE =~ m,[^/]+$,; # matches everything after the last slash + my $symbol_marker = $&; + $PROFILE_PAGE =~ m,[^/]+$,; # matches everything after the last slash + my $profile_marker = $&; + + # Look at first line to see if it is a heap or a CPU profile. + # CPU profile may start with no header at all, and just binary data + # (starting with \0\0\0\0) -- in that case, don't try to read the + # whole firstline, since it may be gigabytes(!) of data. + open(PROFILE, "<$fname") || error("$fname: $!\n"); + binmode PROFILE; # New perls do UTF-8 processing + my $header = ReadProfileHeader(*PROFILE); + if (!defined($header)) { # means "at EOF" + error("Profile is empty.\n"); + } + + my $symbols; + if ($header =~ m/^--- *$symbol_marker/o) { + # Verify that the user asked for a symbolized profile + if (!$main::use_symbolized_profile) { + # we have both a binary and symbolized profiles, abort + error("FATAL ERROR: Symbolized profile\n $fname\ncannot be used with " . + "a binary arg. Try again without passing\n $prog\n"); + } + # Read the symbol section of the symbolized profile file. + $symbols = ReadSymbols(*PROFILE{IO}); + # Read the next line to get the header for the remaining profile. + $header = ReadProfileHeader(*PROFILE) || ""; + } + + $main::profile_type = ''; + if ($header =~ m/^heap profile:.*$growth_marker/o) { + $main::profile_type = 'growth'; + $result = ReadHeapProfile($prog, *PROFILE, $header); + } elsif ($header =~ m/^heap profile:/) { + $main::profile_type = 'heap'; + $result = ReadHeapProfile($prog, *PROFILE, $header); + } elsif ($header =~ m/^--- *$contention_marker/o) { + $main::profile_type = 'contention'; + $result = ReadSynchProfile($prog, *PROFILE); + } elsif ($header =~ m/^--- *Stacks:/) { + print STDERR + "Old format contention profile: mistakenly reports " . + "condition variable signals as lock contentions.\n"; + $main::profile_type = 'contention'; + $result = ReadSynchProfile($prog, *PROFILE); + } elsif ($header =~ m/^--- *$profile_marker/) { + # the binary cpu profile data starts immediately after this line + $main::profile_type = 'cpu'; + $result = ReadCPUProfile($prog, $fname, *PROFILE); + } else { + if (defined($symbols)) { + # a symbolized profile contains a format we don't recognize, bail out + error("$fname: Cannot recognize profile section after symbols.\n"); + } + # no ascii header present -- must be a CPU profile + $main::profile_type = 'cpu'; + $result = ReadCPUProfile($prog, $fname, *PROFILE); + } + + close(PROFILE); + + # if we got symbols along with the profile, return those as well + if (defined($symbols)) { + $result->{symbols} = $symbols; + } + + return $result; +} + +# Subtract one from caller pc so we map back to call instr. +# However, don't do this if we're reading a symbolized profile +# file, in which case the subtract-one was done when the file +# was written. +# +# We apply the same logic to all readers, though ReadCPUProfile uses an +# independent implementation. +sub FixCallerAddresses { + my $stack = shift; + if ($main::use_symbolized_profile) { + return $stack; + } else { + $stack =~ /(\s)/; + my $delimiter = $1; + my @addrs = split(' ', $stack); + my @fixedaddrs; + $#fixedaddrs = $#addrs; + if ($#addrs >= 0) { + $fixedaddrs[0] = $addrs[0]; + } + for (my $i = 1; $i <= $#addrs; $i++) { + $fixedaddrs[$i] = AddressSub($addrs[$i], "0x1"); + } + return join $delimiter, @fixedaddrs; + } +} + +# CPU profile reader +sub ReadCPUProfile { + my $prog = shift; + my $fname = shift; # just used for logging + local *PROFILE = shift; + my $version; + my $period; + my $i; + my $profile = {}; + my $pcs = {}; + + # Parse string into array of slots. + my $slots = CpuProfileStream->new(*PROFILE, $fname); + + # Read header. The current header version is a 5-element structure + # containing: + # 0: header count (always 0) + # 1: header "words" (after this one: 3) + # 2: format version (0) + # 3: sampling period (usec) + # 4: unused padding (always 0) + if ($slots->get(0) != 0 ) { + error("$fname: not a profile file, or old format profile file\n"); + } + $i = 2 + $slots->get(1); + $version = $slots->get(2); + $period = $slots->get(3); + # Do some sanity checking on these header values. + if ($version > (2**32) || $period > (2**32) || $i > (2**32) || $i < 5) { + error("$fname: not a profile file, or corrupted profile file\n"); + } + + # Parse profile + while ($slots->get($i) != -1) { + my $n = $slots->get($i++); + my $d = $slots->get($i++); + if ($d > (2**16)) { # TODO(csilvers): what's a reasonable max-stack-depth? + my $addr = sprintf("0%o", $i * ($address_length == 8 ? 4 : 8)); + print STDERR "At index $i (address $addr):\n"; + error("$fname: stack trace depth >= 2**32\n"); + } + if ($slots->get($i) == 0) { + # End of profile data marker + $i += $d; + last; + } + + # Make key out of the stack entries + my @k = (); + for (my $j = 0; $j < $d; $j++) { + my $pc = $slots->get($i+$j); + # Subtract one from caller pc so we map back to call instr. + # However, don't do this if we're reading a symbolized profile + # file, in which case the subtract-one was done when the file + # was written. + if ($j > 0 && !$main::use_symbolized_profile) { + $pc--; + } + $pc = sprintf("%0*x", $address_length, $pc); + $pcs->{$pc} = 1; + push @k, $pc; + } + + AddEntry($profile, (join "\n", @k), $n); + $i += $d; + } + + # Parse map + my $map = ''; + seek(PROFILE, $i * 4, 0); + read(PROFILE, $map, (stat PROFILE)[7]); + + my $r = {}; + $r->{version} = $version; + $r->{period} = $period; + $r->{profile} = $profile; + $r->{libs} = ParseLibraries($prog, $map, $pcs); + $r->{pcs} = $pcs; + + return $r; +} + +sub ReadHeapProfile { + my $prog = shift; + local *PROFILE = shift; + my $header = shift; + + my $index = 1; + if ($main::opt_inuse_space) { + $index = 1; + } elsif ($main::opt_inuse_objects) { + $index = 0; + } elsif ($main::opt_alloc_space) { + $index = 3; + } elsif ($main::opt_alloc_objects) { + $index = 2; + } + + # Find the type of this profile. The header line looks like: + # heap profile: 1246: 8800744 [ 1246: 8800744] @ /266053 + # There are two pairs , the first inuse objects/space, and the + # second allocated objects/space. This is followed optionally by a profile + # type, and if that is present, optionally by a sampling frequency. + # For remote heap profiles (v1): + # The interpretation of the sampling frequency is that the profiler, for + # each sample, calculates a uniformly distributed random integer less than + # the given value, and records the next sample after that many bytes have + # been allocated. Therefore, the expected sample interval is half of the + # given frequency. By default, if not specified, the expected sample + # interval is 128KB. Only remote-heap-page profiles are adjusted for + # sample size. + # For remote heap profiles (v2): + # The sampling frequency is the rate of a Poisson process. This means that + # the probability of sampling an allocation of size X with sampling rate Y + # is 1 - exp(-X/Y) + # For version 2, a typical header line might look like this: + # heap profile: 1922: 127792360 [ 1922: 127792360] @ _v2/524288 + # the trailing number (524288) is the sampling rate. (Version 1 showed + # double the 'rate' here) + my $sampling_algorithm = 0; + my $sample_adjustment = 0; + chomp($header); + my $type = "unknown"; + if ($header =~ m"^heap profile:\s*(\d+):\s+(\d+)\s+\[\s*(\d+):\s+(\d+)\](\s*@\s*([^/]*)(/(\d+))?)?") { + if (defined($6) && ($6 ne '')) { + $type = $6; + my $sample_period = $8; + # $type is "heapprofile" for profiles generated by the + # heap-profiler, and either "heap" or "heap_v2" for profiles + # generated by sampling directly within tcmalloc. It can also + # be "growth" for heap-growth profiles. The first is typically + # found for profiles generated locally, and the others for + # remote profiles. + if (($type eq "heapprofile") || ($type !~ /heap/) ) { + # No need to adjust for the sampling rate with heap-profiler-derived data + $sampling_algorithm = 0; + } elsif ($type =~ /_v2/) { + $sampling_algorithm = 2; # version 2 sampling + if (defined($sample_period) && ($sample_period ne '')) { + $sample_adjustment = int($sample_period); + } + } else { + $sampling_algorithm = 1; # version 1 sampling + if (defined($sample_period) && ($sample_period ne '')) { + $sample_adjustment = int($sample_period)/2; + } + } + } else { + # We detect whether or not this is a remote-heap profile by checking + # that the total-allocated stats ($n2,$s2) are exactly the + # same as the in-use stats ($n1,$s1). It is remotely conceivable + # that a non-remote-heap profile may pass this check, but it is hard + # to imagine how that could happen. + # In this case it's so old it's guaranteed to be remote-heap version 1. + my ($n1, $s1, $n2, $s2) = ($1, $2, $3, $4); + if (($n1 == $n2) && ($s1 == $s2)) { + # This is likely to be a remote-heap based sample profile + $sampling_algorithm = 1; + } + } + } + + if ($sampling_algorithm > 0) { + # For remote-heap generated profiles, adjust the counts and sizes to + # account for the sample rate (we sample once every 128KB by default). + if ($sample_adjustment == 0) { + # Turn on profile adjustment. + $sample_adjustment = 128*1024; + print STDERR "Adjusting heap profiles for 1-in-128KB sampling rate\n"; + } else { + printf STDERR ("Adjusting heap profiles for 1-in-%d sampling rate\n", + $sample_adjustment); + } + if ($sampling_algorithm > 1) { + # We don't bother printing anything for the original version (version 1) + printf STDERR "Heap version $sampling_algorithm\n"; + } + } + + my $profile = {}; + my $pcs = {}; + my $map = ""; + + while () { + s/\r//g; # turn windows-looking lines into unix-looking lines + if (/^MAPPED_LIBRARIES:/) { + # Read the /proc/self/maps data + while () { + s/\r//g; # turn windows-looking lines into unix-looking lines + $map .= $_; + } + last; + } + + if (/^--- Memory map:/) { + # Read /proc/self/maps data as formatted by DumpAddressMap() + my $buildvar = ""; + while () { + s/\r//g; # turn windows-looking lines into unix-looking lines + # Parse "build=" specification if supplied + if (m/^\s*build=(.*)\n/) { + $buildvar = $1; + } + + # Expand "$build" variable if available + $_ =~ s/\$build\b/$buildvar/g; + + $map .= $_; + } + last; + } + + # Read entry of the form: + # : [: ] @ a1 a2 a3 ... an + s/^\s*//; + s/\s*$//; + if (m/^\s*(\d+):\s+(\d+)\s+\[\s*(\d+):\s+(\d+)\]\s+@\s+(.*)$/) { + my $stack = $5; + my ($n1, $s1, $n2, $s2) = ($1, $2, $3, $4); + + if ($sample_adjustment) { + if ($sampling_algorithm == 2) { + # Remote-heap version 2 + # The sampling frequency is the rate of a Poisson process. + # This means that the probability of sampling an allocation of + # size X with sampling rate Y is 1 - exp(-X/Y) + if ($n1 != 0) { + my $ratio = (($s1*1.0)/$n1)/($sample_adjustment); + my $scale_factor = 1/(1 - exp(-$ratio)); + $n1 *= $scale_factor; + $s1 *= $scale_factor; + } + if ($n2 != 0) { + my $ratio = (($s2*1.0)/$n2)/($sample_adjustment); + my $scale_factor = 1/(1 - exp(-$ratio)); + $n2 *= $scale_factor; + $s2 *= $scale_factor; + } + } else { + # Remote-heap version 1 + my $ratio; + $ratio = (($s1*1.0)/$n1)/($sample_adjustment); + if ($ratio < 1) { + $n1 /= $ratio; + $s1 /= $ratio; + } + $ratio = (($s2*1.0)/$n2)/($sample_adjustment); + if ($ratio < 1) { + $n2 /= $ratio; + $s2 /= $ratio; + } + } + } + + my @counts = ($n1, $s1, $n2, $s2); + AddEntries($profile, $pcs, FixCallerAddresses($stack), $counts[$index]); + } + } + + my $r = {}; + $r->{version} = "heap"; + $r->{period} = 1; + $r->{profile} = $profile; + $r->{libs} = ParseLibraries($prog, $map, $pcs); + $r->{pcs} = $pcs; + return $r; +} + +sub ReadSynchProfile { + my $prog = shift; + local *PROFILE = shift; + my $header = shift; + + my $map = ''; + my $profile = {}; + my $pcs = {}; + my $sampling_period = 1; + my $cyclespernanosec = 2.8; # Default assumption for old binaries + my $seen_clockrate = 0; + my $line; + + my $index = 0; + if ($main::opt_total_delay) { + $index = 0; + } elsif ($main::opt_contentions) { + $index = 1; + } elsif ($main::opt_mean_delay) { + $index = 2; + } + + while ( $line = ) { + $line =~ s/\r//g; # turn windows-looking lines into unix-looking lines + if ( $line =~ /^\s*(\d+)\s+(\d+) \@\s*(.*?)\s*$/ ) { + my ($cycles, $count, $stack) = ($1, $2, $3); + + # Convert cycles to nanoseconds + $cycles /= $cyclespernanosec; + + # Adjust for sampling done by application + $cycles *= $sampling_period; + $count *= $sampling_period; + + my @values = ($cycles, $count, $cycles / $count); + AddEntries($profile, $pcs, FixCallerAddresses($stack), $values[$index]); + + } elsif ( $line =~ /^(slow release).*thread \d+ \@\s*(.*?)\s*$/ || + $line =~ /^\s*(\d+) \@\s*(.*?)\s*$/ ) { + my ($cycles, $stack) = ($1, $2); + if ($cycles !~ /^\d+$/) { + next; + } + + # Convert cycles to nanoseconds + $cycles /= $cyclespernanosec; + + # Adjust for sampling done by application + $cycles *= $sampling_period; + + AddEntries($profile, $pcs, FixCallerAddresses($stack), $cycles); + + } elsif ( $line =~ m/^([a-z][^=]*)=(.*)$/ ) { + my ($variable, $value) = ($1,$2); + for ($variable, $value) { + s/^\s+//; + s/\s+$//; + } + if ($variable eq "cycles/second") { + $cyclespernanosec = $value / 1e9; + $seen_clockrate = 1; + } elsif ($variable eq "sampling period") { + $sampling_period = $value; + } elsif ($variable eq "ms since reset") { + # Currently nothing is done with this value in pprof + # So we just silently ignore it for now + } elsif ($variable eq "discarded samples") { + # Currently nothing is done with this value in pprof + # So we just silently ignore it for now + } else { + printf STDERR ("Ignoring unnknown variable in /contention output: " . + "'%s' = '%s'\n",$variable,$value); + } + } else { + # Memory map entry + $map .= $line; + } + } + + if (!$seen_clockrate) { + printf STDERR ("No cycles/second entry in profile; Guessing %.1f GHz\n", + $cyclespernanosec); + } + + my $r = {}; + $r->{version} = 0; + $r->{period} = $sampling_period; + $r->{profile} = $profile; + $r->{libs} = ParseLibraries($prog, $map, $pcs); + $r->{pcs} = $pcs; + return $r; +} + +# Given a hex value in the form "0x1abcd" or "1abcd", return either +# "0001abcd" or "000000000001abcd", depending on the current (global) +# address length. +sub HexExtend { + my $addr = shift; + + $addr =~ s/^(0x)?0*//; + my $zeros_needed = $address_length - length($addr); + if ($zeros_needed < 0) { + printf STDERR "Warning: address $addr is longer than address length $address_length\n"; + return $addr; + } + return ("0" x $zeros_needed) . $addr; +} + +##### Symbol extraction ##### + +# Aggressively search the lib_prefix values for the given library +# If all else fails, just return the name of the library unmodified. +# If the lib_prefix is "/my/path,/other/path" and $file is "/lib/dir/mylib.so" +# it will search the following locations in this order, until it finds a file: +# /my/path/lib/dir/mylib.so +# /other/path/lib/dir/mylib.so +# /my/path/dir/mylib.so +# /other/path/dir/mylib.so +# /my/path/mylib.so +# /other/path/mylib.so +# /lib/dir/mylib.so (returned as last resort) +sub FindLibrary { + my $file = shift; + my $suffix = $file; + + # Search for the library as described above + do { + foreach my $prefix (@prefix_list) { + my $fullpath = $prefix . $suffix; + if (-e $fullpath) { + return $fullpath; + } + } + } while ($suffix =~ s|^/[^/]+/|/|); + return $file; +} + +# Return path to library with debugging symbols. +# For libc libraries, the copy in /usr/lib/debug contains debugging symbols +sub DebuggingLibrary { + my $file = shift; + if ($file =~ m|^/| && -f "/usr/lib/debug$file") { + return "/usr/lib/debug$file"; + } + return undef; +} + +# Parse text section header of a library using objdump +sub ParseTextSectionHeaderFromObjdump { + my $lib = shift; + + my $size = undef; + my $vma; + my $file_offset; + # Get objdump output from the library file to figure out how to + # map between mapped addresses and addresses in the library. + my $cmd = ShellEscape($obj_tool_map{"objdump"}, "-h", $lib); + open(OBJDUMP, "$cmd |") || error("$cmd: $!\n"); + while () { + s/\r//g; # turn windows-looking lines into unix-looking lines + # Idx Name Size VMA LMA File off Algn + # 10 .text 00104b2c 420156f0 420156f0 000156f0 2**4 + # For 64-bit objects, VMA and LMA will be 16 hex digits, size and file + # offset may still be 8. But AddressSub below will still handle that. + my @x = split; + if (($#x >= 6) && ($x[1] eq '.text')) { + $size = $x[2]; + $vma = $x[3]; + $file_offset = $x[5]; + last; + } + } + close(OBJDUMP); + + if (!defined($size)) { + return undef; + } + + my $r = {}; + $r->{size} = $size; + $r->{vma} = $vma; + $r->{file_offset} = $file_offset; + + return $r; +} + +# Parse text section header of a library using otool (on OS X) +sub ParseTextSectionHeaderFromOtool { + my $lib = shift; + + my $size = undef; + my $vma = undef; + my $file_offset = undef; + # Get otool output from the library file to figure out how to + # map between mapped addresses and addresses in the library. + my $command = ShellEscape($obj_tool_map{"otool"}, "-l", $lib); + open(OTOOL, "$command |") || error("$command: $!\n"); + my $cmd = ""; + my $sectname = ""; + my $segname = ""; + foreach my $line () { + $line =~ s/\r//g; # turn windows-looking lines into unix-looking lines + # Load command <#> + # cmd LC_SEGMENT + # [...] + # Section + # sectname __text + # segname __TEXT + # addr 0x000009f8 + # size 0x00018b9e + # offset 2552 + # align 2^2 (4) + # We will need to strip off the leading 0x from the hex addresses, + # and convert the offset into hex. + if ($line =~ /Load command/) { + $cmd = ""; + $sectname = ""; + $segname = ""; + } elsif ($line =~ /Section/) { + $sectname = ""; + $segname = ""; + } elsif ($line =~ /cmd (\w+)/) { + $cmd = $1; + } elsif ($line =~ /sectname (\w+)/) { + $sectname = $1; + } elsif ($line =~ /segname (\w+)/) { + $segname = $1; + } elsif (!(($cmd eq "LC_SEGMENT" || $cmd eq "LC_SEGMENT_64") && + $sectname eq "__text" && + $segname eq "__TEXT")) { + next; + } elsif ($line =~ /\baddr 0x([0-9a-fA-F]+)/) { + $vma = $1; + } elsif ($line =~ /\bsize 0x([0-9a-fA-F]+)/) { + $size = $1; + } elsif ($line =~ /\boffset ([0-9]+)/) { + $file_offset = sprintf("%016x", $1); + } + if (defined($vma) && defined($size) && defined($file_offset)) { + last; + } + } + close(OTOOL); + + if (!defined($vma) || !defined($size) || !defined($file_offset)) { + return undef; + } + + my $r = {}; + $r->{size} = $size; + $r->{vma} = $vma; + $r->{file_offset} = $file_offset; + + return $r; +} + +sub ParseTextSectionHeader { + # obj_tool_map("otool") is only defined if we're in a Mach-O environment + if (defined($obj_tool_map{"otool"})) { + my $r = ParseTextSectionHeaderFromOtool(@_); + if (defined($r)){ + return $r; + } + } + # If otool doesn't work, or we don't have it, fall back to objdump + return ParseTextSectionHeaderFromObjdump(@_); +} + +# Split /proc/pid/maps dump into a list of libraries +sub ParseLibraries { + return if $main::use_symbol_page; # We don't need libraries info. + my $prog = shift; + my $map = shift; + my $pcs = shift; + + my $result = []; + my $h = "[a-f0-9]+"; + my $zero_offset = HexExtend("0"); + + my $buildvar = ""; + foreach my $l (split("\n", $map)) { + if ($l =~ m/^\s*build=(.*)$/) { + $buildvar = $1; + } + + my $start; + my $finish; + my $offset; + my $lib; + if ($l =~ /^($h)-($h)\s+..x.\s+($h)\s+\S+:\S+\s+\d+\s+(\S+\.(so|dll|dylib|bundle)((\.\d+)+\w*(\.\d+){0,3})?)$/i) { + # Full line from /proc/self/maps. Example: + # 40000000-40015000 r-xp 00000000 03:01 12845071 /lib/ld-2.3.2.so + $start = HexExtend($1); + $finish = HexExtend($2); + $offset = HexExtend($3); + $lib = $4; + $lib =~ s|\\|/|g; # turn windows-style paths into unix-style paths + } elsif ($l =~ /^\s*($h)-($h):\s*(\S+\.so(\.\d+)*)/) { + # Cooked line from DumpAddressMap. Example: + # 40000000-40015000: /lib/ld-2.3.2.so + $start = HexExtend($1); + $finish = HexExtend($2); + $offset = $zero_offset; + $lib = $3; + } else { + next; + } + + # Expand "$build" variable if available + $lib =~ s/\$build\b/$buildvar/g; + + $lib = FindLibrary($lib); + + # Check for pre-relocated libraries, which use pre-relocated symbol tables + # and thus require adjusting the offset that we'll use to translate + # VM addresses into symbol table addresses. + # Only do this if we're not going to fetch the symbol table from a + # debugging copy of the library. + if (!DebuggingLibrary($lib)) { + my $text = ParseTextSectionHeader($lib); + if (defined($text)) { + my $vma_offset = AddressSub($text->{vma}, $text->{file_offset}); + $offset = AddressAdd($offset, $vma_offset); + } + } + + push(@{$result}, [$lib, $start, $finish, $offset]); + } + + # Append special entry for additional library (not relocated) + if ($main::opt_lib ne "") { + my $text = ParseTextSectionHeader($main::opt_lib); + if (defined($text)) { + my $start = $text->{vma}; + my $finish = AddressAdd($start, $text->{size}); + + push(@{$result}, [$main::opt_lib, $start, $finish, $start]); + } + } + + # Append special entry for the main program. This covers + # 0..max_pc_value_seen, so that we assume pc values not found in one + # of the library ranges will be treated as coming from the main + # program binary. + my $min_pc = HexExtend("0"); + my $max_pc = $min_pc; # find the maximal PC value in any sample + foreach my $pc (keys(%{$pcs})) { + if (HexExtend($pc) gt $max_pc) { $max_pc = HexExtend($pc); } + } + push(@{$result}, [$prog, $min_pc, $max_pc, $zero_offset]); + + return $result; +} + +# Add two hex addresses of length $address_length. +# Run pprof --test for unit test if this is changed. +sub AddressAdd { + my $addr1 = shift; + my $addr2 = shift; + my $sum; + + if ($address_length == 8) { + # Perl doesn't cope with wraparound arithmetic, so do it explicitly: + $sum = (hex($addr1)+hex($addr2)) % (0x10000000 * 16); + return sprintf("%08x", $sum); + + } else { + # Do the addition in 7-nibble chunks to trivialize carry handling. + + if ($main::opt_debug and $main::opt_test) { + print STDERR "AddressAdd $addr1 + $addr2 = "; + } + + my $a1 = substr($addr1,-7); + $addr1 = substr($addr1,0,-7); + my $a2 = substr($addr2,-7); + $addr2 = substr($addr2,0,-7); + $sum = hex($a1) + hex($a2); + my $c = 0; + if ($sum > 0xfffffff) { + $c = 1; + $sum -= 0x10000000; + } + my $r = sprintf("%07x", $sum); + + $a1 = substr($addr1,-7); + $addr1 = substr($addr1,0,-7); + $a2 = substr($addr2,-7); + $addr2 = substr($addr2,0,-7); + $sum = hex($a1) + hex($a2) + $c; + $c = 0; + if ($sum > 0xfffffff) { + $c = 1; + $sum -= 0x10000000; + } + $r = sprintf("%07x", $sum) . $r; + + $sum = hex($addr1) + hex($addr2) + $c; + if ($sum > 0xff) { $sum -= 0x100; } + $r = sprintf("%02x", $sum) . $r; + + if ($main::opt_debug and $main::opt_test) { print STDERR "$r\n"; } + + return $r; + } +} + + +# Subtract two hex addresses of length $address_length. +# Run pprof --test for unit test if this is changed. +sub AddressSub { + my $addr1 = shift; + my $addr2 = shift; + my $diff; + + if ($address_length == 8) { + # Perl doesn't cope with wraparound arithmetic, so do it explicitly: + $diff = (hex($addr1)-hex($addr2)) % (0x10000000 * 16); + return sprintf("%08x", $diff); + + } else { + # Do the addition in 7-nibble chunks to trivialize borrow handling. + # if ($main::opt_debug) { print STDERR "AddressSub $addr1 - $addr2 = "; } + + my $a1 = hex(substr($addr1,-7)); + $addr1 = substr($addr1,0,-7); + my $a2 = hex(substr($addr2,-7)); + $addr2 = substr($addr2,0,-7); + my $b = 0; + if ($a2 > $a1) { + $b = 1; + $a1 += 0x10000000; + } + $diff = $a1 - $a2; + my $r = sprintf("%07x", $diff); + + $a1 = hex(substr($addr1,-7)); + $addr1 = substr($addr1,0,-7); + $a2 = hex(substr($addr2,-7)) + $b; + $addr2 = substr($addr2,0,-7); + $b = 0; + if ($a2 > $a1) { + $b = 1; + $a1 += 0x10000000; + } + $diff = $a1 - $a2; + $r = sprintf("%07x", $diff) . $r; + + $a1 = hex($addr1); + $a2 = hex($addr2) + $b; + if ($a2 > $a1) { $a1 += 0x100; } + $diff = $a1 - $a2; + $r = sprintf("%02x", $diff) . $r; + + # if ($main::opt_debug) { print STDERR "$r\n"; } + + return $r; + } +} + +# Increment a hex addresses of length $address_length. +# Run pprof --test for unit test if this is changed. +sub AddressInc { + my $addr = shift; + my $sum; + + if ($address_length == 8) { + # Perl doesn't cope with wraparound arithmetic, so do it explicitly: + $sum = (hex($addr)+1) % (0x10000000 * 16); + return sprintf("%08x", $sum); + + } else { + # Do the addition in 7-nibble chunks to trivialize carry handling. + # We are always doing this to step through the addresses in a function, + # and will almost never overflow the first chunk, so we check for this + # case and exit early. + + # if ($main::opt_debug) { print STDERR "AddressInc $addr1 = "; } + + my $a1 = substr($addr,-7); + $addr = substr($addr,0,-7); + $sum = hex($a1) + 1; + my $r = sprintf("%07x", $sum); + if ($sum <= 0xfffffff) { + $r = $addr . $r; + # if ($main::opt_debug) { print STDERR "$r\n"; } + return HexExtend($r); + } else { + $r = "0000000"; + } + + $a1 = substr($addr,-7); + $addr = substr($addr,0,-7); + $sum = hex($a1) + 1; + $r = sprintf("%07x", $sum) . $r; + if ($sum <= 0xfffffff) { + $r = $addr . $r; + # if ($main::opt_debug) { print STDERR "$r\n"; } + return HexExtend($r); + } else { + $r = "00000000000000"; + } + + $sum = hex($addr) + 1; + if ($sum > 0xff) { $sum -= 0x100; } + $r = sprintf("%02x", $sum) . $r; + + # if ($main::opt_debug) { print STDERR "$r\n"; } + return $r; + } +} + +# Extract symbols for all PC values found in profile +sub ExtractSymbols { + my $libs = shift; + my $pcset = shift; + + my $symbols = {}; + + # Map each PC value to the containing library. To make this faster, + # we sort libraries by their starting pc value (highest first), and + # advance through the libraries as we advance the pc. Sometimes the + # addresses of libraries may overlap with the addresses of the main + # binary, so to make sure the libraries 'win', we iterate over the + # libraries in reverse order (which assumes the binary doesn't start + # in the middle of a library, which seems a fair assumption). + my @pcs = (sort { $a cmp $b } keys(%{$pcset})); # pcset is 0-extended strings + foreach my $lib (sort {$b->[1] cmp $a->[1]} @{$libs}) { + my $libname = $lib->[0]; + my $start = $lib->[1]; + my $finish = $lib->[2]; + my $offset = $lib->[3]; + + # Get list of pcs that belong in this library. + my $contained = []; + my ($start_pc_index, $finish_pc_index); + # Find smallest finish_pc_index such that $finish < $pc[$finish_pc_index]. + for ($finish_pc_index = $#pcs + 1; $finish_pc_index > 0; + $finish_pc_index--) { + last if $pcs[$finish_pc_index - 1] le $finish; + } + # Find smallest start_pc_index such that $start <= $pc[$start_pc_index]. + for ($start_pc_index = $finish_pc_index; $start_pc_index > 0; + $start_pc_index--) { + last if $pcs[$start_pc_index - 1] lt $start; + } + # This keeps PC values higher than $pc[$finish_pc_index] in @pcs, + # in case there are overlaps in libraries and the main binary. + @{$contained} = splice(@pcs, $start_pc_index, + $finish_pc_index - $start_pc_index); + # Map to symbols + MapToSymbols($libname, AddressSub($start, $offset), $contained, $symbols); + } + + return $symbols; +} + +# Map list of PC values to symbols for a given image +sub MapToSymbols { + my $image = shift; + my $offset = shift; + my $pclist = shift; + my $symbols = shift; + + my $debug = 0; + + # Ignore empty binaries + if ($#{$pclist} < 0) { return; } + + # Figure out the addr2line command to use + my $addr2line = $obj_tool_map{"addr2line"}; + my $cmd = ShellEscape($addr2line, "-f", "-C", "-e", $image); + if (exists $obj_tool_map{"addr2line_pdb"}) { + $addr2line = $obj_tool_map{"addr2line_pdb"}; + $cmd = ShellEscape($addr2line, "--demangle", "-f", "-C", "-e", $image); + } + + # If "addr2line" isn't installed on the system at all, just use + # nm to get what info we can (function names, but not line numbers). + if (system(ShellEscape($addr2line, "--help") . " >$dev_null 2>&1") != 0) { + MapSymbolsWithNM($image, $offset, $pclist, $symbols); + return; + } + + # "addr2line -i" can produce a variable number of lines per input + # address, with no separator that allows us to tell when data for + # the next address starts. So we find the address for a special + # symbol (_fini) and interleave this address between all real + # addresses passed to addr2line. The name of this special symbol + # can then be used as a separator. + $sep_address = undef; # May be filled in by MapSymbolsWithNM() + my $nm_symbols = {}; + MapSymbolsWithNM($image, $offset, $pclist, $nm_symbols); + if (defined($sep_address)) { + # Only add " -i" to addr2line if the binary supports it. + # addr2line --help returns 0, but not if it sees an unknown flag first. + if (system("$cmd -i --help >$dev_null 2>&1") == 0) { + $cmd .= " -i"; + } else { + $sep_address = undef; # no need for sep_address if we don't support -i + } + } + + # Make file with all PC values with intervening 'sep_address' so + # that we can reliably detect the end of inlined function list + open(ADDRESSES, ">$main::tmpfile_sym") || error("$main::tmpfile_sym: $!\n"); + if ($debug) { print("---- $image ---\n"); } + for (my $i = 0; $i <= $#{$pclist}; $i++) { + # addr2line always reads hex addresses, and does not need '0x' prefix. + if ($debug) { printf STDERR ("%s\n", $pclist->[$i]); } + printf ADDRESSES ("%s\n", AddressSub($pclist->[$i], $offset)); + if (defined($sep_address)) { + printf ADDRESSES ("%s\n", $sep_address); + } + } + close(ADDRESSES); + if ($debug) { + print("----\n"); + system("cat", $main::tmpfile_sym); + print("----\n"); + system("$cmd < " . ShellEscape($main::tmpfile_sym)); + print("----\n"); + } + + open(SYMBOLS, "$cmd <" . ShellEscape($main::tmpfile_sym) . " |") + || error("$cmd: $!\n"); + my $count = 0; # Index in pclist + while () { + # Read fullfunction and filelineinfo from next pair of lines + s/\r?\n$//g; + my $fullfunction = $_; + $_ = ; + s/\r?\n$//g; + my $filelinenum = $_; + + if (defined($sep_address) && $fullfunction eq $sep_symbol) { + # Terminating marker for data for this address + $count++; + next; + } + + $filelinenum =~ s|\\|/|g; # turn windows-style paths into unix-style paths + + my $pcstr = $pclist->[$count]; + my $function = ShortFunctionName($fullfunction); + my $nms = $nm_symbols->{$pcstr}; + if (defined($nms)) { + if ($fullfunction eq '??') { + # nm found a symbol for us. + $function = $nms->[0]; + $fullfunction = $nms->[2]; + } else { + # MapSymbolsWithNM tags each routine with its starting address, + # useful in case the image has multiple occurrences of this + # routine. (It uses a syntax that resembles template paramters, + # that are automatically stripped out by ShortFunctionName().) + # addr2line does not provide the same information. So we check + # if nm disambiguated our symbol, and if so take the annotated + # (nm) version of the routine-name. TODO(csilvers): this won't + # catch overloaded, inlined symbols, which nm doesn't see. + # Better would be to do a check similar to nm's, in this fn. + if ($nms->[2] =~ m/^\Q$function\E/) { # sanity check it's the right fn + $function = $nms->[0]; + $fullfunction = $nms->[2]; + } + } + } + + # Prepend to accumulated symbols for pcstr + # (so that caller comes before callee) + my $sym = $symbols->{$pcstr}; + if (!defined($sym)) { + $sym = []; + $symbols->{$pcstr} = $sym; + } + unshift(@{$sym}, $function, $filelinenum, $fullfunction); + if ($debug) { printf STDERR ("%s => [%s]\n", $pcstr, join(" ", @{$sym})); } + if (!defined($sep_address)) { + # Inlining is off, so this entry ends immediately + $count++; + } + } + close(SYMBOLS); +} + +# Use nm to map the list of referenced PCs to symbols. Return true iff we +# are able to read procedure information via nm. +sub MapSymbolsWithNM { + my $image = shift; + my $offset = shift; + my $pclist = shift; + my $symbols = shift; + + # Get nm output sorted by increasing address + my $symbol_table = GetProcedureBoundaries($image, "."); + if (!%{$symbol_table}) { + return 0; + } + # Start addresses are already the right length (8 or 16 hex digits). + my @names = sort { $symbol_table->{$a}->[0] cmp $symbol_table->{$b}->[0] } + keys(%{$symbol_table}); + + if ($#names < 0) { + # No symbols: just use addresses + foreach my $pc (@{$pclist}) { + my $pcstr = "0x" . $pc; + $symbols->{$pc} = [$pcstr, "?", $pcstr]; + } + return 0; + } + + # Sort addresses so we can do a join against nm output + my $index = 0; + my $fullname = $names[0]; + my $name = ShortFunctionName($fullname); + foreach my $pc (sort { $a cmp $b } @{$pclist}) { + # Adjust for mapped offset + my $mpc = AddressSub($pc, $offset); + while (($index < $#names) && ($mpc ge $symbol_table->{$fullname}->[1])){ + $index++; + $fullname = $names[$index]; + $name = ShortFunctionName($fullname); + } + if ($mpc lt $symbol_table->{$fullname}->[1]) { + $symbols->{$pc} = [$name, "?", $fullname]; + } else { + my $pcstr = "0x" . $pc; + $symbols->{$pc} = [$pcstr, "?", $pcstr]; + } + } + return 1; +} + +sub ShortFunctionName { + my $function = shift; + while ($function =~ s/\([^()]*\)(\s*const)?//g) { } # Argument types + while ($function =~ s/<[^<>]*>//g) { } # Remove template arguments + $function =~ s/^.*\s+(\w+::)/$1/; # Remove leading type + return $function; +} + +# Trim overly long symbols found in disassembler output +sub CleanDisassembly { + my $d = shift; + while ($d =~ s/\([^()%]*\)(\s*const)?//g) { } # Argument types, not (%rax) + while ($d =~ s/(\w+)<[^<>]*>/$1/g) { } # Remove template arguments + return $d; +} + +# Clean file name for display +sub CleanFileName { + my ($f) = @_; + $f =~ s|^/proc/self/cwd/||; + $f =~ s|^\./||; + return $f; +} + +# Make address relative to section and clean up for display +sub UnparseAddress { + my ($offset, $address) = @_; + $address = AddressSub($address, $offset); + $address =~ s/^0x//; + $address =~ s/^0*//; + return $address; +} + +##### Miscellaneous ##### + +# Find the right versions of the above object tools to use. The +# argument is the program file being analyzed, and should be an ELF +# 32-bit or ELF 64-bit executable file. The location of the tools +# is determined by considering the following options in this order: +# 1) --tools option, if set +# 2) PPROF_TOOLS environment variable, if set +# 3) the environment +sub ConfigureObjTools { + my $prog_file = shift; + + # Check for the existence of $prog_file because /usr/bin/file does not + # predictably return error status in prod. + (-e $prog_file) || error("$prog_file does not exist.\n"); + + my $file_type = undef; + if (-e "/usr/bin/file") { + # Follow symlinks (at least for systems where "file" supports that). + my $escaped_prog_file = ShellEscape($prog_file); + $file_type = `/usr/bin/file -L $escaped_prog_file 2>$dev_null || + /usr/bin/file $escaped_prog_file`; + } elsif ($^O == "MSWin32") { + $file_type = "MS Windows"; + } else { + print STDERR "WARNING: Can't determine the file type of $prog_file"; + } + + if ($file_type =~ /64-bit/) { + # Change $address_length to 16 if the program file is ELF 64-bit. + # We can't detect this from many (most?) heap or lock contention + # profiles, since the actual addresses referenced are generally in low + # memory even for 64-bit programs. + $address_length = 16; + } + + if ($file_type =~ /MS Windows/) { + # For windows, we provide a version of nm and addr2line as part of + # the opensource release, which is capable of parsing + # Windows-style PDB executables. It should live in the path, or + # in the same directory as pprof. + $obj_tool_map{"nm_pdb"} = "nm-pdb"; + $obj_tool_map{"addr2line_pdb"} = "addr2line-pdb"; + } + + if ($file_type =~ /Mach-O/) { + # OS X uses otool to examine Mach-O files, rather than objdump. + $obj_tool_map{"otool"} = "otool"; + $obj_tool_map{"addr2line"} = "false"; # no addr2line + $obj_tool_map{"objdump"} = "false"; # no objdump + } + + # Go fill in %obj_tool_map with the pathnames to use: + foreach my $tool (keys %obj_tool_map) { + $obj_tool_map{$tool} = ConfigureTool($obj_tool_map{$tool}); + } +} + +# Returns the path of a caller-specified object tool. If --tools or +# PPROF_TOOLS are specified, then returns the full path to the tool +# with that prefix. Otherwise, returns the path unmodified (which +# means we will look for it on PATH). +sub ConfigureTool { + my $tool = shift; + my $path; + + # --tools (or $PPROF_TOOLS) is a comma separated list, where each + # item is either a) a pathname prefix, or b) a map of the form + # :. First we look for an entry of type (b) for our + # tool. If one is found, we use it. Otherwise, we consider all the + # pathname prefixes in turn, until one yields an existing file. If + # none does, we use a default path. + my $tools = $main::opt_tools || $ENV{"PPROF_TOOLS"} || ""; + if ($tools =~ m/(,|^)\Q$tool\E:([^,]*)/) { + $path = $2; + # TODO(csilvers): sanity-check that $path exists? Hard if it's relative. + } elsif ($tools ne '') { + foreach my $prefix (split(',', $tools)) { + next if ($prefix =~ /:/); # ignore "tool:fullpath" entries in the list + if (-x $prefix . $tool) { + $path = $prefix . $tool; + last; + } + } + if (!$path) { + error("No '$tool' found with prefix specified by " . + "--tools (or \$PPROF_TOOLS) '$tools'\n"); + } + } else { + # ... otherwise use the version that exists in the same directory as + # pprof. If there's nothing there, use $PATH. + $0 =~ m,[^/]*$,; # this is everything after the last slash + my $dirname = $`; # this is everything up to and including the last slash + if (-x "$dirname$tool") { + $path = "$dirname$tool"; + } else { + $path = $tool; + } + } + if ($main::opt_debug) { print STDERR "Using '$path' for '$tool'.\n"; } + return $path; +} + +sub ShellEscape { + my @escaped_words = (); + foreach my $word (@_) { + my $escaped_word = $word; + if ($word =~ m![^a-zA-Z0-9/.,_=-]!) { # check for anything not in whitelist + $escaped_word =~ s/'/'\\''/; + $escaped_word = "'$escaped_word'"; + } + push(@escaped_words, $escaped_word); + } + return join(" ", @escaped_words); +} + +sub cleanup { + unlink($main::tmpfile_sym); + unlink(keys %main::tempnames); + + # We leave any collected profiles in $HOME/pprof in case the user wants + # to look at them later. We print a message informing them of this. + if ((scalar(@main::profile_files) > 0) && + defined($main::collected_profile)) { + if (scalar(@main::profile_files) == 1) { + print STDERR "Dynamically gathered profile is in $main::collected_profile\n"; + } + print STDERR "If you want to investigate this profile further, you can do:\n"; + print STDERR "\n"; + print STDERR " pprof \\\n"; + print STDERR " $main::prog \\\n"; + print STDERR " $main::collected_profile\n"; + print STDERR "\n"; + } +} + +sub sighandler { + cleanup(); + exit(1); +} + +sub error { + my $msg = shift; + print STDERR $msg; + cleanup(); + exit(1); +} + + +# Run $nm_command and get all the resulting procedure boundaries whose +# names match "$regexp" and returns them in a hashtable mapping from +# procedure name to a two-element vector of [start address, end address] +sub GetProcedureBoundariesViaNm { + my $escaped_nm_command = shift; # shell-escaped + my $regexp = shift; + + my $symbol_table = {}; + open(NM, "$escaped_nm_command |") || error("$escaped_nm_command: $!\n"); + my $last_start = "0"; + my $routine = ""; + while () { + s/\r//g; # turn windows-looking lines into unix-looking lines + if (m/^\s*([0-9a-f]+) (.) (..*)/) { + my $start_val = $1; + my $type = $2; + my $this_routine = $3; + + # It's possible for two symbols to share the same address, if + # one is a zero-length variable (like __start_google_malloc) or + # one symbol is a weak alias to another (like __libc_malloc). + # In such cases, we want to ignore all values except for the + # actual symbol, which in nm-speak has type "T". The logic + # below does this, though it's a bit tricky: what happens when + # we have a series of lines with the same address, is the first + # one gets queued up to be processed. However, it won't + # *actually* be processed until later, when we read a line with + # a different address. That means that as long as we're reading + # lines with the same address, we have a chance to replace that + # item in the queue, which we do whenever we see a 'T' entry -- + # that is, a line with type 'T'. If we never see a 'T' entry, + # we'll just go ahead and process the first entry (which never + # got touched in the queue), and ignore the others. + if ($start_val eq $last_start && $type =~ /t/i) { + # We are the 'T' symbol at this address, replace previous symbol. + $routine = $this_routine; + next; + } elsif ($start_val eq $last_start) { + # We're not the 'T' symbol at this address, so ignore us. + next; + } + + if ($this_routine eq $sep_symbol) { + $sep_address = HexExtend($start_val); + } + + # Tag this routine with the starting address in case the image + # has multiple occurrences of this routine. We use a syntax + # that resembles template paramters that are automatically + # stripped out by ShortFunctionName() + $this_routine .= "<$start_val>"; + + if (defined($routine) && $routine =~ m/$regexp/) { + $symbol_table->{$routine} = [HexExtend($last_start), + HexExtend($start_val)]; + } + $last_start = $start_val; + $routine = $this_routine; + } elsif (m/^Loaded image name: (.+)/) { + # The win32 nm workalike emits information about the binary it is using. + if ($main::opt_debug) { print STDERR "Using Image $1\n"; } + } elsif (m/^PDB file name: (.+)/) { + # The win32 nm workalike emits information about the pdb it is using. + if ($main::opt_debug) { print STDERR "Using PDB $1\n"; } + } + } + close(NM); + # Handle the last line in the nm output. Unfortunately, we don't know + # how big this last symbol is, because we don't know how big the file + # is. For now, we just give it a size of 0. + # TODO(csilvers): do better here. + if (defined($routine) && $routine =~ m/$regexp/) { + $symbol_table->{$routine} = [HexExtend($last_start), + HexExtend($last_start)]; + } + return $symbol_table; +} + +# Gets the procedure boundaries for all routines in "$image" whose names +# match "$regexp" and returns them in a hashtable mapping from procedure +# name to a two-element vector of [start address, end address]. +# Will return an empty map if nm is not installed or not working properly. +sub GetProcedureBoundaries { + my $image = shift; + my $regexp = shift; + + # If $image doesn't start with /, then put ./ in front of it. This works + # around an obnoxious bug in our probing of nm -f behavior. + # "nm -f $image" is supposed to fail on GNU nm, but if: + # + # a. $image starts with [BbSsPp] (for example, bin/foo/bar), AND + # b. you have a.out in your current directory (a not uncommon occurence) + # + # then "nm -f $image" succeeds because -f only looks at the first letter of + # the argument, which looks valid because it's [BbSsPp], and then since + # there's no image provided, it looks for a.out and finds it. + # + # This regex makes sure that $image starts with . or /, forcing the -f + # parsing to fail since . and / are not valid formats. + $image =~ s#^[^/]#./$&#; + + # For libc libraries, the copy in /usr/lib/debug contains debugging symbols + my $debugging = DebuggingLibrary($image); + if ($debugging) { + $image = $debugging; + } + + my $nm = $obj_tool_map{"nm"}; + my $cppfilt = $obj_tool_map{"c++filt"}; + + # nm can fail for two reasons: 1) $image isn't a debug library; 2) nm + # binary doesn't support --demangle. In addition, for OS X we need + # to use the -f flag to get 'flat' nm output (otherwise we don't sort + # properly and get incorrect results). Unfortunately, GNU nm uses -f + # in an incompatible way. So first we test whether our nm supports + # --demangle and -f. + my $demangle_flag = ""; + my $cppfilt_flag = ""; + my $to_devnull = ">$dev_null 2>&1"; + if (system(ShellEscape($nm, "--demangle", "image") . $to_devnull) == 0) { + # In this mode, we do "nm --demangle " + $demangle_flag = "--demangle"; + $cppfilt_flag = ""; + } elsif (system(ShellEscape($cppfilt, $image) . $to_devnull) == 0) { + # In this mode, we do "nm | c++filt" + $cppfilt_flag = " | " . ShellEscape($cppfilt); + }; + my $flatten_flag = ""; + if (system(ShellEscape($nm, "-f", $image) . $to_devnull) == 0) { + $flatten_flag = "-f"; + } + + # Finally, in the case $imagie isn't a debug library, we try again with + # -D to at least get *exported* symbols. If we can't use --demangle, + # we use c++filt instead, if it exists on this system. + my @nm_commands = (ShellEscape($nm, "-n", $flatten_flag, $demangle_flag, + $image) . " 2>$dev_null $cppfilt_flag", + ShellEscape($nm, "-D", "-n", $flatten_flag, $demangle_flag, + $image) . " 2>$dev_null $cppfilt_flag", + # 6nm is for Go binaries + ShellEscape("6nm", "$image") . " 2>$dev_null | sort", + ); + + # If the executable is an MS Windows PDB-format executable, we'll + # have set up obj_tool_map("nm_pdb"). In this case, we actually + # want to use both unix nm and windows-specific nm_pdb, since + # PDB-format executables can apparently include dwarf .o files. + if (exists $obj_tool_map{"nm_pdb"}) { + push(@nm_commands, + ShellEscape($obj_tool_map{"nm_pdb"}, "--demangle", $image) + . " 2>$dev_null"); + } + + foreach my $nm_command (@nm_commands) { + my $symbol_table = GetProcedureBoundariesViaNm($nm_command, $regexp); + return $symbol_table if (%{$symbol_table}); + } + my $symbol_table = {}; + return $symbol_table; +} + + +# The test vectors for AddressAdd/Sub/Inc are 8-16-nibble hex strings. +# To make them more readable, we add underscores at interesting places. +# This routine removes the underscores, producing the canonical representation +# used by pprof to represent addresses, particularly in the tested routines. +sub CanonicalHex { + my $arg = shift; + return join '', (split '_',$arg); +} + + +# Unit test for AddressAdd: +sub AddressAddUnitTest { + my $test_data_8 = shift; + my $test_data_16 = shift; + my $error_count = 0; + my $fail_count = 0; + my $pass_count = 0; + # print STDERR "AddressAddUnitTest: ", 1+$#{$test_data_8}, " tests\n"; + + # First a few 8-nibble addresses. Note that this implementation uses + # plain old arithmetic, so a quick sanity check along with verifying what + # happens to overflow (we want it to wrap): + $address_length = 8; + foreach my $row (@{$test_data_8}) { + if ($main::opt_debug and $main::opt_test) { print STDERR "@{$row}\n"; } + my $sum = AddressAdd ($row->[0], $row->[1]); + if ($sum ne $row->[2]) { + printf STDERR "ERROR: %s != %s + %s = %s\n", $sum, + $row->[0], $row->[1], $row->[2]; + ++$fail_count; + } else { + ++$pass_count; + } + } + printf STDERR "AddressAdd 32-bit tests: %d passes, %d failures\n", + $pass_count, $fail_count; + $error_count = $fail_count; + $fail_count = 0; + $pass_count = 0; + + # Now 16-nibble addresses. + $address_length = 16; + foreach my $row (@{$test_data_16}) { + if ($main::opt_debug and $main::opt_test) { print STDERR "@{$row}\n"; } + my $sum = AddressAdd (CanonicalHex($row->[0]), CanonicalHex($row->[1])); + my $expected = join '', (split '_',$row->[2]); + if ($sum ne CanonicalHex($row->[2])) { + printf STDERR "ERROR: %s != %s + %s = %s\n", $sum, + $row->[0], $row->[1], $row->[2]; + ++$fail_count; + } else { + ++$pass_count; + } + } + printf STDERR "AddressAdd 64-bit tests: %d passes, %d failures\n", + $pass_count, $fail_count; + $error_count += $fail_count; + + return $error_count; +} + + +# Unit test for AddressSub: +sub AddressSubUnitTest { + my $test_data_8 = shift; + my $test_data_16 = shift; + my $error_count = 0; + my $fail_count = 0; + my $pass_count = 0; + # print STDERR "AddressSubUnitTest: ", 1+$#{$test_data_8}, " tests\n"; + + # First a few 8-nibble addresses. Note that this implementation uses + # plain old arithmetic, so a quick sanity check along with verifying what + # happens to overflow (we want it to wrap): + $address_length = 8; + foreach my $row (@{$test_data_8}) { + if ($main::opt_debug and $main::opt_test) { print STDERR "@{$row}\n"; } + my $sum = AddressSub ($row->[0], $row->[1]); + if ($sum ne $row->[3]) { + printf STDERR "ERROR: %s != %s - %s = %s\n", $sum, + $row->[0], $row->[1], $row->[3]; + ++$fail_count; + } else { + ++$pass_count; + } + } + printf STDERR "AddressSub 32-bit tests: %d passes, %d failures\n", + $pass_count, $fail_count; + $error_count = $fail_count; + $fail_count = 0; + $pass_count = 0; + + # Now 16-nibble addresses. + $address_length = 16; + foreach my $row (@{$test_data_16}) { + if ($main::opt_debug and $main::opt_test) { print STDERR "@{$row}\n"; } + my $sum = AddressSub (CanonicalHex($row->[0]), CanonicalHex($row->[1])); + if ($sum ne CanonicalHex($row->[3])) { + printf STDERR "ERROR: %s != %s - %s = %s\n", $sum, + $row->[0], $row->[1], $row->[3]; + ++$fail_count; + } else { + ++$pass_count; + } + } + printf STDERR "AddressSub 64-bit tests: %d passes, %d failures\n", + $pass_count, $fail_count; + $error_count += $fail_count; + + return $error_count; +} + + +# Unit test for AddressInc: +sub AddressIncUnitTest { + my $test_data_8 = shift; + my $test_data_16 = shift; + my $error_count = 0; + my $fail_count = 0; + my $pass_count = 0; + # print STDERR "AddressIncUnitTest: ", 1+$#{$test_data_8}, " tests\n"; + + # First a few 8-nibble addresses. Note that this implementation uses + # plain old arithmetic, so a quick sanity check along with verifying what + # happens to overflow (we want it to wrap): + $address_length = 8; + foreach my $row (@{$test_data_8}) { + if ($main::opt_debug and $main::opt_test) { print STDERR "@{$row}\n"; } + my $sum = AddressInc ($row->[0]); + if ($sum ne $row->[4]) { + printf STDERR "ERROR: %s != %s + 1 = %s\n", $sum, + $row->[0], $row->[4]; + ++$fail_count; + } else { + ++$pass_count; + } + } + printf STDERR "AddressInc 32-bit tests: %d passes, %d failures\n", + $pass_count, $fail_count; + $error_count = $fail_count; + $fail_count = 0; + $pass_count = 0; + + # Now 16-nibble addresses. + $address_length = 16; + foreach my $row (@{$test_data_16}) { + if ($main::opt_debug and $main::opt_test) { print STDERR "@{$row}\n"; } + my $sum = AddressInc (CanonicalHex($row->[0])); + if ($sum ne CanonicalHex($row->[4])) { + printf STDERR "ERROR: %s != %s + 1 = %s\n", $sum, + $row->[0], $row->[4]; + ++$fail_count; + } else { + ++$pass_count; + } + } + printf STDERR "AddressInc 64-bit tests: %d passes, %d failures\n", + $pass_count, $fail_count; + $error_count += $fail_count; + + return $error_count; +} + + +# Driver for unit tests. +# Currently just the address add/subtract/increment routines for 64-bit. +sub RunUnitTests { + my $error_count = 0; + + # This is a list of tuples [a, b, a+b, a-b, a+1] + my $unit_test_data_8 = [ + [qw(aaaaaaaa 50505050 fafafafa 5a5a5a5a aaaaaaab)], + [qw(50505050 aaaaaaaa fafafafa a5a5a5a6 50505051)], + [qw(ffffffff aaaaaaaa aaaaaaa9 55555555 00000000)], + [qw(00000001 ffffffff 00000000 00000002 00000002)], + [qw(00000001 fffffff0 fffffff1 00000011 00000002)], + ]; + my $unit_test_data_16 = [ + # The implementation handles data in 7-nibble chunks, so those are the + # interesting boundaries. + [qw(aaaaaaaa 50505050 + 00_000000f_afafafa 00_0000005_a5a5a5a 00_000000a_aaaaaab)], + [qw(50505050 aaaaaaaa + 00_000000f_afafafa ff_ffffffa_5a5a5a6 00_0000005_0505051)], + [qw(ffffffff aaaaaaaa + 00_000001a_aaaaaa9 00_0000005_5555555 00_0000010_0000000)], + [qw(00000001 ffffffff + 00_0000010_0000000 ff_ffffff0_0000002 00_0000000_0000002)], + [qw(00000001 fffffff0 + 00_000000f_ffffff1 ff_ffffff0_0000011 00_0000000_0000002)], + + [qw(00_a00000a_aaaaaaa 50505050 + 00_a00000f_afafafa 00_a000005_a5a5a5a 00_a00000a_aaaaaab)], + [qw(0f_fff0005_0505050 aaaaaaaa + 0f_fff000f_afafafa 0f_ffefffa_5a5a5a6 0f_fff0005_0505051)], + [qw(00_000000f_fffffff 01_800000a_aaaaaaa + 01_800001a_aaaaaa9 fe_8000005_5555555 00_0000010_0000000)], + [qw(00_0000000_0000001 ff_fffffff_fffffff + 00_0000000_0000000 00_0000000_0000002 00_0000000_0000002)], + [qw(00_0000000_0000001 ff_fffffff_ffffff0 + ff_fffffff_ffffff1 00_0000000_0000011 00_0000000_0000002)], + ]; + + $error_count += AddressAddUnitTest($unit_test_data_8, $unit_test_data_16); + $error_count += AddressSubUnitTest($unit_test_data_8, $unit_test_data_16); + $error_count += AddressIncUnitTest($unit_test_data_8, $unit_test_data_16); + if ($error_count > 0) { + print STDERR $error_count, " errors: FAILED\n"; + } else { + print STDERR "PASS\n"; + } + exit ($error_count); +} diff --git a/src/thirdparty/gperftools-2.0/src/profile-handler.cc b/src/thirdparty/gperftools-2.0/src/profile-handler.cc new file mode 100644 index 000000000..20e5cca90 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/profile-handler.cc @@ -0,0 +1,555 @@ +// Copyright (c) 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// Nabeel Mian +// +// Implements management of profile timers and the corresponding signal handler. + +#include "config.h" +#include "profile-handler.h" + +#if !(defined(__CYGWIN__) || defined(__CYGWIN32__)) + +#include +#include +#include + +#include +#include + +#include "base/dynamic_annotations.h" +#include "base/googleinit.h" +#include "base/logging.h" +#include "base/spinlock.h" +#include "maybe_threads.h" + +using std::list; +using std::string; + +// This structure is used by ProfileHandlerRegisterCallback and +// ProfileHandlerUnregisterCallback as a handle to a registered callback. +struct ProfileHandlerToken { + // Sets the callback and associated arg. + ProfileHandlerToken(ProfileHandlerCallback cb, void* cb_arg) + : callback(cb), + callback_arg(cb_arg) { + } + + // Callback function to be invoked on receiving a profile timer interrupt. + ProfileHandlerCallback callback; + // Argument for the callback function. + void* callback_arg; +}; + +// This class manages profile timers and associated signal handler. This is a +// a singleton. +class ProfileHandler { + public: + // Registers the current thread with the profile handler. On systems which + // have a separate interval timer for each thread, this function starts the + // timer for the current thread. + // + // The function also attempts to determine whether or not timers are shared by + // all threads in the process. (With LinuxThreads, and with NPTL on some + // Linux kernel versions, each thread has separate timers.) + // + // Prior to determining whether timers are shared, this function will + // unconditionally start the timer. However, if this function determines + // that timers are shared, then it will stop the timer if no callbacks are + // currently registered. + void RegisterThread(); + + // Registers a callback routine to receive profile timer ticks. The returned + // token is to be used when unregistering this callback and must not be + // deleted by the caller. Registration of the first callback enables the + // SIGPROF handler (or SIGALRM if using ITIMER_REAL). + ProfileHandlerToken* RegisterCallback(ProfileHandlerCallback callback, + void* callback_arg); + + // Unregisters a previously registered callback. Expects the token returned + // by the corresponding RegisterCallback routine. Unregistering the last + // callback disables the SIGPROF handler (or SIGALRM if using ITIMER_REAL). + void UnregisterCallback(ProfileHandlerToken* token) + NO_THREAD_SAFETY_ANALYSIS; + + // Unregisters all the callbacks, stops the timer if shared, disables the + // SIGPROF (or SIGALRM) handler and clears the timer_sharing_ state. + void Reset(); + + // Gets the current state of profile handler. + void GetState(ProfileHandlerState* state); + + // Initializes and returns the ProfileHandler singleton. + static ProfileHandler* Instance(); + + private: + ProfileHandler(); + ~ProfileHandler(); + + // Largest allowed frequency. + static const int32 kMaxFrequency = 4000; + // Default frequency. + static const int32 kDefaultFrequency = 100; + + // ProfileHandler singleton. + static ProfileHandler* instance_; + + // pthread_once_t for one time initialization of ProfileHandler singleton. + static pthread_once_t once_; + + // Initializes the ProfileHandler singleton via GoogleOnceInit. + static void Init(); + + // The number of SIGPROF (or SIGALRM for ITIMER_REAL) interrupts received. + int64 interrupts_ GUARDED_BY(signal_lock_); + + // SIGPROF/SIGALRM interrupt frequency, read-only after construction. + int32 frequency_; + + // ITIMER_PROF (which uses SIGPROF), or ITIMER_REAL (which uses SIGALRM) + int timer_type_; + + // Counts the number of callbacks registered. + int32 callback_count_ GUARDED_BY(control_lock_); + + // Is profiling allowed at all? + bool allowed_; + + // Whether or not the threading system provides interval timers that are + // shared by all threads in a process. + enum { + // No timer initialization attempted yet. + TIMERS_UNTOUCHED, + // First thread has registered and set timer. + TIMERS_ONE_SET, + // Timers are shared by all threads. + TIMERS_SHARED, + // Timers are separate in each thread. + TIMERS_SEPARATE + } timer_sharing_ GUARDED_BY(control_lock_); + + // This lock serializes the registration of threads and protects the + // callbacks_ list below. + // Locking order: + // In the context of a signal handler, acquire signal_lock_ to walk the + // callback list. Otherwise, acquire control_lock_, disable the signal + // handler and then acquire signal_lock_. + SpinLock control_lock_ ACQUIRED_BEFORE(signal_lock_); + SpinLock signal_lock_; + + // Holds the list of registered callbacks. We expect the list to be pretty + // small. Currently, the cpu profiler (base/profiler) and thread module + // (base/thread.h) are the only two components registering callbacks. + // Following are the locking requirements for callbacks_: + // For read-write access outside the SIGPROF handler: + // - Acquire control_lock_ + // - Disable SIGPROF handler. + // - Acquire signal_lock_ + // For read-only access in the context of SIGPROF handler + // (Read-write access is *not allowed* in the SIGPROF handler) + // - Acquire signal_lock_ + // For read-only access outside SIGPROF handler: + // - Acquire control_lock_ + typedef list CallbackList; + typedef CallbackList::iterator CallbackIterator; + CallbackList callbacks_ GUARDED_BY(signal_lock_); + + // Starts the interval timer. If the thread library shares timers between + // threads, this function starts the shared timer. Otherwise, this will start + // the timer in the current thread. + void StartTimer() EXCLUSIVE_LOCKS_REQUIRED(control_lock_); + + // Stops the interval timer. If the thread library shares timers between + // threads, this fucntion stops the shared timer. Otherwise, this will stop + // the timer in the current thread. + void StopTimer() EXCLUSIVE_LOCKS_REQUIRED(control_lock_); + + // Returns true if the profile interval timer is enabled in the current + // thread. This actually checks the kernel's interval timer setting. (It is + // used to detect whether timers are shared or separate.) + bool IsTimerRunning() EXCLUSIVE_LOCKS_REQUIRED(control_lock_); + + // Sets the timer interrupt signal handler. + void EnableHandler() EXCLUSIVE_LOCKS_REQUIRED(control_lock_); + + // Disables (ignores) the timer interrupt signal. + void DisableHandler() EXCLUSIVE_LOCKS_REQUIRED(control_lock_); + + // Returns true if the handler is not being used by something else. + // This checks the kernel's signal handler table. + bool IsSignalHandlerAvailable(); + + // SIGPROF/SIGALRM handler. Iterate over and call all the registered callbacks. + static void SignalHandler(int sig, siginfo_t* sinfo, void* ucontext); + + DISALLOW_COPY_AND_ASSIGN(ProfileHandler); +}; + +ProfileHandler* ProfileHandler::instance_ = NULL; +pthread_once_t ProfileHandler::once_ = PTHREAD_ONCE_INIT; + +const int32 ProfileHandler::kMaxFrequency; +const int32 ProfileHandler::kDefaultFrequency; + +// If we are LD_PRELOAD-ed against a non-pthreads app, then +// pthread_once won't be defined. We declare it here, for that +// case (with weak linkage) which will cause the non-definition to +// resolve to NULL. We can then check for NULL or not in Instance. +extern "C" int pthread_once(pthread_once_t *, void (*)(void)) + ATTRIBUTE_WEAK; + +void ProfileHandler::Init() { + instance_ = new ProfileHandler(); +} + +ProfileHandler* ProfileHandler::Instance() { + if (pthread_once) { + pthread_once(&once_, Init); + } + if (instance_ == NULL) { + // This will be true on systems that don't link in pthreads, + // including on FreeBSD where pthread_once has a non-zero address + // (but doesn't do anything) even when pthreads isn't linked in. + Init(); + assert(instance_ != NULL); + } + return instance_; +} + +ProfileHandler::ProfileHandler() + : interrupts_(0), + callback_count_(0), + allowed_(true), + timer_sharing_(TIMERS_UNTOUCHED) { + SpinLockHolder cl(&control_lock_); + + timer_type_ = (getenv("CPUPROFILE_REALTIME") ? ITIMER_REAL : ITIMER_PROF); + + // Get frequency of interrupts (if specified) + char junk; + const char* fr = getenv("CPUPROFILE_FREQUENCY"); + if (fr != NULL && (sscanf(fr, "%u%c", &frequency_, &junk) == 1) && + (frequency_ > 0)) { + // Limit to kMaxFrequency + frequency_ = (frequency_ > kMaxFrequency) ? kMaxFrequency : frequency_; + } else { + frequency_ = kDefaultFrequency; + } + + if (!allowed_) { + return; + } + + // If something else is using the signal handler, + // assume it has priority over us and stop. + if (!IsSignalHandlerAvailable()) { + RAW_LOG(INFO, "Disabling profiler because %s handler is already in use.", + timer_type_ == ITIMER_REAL ? "SIGALRM" : "SIGPROF"); + allowed_ = false; + return; + } + + // Ignore signals until we decide to turn profiling on. (Paranoia; + // should already be ignored.) + DisableHandler(); +} + +ProfileHandler::~ProfileHandler() { + Reset(); +} + +void ProfileHandler::RegisterThread() { + SpinLockHolder cl(&control_lock_); + + if (!allowed_) { + return; + } + + // We try to detect whether timers are being shared by setting a + // timer in the first call to this function, then checking whether + // it's set in the second call. + // + // Note that this detection method requires that the first two calls + // to RegisterThread must be made from different threads. (Subsequent + // calls will see timer_sharing_ set to either TIMERS_SEPARATE or + // TIMERS_SHARED, and won't try to detect the timer sharing type.) + // + // Also note that if timer settings were inherited across new thread + // creation but *not* shared, this approach wouldn't work. That's + // not an issue for any Linux threading implementation, and should + // not be a problem for a POSIX-compliant threads implementation. + switch (timer_sharing_) { + case TIMERS_UNTOUCHED: + StartTimer(); + timer_sharing_ = TIMERS_ONE_SET; + break; + case TIMERS_ONE_SET: + // If the timer is running, that means that the main thread's + // timer setup is seen in this (second) thread -- and therefore + // that timers are shared. + if (IsTimerRunning()) { + timer_sharing_ = TIMERS_SHARED; + // If callback is already registered, we have to keep the timer + // running. If not, we disable the timer here. + if (callback_count_ == 0) { + StopTimer(); + } + } else { + timer_sharing_ = TIMERS_SEPARATE; + StartTimer(); + } + break; + case TIMERS_SHARED: + // Nothing needed. + break; + case TIMERS_SEPARATE: + StartTimer(); + break; + } +} + +ProfileHandlerToken* ProfileHandler::RegisterCallback( + ProfileHandlerCallback callback, void* callback_arg) { + + ProfileHandlerToken* token = new ProfileHandlerToken(callback, callback_arg); + + SpinLockHolder cl(&control_lock_); + DisableHandler(); + { + SpinLockHolder sl(&signal_lock_); + callbacks_.push_back(token); + } + // Start the timer if timer is shared and this is a first callback. + if ((callback_count_ == 0) && (timer_sharing_ == TIMERS_SHARED)) { + StartTimer(); + } + ++callback_count_; + EnableHandler(); + return token; +} + +void ProfileHandler::UnregisterCallback(ProfileHandlerToken* token) { + SpinLockHolder cl(&control_lock_); + for (CallbackIterator it = callbacks_.begin(); it != callbacks_.end(); + ++it) { + if ((*it) == token) { + RAW_CHECK(callback_count_ > 0, "Invalid callback count"); + DisableHandler(); + { + SpinLockHolder sl(&signal_lock_); + delete *it; + callbacks_.erase(it); + } + --callback_count_; + if (callback_count_ > 0) { + EnableHandler(); + } else if (timer_sharing_ == TIMERS_SHARED) { + StopTimer(); + } + return; + } + } + // Unknown token. + RAW_LOG(FATAL, "Invalid token"); +} + +void ProfileHandler::Reset() { + SpinLockHolder cl(&control_lock_); + DisableHandler(); + { + SpinLockHolder sl(&signal_lock_); + CallbackIterator it = callbacks_.begin(); + while (it != callbacks_.end()) { + CallbackIterator tmp = it; + ++it; + delete *tmp; + callbacks_.erase(tmp); + } + } + callback_count_ = 0; + if (timer_sharing_ == TIMERS_SHARED) { + StopTimer(); + } + timer_sharing_ = TIMERS_UNTOUCHED; +} + +void ProfileHandler::GetState(ProfileHandlerState* state) { + SpinLockHolder cl(&control_lock_); + DisableHandler(); + { + SpinLockHolder sl(&signal_lock_); // Protects interrupts_. + state->interrupts = interrupts_; + } + if (callback_count_ > 0) { + EnableHandler(); + } + state->frequency = frequency_; + state->callback_count = callback_count_; + state->allowed = allowed_; +} + +void ProfileHandler::StartTimer() { + if (!allowed_) { + return; + } + struct itimerval timer; + timer.it_interval.tv_sec = 0; + timer.it_interval.tv_usec = 1000000 / frequency_; + timer.it_value = timer.it_interval; + setitimer(timer_type_, &timer, 0); +} + +void ProfileHandler::StopTimer() { + if (!allowed_) { + return; + } + struct itimerval timer; + memset(&timer, 0, sizeof timer); + setitimer(timer_type_, &timer, 0); +} + +bool ProfileHandler::IsTimerRunning() { + if (!allowed_) { + return false; + } + struct itimerval current_timer; + RAW_CHECK(0 == getitimer(timer_type_, ¤t_timer), "getitimer"); + return (current_timer.it_value.tv_sec != 0 || + current_timer.it_value.tv_usec != 0); +} + +void ProfileHandler::EnableHandler() { + if (!allowed_) { + return; + } + struct sigaction sa; + sa.sa_sigaction = SignalHandler; + sa.sa_flags = SA_RESTART | SA_SIGINFO; + sigemptyset(&sa.sa_mask); + const int signal_number = (timer_type_ == ITIMER_PROF ? SIGPROF : SIGALRM); + RAW_CHECK(sigaction(signal_number, &sa, NULL) == 0, "sigprof (enable)"); +} + +void ProfileHandler::DisableHandler() { + if (!allowed_) { + return; + } + struct sigaction sa; + sa.sa_handler = SIG_IGN; + sa.sa_flags = SA_RESTART; + sigemptyset(&sa.sa_mask); + const int signal_number = (timer_type_ == ITIMER_PROF ? SIGPROF : SIGALRM); + RAW_CHECK(sigaction(signal_number, &sa, NULL) == 0, "sigprof (disable)"); +} + +bool ProfileHandler::IsSignalHandlerAvailable() { + struct sigaction sa; + const int signal_number = (timer_type_ == ITIMER_PROF ? SIGPROF : SIGALRM); + RAW_CHECK(sigaction(signal_number, NULL, &sa) == 0, "is-signal-handler avail"); + + // We only take over the handler if the current one is unset. + // It must be SIG_IGN or SIG_DFL, not some other function. + // SIG_IGN must be allowed because when profiling is allowed but + // not actively in use, this code keeps the handler set to SIG_IGN. + // That setting will be inherited across fork+exec. In order for + // any child to be able to use profiling, SIG_IGN must be treated + // as available. + return sa.sa_handler == SIG_IGN || sa.sa_handler == SIG_DFL; +} + +void ProfileHandler::SignalHandler(int sig, siginfo_t* sinfo, void* ucontext) { + int saved_errno = errno; + // At this moment, instance_ must be initialized because the handler is + // enabled in RegisterThread or RegisterCallback only after + // ProfileHandler::Instance runs. + ProfileHandler* instance = ANNOTATE_UNPROTECTED_READ(instance_); + RAW_CHECK(instance != NULL, "ProfileHandler is not initialized"); + { + SpinLockHolder sl(&instance->signal_lock_); + ++instance->interrupts_; + for (CallbackIterator it = instance->callbacks_.begin(); + it != instance->callbacks_.end(); + ++it) { + (*it)->callback(sig, sinfo, ucontext, (*it)->callback_arg); + } + } + errno = saved_errno; +} + +// This module initializer registers the main thread, so it must be +// executed in the context of the main thread. +REGISTER_MODULE_INITIALIZER(profile_main, ProfileHandlerRegisterThread()); + +extern "C" void ProfileHandlerRegisterThread() { + ProfileHandler::Instance()->RegisterThread(); +} + +extern "C" ProfileHandlerToken* ProfileHandlerRegisterCallback( + ProfileHandlerCallback callback, void* callback_arg) { + return ProfileHandler::Instance()->RegisterCallback(callback, callback_arg); +} + +extern "C" void ProfileHandlerUnregisterCallback(ProfileHandlerToken* token) { + ProfileHandler::Instance()->UnregisterCallback(token); +} + +extern "C" void ProfileHandlerReset() { + return ProfileHandler::Instance()->Reset(); +} + +extern "C" void ProfileHandlerGetState(ProfileHandlerState* state) { + ProfileHandler::Instance()->GetState(state); +} + +#else // OS_CYGWIN + +// ITIMER_PROF doesn't work under cygwin. ITIMER_REAL is available, but doesn't +// work as well for profiling, and also interferes with alarm(). Because of +// these issues, unless a specific need is identified, profiler support is +// disabled under Cygwin. +extern "C" void ProfileHandlerRegisterThread() { +} + +extern "C" ProfileHandlerToken* ProfileHandlerRegisterCallback( + ProfileHandlerCallback callback, void* callback_arg) { + return NULL; +} + +extern "C" void ProfileHandlerUnregisterCallback(ProfileHandlerToken* token) { +} + +extern "C" void ProfileHandlerReset() { +} + +extern "C" void ProfileHandlerGetState(ProfileHandlerState* state) { +} + +#endif // OS_CYGWIN diff --git a/src/thirdparty/gperftools-2.0/src/profile-handler.h b/src/thirdparty/gperftools-2.0/src/profile-handler.h new file mode 100644 index 000000000..4b078ecf5 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/profile-handler.h @@ -0,0 +1,148 @@ +/* Copyright (c) 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Nabeel Mian + * + * This module manages the cpu profile timers and the associated interrupt + * handler. When enabled, all registered threads in the program are profiled. + * (Note: if using linux 2.4 or earlier, you must use the Thread class, in + * google3/thread, to ensure all threads are profiled.) + * + * Any component interested in receiving a profile timer interrupt can do so by + * registering a callback. All registered callbacks must be async-signal-safe. + * + * Note: This module requires the sole ownership of ITIMER_PROF timer and the + * SIGPROF signal. + */ + +#ifndef BASE_PROFILE_HANDLER_H_ +#define BASE_PROFILE_HANDLER_H_ + +#include "config.h" +#include +#ifdef COMPILER_MSVC +#include "conflict-signal.h" +#endif +#include "base/basictypes.h" + +/* All this code should be usable from within C apps. */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declaration. */ +struct ProfileHandlerToken; + +/* + * Callback function to be used with ProfilefHandlerRegisterCallback. This + * function will be called in the context of SIGPROF signal handler and must + * be async-signal-safe. The first three arguments are the values provided by + * the SIGPROF signal handler. We use void* to avoid using ucontext_t on + * non-POSIX systems. + * + * Requirements: + * - Callback must be async-signal-safe. + * - None of the functions in ProfileHandler are async-signal-safe. Therefore, + * callback function *must* not call any of the ProfileHandler functions. + * - Callback is not required to be re-entrant. At most one instance of + * callback can run at a time. + * + * Notes: + * - The SIGPROF signal handler saves and restores errno, so the callback + * doesn't need to. + * - Callback code *must* not acquire lock(s) to serialize access to data shared + * with the code outside the signal handler (callback must be + * async-signal-safe). If such a serialization is needed, follow the model + * used by profiler.cc: + * + * When code other than the signal handler modifies the shared data it must: + * - Acquire lock. + * - Unregister the callback with the ProfileHandler. + * - Modify shared data. + * - Re-register the callback. + * - Release lock. + * and the callback code gets a lockless, read-write access to the data. + */ +typedef void (*ProfileHandlerCallback)(int sig, siginfo_t* sig_info, + void* ucontext, void* callback_arg); + +/* + * Registers a new thread with profile handler and should be called only once + * per thread. The main thread is registered at program startup. This routine + * is called by the Thread module in google3/thread whenever a new thread is + * created. This function is not async-signal-safe. + */ +void ProfileHandlerRegisterThread(); + +/* + * Registers a callback routine. This callback function will be called in the + * context of SIGPROF handler, so must be async-signal-safe. The returned token + * is to be used when unregistering this callback via + * ProfileHandlerUnregisterCallback. Registering the first callback enables + * the SIGPROF signal handler. Caller must not free the returned token. This + * function is not async-signal-safe. + */ +ProfileHandlerToken* ProfileHandlerRegisterCallback( + ProfileHandlerCallback callback, void* callback_arg); + +/* + * Unregisters a previously registered callback. Expects the token returned + * by the corresponding ProfileHandlerRegisterCallback and asserts that the + * passed token is valid. Unregistering the last callback disables the SIGPROF + * signal handler. It waits for the currently running callback to + * complete before returning. This function is not async-signal-safe. + */ +void ProfileHandlerUnregisterCallback(ProfileHandlerToken* token); + +/* + * FOR TESTING ONLY + * Unregisters all the callbacks, stops the timers (if shared) and disables the + * SIGPROF handler. All the threads, including the main thread, need to be + * re-registered after this call. This function is not async-signal-safe. + */ +void ProfileHandlerReset(); + +/* + * Stores profile handler's current state. This function is not + * async-signal-safe. + */ +struct ProfileHandlerState { + int32 frequency; /* Profiling frequency */ + int32 callback_count; /* Number of callbacks registered */ + int64 interrupts; /* Number of interrupts received */ + bool allowed; /* Profiling is allowed */ +}; +void ProfileHandlerGetState(struct ProfileHandlerState* state); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* BASE_PROFILE_HANDLER_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/profiledata.cc b/src/thirdparty/gperftools-2.0/src/profiledata.cc new file mode 100644 index 000000000..5f2531bbb --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/profiledata.cc @@ -0,0 +1,331 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// --- +// Author: Sanjay Ghemawat +// Chris Demetriou (refactoring) +// +// Collect profiling data. + +#include +#include +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include +#include + +#include "profiledata.h" + +#include "base/logging.h" +#include "base/sysinfo.h" + +// All of these are initialized in profiledata.h. +const int ProfileData::kMaxStackDepth; +const int ProfileData::kAssociativity; +const int ProfileData::kBuckets; +const int ProfileData::kBufferLength; + +ProfileData::Options::Options() + : frequency_(1) { +} + +// This function is safe to call from asynchronous signals (but is not +// re-entrant). However, that's not part of its public interface. +void ProfileData::Evict(const Entry& entry) { + const int d = entry.depth; + const int nslots = d + 2; // Number of slots needed in eviction buffer + if (num_evicted_ + nslots > kBufferLength) { + FlushEvicted(); + assert(num_evicted_ == 0); + assert(nslots <= kBufferLength); + } + evict_[num_evicted_++] = entry.count; + evict_[num_evicted_++] = d; + memcpy(&evict_[num_evicted_], entry.stack, d * sizeof(Slot)); + num_evicted_ += d; +} + +ProfileData::ProfileData() + : hash_(0), + evict_(0), + num_evicted_(0), + out_(-1), + count_(0), + evictions_(0), + total_bytes_(0), + fname_(0), + start_time_(0) { +} + +bool ProfileData::Start(const char* fname, + const ProfileData::Options& options) { + if (enabled()) { + return false; + } + + // Open output file and initialize various data structures + int fd = open(fname, O_CREAT | O_WRONLY | O_TRUNC, 0666); + if (fd < 0) { + // Can't open outfile for write + return false; + } + + start_time_ = time(NULL); + fname_ = strdup(fname); + + // Reset counters + num_evicted_ = 0; + count_ = 0; + evictions_ = 0; + total_bytes_ = 0; + + hash_ = new Bucket[kBuckets]; + evict_ = new Slot[kBufferLength]; + memset(hash_, 0, sizeof(hash_[0]) * kBuckets); + + // Record special entries + evict_[num_evicted_++] = 0; // count for header + evict_[num_evicted_++] = 3; // depth for header + evict_[num_evicted_++] = 0; // Version number + CHECK_NE(0, options.frequency()); + int period = 1000000 / options.frequency(); + evict_[num_evicted_++] = period; // Period (microseconds) + evict_[num_evicted_++] = 0; // Padding + + out_ = fd; + + return true; +} + +ProfileData::~ProfileData() { + Stop(); +} + +// Dump /proc/maps data to fd. Copied from heap-profile-table.cc. +#define NO_INTR(fn) do {} while ((fn) < 0 && errno == EINTR) + +static void FDWrite(int fd, const char* buf, size_t len) { + while (len > 0) { + ssize_t r; + NO_INTR(r = write(fd, buf, len)); + RAW_CHECK(r >= 0, "write failed"); + buf += r; + len -= r; + } +} + +static void DumpProcSelfMaps(int fd) { + ProcMapsIterator::Buffer iterbuf; + ProcMapsIterator it(0, &iterbuf); // 0 means "current pid" + + uint64 start, end, offset; + int64 inode; + char *flags, *filename; + ProcMapsIterator::Buffer linebuf; + while (it.Next(&start, &end, &flags, &offset, &inode, &filename)) { + int written = it.FormatLine(linebuf.buf_, sizeof(linebuf.buf_), + start, end, flags, offset, inode, filename, + 0); + FDWrite(fd, linebuf.buf_, written); + } +} + +void ProfileData::Stop() { + if (!enabled()) { + return; + } + + // Move data from hash table to eviction buffer + for (int b = 0; b < kBuckets; b++) { + Bucket* bucket = &hash_[b]; + for (int a = 0; a < kAssociativity; a++) { + if (bucket->entry[a].count > 0) { + Evict(bucket->entry[a]); + } + } + } + + if (num_evicted_ + 3 > kBufferLength) { + // Ensure there is enough room for end of data marker + FlushEvicted(); + } + + // Write end of data marker + evict_[num_evicted_++] = 0; // count + evict_[num_evicted_++] = 1; // depth + evict_[num_evicted_++] = 0; // end of data marker + FlushEvicted(); + + // Dump "/proc/self/maps" so we get list of mapped shared libraries + DumpProcSelfMaps(out_); + + Reset(); + fprintf(stderr, "PROFILE: interrupts/evictions/bytes = %d/%d/%" PRIuS "\n", + count_, evictions_, total_bytes_); +} + +void ProfileData::Reset() { + if (!enabled()) { + return; + } + + // Don't reset count_, evictions_, or total_bytes_ here. They're used + // by Stop to print information about the profile after reset, and are + // cleared by Start when starting a new profile. + close(out_); + delete[] hash_; + hash_ = 0; + delete[] evict_; + evict_ = 0; + num_evicted_ = 0; + free(fname_); + fname_ = 0; + start_time_ = 0; + + out_ = -1; +} + +// This function is safe to call from asynchronous signals (but is not +// re-entrant). However, that's not part of its public interface. +void ProfileData::GetCurrentState(State* state) const { + if (enabled()) { + state->enabled = true; + state->start_time = start_time_; + state->samples_gathered = count_; + int buf_size = sizeof(state->profile_name); + strncpy(state->profile_name, fname_, buf_size); + state->profile_name[buf_size-1] = '\0'; + } else { + state->enabled = false; + state->start_time = 0; + state->samples_gathered = 0; + state->profile_name[0] = '\0'; + } +} + +// This function is safe to call from asynchronous signals (but is not +// re-entrant). However, that's not part of its public interface. +void ProfileData::FlushTable() { + if (!enabled()) { + return; + } + + // Move data from hash table to eviction buffer + for (int b = 0; b < kBuckets; b++) { + Bucket* bucket = &hash_[b]; + for (int a = 0; a < kAssociativity; a++) { + if (bucket->entry[a].count > 0) { + Evict(bucket->entry[a]); + bucket->entry[a].depth = 0; + bucket->entry[a].count = 0; + } + } + } + + // Write out all pending data + FlushEvicted(); +} + +void ProfileData::Add(int depth, const void* const* stack) { + if (!enabled()) { + return; + } + + if (depth > kMaxStackDepth) depth = kMaxStackDepth; + RAW_CHECK(depth > 0, "ProfileData::Add depth <= 0"); + + // Make hash-value + Slot h = 0; + for (int i = 0; i < depth; i++) { + Slot slot = reinterpret_cast(stack[i]); + h = (h << 8) | (h >> (8*(sizeof(h)-1))); + h += (slot * 31) + (slot * 7) + (slot * 3); + } + + count_++; + + // See if table already has an entry for this trace + bool done = false; + Bucket* bucket = &hash_[h % kBuckets]; + for (int a = 0; a < kAssociativity; a++) { + Entry* e = &bucket->entry[a]; + if (e->depth == depth) { + bool match = true; + for (int i = 0; i < depth; i++) { + if (e->stack[i] != reinterpret_cast(stack[i])) { + match = false; + break; + } + } + if (match) { + e->count++; + done = true; + break; + } + } + } + + if (!done) { + // Evict entry with smallest count + Entry* e = &bucket->entry[0]; + for (int a = 1; a < kAssociativity; a++) { + if (bucket->entry[a].count < e->count) { + e = &bucket->entry[a]; + } + } + if (e->count > 0) { + evictions_++; + Evict(*e); + } + + // Use the newly evicted entry + e->depth = depth; + e->count = 1; + for (int i = 0; i < depth; i++) { + e->stack[i] = reinterpret_cast(stack[i]); + } + } +} + +// This function is safe to call from asynchronous signals (but is not +// re-entrant). However, that's not part of its public interface. +void ProfileData::FlushEvicted() { + if (num_evicted_ > 0) { + const char* buf = reinterpret_cast(evict_); + size_t bytes = sizeof(evict_[0]) * num_evicted_; + total_bytes_ += bytes; + FDWrite(out_, buf, bytes); + } + num_evicted_ = 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/profiledata.h b/src/thirdparty/gperftools-2.0/src/profiledata.h new file mode 100644 index 000000000..3521bac35 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/profiledata.h @@ -0,0 +1,183 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// --- +// Author: Sanjay Ghemawat +// Chris Demetriou (refactoring) +// +// Collect profiling data. +// +// The profile data file format is documented in +// doc/cpuprofile-fileformat.html + + +#ifndef BASE_PROFILEDATA_H_ +#define BASE_PROFILEDATA_H_ + +#include +#include // for time_t +#include +#include "base/basictypes.h" + +// A class that accumulates profile samples and writes them to a file. +// +// Each sample contains a stack trace and a count. Memory usage is +// reduced by combining profile samples that have the same stack trace +// by adding up the associated counts. +// +// Profile data is accumulated in a bounded amount of memory, and will +// flushed to a file as necessary to stay within the memory limit. +// +// Use of this class assumes external synchronization. The exact +// requirements of that synchronization are that: +// +// - 'Add' may be called from asynchronous signals, but is not +// re-entrant. +// +// - None of 'Start', 'Stop', 'Reset', 'Flush', and 'Add' may be +// called at the same time. +// +// - 'Start', 'Stop', or 'Reset' should not be called while 'Enabled' +// or 'GetCurrent' are running, and vice versa. +// +// A profiler which uses asyncronous signals to add samples will +// typically use two locks to protect this data structure: +// +// - A SpinLock which is held over all calls except for the 'Add' +// call made from the signal handler. +// +// - A SpinLock which is held over calls to 'Start', 'Stop', 'Reset', +// 'Flush', and 'Add'. (This SpinLock should be acquired after +// the first SpinLock in all cases where both are needed.) +class ProfileData { + public: + struct State { + bool enabled; // Is profiling currently enabled? + time_t start_time; // If enabled, when was profiling started? + char profile_name[1024]; // Name of file being written, or '\0' + int samples_gathered; // Number of samples gathered to far (or 0) + }; + + class Options { + public: + Options(); + + // Get and set the sample frequency. + int frequency() const { + return frequency_; + } + void set_frequency(int frequency) { + frequency_ = frequency; + } + + private: + int frequency_; // Sample frequency. + }; + + static const int kMaxStackDepth = 64; // Max stack depth stored in profile + + ProfileData(); + ~ProfileData(); + + // If data collection is not already enabled start to collect data + // into fname. Parameters related to this profiling run are specified + // by 'options'. + // + // Returns true if data collection could be started, otherwise (if an + // error occurred or if data collection was already enabled) returns + // false. + bool Start(const char *fname, const Options& options); + + // If data collection is enabled, stop data collection and write the + // data to disk. + void Stop(); + + // Stop data collection without writing anything else to disk, and + // discard any collected data. + void Reset(); + + // If data collection is enabled, record a sample with 'depth' + // entries from 'stack'. (depth must be > 0.) At most + // kMaxStackDepth stack entries will be recorded, starting with + // stack[0]. + // + // This function is safe to call from asynchronous signals (but is + // not re-entrant). + void Add(int depth, const void* const* stack); + + // If data collection is enabled, write the data to disk (and leave + // the collector enabled). + void FlushTable(); + + // Is data collection currently enabled? + bool enabled() const { return out_ >= 0; } + + // Get the current state of the data collector. + void GetCurrentState(State* state) const; + + private: + static const int kAssociativity = 4; // For hashtable + static const int kBuckets = 1 << 10; // For hashtable + static const int kBufferLength = 1 << 18; // For eviction buffer + + // Type of slots: each slot can be either a count, or a PC value + typedef uintptr_t Slot; + + // Hash-table/eviction-buffer entry (a.k.a. a sample) + struct Entry { + Slot count; // Number of hits + Slot depth; // Stack depth + Slot stack[kMaxStackDepth]; // Stack contents + }; + + // Hash table bucket + struct Bucket { + Entry entry[kAssociativity]; + }; + + Bucket* hash_; // hash table + Slot* evict_; // evicted entries + int num_evicted_; // how many evicted entries? + int out_; // fd for output file. + int count_; // How many samples recorded + int evictions_; // How many evictions + size_t total_bytes_; // How much output + char* fname_; // Profile file name + time_t start_time_; // Start time, or 0 + + // Move 'entry' to the eviction buffer. + void Evict(const Entry& entry); + + // Write contents of eviction buffer to disk. + void FlushEvicted(); + + DISALLOW_COPY_AND_ASSIGN(ProfileData); +}; + +#endif // BASE_PROFILEDATA_H_ diff --git a/src/thirdparty/gperftools-2.0/src/profiler.cc b/src/thirdparty/gperftools-2.0/src/profiler.cc new file mode 100644 index 000000000..dfb6aab52 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/profiler.cc @@ -0,0 +1,342 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// Chris Demetriou (refactoring) +// +// Profile current program by sampling stack-trace every so often + +#include "config.h" +#include "getpc.h" // should be first to get the _GNU_SOURCE dfn +#include +#include +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include // for getpid() +#endif +#if defined(HAVE_SYS_UCONTEXT_H) +#include +#elif defined(HAVE_UCONTEXT_H) +#include +#elif defined(HAVE_CYGWIN_SIGNAL_H) +#include +typedef ucontext ucontext_t; +#else +typedef int ucontext_t; // just to quiet the compiler, mostly +#endif +#include +#include +#include +#include +#include "base/commandlineflags.h" +#include "base/logging.h" +#include "base/googleinit.h" +#include "base/spinlock.h" +#include "base/sysinfo.h" /* for GetUniquePathFromEnv, etc */ +#include "profiledata.h" +#include "profile-handler.h" +#ifdef HAVE_CONFLICT_SIGNAL_H +#include "conflict-signal.h" /* used on msvc machines */ +#endif + +using std::string; + +// Collects up all profile data. This is a singleton, which is +// initialized by a constructor at startup. +class CpuProfiler { + public: + CpuProfiler(); + ~CpuProfiler(); + + // Start profiler to write profile info into fname + bool Start(const char* fname, const ProfilerOptions* options); + + // Stop profiling and write the data to disk. + void Stop(); + + // Write the data to disk (and continue profiling). + void FlushTable(); + + bool Enabled(); + + void GetCurrentState(ProfilerState* state); + + static CpuProfiler instance_; + + private: + // This lock implements the locking requirements described in the ProfileData + // documentation, specifically: + // + // lock_ is held all over all collector_ method calls except for the 'Add' + // call made from the signal handler, to protect against concurrent use of + // collector_'s control routines. Code other than signal handler must + // unregister the signal handler before calling any collector_ method. + // 'Add' method in the collector is protected by a guarantee from + // ProfileHandle that only one instance of prof_handler can run at a time. + SpinLock lock_; + ProfileData collector_; + + // Filter function and its argument, if any. (NULL means include all + // samples). Set at start, read-only while running. Written while holding + // lock_, read and executed in the context of SIGPROF interrupt. + int (*filter_)(void*); + void* filter_arg_; + + // Opaque token returned by the profile handler. To be used when calling + // ProfileHandlerUnregisterCallback. + ProfileHandlerToken* prof_handler_token_; + + // Sets up a callback to receive SIGPROF interrupt. + void EnableHandler(); + + // Disables receiving SIGPROF interrupt. + void DisableHandler(); + + // Signal handler that records the interrupted pc in the profile data. + static void prof_handler(int sig, siginfo_t*, void* signal_ucontext, + void* cpu_profiler); +}; + +// Profile data structure singleton: Constructor will check to see if +// profiling should be enabled. Destructor will write profile data +// out to disk. +CpuProfiler CpuProfiler::instance_; + +// Initialize profiling: activated if getenv("CPUPROFILE") exists. +CpuProfiler::CpuProfiler() + : prof_handler_token_(NULL) { + // TODO(cgd) Move this code *out* of the CpuProfile constructor into a + // separate object responsible for initialization. With ProfileHandler there + // is no need to limit the number of profilers. + char fname[PATH_MAX]; + if (!GetUniquePathFromEnv("CPUPROFILE", fname)) { + return; + } + // We don't enable profiling if setuid -- it's a security risk +#ifdef HAVE_GETEUID + if (getuid() != geteuid()) + return; +#endif + + if (!Start(fname, NULL)) { + RAW_LOG(FATAL, "Can't turn on cpu profiling for '%s': %s\n", + fname, strerror(errno)); + } +} + +bool CpuProfiler::Start(const char* fname, const ProfilerOptions* options) { + SpinLockHolder cl(&lock_); + + if (collector_.enabled()) { + return false; + } + + ProfileHandlerState prof_handler_state; + ProfileHandlerGetState(&prof_handler_state); + + ProfileData::Options collector_options; + collector_options.set_frequency(prof_handler_state.frequency); + if (!collector_.Start(fname, collector_options)) { + return false; + } + + filter_ = NULL; + if (options != NULL && options->filter_in_thread != NULL) { + filter_ = options->filter_in_thread; + filter_arg_ = options->filter_in_thread_arg; + } + + // Setup handler for SIGPROF interrupts + EnableHandler(); + + return true; +} + +CpuProfiler::~CpuProfiler() { + Stop(); +} + +// Stop profiling and write out any collected profile data +void CpuProfiler::Stop() { + SpinLockHolder cl(&lock_); + + if (!collector_.enabled()) { + return; + } + + // Unregister prof_handler to stop receiving SIGPROF interrupts before + // stopping the collector. + DisableHandler(); + + // DisableHandler waits for the currently running callback to complete and + // guarantees no future invocations. It is safe to stop the collector. + collector_.Stop(); +} + +void CpuProfiler::FlushTable() { + SpinLockHolder cl(&lock_); + + if (!collector_.enabled()) { + return; + } + + // Unregister prof_handler to stop receiving SIGPROF interrupts before + // flushing the profile data. + DisableHandler(); + + // DisableHandler waits for the currently running callback to complete and + // guarantees no future invocations. It is safe to flush the profile data. + collector_.FlushTable(); + + EnableHandler(); +} + +bool CpuProfiler::Enabled() { + SpinLockHolder cl(&lock_); + return collector_.enabled(); +} + +void CpuProfiler::GetCurrentState(ProfilerState* state) { + ProfileData::State collector_state; + { + SpinLockHolder cl(&lock_); + collector_.GetCurrentState(&collector_state); + } + + state->enabled = collector_state.enabled; + state->start_time = static_cast(collector_state.start_time); + state->samples_gathered = collector_state.samples_gathered; + int buf_size = sizeof(state->profile_name); + strncpy(state->profile_name, collector_state.profile_name, buf_size); + state->profile_name[buf_size-1] = '\0'; +} + +void CpuProfiler::EnableHandler() { + RAW_CHECK(prof_handler_token_ == NULL, "SIGPROF handler already registered"); + prof_handler_token_ = ProfileHandlerRegisterCallback(prof_handler, this); + RAW_CHECK(prof_handler_token_ != NULL, "Failed to set up SIGPROF handler"); +} + +void CpuProfiler::DisableHandler() { + RAW_CHECK(prof_handler_token_ != NULL, "SIGPROF handler is not registered"); + ProfileHandlerUnregisterCallback(prof_handler_token_); + prof_handler_token_ = NULL; +} + +// Signal handler that records the pc in the profile-data structure. We do no +// synchronization here. profile-handler.cc guarantees that at most one +// instance of prof_handler() will run at a time. All other routines that +// access the data touched by prof_handler() disable this signal handler before +// accessing the data and therefore cannot execute concurrently with +// prof_handler(). +void CpuProfiler::prof_handler(int sig, siginfo_t*, void* signal_ucontext, + void* cpu_profiler) { + CpuProfiler* instance = static_cast(cpu_profiler); + + if (instance->filter_ == NULL || + (*instance->filter_)(instance->filter_arg_)) { + void* stack[ProfileData::kMaxStackDepth]; + + // The top-most active routine doesn't show up as a normal + // frame, but as the "pc" value in the signal handler context. + stack[0] = GetPC(*reinterpret_cast(signal_ucontext)); + + // We skip the top two stack trace entries (this function and one + // signal handler frame) since they are artifacts of profiling and + // should not be measured. Other profiling related frames may be + // removed by "pprof" at analysis time. Instead of skipping the top + // frames, we could skip nothing, but that would increase the + // profile size unnecessarily. + int depth = GetStackTraceWithContext(stack + 1, arraysize(stack) - 1, + 2, signal_ucontext); + depth++; // To account for pc value in stack[0]; + + instance->collector_.Add(depth, stack); + } +} + +#if !(defined(__CYGWIN__) || defined(__CYGWIN32__)) + +extern "C" PERFTOOLS_DLL_DECL void ProfilerRegisterThread() { + ProfileHandlerRegisterThread(); +} + +extern "C" PERFTOOLS_DLL_DECL void ProfilerFlush() { + CpuProfiler::instance_.FlushTable(); +} + +extern "C" PERFTOOLS_DLL_DECL int ProfilingIsEnabledForAllThreads() { + return CpuProfiler::instance_.Enabled(); +} + +extern "C" PERFTOOLS_DLL_DECL int ProfilerStart(const char* fname) { + return CpuProfiler::instance_.Start(fname, NULL); +} + +extern "C" PERFTOOLS_DLL_DECL int ProfilerStartWithOptions( + const char *fname, const ProfilerOptions *options) { + return CpuProfiler::instance_.Start(fname, options); +} + +extern "C" PERFTOOLS_DLL_DECL void ProfilerStop() { + CpuProfiler::instance_.Stop(); +} + +extern "C" PERFTOOLS_DLL_DECL void ProfilerGetCurrentState( + ProfilerState* state) { + CpuProfiler::instance_.GetCurrentState(state); +} + +#else // OS_CYGWIN + +// ITIMER_PROF doesn't work under cygwin. ITIMER_REAL is available, but doesn't +// work as well for profiling, and also interferes with alarm(). Because of +// these issues, unless a specific need is identified, profiler support is +// disabled under Cygwin. +extern "C" void ProfilerRegisterThread() { } +extern "C" void ProfilerFlush() { } +extern "C" int ProfilingIsEnabledForAllThreads() { return 0; } +extern "C" int ProfilerStart(const char* fname) { return 0; } +extern "C" int ProfilerStartWithOptions(const char *fname, + const ProfilerOptions *options) { + return 0; +} +extern "C" void ProfilerStop() { } +extern "C" void ProfilerGetCurrentState(ProfilerState* state) { + memset(state, 0, sizeof(*state)); +} + +#endif // OS_CYGWIN + +// DEPRECATED routines +extern "C" PERFTOOLS_DLL_DECL void ProfilerEnable() { } +extern "C" PERFTOOLS_DLL_DECL void ProfilerDisable() { } diff --git a/src/thirdparty/gperftools-2.0/src/raw_printer.cc b/src/thirdparty/gperftools-2.0/src/raw_printer.cc new file mode 100644 index 000000000..730d6e28e --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/raw_printer.cc @@ -0,0 +1,71 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: sanjay@google.com (Sanjay Ghemawat) + +#include +#include +#include +#include "raw_printer.h" +#include "base/logging.h" + +namespace base { + +RawPrinter::RawPrinter(char* buf, int length) + : base_(buf), + ptr_(buf), + limit_(buf + length - 1) { + RAW_DCHECK(length > 0, ""); + *ptr_ = '\0'; + *limit_ = '\0'; +} + +void RawPrinter::Printf(const char* format, ...) { + if (limit_ > ptr_) { + va_list ap; + va_start(ap, format); + int avail = limit_ - ptr_; + // We pass avail+1 to vsnprintf() since that routine needs room + // to store the trailing \0. + const int r = perftools_vsnprintf(ptr_, avail+1, format, ap); + va_end(ap); + if (r < 0) { + // Perhaps an old glibc that returns -1 on truncation? + ptr_ = limit_; + } else if (r > avail) { + // Truncation + ptr_ = limit_; + } else { + ptr_ += r; + } + } +} + +} diff --git a/src/thirdparty/gperftools-2.0/src/raw_printer.h b/src/thirdparty/gperftools-2.0/src/raw_printer.h new file mode 100644 index 000000000..62340bb37 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/raw_printer.h @@ -0,0 +1,89 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// A printf() wrapper that writes into a fixed length buffer. +// Useful in low-level code that does not want to use allocating +// routines like StringPrintf(). +// +// The implementation currently uses vsnprintf(). This seems to +// be fine for use in many low-level contexts, but we may need to +// rethink this decision if we hit a problem with it calling +// down into malloc() etc. + +#ifndef BASE_RAW_PRINTER_H_ +#define BASE_RAW_PRINTER_H_ + +#include +#include "base/basictypes.h" + +namespace base { + +class RawPrinter { + public: + // REQUIRES: "length > 0" + // Will printf any data added to this into "buf[0,length-1]" and + // will arrange to always keep buf[] null-terminated. + RawPrinter(char* buf, int length); + + // Return the number of bytes that have been appended to the string + // so far. Does not count any bytes that were dropped due to overflow. + int length() const { return (ptr_ - base_); } + + // Return the number of bytes that can be added to this. + int space_left() const { return (limit_ - ptr_); } + + // Format the supplied arguments according to the "format" string + // and append to this. Will silently truncate the output if it does + // not fit. + void Printf(const char* format, ...) +#ifdef HAVE___ATTRIBUTE__ + __attribute__ ((__format__ (__printf__, 2, 3))) +#endif +; + + private: + // We can write into [ptr_ .. limit_-1]. + // *limit_ is also writable, but reserved for a terminating \0 + // in case we overflow. + // + // Invariants: *ptr_ == \0 + // Invariants: *limit_ == \0 + char* base_; // Initial pointer + char* ptr_; // Where should we write next + char* limit_; // One past last non-\0 char we can write + + DISALLOW_COPY_AND_ASSIGN(RawPrinter); +}; + +} + +#endif // BASE_RAW_PRINTER_H_ diff --git a/src/thirdparty/gperftools-2.0/src/sampler.cc b/src/thirdparty/gperftools-2.0/src/sampler.cc new file mode 100755 index 000000000..0ea6df150 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/sampler.cc @@ -0,0 +1,130 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// All Rights Reserved. +// +// Author: Daniel Ford + +#include "sampler.h" + +#include // For min() +#include +#include "base/commandlineflags.h" + +using std::min; + +// The approximate gap in bytes between sampling actions. +// I.e., we take one sample approximately once every +// tcmalloc_sample_parameter bytes of allocation +// i.e. about once every 512KB if value is 1<<19. +#ifdef NO_TCMALLOC_SAMPLES +DEFINE_int64(tcmalloc_sample_parameter, 0, + "Unused: code is compiled with NO_TCMALLOC_SAMPLES"); +#else +DEFINE_int64(tcmalloc_sample_parameter, + EnvToInt64("TCMALLOC_SAMPLE_PARAMETER", 0), + "The approximate gap in bytes between sampling actions. " + "This must be between 1 and 2^58."); +#endif + +namespace tcmalloc { + +// Statics for Sampler +double Sampler::log_table_[1<(i+0.5)/(1<(reinterpret_cast(this)); + if (rnd_ == 0) { + rnd_ = 1; + } + } + // Step it forward 20 times for good measure + for (int i = 0; i < 20; i++) { + rnd_ = NextRandom(rnd_); + } + // Initialize counter + bytes_until_sample_ = PickNextSamplingPoint(); +} + +// Initialize the Statics for the Sampler class +void Sampler::InitStatics() { + PopulateFastLog2Table(); +} + +// Generates a geometric variable with the specified mean (512K by default). +// This is done by generating a random number between 0 and 1 and applying +// the inverse cumulative distribution function for an exponential. +// Specifically: Let m be the inverse of the sample period, then +// the probability distribution function is m*exp(-mx) so the CDF is +// p = 1 - exp(-mx), so +// q = 1 - p = exp(-mx) +// log_e(q) = -mx +// -log_e(q)/m = x +// log_2(q) * (-log_e(2) * 1/m) = x +// In the code, q is actually in the range 1 to 2**26, hence the -26 below +size_t Sampler::PickNextSamplingPoint() { + rnd_ = NextRandom(rnd_); + // Take the top 26 bits as the random number + // (This plus the 1<<58 sampling bound give a max possible step of + // 5194297183973780480 bytes.) + const uint64_t prng_mod_power = 48; // Number of bits in prng + // The uint32_t cast is to prevent a (hard-to-reproduce) NAN + // under piii debug for some binaries. + double q = static_cast(rnd_ >> (prng_mod_power - 26)) + 1.0; + // Put the computed p-value through the CDF of a geometric. + // For faster performance (save ~1/20th exec time), replace + // min(0.0, FastLog2(q) - 26) by (Fastlog2(q) - 26.000705) + // The value 26.000705 is used rather than 26 to compensate + // for inaccuracies in FastLog2 which otherwise result in a + // negative answer. + return static_cast(min(0.0, (FastLog2(q) - 26)) * (-log(2.0) + * FLAGS_tcmalloc_sample_parameter) + 1); +} + +} // namespace tcmalloc diff --git a/src/thirdparty/gperftools-2.0/src/sampler.h b/src/thirdparty/gperftools-2.0/src/sampler.h new file mode 100755 index 000000000..8e67fb024 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/sampler.h @@ -0,0 +1,179 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// All Rights Reserved. +// +// Author: Daniel Ford + +#ifndef TCMALLOC_SAMPLER_H_ +#define TCMALLOC_SAMPLER_H_ + +#include "config.h" +#include // for size_t +#ifdef HAVE_STDINT_H +#include // for uint64_t, uint32_t, int32_t +#endif +#include // for memcpy +#include "base/basictypes.h" // for ASSERT +#include "internal_logging.h" // for ASSERT + +namespace tcmalloc { + +//------------------------------------------------------------------- +// Sampler to decide when to create a sample trace for an allocation +// Not thread safe: Each thread should have it's own sampler object. +// Caller must use external synchronization if used +// from multiple threads. +// +// With 512K average sample step (the default): +// the probability of sampling a 4K allocation is about 0.00778 +// the probability of sampling a 1MB allocation is about 0.865 +// the probability of sampling a 1GB allocation is about 1.00000 +// In general, the probablity of sampling is an allocation of size X +// given a flag value of Y (default 1M) is: +// 1 - e^(-X/Y) +// +// With 128K average sample step: +// the probability of sampling a 1MB allocation is about 0.99966 +// the probability of sampling a 1GB allocation is about 1.0 +// (about 1 - 2**(-26)) +// With 1M average sample step: +// the probability of sampling a 4K allocation is about 0.00390 +// the probability of sampling a 1MB allocation is about 0.632 +// the probability of sampling a 1GB allocation is about 1.0 +// +// The sampler works by representing memory as a long stream from +// which allocations are taken. Some of the bytes in this stream are +// marked and if an allocation includes a marked byte then it is +// sampled. Bytes are marked according to a Poisson point process +// with each byte being marked independently with probability +// p = 1/tcmalloc_sample_parameter. This makes the probability +// of sampling an allocation of X bytes equal to the CDF of +// a geometric with mean tcmalloc_sample_parameter. (ie. the +// probability that at least one byte in the range is marked). This +// is accurately given by the CDF of the corresponding exponential +// distribution : 1 - e^(X/tcmalloc_sample_parameter_) +// Independence of the byte marking ensures independence of +// the sampling of each allocation. +// +// This scheme is implemented by noting that, starting from any +// fixed place, the number of bytes until the next marked byte +// is geometrically distributed. This number is recorded as +// bytes_until_sample_. Every allocation subtracts from this +// number until it is less than 0. When this happens the current +// allocation is sampled. +// +// When an allocation occurs, bytes_until_sample_ is reset to +// a new independtly sampled geometric number of bytes. The +// memoryless property of the point process means that this may +// be taken as the number of bytes after the end of the current +// allocation until the next marked byte. This ensures that +// very large allocations which would intersect many marked bytes +// only result in a single call to PickNextSamplingPoint. +//------------------------------------------------------------------- + +class PERFTOOLS_DLL_DECL Sampler { + public: + // Initialize this sampler. + // Passing a seed of 0 gives a non-deterministic + // seed value given by casting the object ("this") + void Init(uint32_t seed); + void Cleanup(); + + // Record allocation of "k" bytes. Return true iff allocation + // should be sampled + bool SampleAllocation(size_t k); + + // Generate a geometric with mean 512K (or FLAG_tcmalloc_sample_parameter) + size_t PickNextSamplingPoint(); + + // Initialize the statics for the Sampler class + static void InitStatics(); + + // Returns the current sample period + int GetSamplePeriod(); + + // The following are public for the purposes of testing + static uint64_t NextRandom(uint64_t rnd_); // Returns the next prng value + static double FastLog2(const double & d); // Computes Log2(x) quickly + static void PopulateFastLog2Table(); // Populate the lookup table + + private: + size_t bytes_until_sample_; // Bytes until we sample next + uint64_t rnd_; // Cheap random number generator + + // Statics for the fast log + // Note that this code may not depend on anything in //util + // hence the duplication of functionality here + static const int kFastlogNumBits = 10; + static const int kFastlogMask = (1 << kFastlogNumBits) - 1; + static double log_table_[1<(0)) << prng_mod_power); + return (prng_mult * rnd + prng_add) & prng_mod_mask; +} + +// Adapted from //util/math/fastmath.[h|cc] by Noam Shazeer +// This mimics the VeryFastLog2 code in those files +inline double Sampler::FastLog2(const double & d) { + ASSERT(d>0); + COMPILE_ASSERT(sizeof(d) == sizeof(uint64_t), DoubleMustBe64Bits); + uint64_t x; + memcpy(&x, &d, sizeof(x)); // we depend on the compiler inlining this + const uint32_t x_high = x >> 32; + const uint32_t y = x_high >> (20 - kFastlogNumBits) & kFastlogMask; + const int32_t exponent = ((x_high >> 20) & 0x7FF) - 1023; + return exponent + log_table_[y]; +} + +} // namespace tcmalloc + +#endif // TCMALLOC_SAMPLER_H_ diff --git a/src/thirdparty/gperftools-2.0/src/span.cc b/src/thirdparty/gperftools-2.0/src/span.cc new file mode 100644 index 000000000..760094509 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/span.cc @@ -0,0 +1,101 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#include +#include "span.h" + +#include // for NULL, memset + +#include "internal_logging.h" // for ASSERT +#include "page_heap_allocator.h" // for PageHeapAllocator +#include "static_vars.h" // for Static + +namespace tcmalloc { + +#ifdef SPAN_HISTORY +void Event(Span* span, char op, int v = 0) { + span->history[span->nexthistory] = op; + span->value[span->nexthistory] = v; + span->nexthistory++; + if (span->nexthistory == sizeof(span->history)) span->nexthistory = 0; +} +#endif + +Span* NewSpan(PageID p, Length len) { + Span* result = Static::span_allocator()->New(); + memset(result, 0, sizeof(*result)); + result->start = p; + result->length = len; +#ifdef SPAN_HISTORY + result->nexthistory = 0; +#endif + return result; +} + +void DeleteSpan(Span* span) { +#ifndef NDEBUG + // In debug mode, trash the contents of deleted Spans + memset(span, 0x3f, sizeof(*span)); +#endif + Static::span_allocator()->Delete(span); +} + +void DLL_Init(Span* list) { + list->next = list; + list->prev = list; +} + +void DLL_Remove(Span* span) { + span->prev->next = span->next; + span->next->prev = span->prev; + span->prev = NULL; + span->next = NULL; +} + +int DLL_Length(const Span* list) { + int result = 0; + for (Span* s = list->next; s != list; s = s->next) { + result++; + } + return result; +} + +void DLL_Prepend(Span* list, Span* span) { + ASSERT(span->next == NULL); + ASSERT(span->prev == NULL); + span->next = list->next; + span->prev = list; + list->next->prev = span; + list->next = span; +} + +} // namespace tcmalloc diff --git a/src/thirdparty/gperftools-2.0/src/span.h b/src/thirdparty/gperftools-2.0/src/span.h new file mode 100644 index 000000000..08db6292f --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/span.h @@ -0,0 +1,101 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// A Span is a contiguous run of pages. + +#ifndef TCMALLOC_SPAN_H_ +#define TCMALLOC_SPAN_H_ + +#include +#include "common.h" + +namespace tcmalloc { + +// Information kept for a span (a contiguous run of pages). +struct Span { + PageID start; // Starting page number + Length length; // Number of pages in span + Span* next; // Used when in link list + Span* prev; // Used when in link list + void* objects; // Linked list of free objects + unsigned int refcount : 16; // Number of non-free objects + unsigned int sizeclass : 8; // Size-class for small objects (or 0) + unsigned int location : 2; // Is the span on a freelist, and if so, which? + unsigned int sample : 1; // Sampled object? + +#undef SPAN_HISTORY +#ifdef SPAN_HISTORY + // For debugging, we can keep a log events per span + int nexthistory; + char history[64]; + int value[64]; +#endif + + // What freelist the span is on: IN_USE if on none, or normal or returned + enum { IN_USE, ON_NORMAL_FREELIST, ON_RETURNED_FREELIST }; +}; + +#ifdef SPAN_HISTORY +void Event(Span* span, char op, int v = 0); +#else +#define Event(s,o,v) ((void) 0) +#endif + +// Allocator/deallocator for spans +Span* NewSpan(PageID p, Length len); +void DeleteSpan(Span* span); + +// ------------------------------------------------------------------------- +// Doubly linked list of spans. +// ------------------------------------------------------------------------- + +// Initialize *list to an empty list. +void DLL_Init(Span* list); + +// Remove 'span' from the linked list in which it resides, updating the +// pointers of adjacent Spans and setting span's next and prev to NULL. +void DLL_Remove(Span* span); + +// Return true iff "list" is empty. +inline bool DLL_IsEmpty(const Span* list) { + return list->next == list; +} + +// Add span to the front of list. +void DLL_Prepend(Span* list, Span* span); + +// Return the length of the linked list. O(n) +int DLL_Length(const Span* list); + +} // namespace tcmalloc + +#endif // TCMALLOC_SPAN_H_ diff --git a/src/thirdparty/gperftools-2.0/src/stack_trace_table.cc b/src/thirdparty/gperftools-2.0/src/stack_trace_table.cc new file mode 100644 index 000000000..d258a4f8a --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/stack_trace_table.cc @@ -0,0 +1,159 @@ +// Copyright (c) 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Andrew Fikes + +#include +#include "stack_trace_table.h" +#include // for NULL, memset +#include "base/spinlock.h" // for SpinLockHolder +#include "common.h" // for StackTrace +#include "internal_logging.h" // for ASSERT, Log +#include "page_heap_allocator.h" // for PageHeapAllocator +#include "static_vars.h" // for Static + +namespace tcmalloc { + +bool StackTraceTable::Bucket::KeyEqual(uintptr_t h, + const StackTrace& t) const { + const bool eq = (this->hash == h && this->trace.depth == t.depth); + for (int i = 0; eq && i < t.depth; ++i) { + if (this->trace.stack[i] != t.stack[i]) { + return false; + } + } + return eq; +} + +StackTraceTable::StackTraceTable() + : error_(false), + depth_total_(0), + bucket_total_(0), + table_(new Bucket*[kHashTableSize]()) { + memset(table_, 0, kHashTableSize * sizeof(Bucket*)); +} + +StackTraceTable::~StackTraceTable() { + delete[] table_; +} + +void StackTraceTable::AddTrace(const StackTrace& t) { + if (error_) { + return; + } + + // Hash function borrowed from base/heap-profile-table.cc + uintptr_t h = 0; + for (int i = 0; i < t.depth; ++i) { + h += reinterpret_cast(t.stack[i]); + h += h << 10; + h ^= h >> 6; + } + h += h << 3; + h ^= h >> 11; + + const int idx = h % kHashTableSize; + + Bucket* b = table_[idx]; + while (b != NULL && !b->KeyEqual(h, t)) { + b = b->next; + } + if (b != NULL) { + b->count++; + b->trace.size += t.size; // keep cumulative size + } else { + depth_total_ += t.depth; + bucket_total_++; + b = Static::bucket_allocator()->New(); + if (b == NULL) { + Log(kLog, __FILE__, __LINE__, + "tcmalloc: could not allocate bucket", sizeof(*b)); + error_ = true; + } else { + b->hash = h; + b->trace = t; + b->count = 1; + b->next = table_[idx]; + table_[idx] = b; + } + } +} + +void** StackTraceTable::ReadStackTracesAndClear() { + if (error_) { + return NULL; + } + + // Allocate output array + const int out_len = bucket_total_ * 3 + depth_total_ + 1; + void** out = new void*[out_len]; + if (out == NULL) { + Log(kLog, __FILE__, __LINE__, + "tcmalloc: allocation failed for stack traces", + out_len * sizeof(*out)); + return NULL; + } + + // Fill output array + int idx = 0; + for (int i = 0; i < kHashTableSize; ++i) { + Bucket* b = table_[i]; + while (b != NULL) { + out[idx++] = reinterpret_cast(static_cast(b->count)); + out[idx++] = reinterpret_cast(b->trace.size); // cumulative size + out[idx++] = reinterpret_cast(b->trace.depth); + for (int d = 0; d < b->trace.depth; ++d) { + out[idx++] = b->trace.stack[d]; + } + b = b->next; + } + } + out[idx++] = static_cast(0); + ASSERT(idx == out_len); + + // Clear state + error_ = false; + depth_total_ = 0; + bucket_total_ = 0; + SpinLockHolder h(Static::pageheap_lock()); + for (int i = 0; i < kHashTableSize; ++i) { + Bucket* b = table_[i]; + while (b != NULL) { + Bucket* next = b->next; + Static::bucket_allocator()->Delete(b); + b = next; + } + table_[i] = NULL; + } + + return out; +} + +} // namespace tcmalloc diff --git a/src/thirdparty/gperftools-2.0/src/stack_trace_table.h b/src/thirdparty/gperftools-2.0/src/stack_trace_table.h new file mode 100644 index 000000000..26d21c1c7 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/stack_trace_table.h @@ -0,0 +1,91 @@ +// Copyright (c) 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Andrew Fikes +// +// Utility class for coalescing sampled stack traces. Not thread-safe. + +#ifndef TCMALLOC_STACK_TRACE_TABLE_H_ +#define TCMALLOC_STACK_TRACE_TABLE_H_ + +#include +#ifdef HAVE_STDINT_H +#include // for uintptr_t +#endif +#include "common.h" + +namespace tcmalloc { + +class PERFTOOLS_DLL_DECL StackTraceTable { + public: + // REQUIRES: L < pageheap_lock + StackTraceTable(); + ~StackTraceTable(); + + // Adds stack trace "t" to table. + // + // REQUIRES: L >= pageheap_lock + void AddTrace(const StackTrace& t); + + // Returns stack traces formatted per MallocExtension guidelines. + // May return NULL on error. Clears state before returning. + // + // REQUIRES: L < pageheap_lock + void** ReadStackTracesAndClear(); + + // Exposed for PageHeapAllocator + struct Bucket { + // Key + uintptr_t hash; + StackTrace trace; + + // Payload + int count; + Bucket* next; + + bool KeyEqual(uintptr_t h, const StackTrace& t) const; + }; + + // For testing + int depth_total() const { return depth_total_; } + int bucket_total() const { return bucket_total_; } + + private: + static const int kHashTableSize = 1 << 14; // => table_ is 128k + + bool error_; + int depth_total_; + int bucket_total_; + Bucket** table_; +}; + +} // namespace tcmalloc + +#endif // TCMALLOC_STACK_TRACE_TABLE_H_ diff --git a/src/thirdparty/gperftools-2.0/src/stacktrace.cc b/src/thirdparty/gperftools-2.0/src/stacktrace.cc new file mode 100644 index 000000000..d96b4d3fa --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/stacktrace.cc @@ -0,0 +1,110 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Produce stack trace. +// +// There are three different ways we can try to get the stack trace: +// +// 1) Our hand-coded stack-unwinder. This depends on a certain stack +// layout, which is used by gcc (and those systems using a +// gcc-compatible ABI) on x86 systems, at least since gcc 2.95. +// It uses the frame pointer to do its work. +// +// 2) The libunwind library. This is still in development, and as a +// separate library adds a new dependency, abut doesn't need a frame +// pointer. It also doesn't call malloc. +// +// 3) The gdb unwinder -- also the one used by the c++ exception code. +// It's obviously well-tested, but has a fatal flaw: it can call +// malloc() from the unwinder. This is a problem because we're +// trying to use the unwinder to instrument malloc(). +// +// Note: if you add a new implementation here, make sure it works +// correctly when GetStackTrace() is called with max_depth == 0. +// Some code may do that. + +#include +#include +#include "stacktrace_config.h" + +#if defined(STACKTRACE_INL_HEADER) + +#define IS_STACK_FRAMES 0 +#define IS_WITH_CONTEXT 0 +#define GET_STACK_TRACE_OR_FRAMES \ + GetStackTrace(void **result, int max_depth, int skip_count) +#include STACKTRACE_INL_HEADER +#undef IS_STACK_FRAMES +#undef IS_WITH_CONTEXT +#undef GET_STACK_TRACE_OR_FRAMES + +#define IS_STACK_FRAMES 1 +#define IS_WITH_CONTEXT 0 +#define GET_STACK_TRACE_OR_FRAMES \ + GetStackFrames(void **result, int *sizes, int max_depth, int skip_count) +#include STACKTRACE_INL_HEADER +#undef IS_STACK_FRAMES +#undef IS_WITH_CONTEXT +#undef GET_STACK_TRACE_OR_FRAMES + +#define IS_STACK_FRAMES 0 +#define IS_WITH_CONTEXT 1 +#define GET_STACK_TRACE_OR_FRAMES \ + GetStackTraceWithContext(void **result, int max_depth, \ + int skip_count, const void *ucp) +#include STACKTRACE_INL_HEADER +#undef IS_STACK_FRAMES +#undef IS_WITH_CONTEXT +#undef GET_STACK_TRACE_OR_FRAMES + +#define IS_STACK_FRAMES 1 +#define IS_WITH_CONTEXT 1 +#define GET_STACK_TRACE_OR_FRAMES \ + GetStackFramesWithContext(void **result, int *sizes, int max_depth, \ + int skip_count, const void *ucp) +#include STACKTRACE_INL_HEADER +#undef IS_STACK_FRAMES +#undef IS_WITH_CONTEXT +#undef GET_STACK_TRACE_OR_FRAMES + +#elif 0 +// This is for the benefit of code analysis tools that may have +// trouble with the computed #include above. +# include "stacktrace_x86-inl.h" +# include "stacktrace_libunwind-inl.h" +# include "stacktrace_generic-inl.h" +# include "stacktrace_powerpc-inl.h" +# include "stacktrace_win32-inl.h" +# include "stacktrace_arm-inl.h" +#else +# error Cannot calculate stack trace: will need to write for your environment +#endif diff --git a/src/thirdparty/gperftools-2.0/src/stacktrace_arm-inl.h b/src/thirdparty/gperftools-2.0/src/stacktrace_arm-inl.h new file mode 100644 index 000000000..5ee1bf9d0 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/stacktrace_arm-inl.h @@ -0,0 +1,145 @@ +// Copyright (c) 2011, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Doug Kwan +// This is inspired by Craig Silverstein's PowerPC stacktrace code. +// + +#ifndef BASE_STACKTRACE_ARM_INL_H_ +#define BASE_STACKTRACE_ARM_INL_H_ +// Note: this file is included into stacktrace.cc more than once. +// Anything that should only be defined once should be here: + +#include // for uintptr_t +#include "base/basictypes.h" // for NULL +#include + +// WARNING: +// This only works if all your code is in either ARM or THUMB mode. With +// interworking, the frame pointer of the caller can either be in r11 (ARM +// mode) or r7 (THUMB mode). A callee only saves the frame pointer of its +// mode in a fixed location on its stack frame. If the caller is a different +// mode, there is no easy way to find the frame pointer. It can either be +// still in the designated register or saved on stack along with other callee +// saved registers. + +// Given a pointer to a stack frame, locate and return the calling +// stackframe, or return NULL if no stackframe can be found. Perform sanity +// checks (the strictness of which is controlled by the boolean parameter +// "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned. +template +static void **NextStackFrame(void **old_sp) { + void **new_sp = (void**) old_sp[-1]; + + // Check that the transition from frame pointer old_sp to frame + // pointer new_sp isn't clearly bogus + if (STRICT_UNWINDING) { + // With the stack growing downwards, older stack frame must be + // at a greater address that the current one. + if (new_sp <= old_sp) return NULL; + // Assume stack frames larger than 100,000 bytes are bogus. + if ((uintptr_t)new_sp - (uintptr_t)old_sp > 100000) return NULL; + } else { + // In the non-strict mode, allow discontiguous stack frames. + // (alternate-signal-stacks for example). + if (new_sp == old_sp) return NULL; + // And allow frames upto about 1MB. + if ((new_sp > old_sp) + && ((uintptr_t)new_sp - (uintptr_t)old_sp > 1000000)) return NULL; + } + if ((uintptr_t)new_sp & (sizeof(void *) - 1)) return NULL; + return new_sp; +} + +// This ensures that GetStackTrace stes up the Link Register properly. +#ifdef __GNUC__ +void StacktraceArmDummyFunction() __attribute__((noinline)); +void StacktraceArmDummyFunction() { __asm__ volatile(""); } +#else +# error StacktraceArmDummyFunction() needs to be ported to this platform. +#endif +#endif // BASE_STACKTRACE_ARM_INL_H_ + +// Note: this part of the file is included several times. +// Do not put globals below. + +// The following 4 functions are generated from the code below: +// GetStack{Trace,Frames}() +// GetStack{Trace,Frames}WithContext() +// +// These functions take the following args: +// void** result: the stack-trace, as an array +// int* sizes: the size of each stack frame, as an array +// (GetStackFrames* only) +// int max_depth: the size of the result (and sizes) array(s) +// int skip_count: how many stack pointers to skip before storing in result +// void* ucp: a ucontext_t* (GetStack{Trace,Frames}WithContext only) +int GET_STACK_TRACE_OR_FRAMES { +#ifdef __GNUC__ + void **sp = reinterpret_cast(__builtin_frame_address(0)); +#else +# error reading stack point not yet supported on this platform. +#endif + + // On ARM, the return address is stored in the link register (r14). + // This is not saved on the stack frame of a leaf function. To + // simplify code that reads return addresses, we call a dummy + // function so that the return address of this function is also + // stored in the stack frame. This works at least for gcc. + StacktraceArmDummyFunction(); + + int n = 0; + while (sp && n < max_depth) { + // The GetStackFrames routine is called when we are in some + // informational context (the failure signal handler for example). + // Use the non-strict unwinding rules to produce a stack trace + // that is as complete as possible (even if it contains a few bogus + // entries in some rare cases). + void **next_sp = NextStackFrame(sp); + + if (skip_count > 0) { + skip_count--; + } else { + result[n] = *sp; + +#if IS_STACK_FRAMES + if (next_sp > sp) { + sizes[n] = (uintptr_t)next_sp - (uintptr_t)sp; + } else { + // A frame-size of 0 is used to indicate unknown frame size. + sizes[n] = 0; + } +#endif + n++; + } + sp = next_sp; + } + return n; +} diff --git a/src/thirdparty/gperftools-2.0/src/stacktrace_config.h b/src/thirdparty/gperftools-2.0/src/stacktrace_config.h new file mode 100644 index 000000000..72d108a8c --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/stacktrace_config.h @@ -0,0 +1,85 @@ +// Copyright (c) 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Paul Pluzhnikov +// +// Figure out which unwinder to use on a given platform. +// +// Defines STACKTRACE_INL_HEADER to the *-inl.h containing +// actual unwinder implementation. +// +// Defines STACKTRACE_SKIP_CONTEXT_ROUTINES if a separate +// GetStack{Trace,Frames}WithContext should not be provided. +// +// This header is "private" to stacktrace.cc and +// stacktrace_with_context.cc. +// +// DO NOT include it into any other files. + +#ifndef BASE_STACKTRACE_CONFIG_H_ +#define BASE_STACKTRACE_CONFIG_H_ + +// First, the i386 and x86_64 case. +#if (defined(__i386__) || defined(__x86_64__)) && __GNUC__ >= 2 +# if !defined(NO_FRAME_POINTER) +# define STACKTRACE_INL_HEADER "stacktrace_x86-inl.h" +# define STACKTRACE_SKIP_CONTEXT_ROUTINES 1 +# elif defined(HAVE_LIBUNWIND_H) // a proxy for having libunwind installed +# define STACKTRACE_INL_HEADER "stacktrace_libunwind-inl.h" +# define STACKTRACE_USES_LIBUNWIND 1 +# elif defined(__linux) +# error Cannnot calculate stack trace: need either libunwind or frame-pointers (see INSTALL file) +# else +# error Cannnot calculate stack trace: need libunwind (see INSTALL file) +# endif + +// The PowerPC case +#elif (defined(__ppc__) || defined(__PPC__)) && __GNUC__ >= 2 +# if !defined(NO_FRAME_POINTER) +# define STACKTRACE_INL_HEADER "stacktrace_powerpc-inl.h" +# else +# define STACKTRACE_INL_HEADER "stacktrace_generic-inl.h" +# endif + +// The ARM case +#elif defined(__arm__) && __GNUC__ >= 2 +# if !defined(NO_FRAME_POINTER) +# define STACKTRACE_INL_HEADER "stacktrace_arm-inl.h" +# else +# error stacktrace without frame pointer is not supported on ARM +# endif + +// The Windows case -- probably cygwin and mingw will use one of the +// x86-includes above, but if not, we can fall back to windows intrinsics. +#elif defined(_WIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__) || defined(__MINGW32__) +# define STACKTRACE_INL_HEADER "stacktrace_win32-inl.h" + +#endif // all the cases +#endif // BASE_STACKTRACE_CONFIG_H_ diff --git a/src/thirdparty/gperftools-2.0/src/stacktrace_generic-inl.h b/src/thirdparty/gperftools-2.0/src/stacktrace_generic-inl.h new file mode 100644 index 000000000..5a526e228 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/stacktrace_generic-inl.h @@ -0,0 +1,83 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Portable implementation - just use glibc +// +// Note: The glibc implementation may cause a call to malloc. +// This can cause a deadlock in HeapProfiler. + +#ifndef BASE_STACKTRACE_GENERIC_INL_H_ +#define BASE_STACKTRACE_GENERIC_INL_H_ +// Note: this file is included into stacktrace.cc more than once. +// Anything that should only be defined once should be here: + +#include +#include +#include "gperftools/stacktrace.h" +#endif // BASE_STACKTRACE_GENERIC_INL_H_ + +// Note: this part of the file is included several times. +// Do not put globals below. + +// The following 4 functions are generated from the code below: +// GetStack{Trace,Frames}() +// GetStack{Trace,Frames}WithContext() +// +// These functions take the following args: +// void** result: the stack-trace, as an array +// int* sizes: the size of each stack frame, as an array +// (GetStackFrames* only) +// int max_depth: the size of the result (and sizes) array(s) +// int skip_count: how many stack pointers to skip before storing in result +// void* ucp: a ucontext_t* (GetStack{Trace,Frames}WithContext only) +int GET_STACK_TRACE_OR_FRAMES { + static const int kStackLength = 64; + void * stack[kStackLength]; + int size; + + size = backtrace(stack, kStackLength); + skip_count++; // we want to skip the current frame as well + int result_count = size - skip_count; + if (result_count < 0) + result_count = 0; + if (result_count > max_depth) + result_count = max_depth; + for (int i = 0; i < result_count; i++) + result[i] = stack[i + skip_count]; + +#if IS_STACK_FRAMES + // No implementation for finding out the stack frame sizes yet. + memset(sizes, 0, sizeof(*sizes) * result_count); +#endif + + return result_count; +} diff --git a/src/thirdparty/gperftools-2.0/src/stacktrace_libunwind-inl.h b/src/thirdparty/gperftools-2.0/src/stacktrace_libunwind-inl.h new file mode 100644 index 000000000..82b0cfeb7 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/stacktrace_libunwind-inl.h @@ -0,0 +1,128 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Arun Sharma +// +// Produce stack trace using libunwind + +#ifndef BASE_STACKTRACE_LIBINWIND_INL_H_ +#define BASE_STACKTRACE_LIBINWIND_INL_H_ +// Note: this file is included into stacktrace.cc more than once. +// Anything that should only be defined once should be here: + +// We only need local unwinder. +#define UNW_LOCAL_ONLY + +extern "C" { +#include +#include // for memset() +#include +} +#include "gperftools/stacktrace.h" +#include "base/logging.h" + +// Sometimes, we can try to get a stack trace from within a stack +// trace, because libunwind can call mmap (maybe indirectly via an +// internal mmap based memory allocator), and that mmap gets trapped +// and causes a stack-trace request. If were to try to honor that +// recursive request, we'd end up with infinite recursion or deadlock. +// Luckily, it's safe to ignore those subsequent traces. In such +// cases, we return 0 to indicate the situation. +static __thread int recursive; + +#endif // BASE_STACKTRACE_LIBINWIND_INL_H_ + +// Note: this part of the file is included several times. +// Do not put globals below. + +// The following 4 functions are generated from the code below: +// GetStack{Trace,Frames}() +// GetStack{Trace,Frames}WithContext() +// +// These functions take the following args: +// void** result: the stack-trace, as an array +// int* sizes: the size of each stack frame, as an array +// (GetStackFrames* only) +// int max_depth: the size of the result (and sizes) array(s) +// int skip_count: how many stack pointers to skip before storing in result +// void* ucp: a ucontext_t* (GetStack{Trace,Frames}WithContext only) +int GET_STACK_TRACE_OR_FRAMES { + void *ip; + int n = 0; + unw_cursor_t cursor; + unw_context_t uc; +#if IS_STACK_FRAMES + unw_word_t sp = 0, next_sp = 0; +#endif + + if (recursive) { + return 0; + } + ++recursive; + + unw_getcontext(&uc); + int ret = unw_init_local(&cursor, &uc); + assert(ret >= 0); + skip_count++; // Do not include current frame + + while (skip_count--) { + if (unw_step(&cursor) <= 0) { + goto out; + } +#if IS_STACK_FRAMES + if (unw_get_reg(&cursor, UNW_REG_SP, &next_sp)) { + goto out; + } +#endif + } + + while (n < max_depth) { + if (unw_get_reg(&cursor, UNW_REG_IP, (unw_word_t *) &ip) < 0) { + break; + } +#if IS_STACK_FRAMES + sizes[n] = 0; +#endif + result[n++] = ip; + if (unw_step(&cursor) <= 0) { + break; + } +#if IS_STACK_FRAMES + sp = next_sp; + if (unw_get_reg(&cursor, UNW_REG_SP, &next_sp) , 0) { + break; + } + sizes[n - 1] = next_sp - sp; +#endif + } +out: + --recursive; + return n; +} diff --git a/src/thirdparty/gperftools-2.0/src/stacktrace_powerpc-inl.h b/src/thirdparty/gperftools-2.0/src/stacktrace_powerpc-inl.h new file mode 100644 index 000000000..acf2884e3 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/stacktrace_powerpc-inl.h @@ -0,0 +1,170 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// Produce stack trace. I'm guessing (hoping!) the code is much like +// for x86. For apple machines, at least, it seems to be; see +// http://developer.apple.com/documentation/mac/runtimehtml/RTArch-59.html +// http://www.linux-foundation.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#STACK +// Linux has similar code: http://patchwork.ozlabs.org/linuxppc/patch?id=8882 + +#ifndef BASE_STACKTRACE_POWERPC_INL_H_ +#define BASE_STACKTRACE_POWERPC_INL_H_ +// Note: this file is included into stacktrace.cc more than once. +// Anything that should only be defined once should be here: + +#include // for uintptr_t +#include // for NULL +#include + +// Given a pointer to a stack frame, locate and return the calling +// stackframe, or return NULL if no stackframe can be found. Perform sanity +// checks (the strictness of which is controlled by the boolean parameter +// "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned. +template +static void **NextStackFrame(void **old_sp) { + void **new_sp = (void **) *old_sp; + + // Check that the transition from frame pointer old_sp to frame + // pointer new_sp isn't clearly bogus + if (STRICT_UNWINDING) { + // With the stack growing downwards, older stack frame must be + // at a greater address that the current one. + if (new_sp <= old_sp) return NULL; + // Assume stack frames larger than 100,000 bytes are bogus. + if ((uintptr_t)new_sp - (uintptr_t)old_sp > 100000) return NULL; + } else { + // In the non-strict mode, allow discontiguous stack frames. + // (alternate-signal-stacks for example). + if (new_sp == old_sp) return NULL; + // And allow frames upto about 1MB. + if ((new_sp > old_sp) + && ((uintptr_t)new_sp - (uintptr_t)old_sp > 1000000)) return NULL; + } + if ((uintptr_t)new_sp & (sizeof(void *) - 1)) return NULL; + return new_sp; +} + +// This ensures that GetStackTrace stes up the Link Register properly. +void StacktracePowerPCDummyFunction() __attribute__((noinline)); +void StacktracePowerPCDummyFunction() { __asm__ volatile(""); } +#endif // BASE_STACKTRACE_POWERPC_INL_H_ + +// Note: this part of the file is included several times. +// Do not put globals below. + +// The following 4 functions are generated from the code below: +// GetStack{Trace,Frames}() +// GetStack{Trace,Frames}WithContext() +// +// These functions take the following args: +// void** result: the stack-trace, as an array +// int* sizes: the size of each stack frame, as an array +// (GetStackFrames* only) +// int max_depth: the size of the result (and sizes) array(s) +// int skip_count: how many stack pointers to skip before storing in result +// void* ucp: a ucontext_t* (GetStack{Trace,Frames}WithContext only) +int GET_STACK_TRACE_OR_FRAMES { + void **sp; + // Apple OS X uses an old version of gnu as -- both Darwin 7.9.0 (Panther) + // and Darwin 8.8.1 (Tiger) use as 1.38. This means we have to use a + // different asm syntax. I don't know quite the best way to discriminate + // systems using the old as from the new one; I've gone with __APPLE__. + // TODO(csilvers): use autoconf instead, to look for 'as --version' == 1 or 2 +#ifdef __APPLE__ + __asm__ volatile ("mr %0,r1" : "=r" (sp)); +#else + __asm__ volatile ("mr %0,1" : "=r" (sp)); +#endif + + // On PowerPC, the "Link Register" or "Link Record" (LR), is a stack + // entry that holds the return address of the subroutine call (what + // instruction we run after our function finishes). This is the + // same as the stack-pointer of our parent routine, which is what we + // want here. While the compiler will always(?) set up LR for + // subroutine calls, it may not for leaf functions (such as this one). + // This routine forces the compiler (at least gcc) to push it anyway. + StacktracePowerPCDummyFunction(); + +#if IS_STACK_FRAMES + // Note we do *not* increment skip_count here for the SYSV ABI. If + // we did, the list of stack frames wouldn't properly match up with + // the list of return addresses. Note this means the top pc entry + // is probably bogus for linux/ppc (and other SYSV-ABI systems). +#else + // The LR save area is used by the callee, so the top entry is bogus. + skip_count++; +#endif + + int n = 0; + while (sp && n < max_depth) { + // The GetStackFrames routine is called when we are in some + // informational context (the failure signal handler for example). + // Use the non-strict unwinding rules to produce a stack trace + // that is as complete as possible (even if it contains a few + // bogus entries in some rare cases). + void **next_sp = NextStackFrame(sp); + + if (skip_count > 0) { + skip_count--; + } else { + // PowerPC has 3 main ABIs, which say where in the stack the + // Link Register is. For DARWIN and AIX (used by apple and + // linux ppc64), it's in sp[2]. For SYSV (used by linux ppc), + // it's in sp[1]. +#if defined(_CALL_AIX) || defined(_CALL_DARWIN) + result[n] = *(sp+2); +#elif defined(_CALL_SYSV) + result[n] = *(sp+1); +#elif defined(__APPLE__) || (defined(__linux) && defined(__PPC64__)) + // This check is in case the compiler doesn't define _CALL_AIX/etc. + result[n] = *(sp+2); +#elif defined(__linux) + // This check is in case the compiler doesn't define _CALL_SYSV. + result[n] = *(sp+1); +#else +#error Need to specify the PPC ABI for your archiecture. +#endif + +#if IS_STACK_FRAMES + if (next_sp > sp) { + sizes[n] = (uintptr_t)next_sp - (uintptr_t)sp; + } else { + // A frame-size of 0 is used to indicate unknown frame size. + sizes[n] = 0; + } +#endif + n++; + } + sp = next_sp; + } + return n; +} diff --git a/src/thirdparty/gperftools-2.0/src/stacktrace_win32-inl.h b/src/thirdparty/gperftools-2.0/src/stacktrace_win32-inl.h new file mode 100644 index 000000000..2af472de5 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/stacktrace_win32-inl.h @@ -0,0 +1,91 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// --- +// Produces a stack trace for Windows. Normally, one could use +// stacktrace_x86-inl.h or stacktrace_x86_64-inl.h -- and indeed, that +// should work for binaries compiled using MSVC in "debug" mode. +// However, in "release" mode, Windows uses frame-pointer +// optimization, which makes getting a stack trace very difficult. +// +// There are several approaches one can take. One is to use Windows +// intrinsics like StackWalk64. These can work, but have restrictions +// on how successful they can be. Another attempt is to write a +// version of stacktrace_x86-inl.h that has heuristic support for +// dealing with FPO, similar to what WinDbg does (see +// http://www.nynaeve.net/?p=97). +// +// The solution we've ended up doing is to call the undocumented +// windows function RtlCaptureStackBackTrace, which probably doesn't +// work with FPO but at least is fast, and doesn't require a symbol +// server. +// +// This code is inspired by a patch from David Vitek: +// http://code.google.com/p/gperftools/issues/detail?id=83 + +#ifndef BASE_STACKTRACE_WIN32_INL_H_ +#define BASE_STACKTRACE_WIN32_INL_H_ +// Note: this file is included into stacktrace.cc more than once. +// Anything that should only be defined once should be here: + +#include "config.h" +#include // for GetProcAddress and GetModuleHandle +#include + +typedef USHORT NTAPI RtlCaptureStackBackTrace_Function( + IN ULONG frames_to_skip, + IN ULONG frames_to_capture, + OUT PVOID *backtrace, + OUT PULONG backtrace_hash); + +// Load the function we need at static init time, where we don't have +// to worry about someone else holding the loader's lock. +static RtlCaptureStackBackTrace_Function* const RtlCaptureStackBackTrace_fn = + (RtlCaptureStackBackTrace_Function*) + GetProcAddress(GetModuleHandleA("ntdll.dll"), "RtlCaptureStackBackTrace"); + +PERFTOOLS_DLL_DECL int GetStackTrace(void** result, int max_depth, + int skip_count) { + if (!RtlCaptureStackBackTrace_fn) { + // TODO(csilvers): should we log an error here? + return 0; // can't find a stacktrace with no function to call + } + return (int)RtlCaptureStackBackTrace_fn(skip_count + 2, max_depth, + result, 0); +} + +PERFTOOLS_DLL_DECL int GetStackFrames(void** /* pcs */, + int* /* sizes */, + int /* max_depth */, + int /* skip_count */) { + assert(0 == "Not yet implemented"); + return 0; +} + +#endif // BASE_STACKTRACE_WIN32_INL_H_ diff --git a/src/thirdparty/gperftools-2.0/src/stacktrace_x86-inl.h b/src/thirdparty/gperftools-2.0/src/stacktrace_x86-inl.h new file mode 100644 index 000000000..9d76342a1 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/stacktrace_x86-inl.h @@ -0,0 +1,351 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Produce stack trace + +#ifndef BASE_STACKTRACE_X86_INL_H_ +#define BASE_STACKTRACE_X86_INL_H_ +// Note: this file is included into stacktrace.cc more than once. +// Anything that should only be defined once should be here: + +#include "config.h" +#include // for NULL +#include +#if defined(HAVE_SYS_UCONTEXT_H) +#include +#elif defined(HAVE_UCONTEXT_H) +#include // for ucontext_t +#elif defined(HAVE_CYGWIN_SIGNAL_H) +// cygwin/signal.h has a buglet where it uses pthread_attr_t without +// #including itself. So we have to do it. +# ifdef HAVE_PTHREAD +# include +# endif +#include +typedef ucontext ucontext_t; +#endif +#ifdef HAVE_STDINT_H +#include // for uintptr_t +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_MMAP +#include // for msync +#include "base/vdso_support.h" +#endif + +#include "gperftools/stacktrace.h" + +#if defined(__linux__) && defined(__i386__) && defined(__ELF__) && defined(HAVE_MMAP) +// Count "push %reg" instructions in VDSO __kernel_vsyscall(), +// preceeding "syscall" or "sysenter". +// If __kernel_vsyscall uses frame pointer, answer 0. +// +// kMaxBytes tells how many instruction bytes of __kernel_vsyscall +// to analyze before giving up. Up to kMaxBytes+1 bytes of +// instructions could be accessed. +// +// Here are known __kernel_vsyscall instruction sequences: +// +// SYSENTER (linux-2.6.26/arch/x86/vdso/vdso32/sysenter.S). +// Used on Intel. +// 0xffffe400 <__kernel_vsyscall+0>: push %ecx +// 0xffffe401 <__kernel_vsyscall+1>: push %edx +// 0xffffe402 <__kernel_vsyscall+2>: push %ebp +// 0xffffe403 <__kernel_vsyscall+3>: mov %esp,%ebp +// 0xffffe405 <__kernel_vsyscall+5>: sysenter +// +// SYSCALL (see linux-2.6.26/arch/x86/vdso/vdso32/syscall.S). +// Used on AMD. +// 0xffffe400 <__kernel_vsyscall+0>: push %ebp +// 0xffffe401 <__kernel_vsyscall+1>: mov %ecx,%ebp +// 0xffffe403 <__kernel_vsyscall+3>: syscall +// +// i386 (see linux-2.6.26/arch/x86/vdso/vdso32/int80.S) +// 0xffffe400 <__kernel_vsyscall+0>: int $0x80 +// 0xffffe401 <__kernel_vsyscall+1>: ret +// +static const int kMaxBytes = 10; + +// We use assert()s instead of DCHECK()s -- this is too low level +// for DCHECK(). + +static int CountPushInstructions(const unsigned char *const addr) { + int result = 0; + for (int i = 0; i < kMaxBytes; ++i) { + if (addr[i] == 0x89) { + // "mov reg,reg" + if (addr[i + 1] == 0xE5) { + // Found "mov %esp,%ebp". + return 0; + } + ++i; // Skip register encoding byte. + } else if (addr[i] == 0x0F && + (addr[i + 1] == 0x34 || addr[i + 1] == 0x05)) { + // Found "sysenter" or "syscall". + return result; + } else if ((addr[i] & 0xF0) == 0x50) { + // Found "push %reg". + ++result; + } else if (addr[i] == 0xCD && addr[i + 1] == 0x80) { + // Found "int $0x80" + assert(result == 0); + return 0; + } else { + // Unexpected instruction. + assert(0 == "unexpected instruction in __kernel_vsyscall"); + return 0; + } + } + // Unexpected: didn't find SYSENTER or SYSCALL in + // [__kernel_vsyscall, __kernel_vsyscall + kMaxBytes) interval. + assert(0 == "did not find SYSENTER or SYSCALL in __kernel_vsyscall"); + return 0; +} +#endif + +// Given a pointer to a stack frame, locate and return the calling +// stackframe, or return NULL if no stackframe can be found. Perform sanity +// checks (the strictness of which is controlled by the boolean parameter +// "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned. +template +static void **NextStackFrame(void **old_sp, const void *uc) { + void **new_sp = (void **) *old_sp; + +#if defined(__linux__) && defined(__i386__) && defined(HAVE_VDSO_SUPPORT) + if (WITH_CONTEXT && uc != NULL) { + // How many "push %reg" instructions are there at __kernel_vsyscall? + // This is constant for a given kernel and processor, so compute + // it only once. + static int num_push_instructions = -1; // Sentinel: not computed yet. + // Initialize with sentinel value: __kernel_rt_sigreturn can not possibly + // be there. + static const unsigned char *kernel_rt_sigreturn_address = NULL; + static const unsigned char *kernel_vsyscall_address = NULL; + if (num_push_instructions == -1) { + base::VDSOSupport vdso; + if (vdso.IsPresent()) { + base::VDSOSupport::SymbolInfo rt_sigreturn_symbol_info; + base::VDSOSupport::SymbolInfo vsyscall_symbol_info; + if (!vdso.LookupSymbol("__kernel_rt_sigreturn", "LINUX_2.5", + STT_FUNC, &rt_sigreturn_symbol_info) || + !vdso.LookupSymbol("__kernel_vsyscall", "LINUX_2.5", + STT_FUNC, &vsyscall_symbol_info) || + rt_sigreturn_symbol_info.address == NULL || + vsyscall_symbol_info.address == NULL) { + // Unexpected: 32-bit VDSO is present, yet one of the expected + // symbols is missing or NULL. + assert(0 == "VDSO is present, but doesn't have expected symbols"); + num_push_instructions = 0; + } else { + kernel_rt_sigreturn_address = + reinterpret_cast( + rt_sigreturn_symbol_info.address); + kernel_vsyscall_address = + reinterpret_cast( + vsyscall_symbol_info.address); + num_push_instructions = + CountPushInstructions(kernel_vsyscall_address); + } + } else { + num_push_instructions = 0; + } + } + if (num_push_instructions != 0 && kernel_rt_sigreturn_address != NULL && + old_sp[1] == kernel_rt_sigreturn_address) { + const ucontext_t *ucv = static_cast(uc); + // This kernel does not use frame pointer in its VDSO code, + // and so %ebp is not suitable for unwinding. + void **const reg_ebp = + reinterpret_cast(ucv->uc_mcontext.gregs[REG_EBP]); + const unsigned char *const reg_eip = + reinterpret_cast(ucv->uc_mcontext.gregs[REG_EIP]); + if (new_sp == reg_ebp && + kernel_vsyscall_address <= reg_eip && + reg_eip - kernel_vsyscall_address < kMaxBytes) { + // We "stepped up" to __kernel_vsyscall, but %ebp is not usable. + // Restore from 'ucv' instead. + void **const reg_esp = + reinterpret_cast(ucv->uc_mcontext.gregs[REG_ESP]); + // Check that alleged %esp is not NULL and is reasonably aligned. + if (reg_esp && + ((uintptr_t)reg_esp & (sizeof(reg_esp) - 1)) == 0) { + // Check that alleged %esp is actually readable. This is to prevent + // "double fault" in case we hit the first fault due to e.g. stack + // corruption. + // + // page_size is linker-initalized to avoid async-unsafe locking + // that GCC would otherwise insert (__cxa_guard_acquire etc). + static int page_size; + if (page_size == 0) { + // First time through. + page_size = getpagesize(); + } + void *const reg_esp_aligned = + reinterpret_cast( + (uintptr_t)(reg_esp + num_push_instructions - 1) & + ~(page_size - 1)); + if (msync(reg_esp_aligned, page_size, MS_ASYNC) == 0) { + // Alleged %esp is readable, use it for further unwinding. + new_sp = reinterpret_cast( + reg_esp[num_push_instructions - 1]); + } + } + } + } + } +#endif + + // Check that the transition from frame pointer old_sp to frame + // pointer new_sp isn't clearly bogus + if (STRICT_UNWINDING) { + // With the stack growing downwards, older stack frame must be + // at a greater address that the current one. + if (new_sp <= old_sp) return NULL; + // Assume stack frames larger than 100,000 bytes are bogus. + if ((uintptr_t)new_sp - (uintptr_t)old_sp > 100000) return NULL; + } else { + // In the non-strict mode, allow discontiguous stack frames. + // (alternate-signal-stacks for example). + if (new_sp == old_sp) return NULL; + if (new_sp > old_sp) { + // And allow frames upto about 1MB. + const uintptr_t delta = (uintptr_t)new_sp - (uintptr_t)old_sp; + const uintptr_t acceptable_delta = 1000000; + if (delta > acceptable_delta) { + return NULL; + } + } + } + if ((uintptr_t)new_sp & (sizeof(void *) - 1)) return NULL; +#ifdef __i386__ + // On 64-bit machines, the stack pointer can be very close to + // 0xffffffff, so we explicitly check for a pointer into the + // last two pages in the address space + if ((uintptr_t)new_sp >= 0xffffe000) return NULL; +#endif +#ifdef HAVE_MMAP + if (!STRICT_UNWINDING) { + // Lax sanity checks cause a crash on AMD-based machines with + // VDSO-enabled kernels. + // Make an extra sanity check to insure new_sp is readable. + // Note: NextStackFrame() is only called while the program + // is already on its last leg, so it's ok to be slow here. + static int page_size = getpagesize(); + void *new_sp_aligned = (void *)((uintptr_t)new_sp & ~(page_size - 1)); + if (msync(new_sp_aligned, page_size, MS_ASYNC) == -1) + return NULL; + } +#endif + return new_sp; +} + +#endif // BASE_STACKTRACE_X86_INL_H_ + +// Note: this part of the file is included several times. +// Do not put globals below. + +// The following 4 functions are generated from the code below: +// GetStack{Trace,Frames}() +// GetStack{Trace,Frames}WithContext() +// +// These functions take the following args: +// void** result: the stack-trace, as an array +// int* sizes: the size of each stack frame, as an array +// (GetStackFrames* only) +// int max_depth: the size of the result (and sizes) array(s) +// int skip_count: how many stack pointers to skip before storing in result +// void* ucp: a ucontext_t* (GetStack{Trace,Frames}WithContext only) + +int GET_STACK_TRACE_OR_FRAMES { + void **sp; +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2) || __llvm__ + // __builtin_frame_address(0) can return the wrong address on gcc-4.1.0-k8. + // It's always correct on llvm, and the techniques below aren't (in + // particular, llvm-gcc will make a copy of pcs, so it's not in sp[2]), + // so we also prefer __builtin_frame_address when running under llvm. + sp = reinterpret_cast(__builtin_frame_address(0)); +#elif defined(__i386__) + // Stack frame format: + // sp[0] pointer to previous frame + // sp[1] caller address + // sp[2] first argument + // ... + // NOTE: This will break under llvm, since result is a copy and not in sp[2] + sp = (void **)&result - 2; +#elif defined(__x86_64__) + unsigned long rbp; + // Move the value of the register %rbp into the local variable rbp. + // We need 'volatile' to prevent this instruction from getting moved + // around during optimization to before function prologue is done. + // An alternative way to achieve this + // would be (before this __asm__ instruction) to call Noop() defined as + // static void Noop() __attribute__ ((noinline)); // prevent inlining + // static void Noop() { asm(""); } // prevent optimizing-away + __asm__ volatile ("mov %%rbp, %0" : "=r" (rbp)); + // Arguments are passed in registers on x86-64, so we can't just + // offset from &result + sp = (void **) rbp; +#else +# error Using stacktrace_x86-inl.h on a non x86 architecture! +#endif + + int n = 0; + while (sp && n < max_depth) { + if (*(sp+1) == reinterpret_cast(0)) { + // In 64-bit code, we often see a frame that + // points to itself and has a return address of 0. + break; + } +#if !IS_WITH_CONTEXT + const void *const ucp = NULL; +#endif + void **next_sp = NextStackFrame(sp, ucp); + if (skip_count > 0) { + skip_count--; + } else { + result[n] = *(sp+1); +#if IS_STACK_FRAMES + if (next_sp > sp) { + sizes[n] = (uintptr_t)next_sp - (uintptr_t)sp; + } else { + // A frame-size of 0 is used to indicate unknown frame size. + sizes[n] = 0; + } +#endif + n++; + } + sp = next_sp; + } + return n; +} diff --git a/src/thirdparty/gperftools-2.0/src/static_vars.cc b/src/thirdparty/gperftools-2.0/src/static_vars.cc new file mode 100644 index 000000000..6fc852a82 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/static_vars.cc @@ -0,0 +1,73 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Ken Ashcraft + +#include "static_vars.h" +#include // for NULL +#include // for operator new +#include "internal_logging.h" // for CHECK_CONDITION +#include "common.h" +#include "sampler.h" // for Sampler + +namespace tcmalloc { + +SpinLock Static::pageheap_lock_(SpinLock::LINKER_INITIALIZED); +SizeMap Static::sizemap_; +CentralFreeListPadded Static::central_cache_[kNumClasses]; +PageHeapAllocator Static::span_allocator_; +PageHeapAllocator Static::stacktrace_allocator_; +Span Static::sampled_objects_; +PageHeapAllocator Static::bucket_allocator_; +StackTrace* Static::growth_stacks_ = NULL; +PageHeap* Static::pageheap_ = NULL; + +void Static::InitStaticVars() { + sizemap_.Init(); + span_allocator_.Init(); + span_allocator_.New(); // Reduce cache conflicts + span_allocator_.New(); // Reduce cache conflicts + stacktrace_allocator_.Init(); + bucket_allocator_.Init(); + // Do a bit of sanitizing: make sure central_cache is aligned properly + CHECK_CONDITION((sizeof(central_cache_[0]) % 64) == 0); + for (int i = 0; i < kNumClasses; ++i) { + central_cache_[i].Init(i); + } + // It's important to have PageHeap allocated, not in static storage, + // so that HeapLeakChecker does not consider all the byte patterns stored + // in is caches as pointers that are sources of heap object liveness, + // which leads to it missing some memory leaks. + pageheap_ = new (MetaDataAlloc(sizeof(PageHeap))) PageHeap; + DLL_Init(&sampled_objects_); + Sampler::InitStatics(); +} + +} // namespace tcmalloc diff --git a/src/thirdparty/gperftools-2.0/src/static_vars.h b/src/thirdparty/gperftools-2.0/src/static_vars.h new file mode 100644 index 000000000..185a1d45e --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/static_vars.h @@ -0,0 +1,111 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Ken Ashcraft +// +// Static variables shared by multiple classes. + +#ifndef TCMALLOC_STATIC_VARS_H_ +#define TCMALLOC_STATIC_VARS_H_ + +#include +#include "base/spinlock.h" +#include "central_freelist.h" +#include "common.h" +#include "page_heap.h" +#include "page_heap_allocator.h" +#include "span.h" +#include "stack_trace_table.h" + +namespace tcmalloc { + +class Static { + public: + // Linker initialized, so this lock can be accessed at any time. + static SpinLock* pageheap_lock() { return &pageheap_lock_; } + + // Must be called before calling any of the accessors below. + static void InitStaticVars(); + + // Central cache -- an array of free-lists, one per size-class. + // We have a separate lock per free-list to reduce contention. + static CentralFreeListPadded* central_cache() { return central_cache_; } + + static SizeMap* sizemap() { return &sizemap_; } + + ////////////////////////////////////////////////////////////////////// + // In addition to the explicit initialization comment, the variables below + // must be protected by pageheap_lock. + + // Page-level allocator. + static PageHeap* pageheap() { return pageheap_; } + + static PageHeapAllocator* span_allocator() { return &span_allocator_; } + + static PageHeapAllocator* stacktrace_allocator() { + return &stacktrace_allocator_; + } + + static StackTrace* growth_stacks() { return growth_stacks_; } + static void set_growth_stacks(StackTrace* s) { growth_stacks_ = s; } + + // State kept for sampled allocations (/pprof/heap support) + static Span* sampled_objects() { return &sampled_objects_; } + static PageHeapAllocator* bucket_allocator() { + return &bucket_allocator_; + } + + private: + static SpinLock pageheap_lock_; + + // These static variables require explicit initialization. We cannot + // count on their constructors to do any initialization because other + // static variables may try to allocate memory before these variables + // can run their constructors. + + static SizeMap sizemap_; + static CentralFreeListPadded central_cache_[kNumClasses]; + static PageHeapAllocator span_allocator_; + static PageHeapAllocator stacktrace_allocator_; + static Span sampled_objects_; + static PageHeapAllocator bucket_allocator_; + + // Linked list of stack traces recorded every time we allocated memory + // from the system. Useful for finding allocation sites that cause + // increase in the footprint of the system. The linked list pointer + // is stored in trace->stack[kMaxStackDepth-1]. + static StackTrace* growth_stacks_; + + static PageHeap* pageheap_; +}; + +} // namespace tcmalloc + +#endif // TCMALLOC_STATIC_VARS_H_ diff --git a/src/thirdparty/gperftools-2.0/src/symbolize.cc b/src/thirdparty/gperftools-2.0/src/symbolize.cc new file mode 100644 index 000000000..d90c4b889 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/symbolize.cc @@ -0,0 +1,280 @@ +// Copyright (c) 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// This forks out to pprof to do the actual symbolizing. We might +// be better off writing our own in C++. + +#include "config.h" +#include "symbolize.h" +#include +#ifdef HAVE_UNISTD_H +#include // for write() +#endif +#ifdef HAVE_SYS_SOCKET_H +#include // for socketpair() -- needed by Symbolize +#endif +#ifdef HAVE_SYS_WAIT_H +#include // for wait() -- needed by Symbolize +#endif +#ifdef HAVE_POLL_H +#include +#endif +#ifdef __MACH__ +#include // for GetProgramInvocationName() +#include // for PATH_MAX +#endif +#if defined(__CYGWIN__) || defined(__CYGWIN32__) +#include // for get_osfhandle() +#endif +#include +#include "base/commandlineflags.h" +#include "base/logging.h" +#include "base/sysinfo.h" + +using std::string; +using tcmalloc::DumpProcSelfMaps; // from sysinfo.h + + +DEFINE_string(symbolize_pprof, + EnvToString("PPROF_PATH", "pprof"), + "Path to pprof to call for reporting function names."); + +// heap_profile_table_pprof may be referenced after destructors are +// called (since that's when leak-checking is done), so we make +// a more-permanent copy that won't ever get destroyed. +static string* g_pprof_path = new string(FLAGS_symbolize_pprof); + +// Returns NULL if we're on an OS where we can't get the invocation name. +// Using a static var is ok because we're not called from a thread. +static char* GetProgramInvocationName() { +#if defined(HAVE_PROGRAM_INVOCATION_NAME) + extern char* program_invocation_name; // gcc provides this + return program_invocation_name; +#elif defined(__MACH__) + // We don't want to allocate memory for this since we may be + // calculating it when memory is corrupted. + static char program_invocation_name[PATH_MAX]; + if (program_invocation_name[0] == '\0') { // first time calculating + uint32_t length = sizeof(program_invocation_name); + if (_NSGetExecutablePath(program_invocation_name, &length)) + return NULL; + } + return program_invocation_name; +#else + return NULL; // figure out a way to get argv[0] +#endif +} + +// Prints an error message when you can't run Symbolize(). +static void PrintError(const char* reason) { + RAW_LOG(ERROR, + "*** WARNING: Cannot convert addresses to symbols in output below.\n" + "*** Reason: %s\n" + "*** If you cannot fix this, try running pprof directly.\n", + reason); +} + +void SymbolTable::Add(const void* addr) { + symbolization_table_[addr] = ""; +} + +const char* SymbolTable::GetSymbol(const void* addr) { + return symbolization_table_[addr]; +} + +// Updates symbolization_table with the pointers to symbol names corresponding +// to its keys. The symbol names are stored in out, which is allocated and +// freed by the caller of this routine. +// Note that the forking/etc is not thread-safe or re-entrant. That's +// ok for the purpose we need -- reporting leaks detected by heap-checker +// -- but be careful if you decide to use this routine for other purposes. +// Returns number of symbols read on error. If can't symbolize, returns 0 +// and emits an error message about why. +int SymbolTable::Symbolize() { +#if !defined(HAVE_UNISTD_H) || !defined(HAVE_SYS_SOCKET_H) || !defined(HAVE_SYS_WAIT_H) + PrintError("Perftools does not know how to call a sub-process on this O/S"); + return 0; +#else + const char* argv0 = GetProgramInvocationName(); + if (argv0 == NULL) { // can't call symbolize if we can't figure out our name + PrintError("Cannot figure out the name of this executable (argv0)"); + return 0; + } + if (access(g_pprof_path->c_str(), R_OK) != 0) { + PrintError("Cannot find 'pprof' (is PPROF_PATH set correctly?)"); + return 0; + } + + // All this work is to do two-way communication. ugh. + int *child_in = NULL; // file descriptors + int *child_out = NULL; // for now, we don't worry about child_err + int child_fds[5][2]; // socketpair may be called up to five times below + + // The client program may close its stdin and/or stdout and/or stderr + // thus allowing socketpair to reuse file descriptors 0, 1 or 2. + // In this case the communication between the forked processes may be broken + // if either the parent or the child tries to close or duplicate these + // descriptors. The loop below produces two pairs of file descriptors, each + // greater than 2 (stderr). + for (int i = 0; i < 5; i++) { + if (socketpair(AF_UNIX, SOCK_STREAM, 0, child_fds[i]) == -1) { + for (int j = 0; j < i; j++) { + close(child_fds[j][0]); + close(child_fds[j][1]); + PrintError("Cannot create a socket pair"); + return 0; + } + } else { + if ((child_fds[i][0] > 2) && (child_fds[i][1] > 2)) { + if (child_in == NULL) { + child_in = child_fds[i]; + } else { + child_out = child_fds[i]; + for (int j = 0; j < i; j++) { + if (child_fds[j] == child_in) continue; + close(child_fds[j][0]); + close(child_fds[j][1]); + } + break; + } + } + } + } + + switch (fork()) { + case -1: { // error + close(child_in[0]); + close(child_in[1]); + close(child_out[0]); + close(child_out[1]); + PrintError("Unknown error calling fork()"); + return 0; + } + case 0: { // child + close(child_in[1]); // child uses the 0's, parent uses the 1's + close(child_out[1]); // child uses the 0's, parent uses the 1's + close(0); + close(1); + if (dup2(child_in[0], 0) == -1) _exit(1); + if (dup2(child_out[0], 1) == -1) _exit(2); + // Unset vars that might cause trouble when we fork + unsetenv("CPUPROFILE"); + unsetenv("HEAPPROFILE"); + unsetenv("HEAPCHECK"); + unsetenv("PERFTOOLS_VERBOSE"); + execlp(g_pprof_path->c_str(), g_pprof_path->c_str(), + "--symbols", argv0, NULL); + _exit(3); // if execvp fails, it's bad news for us + } + default: { // parent + close(child_in[0]); // child uses the 0's, parent uses the 1's + close(child_out[0]); // child uses the 0's, parent uses the 1's +#ifdef HAVE_POLL_H + // Waiting for 1ms seems to give the OS time to notice any errors. + poll(0, 0, 1); + // For maximum safety, we check to make sure the execlp + // succeeded before trying to write. (Otherwise we'll get a + // SIGPIPE.) For systems without poll.h, we'll just skip this + // check, and trust that the user set PPROF_PATH correctly! + struct pollfd pfd = { child_in[1], POLLOUT, 0 }; + if (!poll(&pfd, 1, 0) || !(pfd.revents & POLLOUT) || + (pfd.revents & (POLLHUP|POLLERR))) { + PrintError("Cannot run 'pprof' (is PPROF_PATH set correctly?)"); + return 0; + } +#endif +#if defined(__CYGWIN__) || defined(__CYGWIN32__) + // On cygwin, DumpProcSelfMaps() takes a HANDLE, not an fd. Convert. + const HANDLE symbols_handle = (HANDLE) get_osfhandle(child_in[1]); + DumpProcSelfMaps(symbols_handle); +#else + DumpProcSelfMaps(child_in[1]); // what pprof expects on stdin +#endif + + // Allocate 24 bytes = ("0x" + 8 bytes + "\n" + overhead) for each + // address to feed to pprof. + const int kOutBufSize = 24 * symbolization_table_.size(); + char *pprof_buffer = new char[kOutBufSize]; + int written = 0; + for (SymbolMap::const_iterator iter = symbolization_table_.begin(); + iter != symbolization_table_.end(); ++iter) { + written += snprintf(pprof_buffer + written, kOutBufSize - written, + // pprof expects format to be 0xXXXXXX + "0x%"PRIxPTR"\n", reinterpret_cast(iter->first)); + } + write(child_in[1], pprof_buffer, strlen(pprof_buffer)); + close(child_in[1]); // that's all we need to write + + const int kSymbolBufferSize = kSymbolSize * symbolization_table_.size(); + int total_bytes_read = 0; + delete[] symbol_buffer_; + symbol_buffer_ = new char[kSymbolBufferSize]; + memset(symbol_buffer_, '\0', kSymbolBufferSize); + while (1) { + int bytes_read = read(child_out[1], symbol_buffer_ + total_bytes_read, + kSymbolBufferSize - total_bytes_read); + if (bytes_read < 0) { + close(child_out[1]); + PrintError("Cannot read data from pprof"); + return 0; + } else if (bytes_read == 0) { + close(child_out[1]); + wait(NULL); + break; + } else { + total_bytes_read += bytes_read; + } + } + // We have successfully read the output of pprof into out. Make sure + // the last symbol is full (we can tell because it ends with a \n). + if (total_bytes_read == 0 || symbol_buffer_[total_bytes_read - 1] != '\n') + return 0; + // make the symbolization_table_ values point to the output vector + SymbolMap::iterator fill = symbolization_table_.begin(); + int num_symbols = 0; + const char *current_name = symbol_buffer_; + for (int i = 0; i < total_bytes_read; i++) { + if (symbol_buffer_[i] == '\n') { + fill->second = current_name; + symbol_buffer_[i] = '\0'; + current_name = symbol_buffer_ + i + 1; + fill++; + num_symbols++; + } + } + return num_symbols; + } + } + PrintError("Unkown error (should never occur!)"); + return 0; // shouldn't be reachable +#endif +} diff --git a/src/thirdparty/gperftools-2.0/src/symbolize.h b/src/thirdparty/gperftools-2.0/src/symbolize.h new file mode 100644 index 000000000..12c976ba6 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/symbolize.h @@ -0,0 +1,83 @@ +// Copyright (c) 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein + +#ifndef TCMALLOC_SYMBOLIZE_H_ +#define TCMALLOC_SYMBOLIZE_H_ + +#include "config.h" +#ifdef HAVE_STDINT_H +#include // for uintptr_t +#endif +#include // for NULL +#include + +using std::map; + +// SymbolTable encapsulates the address operations necessary for stack trace +// symbolization. A common use-case is to Add() the addresses from one or +// several stack traces to a table, call Symbolize() once and use GetSymbol() +// to get the symbol names for pretty-printing the stack traces. +class SymbolTable { + public: + SymbolTable() + : symbol_buffer_(NULL) {} + ~SymbolTable() { + delete[] symbol_buffer_; + } + + // Adds an address to the table. This may overwrite a currently known symbol + // name, so Add() should not generally be called after Symbolize(). + void Add(const void* addr); + + // Returns the symbol name for addr, if the given address was added before + // the last successful call to Symbolize(). Otherwise may return an empty + // c-string. + const char* GetSymbol(const void* addr); + + // Obtains the symbol names for the addresses stored in the table and returns + // the number of addresses actually symbolized. + int Symbolize(); + + private: + typedef map SymbolMap; + + // An average size of memory allocated for a stack trace symbol. + static const int kSymbolSize = 1024; + + // Map from addresses to symbol names. + SymbolMap symbolization_table_; + + // Pointer to the buffer that stores the symbol names. + char *symbol_buffer_; +}; + +#endif // TCMALLOC_SYMBOLIZE_H_ diff --git a/src/thirdparty/gperftools-2.0/src/system-alloc.cc b/src/thirdparty/gperftools-2.0/src/system-alloc.cc new file mode 100644 index 000000000..abfe47213 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/system-alloc.cc @@ -0,0 +1,530 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#include +#include // for EAGAIN, errno +#include // for open, O_RDWR +#include // for size_t, NULL, ptrdiff_t +#if defined HAVE_STDINT_H +#include // for uintptr_t, intptr_t +#elif defined HAVE_INTTYPES_H +#include +#else +#include +#endif +#ifdef HAVE_MMAP +#include // for munmap, mmap, MADV_DONTNEED, etc +#endif +#ifdef HAVE_UNISTD_H +#include // for sbrk, getpagesize, off_t +#endif +#include // for operator new +#include +#include "base/basictypes.h" +#include "base/commandlineflags.h" +#include "base/spinlock.h" // for SpinLockHolder, SpinLock, etc +#include "common.h" +#include "internal_logging.h" + +// On systems (like freebsd) that don't define MAP_ANONYMOUS, use the old +// form of the name instead. +#ifndef MAP_ANONYMOUS +# define MAP_ANONYMOUS MAP_ANON +#endif + +// MADV_FREE is specifically designed for use by malloc(), but only +// FreeBSD supports it; in linux we fall back to the somewhat inferior +// MADV_DONTNEED. +#if !defined(MADV_FREE) && defined(MADV_DONTNEED) +# define MADV_FREE MADV_DONTNEED +#endif + +// Solaris has a bug where it doesn't declare madvise() for C++. +// http://www.opensolaris.org/jive/thread.jspa?threadID=21035&tstart=0 +#if defined(__sun) && defined(__SVR4) +# include // for caddr_t + extern "C" { extern int madvise(caddr_t, size_t, int); } +#endif + +// Set kDebugMode mode so that we can have use C++ conditionals +// instead of preprocessor conditionals. +#ifdef NDEBUG +static const bool kDebugMode = false; +#else +static const bool kDebugMode = true; +#endif + +// TODO(sanjay): Move the code below into the tcmalloc namespace +using tcmalloc::kLog; +using tcmalloc::Log; + +// Anonymous namespace to avoid name conflicts on "CheckAddressBits". +namespace { + +// Check that no bit is set at position ADDRESS_BITS or higher. +template bool CheckAddressBits(uintptr_t ptr) { + return (ptr >> ADDRESS_BITS) == 0; +} + +// Specialize for the bit width of a pointer to avoid undefined shift. +template <> bool CheckAddressBits<8 * sizeof(void*)>(uintptr_t ptr) { + return true; +} + +} // Anonymous namespace to avoid name conflicts on "CheckAddressBits". + +COMPILE_ASSERT(kAddressBits <= 8 * sizeof(void*), + address_bits_larger_than_pointer_size); + +// Structure for discovering alignment +union MemoryAligner { + void* p; + double d; + size_t s; +} CACHELINE_ALIGNED; + +static SpinLock spinlock(SpinLock::LINKER_INITIALIZED); + +#if defined(HAVE_MMAP) || defined(MADV_FREE) +// Page size is initialized on demand (only needed for mmap-based allocators) +static size_t pagesize = 0; +#endif + +// The current system allocator +SysAllocator* sys_alloc = NULL; + +// Configuration parameters. +DEFINE_int32(malloc_devmem_start, + EnvToInt("TCMALLOC_DEVMEM_START", 0), + "Physical memory starting location in MB for /dev/mem allocation." + " Setting this to 0 disables /dev/mem allocation"); +DEFINE_int32(malloc_devmem_limit, + EnvToInt("TCMALLOC_DEVMEM_LIMIT", 0), + "Physical memory limit location in MB for /dev/mem allocation." + " Setting this to 0 means no limit."); +DEFINE_bool(malloc_skip_sbrk, + EnvToBool("TCMALLOC_SKIP_SBRK", false), + "Whether sbrk can be used to obtain memory."); +DEFINE_bool(malloc_skip_mmap, + EnvToBool("TCMALLOC_SKIP_MMAP", false), + "Whether mmap can be used to obtain memory."); + +// static allocators +class SbrkSysAllocator : public SysAllocator { +public: + SbrkSysAllocator() : SysAllocator() { + } + void* Alloc(size_t size, size_t *actual_size, size_t alignment); +}; +static char sbrk_space[sizeof(SbrkSysAllocator)]; + +class MmapSysAllocator : public SysAllocator { +public: + MmapSysAllocator() : SysAllocator() { + } + void* Alloc(size_t size, size_t *actual_size, size_t alignment); +}; +static char mmap_space[sizeof(MmapSysAllocator)]; + +class DevMemSysAllocator : public SysAllocator { +public: + DevMemSysAllocator() : SysAllocator() { + } + void* Alloc(size_t size, size_t *actual_size, size_t alignment); +}; + +class DefaultSysAllocator : public SysAllocator { + public: + DefaultSysAllocator() : SysAllocator() { + for (int i = 0; i < kMaxAllocators; i++) { + failed_[i] = true; + allocs_[i] = NULL; + names_[i] = NULL; + } + } + void SetChildAllocator(SysAllocator* alloc, unsigned int index, + const char* name) { + if (index < kMaxAllocators && alloc != NULL) { + allocs_[index] = alloc; + failed_[index] = false; + names_[index] = name; + } + } + void* Alloc(size_t size, size_t *actual_size, size_t alignment); + + private: + static const int kMaxAllocators = 2; + bool failed_[kMaxAllocators]; + SysAllocator* allocs_[kMaxAllocators]; + const char* names_[kMaxAllocators]; +}; +static char default_space[sizeof(DefaultSysAllocator)]; +static const char sbrk_name[] = "SbrkSysAllocator"; +static const char mmap_name[] = "MmapSysAllocator"; + + +void* SbrkSysAllocator::Alloc(size_t size, size_t *actual_size, + size_t alignment) { +#ifndef HAVE_SBRK + failed_ = true; + return NULL; +#else + // Check if we should use sbrk allocation. + // FLAGS_malloc_skip_sbrk starts out as false (its uninitialized + // state) and eventually gets initialized to the specified value. Note + // that this code runs for a while before the flags are initialized. + // That means that even if this flag is set to true, some (initial) + // memory will be allocated with sbrk before the flag takes effect. + if (FLAGS_malloc_skip_sbrk) { + return NULL; + } + + // sbrk will release memory if passed a negative number, so we do + // a strict check here + if (static_cast(size + alignment) < 0) return NULL; + + // This doesn't overflow because TCMalloc_SystemAlloc has already + // tested for overflow at the alignment boundary. + size = ((size + alignment - 1) / alignment) * alignment; + + // "actual_size" indicates that the bytes from the returned pointer + // p up to and including (p + actual_size - 1) have been allocated. + if (actual_size) { + *actual_size = size; + } + + // Check that we we're not asking for so much more memory that we'd + // wrap around the end of the virtual address space. (This seems + // like something sbrk() should check for us, and indeed opensolaris + // does, but glibc does not: + // http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/sys/sbrk.c?a=true + // http://sourceware.org/cgi-bin/cvsweb.cgi/~checkout~/libc/misc/sbrk.c?rev=1.1.2.1&content-type=text/plain&cvsroot=glibc + // Without this check, sbrk may succeed when it ought to fail.) + if (reinterpret_cast(sbrk(0)) + size < size) { + return NULL; + } + + void* result = sbrk(size); + if (result == reinterpret_cast(-1)) { + return NULL; + } + + // Is it aligned? + uintptr_t ptr = reinterpret_cast(result); + if ((ptr & (alignment-1)) == 0) return result; + + // Try to get more memory for alignment + size_t extra = alignment - (ptr & (alignment-1)); + void* r2 = sbrk(extra); + if (reinterpret_cast(r2) == (ptr + size)) { + // Contiguous with previous result + return reinterpret_cast(ptr + extra); + } + + // Give up and ask for "size + alignment - 1" bytes so + // that we can find an aligned region within it. + result = sbrk(size + alignment - 1); + if (result == reinterpret_cast(-1)) { + return NULL; + } + ptr = reinterpret_cast(result); + if ((ptr & (alignment-1)) != 0) { + ptr += alignment - (ptr & (alignment-1)); + } + return reinterpret_cast(ptr); +#endif // HAVE_SBRK +} + +void* MmapSysAllocator::Alloc(size_t size, size_t *actual_size, + size_t alignment) { +#ifndef HAVE_MMAP + failed_ = true; + return NULL; +#else + // Check if we should use mmap allocation. + // FLAGS_malloc_skip_mmap starts out as false (its uninitialized + // state) and eventually gets initialized to the specified value. Note + // that this code runs for a while before the flags are initialized. + // Chances are we never get here before the flags are initialized since + // sbrk is used until the heap is exhausted (before mmap is used). + if (FLAGS_malloc_skip_mmap) { + return NULL; + } + + // Enforce page alignment + if (pagesize == 0) pagesize = getpagesize(); + if (alignment < pagesize) alignment = pagesize; + size_t aligned_size = ((size + alignment - 1) / alignment) * alignment; + if (aligned_size < size) { + return NULL; + } + size = aligned_size; + + // "actual_size" indicates that the bytes from the returned pointer + // p up to and including (p + actual_size - 1) have been allocated. + if (actual_size) { + *actual_size = size; + } + + // Ask for extra memory if alignment > pagesize + size_t extra = 0; + if (alignment > pagesize) { + extra = alignment - pagesize; + } + + // Note: size + extra does not overflow since: + // size + alignment < (1<(MAP_FAILED)) { + return NULL; + } + + // Adjust the return memory so it is aligned + uintptr_t ptr = reinterpret_cast(result); + size_t adjust = 0; + if ((ptr & (alignment - 1)) != 0) { + adjust = alignment - (ptr & (alignment - 1)); + } + + // Return the unused memory to the system + if (adjust > 0) { + munmap(reinterpret_cast(ptr), adjust); + } + if (adjust < extra) { + munmap(reinterpret_cast(ptr + adjust + size), extra - adjust); + } + + ptr += adjust; + return reinterpret_cast(ptr); +#endif // HAVE_MMAP +} + +void* DevMemSysAllocator::Alloc(size_t size, size_t *actual_size, + size_t alignment) { +#ifndef HAVE_MMAP + failed_ = true; + return NULL; +#else + static bool initialized = false; + static off_t physmem_base; // next physical memory address to allocate + static off_t physmem_limit; // maximum physical address allowed + static int physmem_fd; // file descriptor for /dev/mem + + // Check if we should use /dev/mem allocation. Note that it may take + // a while to get this flag initialized, so meanwhile we fall back to + // the next allocator. (It looks like 7MB gets allocated before + // this flag gets initialized -khr.) + if (FLAGS_malloc_devmem_start == 0) { + // NOTE: not a devmem_failure - we'd like TCMalloc_SystemAlloc to + // try us again next time. + return NULL; + } + + if (!initialized) { + physmem_fd = open("/dev/mem", O_RDWR); + if (physmem_fd < 0) { + return NULL; + } + physmem_base = FLAGS_malloc_devmem_start*1024LL*1024LL; + physmem_limit = FLAGS_malloc_devmem_limit*1024LL*1024LL; + initialized = true; + } + + // Enforce page alignment + if (pagesize == 0) pagesize = getpagesize(); + if (alignment < pagesize) alignment = pagesize; + size_t aligned_size = ((size + alignment - 1) / alignment) * alignment; + if (aligned_size < size) { + return NULL; + } + size = aligned_size; + + // "actual_size" indicates that the bytes from the returned pointer + // p up to and including (p + actual_size - 1) have been allocated. + if (actual_size) { + *actual_size = size; + } + + // Ask for extra memory if alignment > pagesize + size_t extra = 0; + if (alignment > pagesize) { + extra = alignment - pagesize; + } + + // check to see if we have any memory left + if (physmem_limit != 0 && + ((size + extra) > (physmem_limit - physmem_base))) { + return NULL; + } + + // Note: size + extra does not overflow since: + // size + alignment < (1<(MAP_FAILED)) { + return NULL; + } + uintptr_t ptr = reinterpret_cast(result); + + // Adjust the return memory so it is aligned + size_t adjust = 0; + if ((ptr & (alignment - 1)) != 0) { + adjust = alignment - (ptr & (alignment - 1)); + } + + // Return the unused virtual memory to the system + if (adjust > 0) { + munmap(reinterpret_cast(ptr), adjust); + } + if (adjust < extra) { + munmap(reinterpret_cast(ptr + adjust + size), extra - adjust); + } + + ptr += adjust; + physmem_base += adjust + size; + + return reinterpret_cast(ptr); +#endif // HAVE_MMAP +} + +void* DefaultSysAllocator::Alloc(size_t size, size_t *actual_size, + size_t alignment) { + for (int i = 0; i < kMaxAllocators; i++) { + if (!failed_[i] && allocs_[i] != NULL) { + void* result = allocs_[i]->Alloc(size, actual_size, alignment); + if (result != NULL) { + return result; + } + failed_[i] = true; + } + } + // After both failed, reset "failed_" to false so that a single failed + // allocation won't make the allocator never work again. + for (int i = 0; i < kMaxAllocators; i++) { + failed_[i] = false; + } + return NULL; +} + +static bool system_alloc_inited = false; +void InitSystemAllocators(void) { + MmapSysAllocator *mmap = new (mmap_space) MmapSysAllocator(); + SbrkSysAllocator *sbrk = new (sbrk_space) SbrkSysAllocator(); + + // In 64-bit debug mode, place the mmap allocator first since it + // allocates pointers that do not fit in 32 bits and therefore gives + // us better testing of code's 64-bit correctness. It also leads to + // less false negatives in heap-checking code. (Numbers are less + // likely to look like pointers and therefore the conservative gc in + // the heap-checker is less likely to misinterpret a number as a + // pointer). + DefaultSysAllocator *sdef = new (default_space) DefaultSysAllocator(); + if (kDebugMode && sizeof(void*) > 4) { + sdef->SetChildAllocator(mmap, 0, mmap_name); + sdef->SetChildAllocator(sbrk, 1, sbrk_name); + } else { + sdef->SetChildAllocator(sbrk, 0, sbrk_name); + sdef->SetChildAllocator(mmap, 1, mmap_name); + } + sys_alloc = sdef; +} + +void* TCMalloc_SystemAlloc(size_t size, size_t *actual_size, + size_t alignment) { + // Discard requests that overflow + if (size + alignment < size) return NULL; + + SpinLockHolder lock_holder(&spinlock); + + if (!system_alloc_inited) { + InitSystemAllocators(); + system_alloc_inited = true; + } + + // Enforce minimum alignment + if (alignment < sizeof(MemoryAligner)) alignment = sizeof(MemoryAligner); + + void* result = sys_alloc->Alloc(size, actual_size, alignment); + if (result != NULL) { + if (actual_size) { + CheckAddressBits( + reinterpret_cast(result) + *actual_size - 1); + } else { + CheckAddressBits( + reinterpret_cast(result) + size - 1); + } + } + return result; +} + +void TCMalloc_SystemRelease(void* start, size_t length) { +#ifdef MADV_FREE + if (FLAGS_malloc_devmem_start) { + // It's not safe to use MADV_FREE/MADV_DONTNEED if we've been + // mapping /dev/mem for heap memory. + return; + } + if (pagesize == 0) pagesize = getpagesize(); + const size_t pagemask = pagesize - 1; + + size_t new_start = reinterpret_cast(start); + size_t end = new_start + length; + size_t new_end = end; + + // Round up the starting address and round down the ending address + // to be page aligned: + new_start = (new_start + pagesize - 1) & ~pagemask; + new_end = new_end & ~pagemask; + + ASSERT((new_start & pagemask) == 0); + ASSERT((new_end & pagemask) == 0); + ASSERT(new_start >= reinterpret_cast(start)); + ASSERT(new_end <= end); + + if (new_end > new_start) { + // Note -- ignoring most return codes, because if this fails it + // doesn't matter... + while (madvise(reinterpret_cast(new_start), new_end - new_start, + MADV_FREE) == -1 && + errno == EAGAIN) { + // NOP + } + } +#endif +} diff --git a/src/thirdparty/gperftools-2.0/src/system-alloc.h b/src/thirdparty/gperftools-2.0/src/system-alloc.h new file mode 100644 index 000000000..814b5564d --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/system-alloc.h @@ -0,0 +1,77 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Routine that uses sbrk/mmap to allocate memory from the system. +// Useful for implementing malloc. + +#ifndef TCMALLOC_SYSTEM_ALLOC_H_ +#define TCMALLOC_SYSTEM_ALLOC_H_ + +#include +#include // for size_t + +class SysAllocator; + +// REQUIRES: "alignment" is a power of two or "0" to indicate default alignment +// +// Allocate and return "N" bytes of zeroed memory. +// +// If actual_bytes is NULL then the returned memory is exactly the +// requested size. If actual bytes is non-NULL then the allocator +// may optionally return more bytes than asked for (i.e. return an +// entire "huge" page if a huge page allocator is in use). +// +// The returned pointer is a multiple of "alignment" if non-zero. The +// returned pointer will always be aligned suitably for holding a +// void*, double, or size_t. In addition, if this platform defines +// CACHELINE_ALIGNED, the return pointer will always be cacheline +// aligned. +// +// Returns NULL when out of memory. +extern void* TCMalloc_SystemAlloc(size_t bytes, size_t *actual_bytes, + size_t alignment = 0); + +// This call is a hint to the operating system that the pages +// contained in the specified range of memory will not be used for a +// while, and can be released for use by other processes or the OS. +// Pages which are released in this way may be destroyed (zeroed) by +// the OS. The benefit of this function is that it frees memory for +// use by the system, the cost is that the pages are faulted back into +// the address space next time they are touched, which can impact +// performance. (Only pages fully covered by the memory region will +// be released, partial pages will not.) +extern void TCMalloc_SystemRelease(void* start, size_t length); + +// The current system allocator. +extern PERFTOOLS_DLL_DECL SysAllocator* sys_alloc; + +#endif /* TCMALLOC_SYSTEM_ALLOC_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/tcmalloc.cc b/src/thirdparty/gperftools-2.0/src/tcmalloc.cc new file mode 100644 index 000000000..095718ec9 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tcmalloc.cc @@ -0,0 +1,1652 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// A malloc that uses a per-thread cache to satisfy small malloc requests. +// (The time for malloc/free of a small object drops from 300 ns to 50 ns.) +// +// See doc/tcmalloc.html for a high-level +// description of how this malloc works. +// +// SYNCHRONIZATION +// 1. The thread-specific lists are accessed without acquiring any locks. +// This is safe because each such list is only accessed by one thread. +// 2. We have a lock per central free-list, and hold it while manipulating +// the central free list for a particular size. +// 3. The central page allocator is protected by "pageheap_lock". +// 4. The pagemap (which maps from page-number to descriptor), +// can be read without holding any locks, and written while holding +// the "pageheap_lock". +// 5. To improve performance, a subset of the information one can get +// from the pagemap is cached in a data structure, pagemap_cache_, +// that atomically reads and writes its entries. This cache can be +// read and written without locking. +// +// This multi-threaded access to the pagemap is safe for fairly +// subtle reasons. We basically assume that when an object X is +// allocated by thread A and deallocated by thread B, there must +// have been appropriate synchronization in the handoff of object +// X from thread A to thread B. The same logic applies to pagemap_cache_. +// +// THE PAGEID-TO-SIZECLASS CACHE +// Hot PageID-to-sizeclass mappings are held by pagemap_cache_. If this cache +// returns 0 for a particular PageID then that means "no information," not that +// the sizeclass is 0. The cache may have stale information for pages that do +// not hold the beginning of any free()'able object. Staleness is eliminated +// in Populate() for pages with sizeclass > 0 objects, and in do_malloc() and +// do_memalign() for all other relevant pages. +// +// PAGEMAP +// ------- +// Page map contains a mapping from page id to Span. +// +// If Span s occupies pages [p..q], +// pagemap[p] == s +// pagemap[q] == s +// pagemap[p+1..q-1] are undefined +// pagemap[p-1] and pagemap[q+1] are defined: +// NULL if the corresponding page is not yet in the address space. +// Otherwise it points to a Span. This span may be free +// or allocated. If free, it is in one of pageheap's freelist. +// +// TODO: Bias reclamation to larger addresses +// TODO: implement mallinfo/mallopt +// TODO: Better testing +// +// 9/28/2003 (new page-level allocator replaces ptmalloc2): +// * malloc/free of small objects goes from ~300 ns to ~50 ns. +// * allocation of a reasonably complicated struct +// goes from about 1100 ns to about 300 ns. + +#include "config.h" +#include + +#include // for ENOMEM, EINVAL, errno +#ifdef HAVE_SYS_CDEFS_H +#include // for __THROW +#endif +#if defined HAVE_STDINT_H +#include +#elif defined HAVE_INTTYPES_H +#include +#else +#include +#endif +#include // for size_t, NULL +#include // for getenv +#include // for strcmp, memset, strlen, etc +#ifdef HAVE_UNISTD_H +#include // for getpagesize, write, etc +#endif +#include // for max, min +#include // for numeric_limits +#include // for nothrow_t (ptr only), etc +#include // for vector + +#include +#include // for MallocHook +#include "base/basictypes.h" // for int64 +#include "base/commandlineflags.h" // for RegisterFlagValidator, etc +#include "base/dynamic_annotations.h" // for RunningOnValgrind +#include "base/spinlock.h" // for SpinLockHolder +#include "central_freelist.h" // for CentralFreeListPadded +#include "common.h" // for StackTrace, kPageShift, etc +#include "internal_logging.h" // for ASSERT, TCMalloc_Printer, etc +#include "linked_list.h" // for SLL_SetNext +#include "malloc_hook-inl.h" // for MallocHook::InvokeNewHook, etc +#include "page_heap.h" // for PageHeap, PageHeap::Stats +#include "page_heap_allocator.h" // for PageHeapAllocator +#include "span.h" // for Span, DLL_Prepend, etc +#include "stack_trace_table.h" // for StackTraceTable +#include "static_vars.h" // for Static +#include "system-alloc.h" // for DumpSystemAllocatorStats, etc +#include "tcmalloc_guard.h" // for TCMallocGuard +#include "thread_cache.h" // for ThreadCache + +// We only need malloc.h for struct mallinfo. +#ifdef HAVE_STRUCT_MALLINFO +// Malloc can be in several places on older versions of OS X. +# if defined(HAVE_MALLOC_H) +# include +# elif defined(HAVE_SYS_MALLOC_H) +# include +# elif defined(HAVE_MALLOC_MALLOC_H) +# include +# endif +#endif + +#if (defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)) && !defined(WIN32_OVERRIDE_ALLOCATORS) +# define WIN32_DO_PATCHING 1 +#endif + +// Some windows file somewhere (at least on cygwin) #define's small (!) +#undef small + +using STL_NAMESPACE::max; +using STL_NAMESPACE::numeric_limits; +using STL_NAMESPACE::vector; + +#include "libc_override.h" + +// __THROW is defined in glibc (via ). It means, +// counter-intuitively, "This function will never throw an exception." +// It's an optional optimization tool, but we may need to use it to +// match glibc prototypes. +#ifndef __THROW // I guess we're not on a glibc system +# define __THROW // __THROW is just an optimization, so ok to make it "" +#endif + +using tcmalloc::AlignmentForSize; +using tcmalloc::kLog; +using tcmalloc::kCrash; +using tcmalloc::kCrashWithStats; +using tcmalloc::Log; +using tcmalloc::PageHeap; +using tcmalloc::PageHeapAllocator; +using tcmalloc::SizeMap; +using tcmalloc::Span; +using tcmalloc::StackTrace; +using tcmalloc::Static; +using tcmalloc::ThreadCache; + +DECLARE_int64(tcmalloc_sample_parameter); +DECLARE_double(tcmalloc_release_rate); + +// For windows, the printf we use to report large allocs is +// potentially dangerous: it could cause a malloc that would cause an +// infinite loop. So by default we set the threshold to a huge number +// on windows, so this bad situation will never trigger. You can +// always set TCMALLOC_LARGE_ALLOC_REPORT_THRESHOLD manually if you +// want this functionality. +#ifdef _WIN32 +const int64 kDefaultLargeAllocReportThreshold = static_cast(1) << 62; +#else +const int64 kDefaultLargeAllocReportThreshold = static_cast(1) << 30; +#endif +DEFINE_int64(tcmalloc_large_alloc_report_threshold, + EnvToInt64("TCMALLOC_LARGE_ALLOC_REPORT_THRESHOLD", + kDefaultLargeAllocReportThreshold), + "Allocations larger than this value cause a stack " + "trace to be dumped to stderr. The threshold for " + "dumping stack traces is increased by a factor of 1.125 " + "every time we print a message so that the threshold " + "automatically goes up by a factor of ~1000 every 60 " + "messages. This bounds the amount of extra logging " + "generated by this flag. Default value of this flag " + "is very large and therefore you should see no extra " + "logging unless the flag is overridden. Set to 0 to " + "disable reporting entirely."); + + +// We already declared these functions in tcmalloc.h, but we have to +// declare them again to give them an ATTRIBUTE_SECTION: we want to +// put all callers of MallocHook::Invoke* in this module into +// ATTRIBUTE_SECTION(google_malloc) section, so that +// MallocHook::GetCallerStackTrace can function accurately. +#ifndef _WIN32 // windows doesn't have attribute_section, so don't bother +extern "C" { + void* tc_malloc(size_t size) __THROW + ATTRIBUTE_SECTION(google_malloc); + void tc_free(void* ptr) __THROW + ATTRIBUTE_SECTION(google_malloc); + void* tc_realloc(void* ptr, size_t size) __THROW + ATTRIBUTE_SECTION(google_malloc); + void* tc_calloc(size_t nmemb, size_t size) __THROW + ATTRIBUTE_SECTION(google_malloc); + void tc_cfree(void* ptr) __THROW + ATTRIBUTE_SECTION(google_malloc); + + void* tc_memalign(size_t __alignment, size_t __size) __THROW + ATTRIBUTE_SECTION(google_malloc); + int tc_posix_memalign(void** ptr, size_t align, size_t size) __THROW + ATTRIBUTE_SECTION(google_malloc); + void* tc_valloc(size_t __size) __THROW + ATTRIBUTE_SECTION(google_malloc); + void* tc_pvalloc(size_t __size) __THROW + ATTRIBUTE_SECTION(google_malloc); + + void tc_malloc_stats(void) __THROW + ATTRIBUTE_SECTION(google_malloc); + int tc_mallopt(int cmd, int value) __THROW + ATTRIBUTE_SECTION(google_malloc); +#ifdef HAVE_STRUCT_MALLINFO + struct mallinfo tc_mallinfo(void) __THROW + ATTRIBUTE_SECTION(google_malloc); +#endif + + void* tc_new(size_t size) + ATTRIBUTE_SECTION(google_malloc); + void tc_delete(void* p) __THROW + ATTRIBUTE_SECTION(google_malloc); + void* tc_newarray(size_t size) + ATTRIBUTE_SECTION(google_malloc); + void tc_deletearray(void* p) __THROW + ATTRIBUTE_SECTION(google_malloc); + + // And the nothrow variants of these: + void* tc_new_nothrow(size_t size, const std::nothrow_t&) __THROW + ATTRIBUTE_SECTION(google_malloc); + void* tc_newarray_nothrow(size_t size, const std::nothrow_t&) __THROW + ATTRIBUTE_SECTION(google_malloc); + // Surprisingly, standard C++ library implementations use a + // nothrow-delete internally. See, eg: + // http://www.dinkumware.com/manuals/?manual=compleat&page=new.html + void tc_delete_nothrow(void* ptr, const std::nothrow_t&) __THROW + ATTRIBUTE_SECTION(google_malloc); + void tc_deletearray_nothrow(void* ptr, const std::nothrow_t&) __THROW + ATTRIBUTE_SECTION(google_malloc); + + // Some non-standard extensions that we support. + + // This is equivalent to + // OS X: malloc_size() + // glibc: malloc_usable_size() + // Windows: _msize() + size_t tc_malloc_size(void* p) __THROW + ATTRIBUTE_SECTION(google_malloc); +} // extern "C" +#endif // #ifndef _WIN32 + +// ----------------------- IMPLEMENTATION ------------------------------- + +static int tc_new_mode = 0; // See tc_set_new_mode(). + +// Routines such as free() and realloc() catch some erroneous pointers +// passed to them, and invoke the below when they do. (An erroneous pointer +// won't be caught if it's within a valid span or a stale span for which +// the pagemap cache has a non-zero sizeclass.) This is a cheap (source-editing +// required) kind of exception handling for these routines. +namespace { +void InvalidFree(void* ptr) { + Log(kCrash, __FILE__, __LINE__, "Attempt to free invalid pointer", ptr); +} + +size_t InvalidGetSizeForRealloc(const void* old_ptr) { + Log(kCrash, __FILE__, __LINE__, + "Attempt to realloc invalid pointer", old_ptr); + return 0; +} + +size_t InvalidGetAllocatedSize(const void* ptr) { + Log(kCrash, __FILE__, __LINE__, + "Attempt to get the size of an invalid pointer", ptr); + return 0; +} +} // unnamed namespace + +// Extract interesting stats +struct TCMallocStats { + uint64_t thread_bytes; // Bytes in thread caches + uint64_t central_bytes; // Bytes in central cache + uint64_t transfer_bytes; // Bytes in central transfer cache + uint64_t metadata_bytes; // Bytes alloced for metadata + PageHeap::Stats pageheap; // Stats from page heap +}; + +// Get stats into "r". Also get per-size-class counts if class_count != NULL +static void ExtractStats(TCMallocStats* r, uint64_t* class_count, + PageHeap::SmallSpanStats* small_spans, + PageHeap::LargeSpanStats* large_spans) { + r->central_bytes = 0; + r->transfer_bytes = 0; + for (int cl = 0; cl < kNumClasses; ++cl) { + const int length = Static::central_cache()[cl].length(); + const int tc_length = Static::central_cache()[cl].tc_length(); + const size_t cache_overhead = Static::central_cache()[cl].OverheadBytes(); + const size_t size = static_cast( + Static::sizemap()->ByteSizeForClass(cl)); + r->central_bytes += (size * length) + cache_overhead; + r->transfer_bytes += (size * tc_length); + if (class_count) class_count[cl] = length + tc_length; + } + + // Add stats from per-thread heaps + r->thread_bytes = 0; + { // scope + SpinLockHolder h(Static::pageheap_lock()); + ThreadCache::GetThreadStats(&r->thread_bytes, class_count); + r->metadata_bytes = tcmalloc::metadata_system_bytes(); + r->pageheap = Static::pageheap()->stats(); + if (small_spans != NULL) { + Static::pageheap()->GetSmallSpanStats(small_spans); + } + if (large_spans != NULL) { + Static::pageheap()->GetLargeSpanStats(large_spans); + } + } +} + +static double PagesToMiB(uint64_t pages) { + return (pages << kPageShift) / 1048576.0; +} + +// WRITE stats to "out" +static void DumpStats(TCMalloc_Printer* out, int level) { + TCMallocStats stats; + uint64_t class_count[kNumClasses]; + PageHeap::SmallSpanStats small; + PageHeap::LargeSpanStats large; + if (level >= 2) { + ExtractStats(&stats, class_count, &small, &large); + } else { + ExtractStats(&stats, NULL, NULL, NULL); + } + + static const double MiB = 1048576.0; + + const uint64_t virtual_memory_used = (stats.pageheap.system_bytes + + stats.metadata_bytes); + const uint64_t physical_memory_used = (virtual_memory_used + - stats.pageheap.unmapped_bytes); + const uint64_t bytes_in_use_by_app = (physical_memory_used + - stats.metadata_bytes + - stats.pageheap.free_bytes + - stats.central_bytes + - stats.transfer_bytes + - stats.thread_bytes); + +#ifdef TCMALLOC_SMALL_BUT_SLOW + out->printf( + "NOTE: SMALL MEMORY MODEL IS IN USE, PERFORMANCE MAY SUFFER.\n"); +#endif + out->printf( + "------------------------------------------------\n" + "MALLOC: %12" PRIu64 " (%7.1f MiB) Bytes in use by application\n" + "MALLOC: + %12" PRIu64 " (%7.1f MiB) Bytes in page heap freelist\n" + "MALLOC: + %12" PRIu64 " (%7.1f MiB) Bytes in central cache freelist\n" + "MALLOC: + %12" PRIu64 " (%7.1f MiB) Bytes in transfer cache freelist\n" + "MALLOC: + %12" PRIu64 " (%7.1f MiB) Bytes in thread cache freelists\n" + "MALLOC: + %12" PRIu64 " (%7.1f MiB) Bytes in malloc metadata\n" + "MALLOC: ------------\n" + "MALLOC: = %12" PRIu64 " (%7.1f MiB) Actual memory used (physical + swap)\n" + "MALLOC: + %12" PRIu64 " (%7.1f MiB) Bytes released to OS (aka unmapped)\n" + "MALLOC: ------------\n" + "MALLOC: = %12" PRIu64 " (%7.1f MiB) Virtual address space used\n" + "MALLOC:\n" + "MALLOC: %12" PRIu64 " Spans in use\n" + "MALLOC: %12" PRIu64 " Thread heaps in use\n" + "MALLOC: %12" PRIu64 " Tcmalloc page size\n" + "------------------------------------------------\n" + "Call ReleaseFreeMemory() to release freelist memory to the OS" + " (via madvise()).\n" + "Bytes released to the OS take up virtual address space" + " but no physical memory.\n", + bytes_in_use_by_app, bytes_in_use_by_app / MiB, + stats.pageheap.free_bytes, stats.pageheap.free_bytes / MiB, + stats.central_bytes, stats.central_bytes / MiB, + stats.transfer_bytes, stats.transfer_bytes / MiB, + stats.thread_bytes, stats.thread_bytes / MiB, + stats.metadata_bytes, stats.metadata_bytes / MiB, + physical_memory_used, physical_memory_used / MiB, + stats.pageheap.unmapped_bytes, stats.pageheap.unmapped_bytes / MiB, + virtual_memory_used, virtual_memory_used / MiB, + uint64_t(Static::span_allocator()->inuse()), + uint64_t(ThreadCache::HeapsInUse()), + uint64_t(kPageSize)); + + if (level >= 2) { + out->printf("------------------------------------------------\n"); + out->printf("Size class breakdown\n"); + out->printf("------------------------------------------------\n"); + uint64_t cumulative = 0; + for (int cl = 0; cl < kNumClasses; ++cl) { + if (class_count[cl] > 0) { + uint64_t class_bytes = + class_count[cl] * Static::sizemap()->ByteSizeForClass(cl); + cumulative += class_bytes; + out->printf("class %3d [ %8" PRIuS " bytes ] : " + "%8" PRIu64 " objs; %5.1f MiB; %5.1f cum MiB\n", + cl, Static::sizemap()->ByteSizeForClass(cl), + class_count[cl], + class_bytes / MiB, + cumulative / MiB); + } + } + + // append page heap info + int nonempty_sizes = 0; + for (int s = 0; s < kMaxPages; s++) { + if (small.normal_length[s] + small.returned_length[s] > 0) { + nonempty_sizes++; + } + } + out->printf("------------------------------------------------\n"); + out->printf("PageHeap: %d sizes; %6.1f MiB free; %6.1f MiB unmapped\n", + nonempty_sizes, stats.pageheap.free_bytes / MiB, + stats.pageheap.unmapped_bytes / MiB); + out->printf("------------------------------------------------\n"); + uint64_t total_normal = 0; + uint64_t total_returned = 0; + for (int s = 0; s < kMaxPages; s++) { + const int n_length = small.normal_length[s]; + const int r_length = small.returned_length[s]; + if (n_length + r_length > 0) { + uint64_t n_pages = s * n_length; + uint64_t r_pages = s * r_length; + total_normal += n_pages; + total_returned += r_pages; + out->printf("%6u pages * %6u spans ~ %6.1f MiB; %6.1f MiB cum" + "; unmapped: %6.1f MiB; %6.1f MiB cum\n", + s, + (n_length + r_length), + PagesToMiB(n_pages + r_pages), + PagesToMiB(total_normal + total_returned), + PagesToMiB(r_pages), + PagesToMiB(total_returned)); + } + } + + total_normal += large.normal_pages; + total_returned += large.returned_pages; + out->printf(">255 large * %6u spans ~ %6.1f MiB; %6.1f MiB cum" + "; unmapped: %6.1f MiB; %6.1f MiB cum\n", + static_cast(large.spans), + PagesToMiB(large.normal_pages + large.returned_pages), + PagesToMiB(total_normal + total_returned), + PagesToMiB(large.returned_pages), + PagesToMiB(total_returned)); + } +} + +static void PrintStats(int level) { + const int kBufferSize = 16 << 10; + char* buffer = new char[kBufferSize]; + TCMalloc_Printer printer(buffer, kBufferSize); + DumpStats(&printer, level); + write(STDERR_FILENO, buffer, strlen(buffer)); + delete[] buffer; +} + +static void** DumpHeapGrowthStackTraces() { + // Count how much space we need + int needed_slots = 0; + { + SpinLockHolder h(Static::pageheap_lock()); + for (StackTrace* t = Static::growth_stacks(); + t != NULL; + t = reinterpret_cast( + t->stack[tcmalloc::kMaxStackDepth-1])) { + needed_slots += 3 + t->depth; + } + needed_slots += 100; // Slop in case list grows + needed_slots += needed_slots/8; // An extra 12.5% slop + } + + void** result = new void*[needed_slots]; + if (result == NULL) { + Log(kLog, __FILE__, __LINE__, + "tcmalloc: allocation failed for stack trace slots", + needed_slots * sizeof(*result)); + return NULL; + } + + SpinLockHolder h(Static::pageheap_lock()); + int used_slots = 0; + for (StackTrace* t = Static::growth_stacks(); + t != NULL; + t = reinterpret_cast( + t->stack[tcmalloc::kMaxStackDepth-1])) { + ASSERT(used_slots < needed_slots); // Need to leave room for terminator + if (used_slots + 3 + t->depth >= needed_slots) { + // No more room + break; + } + + result[used_slots+0] = reinterpret_cast(static_cast(1)); + result[used_slots+1] = reinterpret_cast(t->size); + result[used_slots+2] = reinterpret_cast(t->depth); + for (int d = 0; d < t->depth; d++) { + result[used_slots+3+d] = t->stack[d]; + } + used_slots += 3 + t->depth; + } + result[used_slots] = reinterpret_cast(static_cast(0)); + return result; +} + +static void IterateOverRanges(void* arg, MallocExtension::RangeFunction func) { + PageID page = 1; // Some code may assume that page==0 is never used + bool done = false; + while (!done) { + // Accumulate a small number of ranges in a local buffer + static const int kNumRanges = 16; + static base::MallocRange ranges[kNumRanges]; + int n = 0; + { + SpinLockHolder h(Static::pageheap_lock()); + while (n < kNumRanges) { + if (!Static::pageheap()->GetNextRange(page, &ranges[n])) { + done = true; + break; + } else { + uintptr_t limit = ranges[n].address + ranges[n].length; + page = (limit + kPageSize - 1) >> kPageShift; + n++; + } + } + } + + for (int i = 0; i < n; i++) { + (*func)(arg, &ranges[i]); + } + } +} + +// TCMalloc's support for extra malloc interfaces +class TCMallocImplementation : public MallocExtension { + private: + // ReleaseToSystem() might release more than the requested bytes because + // the page heap releases at the span granularity, and spans are of wildly + // different sizes. This member keeps track of the extra bytes bytes + // released so that the app can periodically call ReleaseToSystem() to + // release memory at a constant rate. + // NOTE: Protected by Static::pageheap_lock(). + size_t extra_bytes_released_; + + public: + TCMallocImplementation() + : extra_bytes_released_(0) { + } + + virtual void GetStats(char* buffer, int buffer_length) { + ASSERT(buffer_length > 0); + TCMalloc_Printer printer(buffer, buffer_length); + + // Print level one stats unless lots of space is available + if (buffer_length < 10000) { + DumpStats(&printer, 1); + } else { + DumpStats(&printer, 2); + } + } + + // We may print an extra, tcmalloc-specific warning message here. + virtual void GetHeapSample(MallocExtensionWriter* writer) { + if (FLAGS_tcmalloc_sample_parameter == 0) { + const char* const kWarningMsg = + "%warn\n" + "%warn This heap profile does not have any data in it, because\n" + "%warn the application was run with heap sampling turned off.\n" + "%warn To get useful data from GetHeapSample(), you must\n" + "%warn set the environment variable TCMALLOC_SAMPLE_PARAMETER to\n" + "%warn a positive sampling period, such as 524288.\n" + "%warn\n"; + writer->append(kWarningMsg, strlen(kWarningMsg)); + } + MallocExtension::GetHeapSample(writer); + } + + virtual void** ReadStackTraces(int* sample_period) { + tcmalloc::StackTraceTable table; + { + SpinLockHolder h(Static::pageheap_lock()); + Span* sampled = Static::sampled_objects(); + for (Span* s = sampled->next; s != sampled; s = s->next) { + table.AddTrace(*reinterpret_cast(s->objects)); + } + } + *sample_period = ThreadCache::GetCache()->GetSamplePeriod(); + return table.ReadStackTracesAndClear(); // grabs and releases pageheap_lock + } + + virtual void** ReadHeapGrowthStackTraces() { + return DumpHeapGrowthStackTraces(); + } + + virtual void Ranges(void* arg, RangeFunction func) { + IterateOverRanges(arg, func); + } + + virtual bool GetNumericProperty(const char* name, size_t* value) { + ASSERT(name != NULL); + + if (strcmp(name, "generic.current_allocated_bytes") == 0) { + TCMallocStats stats; + ExtractStats(&stats, NULL, NULL, NULL); + *value = stats.pageheap.system_bytes + - stats.thread_bytes + - stats.central_bytes + - stats.transfer_bytes + - stats.pageheap.free_bytes + - stats.pageheap.unmapped_bytes; + return true; + } + + if (strcmp(name, "generic.heap_size") == 0) { + TCMallocStats stats; + ExtractStats(&stats, NULL, NULL, NULL); + *value = stats.pageheap.system_bytes; + return true; + } + + if (strcmp(name, "tcmalloc.slack_bytes") == 0) { + // Kept for backwards compatibility. Now defined externally as: + // pageheap_free_bytes + pageheap_unmapped_bytes. + SpinLockHolder l(Static::pageheap_lock()); + PageHeap::Stats stats = Static::pageheap()->stats(); + *value = stats.free_bytes + stats.unmapped_bytes; + return true; + } + + if (strcmp(name, "tcmalloc.pageheap_free_bytes") == 0) { + SpinLockHolder l(Static::pageheap_lock()); + *value = Static::pageheap()->stats().free_bytes; + return true; + } + + if (strcmp(name, "tcmalloc.pageheap_unmapped_bytes") == 0) { + SpinLockHolder l(Static::pageheap_lock()); + *value = Static::pageheap()->stats().unmapped_bytes; + return true; + } + + if (strcmp(name, "tcmalloc.max_total_thread_cache_bytes") == 0) { + SpinLockHolder l(Static::pageheap_lock()); + *value = ThreadCache::overall_thread_cache_size(); + return true; + } + + if (strcmp(name, "tcmalloc.current_total_thread_cache_bytes") == 0) { + TCMallocStats stats; + ExtractStats(&stats, NULL, NULL, NULL); + *value = stats.thread_bytes; + return true; + } + + return false; + } + + virtual bool SetNumericProperty(const char* name, size_t value) { + ASSERT(name != NULL); + + if (strcmp(name, "tcmalloc.max_total_thread_cache_bytes") == 0) { + SpinLockHolder l(Static::pageheap_lock()); + ThreadCache::set_overall_thread_cache_size(value); + return true; + } + + return false; + } + + virtual void MarkThreadIdle() { + ThreadCache::BecomeIdle(); + } + + virtual void MarkThreadBusy(); // Implemented below + + virtual SysAllocator* GetSystemAllocator() { + SpinLockHolder h(Static::pageheap_lock()); + return sys_alloc; + } + + virtual void SetSystemAllocator(SysAllocator* alloc) { + SpinLockHolder h(Static::pageheap_lock()); + sys_alloc = alloc; + } + + virtual void ReleaseToSystem(size_t num_bytes) { + SpinLockHolder h(Static::pageheap_lock()); + if (num_bytes <= extra_bytes_released_) { + // We released too much on a prior call, so don't release any + // more this time. + extra_bytes_released_ = extra_bytes_released_ - num_bytes; + return; + } + num_bytes = num_bytes - extra_bytes_released_; + // num_bytes might be less than one page. If we pass zero to + // ReleaseAtLeastNPages, it won't do anything, so we release a whole + // page now and let extra_bytes_released_ smooth it out over time. + Length num_pages = max(num_bytes >> kPageShift, 1); + size_t bytes_released = Static::pageheap()->ReleaseAtLeastNPages( + num_pages) << kPageShift; + if (bytes_released > num_bytes) { + extra_bytes_released_ = bytes_released - num_bytes; + } else { + // The PageHeap wasn't able to release num_bytes. Don't try to + // compensate with a big release next time. Specifically, + // ReleaseFreeMemory() calls ReleaseToSystem(LONG_MAX). + extra_bytes_released_ = 0; + } + } + + virtual void SetMemoryReleaseRate(double rate) { + FLAGS_tcmalloc_release_rate = rate; + } + + virtual double GetMemoryReleaseRate() { + return FLAGS_tcmalloc_release_rate; + } + virtual size_t GetEstimatedAllocatedSize(size_t size) { + if (size <= kMaxSize) { + const size_t cl = Static::sizemap()->SizeClass(size); + const size_t alloc_size = Static::sizemap()->ByteSizeForClass(cl); + return alloc_size; + } else { + return tcmalloc::pages(size) << kPageShift; + } + } + + // This just calls GetSizeWithCallback, but because that's in an + // unnamed namespace, we need to move the definition below it in the + // file. + virtual size_t GetAllocatedSize(const void* ptr); + + // This duplicates some of the logic in GetSizeWithCallback, but is + // faster. This is important on OS X, where this function is called + // on every allocation operation. + virtual Ownership GetOwnership(const void* ptr) { + const PageID p = reinterpret_cast(ptr) >> kPageShift; + // The rest of tcmalloc assumes that all allocated pointers use at + // most kAddressBits bits. If ptr doesn't, then it definitely + // wasn't alloacted by tcmalloc. + if ((p >> (kAddressBits - kPageShift)) > 0) { + return kNotOwned; + } + size_t cl = Static::pageheap()->GetSizeClassIfCached(p); + if (cl != 0) { + return kOwned; + } + const Span *span = Static::pageheap()->GetDescriptor(p); + return span ? kOwned : kNotOwned; + } + + virtual void GetFreeListSizes(vector* v) { + static const char* kCentralCacheType = "tcmalloc.central"; + static const char* kTransferCacheType = "tcmalloc.transfer"; + static const char* kThreadCacheType = "tcmalloc.thread"; + static const char* kPageHeapType = "tcmalloc.page"; + static const char* kPageHeapUnmappedType = "tcmalloc.page_unmapped"; + static const char* kLargeSpanType = "tcmalloc.large"; + static const char* kLargeUnmappedSpanType = "tcmalloc.large_unmapped"; + + v->clear(); + + // central class information + int64 prev_class_size = 0; + for (int cl = 1; cl < kNumClasses; ++cl) { + size_t class_size = Static::sizemap()->ByteSizeForClass(cl); + MallocExtension::FreeListInfo i; + i.min_object_size = prev_class_size + 1; + i.max_object_size = class_size; + i.total_bytes_free = + Static::central_cache()[cl].length() * class_size; + i.type = kCentralCacheType; + v->push_back(i); + + // transfer cache + i.total_bytes_free = + Static::central_cache()[cl].tc_length() * class_size; + i.type = kTransferCacheType; + v->push_back(i); + + prev_class_size = Static::sizemap()->ByteSizeForClass(cl); + } + + // Add stats from per-thread heaps + uint64_t class_count[kNumClasses]; + memset(class_count, 0, sizeof(class_count)); + { + SpinLockHolder h(Static::pageheap_lock()); + uint64_t thread_bytes = 0; + ThreadCache::GetThreadStats(&thread_bytes, class_count); + } + + prev_class_size = 0; + for (int cl = 1; cl < kNumClasses; ++cl) { + MallocExtension::FreeListInfo i; + i.min_object_size = prev_class_size + 1; + i.max_object_size = Static::sizemap()->ByteSizeForClass(cl); + i.total_bytes_free = + class_count[cl] * Static::sizemap()->ByteSizeForClass(cl); + i.type = kThreadCacheType; + v->push_back(i); + } + + // append page heap info + PageHeap::SmallSpanStats small; + PageHeap::LargeSpanStats large; + { + SpinLockHolder h(Static::pageheap_lock()); + Static::pageheap()->GetSmallSpanStats(&small); + Static::pageheap()->GetLargeSpanStats(&large); + } + + // large spans: mapped + MallocExtension::FreeListInfo span_info; + span_info.type = kLargeSpanType; + span_info.max_object_size = (numeric_limits::max)(); + span_info.min_object_size = kMaxPages << kPageShift; + span_info.total_bytes_free = large.normal_pages << kPageShift; + v->push_back(span_info); + + // large spans: unmapped + span_info.type = kLargeUnmappedSpanType; + span_info.total_bytes_free = large.returned_pages << kPageShift; + v->push_back(span_info); + + // small spans + for (int s = 1; s < kMaxPages; s++) { + MallocExtension::FreeListInfo i; + i.max_object_size = (s << kPageShift); + i.min_object_size = ((s - 1) << kPageShift); + + i.type = kPageHeapType; + i.total_bytes_free = (s << kPageShift) * small.normal_length[s]; + v->push_back(i); + + i.type = kPageHeapUnmappedType; + i.total_bytes_free = (s << kPageShift) * small.returned_length[s]; + v->push_back(i); + } + } +}; + +// The constructor allocates an object to ensure that initialization +// runs before main(), and therefore we do not have a chance to become +// multi-threaded before initialization. We also create the TSD key +// here. Presumably by the time this constructor runs, glibc is in +// good enough shape to handle pthread_key_create(). +// +// The constructor also takes the opportunity to tell STL to use +// tcmalloc. We want to do this early, before construct time, so +// all user STL allocations go through tcmalloc (which works really +// well for STL). +// +// The destructor prints stats when the program exits. +static int tcmallocguard_refcount = 0; // no lock needed: runs before main() +TCMallocGuard::TCMallocGuard() { + if (tcmallocguard_refcount++ == 0) { +#ifdef HAVE_TLS // this is true if the cc/ld/libc combo support TLS + // Check whether the kernel also supports TLS (needs to happen at runtime) + tcmalloc::CheckIfKernelSupportsTLS(); +#endif + ReplaceSystemAlloc(); // defined in libc_override_*.h + tc_free(tc_malloc(1)); + ThreadCache::InitTSD(); + tc_free(tc_malloc(1)); + // Either we, or debugallocation.cc, or valgrind will control memory + // management. We register our extension if we're the winner. +#ifdef TCMALLOC_USING_DEBUGALLOCATION + // Let debugallocation register its extension. +#else + if (RunningOnValgrind()) { + // Let Valgrind uses its own malloc (so don't register our extension). + } else { + MallocExtension::Register(new TCMallocImplementation); + } +#endif + } +} + +TCMallocGuard::~TCMallocGuard() { + if (--tcmallocguard_refcount == 0) { + const char* env = getenv("MALLOCSTATS"); + if (env != NULL) { + int level = atoi(env); + if (level < 1) level = 1; + PrintStats(level); + } + } +} +#ifndef WIN32_OVERRIDE_ALLOCATORS +static TCMallocGuard module_enter_exit_hook; +#endif + +//------------------------------------------------------------------- +// Helpers for the exported routines below +//------------------------------------------------------------------- + +static inline bool CheckCachedSizeClass(void *ptr) { + PageID p = reinterpret_cast(ptr) >> kPageShift; + size_t cached_value = Static::pageheap()->GetSizeClassIfCached(p); + return cached_value == 0 || + cached_value == Static::pageheap()->GetDescriptor(p)->sizeclass; +} + +static inline void* CheckedMallocResult(void *result) { + ASSERT(result == NULL || CheckCachedSizeClass(result)); + return result; +} + +static inline void* SpanToMallocResult(Span *span) { + Static::pageheap()->CacheSizeClass(span->start, 0); + return + CheckedMallocResult(reinterpret_cast(span->start << kPageShift)); +} + +static void* DoSampledAllocation(size_t size) { + // Grab the stack trace outside the heap lock + StackTrace tmp; + tmp.depth = GetStackTrace(tmp.stack, tcmalloc::kMaxStackDepth, 1); + tmp.size = size; + + SpinLockHolder h(Static::pageheap_lock()); + // Allocate span + Span *span = Static::pageheap()->New(tcmalloc::pages(size == 0 ? 1 : size)); + if (span == NULL) { + return NULL; + } + + // Allocate stack trace + StackTrace *stack = Static::stacktrace_allocator()->New(); + if (stack == NULL) { + // Sampling failed because of lack of memory + return span; + } + *stack = tmp; + span->sample = 1; + span->objects = stack; + tcmalloc::DLL_Prepend(Static::sampled_objects(), span); + + return SpanToMallocResult(span); +} + +namespace { + +// Copy of FLAGS_tcmalloc_large_alloc_report_threshold with +// automatic increases factored in. +static int64_t large_alloc_threshold = + (kPageSize > FLAGS_tcmalloc_large_alloc_report_threshold + ? kPageSize : FLAGS_tcmalloc_large_alloc_report_threshold); + +static void ReportLargeAlloc(Length num_pages, void* result) { + StackTrace stack; + stack.depth = GetStackTrace(stack.stack, tcmalloc::kMaxStackDepth, 1); + + static const int N = 1000; + char buffer[N]; + TCMalloc_Printer printer(buffer, N); + printer.printf("tcmalloc: large alloc %"PRIu64" bytes == %p @ ", + static_cast(num_pages) << kPageShift, + result); + for (int i = 0; i < stack.depth; i++) { + printer.printf(" %p", stack.stack[i]); + } + printer.printf("\n"); + write(STDERR_FILENO, buffer, strlen(buffer)); +} + +inline void* cpp_alloc(size_t size, bool nothrow); +inline void* do_malloc(size_t size); + +// TODO(willchan): Investigate whether or not lining this much is harmful to +// performance. +// This is equivalent to do_malloc() except when tc_new_mode is set to true. +// Otherwise, it will run the std::new_handler if set. +inline void* do_malloc_or_cpp_alloc(size_t size) { + return tc_new_mode ? cpp_alloc(size, true) : do_malloc(size); +} + +void* cpp_memalign(size_t align, size_t size); +void* do_memalign(size_t align, size_t size); + +inline void* do_memalign_or_cpp_memalign(size_t align, size_t size) { + return tc_new_mode ? cpp_memalign(align, size) : do_memalign(align, size); +} + +// Must be called with the page lock held. +inline bool should_report_large(Length num_pages) { + const int64 threshold = large_alloc_threshold; + if (threshold > 0 && num_pages >= (threshold >> kPageShift)) { + // Increase the threshold by 1/8 every time we generate a report. + // We cap the threshold at 8GiB to avoid overflow problems. + large_alloc_threshold = (threshold + threshold/8 < 8ll<<30 + ? threshold + threshold/8 : 8ll<<30); + return true; + } + return false; +} + +// Helper for do_malloc(). +inline void* do_malloc_pages(ThreadCache* heap, size_t size) { + void* result; + bool report_large; + + Length num_pages = tcmalloc::pages(size); + size = num_pages << kPageShift; + + if ((FLAGS_tcmalloc_sample_parameter > 0) && heap->SampleAllocation(size)) { + result = DoSampledAllocation(size); + + SpinLockHolder h(Static::pageheap_lock()); + report_large = should_report_large(num_pages); + } else { + SpinLockHolder h(Static::pageheap_lock()); + Span* span = Static::pageheap()->New(num_pages); + result = (span == NULL ? NULL : SpanToMallocResult(span)); + report_large = should_report_large(num_pages); + } + + if (report_large) { + ReportLargeAlloc(num_pages, result); + } + return result; +} + +inline void* do_malloc(size_t size) { + void* ret = NULL; + + // The following call forces module initialization + ThreadCache* heap = ThreadCache::GetCache(); + if (size <= kMaxSize) { + size_t cl = Static::sizemap()->SizeClass(size); + size = Static::sizemap()->class_to_size(cl); + + if ((FLAGS_tcmalloc_sample_parameter > 0) && heap->SampleAllocation(size)) { + ret = DoSampledAllocation(size); + } else { + // The common case, and also the simplest. This just pops the + // size-appropriate freelist, after replenishing it if it's empty. + ret = CheckedMallocResult(heap->Allocate(size, cl)); + } + } else { + ret = do_malloc_pages(heap, size); + } + if (ret == NULL) errno = ENOMEM; + return ret; +} + +inline void* do_calloc(size_t n, size_t elem_size) { + // Overflow check + const size_t size = n * elem_size; + if (elem_size != 0 && size / elem_size != n) return NULL; + + void* result = do_malloc_or_cpp_alloc(size); + if (result != NULL) { + memset(result, 0, size); + } + return result; +} + +static inline ThreadCache* GetCacheIfPresent() { + void* const p = ThreadCache::GetCacheIfPresent(); + return reinterpret_cast(p); +} + +// This lets you call back to a given function pointer if ptr is invalid. +// It is used primarily by windows code which wants a specialized callback. +inline void do_free_with_callback(void* ptr, void (*invalid_free_fn)(void*)) { + if (ptr == NULL) return; + if (Static::pageheap() == NULL) { + // We called free() before malloc(). This can occur if the + // (system) malloc() is called before tcmalloc is loaded, and then + // free() is called after tcmalloc is loaded (and tc_free has + // replaced free), but before the global constructor has run that + // sets up the tcmalloc data structures. + (*invalid_free_fn)(ptr); // Decide how to handle the bad free request + return; + } + const PageID p = reinterpret_cast(ptr) >> kPageShift; + Span* span = NULL; + size_t cl = Static::pageheap()->GetSizeClassIfCached(p); + + if (cl == 0) { + span = Static::pageheap()->GetDescriptor(p); + if (!span) { + // span can be NULL because the pointer passed in is invalid + // (not something returned by malloc or friends), or because the + // pointer was allocated with some other allocator besides + // tcmalloc. The latter can happen if tcmalloc is linked in via + // a dynamic library, but is not listed last on the link line. + // In that case, libraries after it on the link line will + // allocate with libc malloc, but free with tcmalloc's free. + (*invalid_free_fn)(ptr); // Decide how to handle the bad free request + return; + } + cl = span->sizeclass; + Static::pageheap()->CacheSizeClass(p, cl); + } + if (cl != 0) { + ASSERT(!Static::pageheap()->GetDescriptor(p)->sample); + ThreadCache* heap = GetCacheIfPresent(); + if (heap != NULL) { + heap->Deallocate(ptr, cl); + } else { + // Delete directly into central cache + tcmalloc::SLL_SetNext(ptr, NULL); + Static::central_cache()[cl].InsertRange(ptr, ptr, 1); + } + } else { + SpinLockHolder h(Static::pageheap_lock()); + ASSERT(reinterpret_cast(ptr) % kPageSize == 0); + ASSERT(span != NULL && span->start == p); + if (span->sample) { + StackTrace* st = reinterpret_cast(span->objects); + tcmalloc::DLL_Remove(span); + Static::stacktrace_allocator()->Delete(st); + span->objects = NULL; + } + Static::pageheap()->Delete(span); + } +} + +// The default "do_free" that uses the default callback. +inline void do_free(void* ptr) { + return do_free_with_callback(ptr, &InvalidFree); +} + +// NOTE: some logic here is duplicated in GetOwnership (above), for +// speed. If you change this function, look at that one too. +inline size_t GetSizeWithCallback(const void* ptr, + size_t (*invalid_getsize_fn)(const void*)) { + if (ptr == NULL) + return 0; + const PageID p = reinterpret_cast(ptr) >> kPageShift; + size_t cl = Static::pageheap()->GetSizeClassIfCached(p); + if (cl != 0) { + return Static::sizemap()->ByteSizeForClass(cl); + } else { + const Span *span = Static::pageheap()->GetDescriptor(p); + if (span == NULL) { // means we do not own this memory + return (*invalid_getsize_fn)(ptr); + } else if (span->sizeclass != 0) { + Static::pageheap()->CacheSizeClass(p, span->sizeclass); + return Static::sizemap()->ByteSizeForClass(span->sizeclass); + } else { + return span->length << kPageShift; + } + } +} + +// This lets you call back to a given function pointer if ptr is invalid. +// It is used primarily by windows code which wants a specialized callback. +inline void* do_realloc_with_callback( + void* old_ptr, size_t new_size, + void (*invalid_free_fn)(void*), + size_t (*invalid_get_size_fn)(const void*)) { + // Get the size of the old entry + const size_t old_size = GetSizeWithCallback(old_ptr, invalid_get_size_fn); + + // Reallocate if the new size is larger than the old size, + // or if the new size is significantly smaller than the old size. + // We do hysteresis to avoid resizing ping-pongs: + // . If we need to grow, grow to max(new_size, old_size * 1.X) + // . Don't shrink unless new_size < old_size * 0.Y + // X and Y trade-off time for wasted space. For now we do 1.25 and 0.5. + const int lower_bound_to_grow = old_size + old_size / 4; + const int upper_bound_to_shrink = old_size / 2; + if ((new_size > old_size) || (new_size < upper_bound_to_shrink)) { + // Need to reallocate. + void* new_ptr = NULL; + + if (new_size > old_size && new_size < lower_bound_to_grow) { + new_ptr = do_malloc_or_cpp_alloc(lower_bound_to_grow); + } + if (new_ptr == NULL) { + // Either new_size is not a tiny increment, or last do_malloc failed. + new_ptr = do_malloc_or_cpp_alloc(new_size); + } + if (new_ptr == NULL) { + return NULL; + } + MallocHook::InvokeNewHook(new_ptr, new_size); + memcpy(new_ptr, old_ptr, ((old_size < new_size) ? old_size : new_size)); + MallocHook::InvokeDeleteHook(old_ptr); + // We could use a variant of do_free() that leverages the fact + // that we already know the sizeclass of old_ptr. The benefit + // would be small, so don't bother. + do_free_with_callback(old_ptr, invalid_free_fn); + return new_ptr; + } else { + // We still need to call hooks to report the updated size: + MallocHook::InvokeDeleteHook(old_ptr); + MallocHook::InvokeNewHook(old_ptr, new_size); + return old_ptr; + } +} + +inline void* do_realloc(void* old_ptr, size_t new_size) { + return do_realloc_with_callback(old_ptr, new_size, + &InvalidFree, &InvalidGetSizeForRealloc); +} + +// For use by exported routines below that want specific alignments +// +// Note: this code can be slow for alignments > 16, and can +// significantly fragment memory. The expectation is that +// memalign/posix_memalign/valloc/pvalloc will not be invoked very +// often. This requirement simplifies our implementation and allows +// us to tune for expected allocation patterns. +void* do_memalign(size_t align, size_t size) { + ASSERT((align & (align - 1)) == 0); + ASSERT(align > 0); + if (size + align < size) return NULL; // Overflow + + // Fall back to malloc if we would already align this memory access properly. + if (align <= AlignmentForSize(size)) { + void* p = do_malloc(size); + ASSERT((reinterpret_cast(p) % align) == 0); + return p; + } + + if (Static::pageheap() == NULL) ThreadCache::InitModule(); + + // Allocate at least one byte to avoid boundary conditions below + if (size == 0) size = 1; + + if (size <= kMaxSize && align < kPageSize) { + // Search through acceptable size classes looking for one with + // enough alignment. This depends on the fact that + // InitSizeClasses() currently produces several size classes that + // are aligned at powers of two. We will waste time and space if + // we miss in the size class array, but that is deemed acceptable + // since memalign() should be used rarely. + int cl = Static::sizemap()->SizeClass(size); + while (cl < kNumClasses && + ((Static::sizemap()->class_to_size(cl) & (align - 1)) != 0)) { + cl++; + } + if (cl < kNumClasses) { + ThreadCache* heap = ThreadCache::GetCache(); + size = Static::sizemap()->class_to_size(cl); + return CheckedMallocResult(heap->Allocate(size, cl)); + } + } + + // We will allocate directly from the page heap + SpinLockHolder h(Static::pageheap_lock()); + + if (align <= kPageSize) { + // Any page-level allocation will be fine + // TODO: We could put the rest of this page in the appropriate + // TODO: cache but it does not seem worth it. + Span* span = Static::pageheap()->New(tcmalloc::pages(size)); + return span == NULL ? NULL : SpanToMallocResult(span); + } + + // Allocate extra pages and carve off an aligned portion + const Length alloc = tcmalloc::pages(size + align); + Span* span = Static::pageheap()->New(alloc); + if (span == NULL) return NULL; + + // Skip starting portion so that we end up aligned + Length skip = 0; + while ((((span->start+skip) << kPageShift) & (align - 1)) != 0) { + skip++; + } + ASSERT(skip < alloc); + if (skip > 0) { + Span* rest = Static::pageheap()->Split(span, skip); + Static::pageheap()->Delete(span); + span = rest; + } + + // Skip trailing portion that we do not need to return + const Length needed = tcmalloc::pages(size); + ASSERT(span->length >= needed); + if (span->length > needed) { + Span* trailer = Static::pageheap()->Split(span, needed); + Static::pageheap()->Delete(trailer); + } + return SpanToMallocResult(span); +} + +// Helpers for use by exported routines below: + +inline void do_malloc_stats() { + PrintStats(1); +} + +inline int do_mallopt(int cmd, int value) { + return 1; // Indicates error +} + +#ifdef HAVE_STRUCT_MALLINFO +inline struct mallinfo do_mallinfo() { + TCMallocStats stats; + ExtractStats(&stats, NULL, NULL, NULL); + + // Just some of the fields are filled in. + struct mallinfo info; + memset(&info, 0, sizeof(info)); + + // Unfortunately, the struct contains "int" field, so some of the + // size values will be truncated. + info.arena = static_cast(stats.pageheap.system_bytes); + info.fsmblks = static_cast(stats.thread_bytes + + stats.central_bytes + + stats.transfer_bytes); + info.fordblks = static_cast(stats.pageheap.free_bytes + + stats.pageheap.unmapped_bytes); + info.uordblks = static_cast(stats.pageheap.system_bytes + - stats.thread_bytes + - stats.central_bytes + - stats.transfer_bytes + - stats.pageheap.free_bytes + - stats.pageheap.unmapped_bytes); + + return info; +} +#endif // HAVE_STRUCT_MALLINFO + +static SpinLock set_new_handler_lock(SpinLock::LINKER_INITIALIZED); + +inline void* cpp_alloc(size_t size, bool nothrow) { + for (;;) { + void* p = do_malloc(size); +#ifdef PREANSINEW + return p; +#else + if (p == NULL) { // allocation failed + // Get the current new handler. NB: this function is not + // thread-safe. We make a feeble stab at making it so here, but + // this lock only protects against tcmalloc interfering with + // itself, not with other libraries calling set_new_handler. + std::new_handler nh; + { + SpinLockHolder h(&set_new_handler_lock); + nh = std::set_new_handler(0); + (void) std::set_new_handler(nh); + } +#if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || (defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS) + if (nh) { + // Since exceptions are disabled, we don't really know if new_handler + // failed. Assume it will abort if it fails. + (*nh)(); + continue; + } + return 0; +#else + // If no new_handler is established, the allocation failed. + if (!nh) { + if (nothrow) return 0; + throw std::bad_alloc(); + } + // Otherwise, try the new_handler. If it returns, retry the + // allocation. If it throws std::bad_alloc, fail the allocation. + // if it throws something else, don't interfere. + try { + (*nh)(); + } catch (const std::bad_alloc&) { + if (!nothrow) throw; + return p; + } +#endif // (defined(__GNUC__) && !defined(__EXCEPTIONS)) || (defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS) + } else { // allocation success + return p; + } +#endif // PREANSINEW + } +} + +void* cpp_memalign(size_t align, size_t size) { + for (;;) { + void* p = do_memalign(align, size); +#ifdef PREANSINEW + return p; +#else + if (p == NULL) { // allocation failed + // Get the current new handler. NB: this function is not + // thread-safe. We make a feeble stab at making it so here, but + // this lock only protects against tcmalloc interfering with + // itself, not with other libraries calling set_new_handler. + std::new_handler nh; + { + SpinLockHolder h(&set_new_handler_lock); + nh = std::set_new_handler(0); + (void) std::set_new_handler(nh); + } +#if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || (defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS) + if (nh) { + // Since exceptions are disabled, we don't really know if new_handler + // failed. Assume it will abort if it fails. + (*nh)(); + continue; + } + return 0; +#else + // If no new_handler is established, the allocation failed. + if (!nh) + return 0; + + // Otherwise, try the new_handler. If it returns, retry the + // allocation. If it throws std::bad_alloc, fail the allocation. + // if it throws something else, don't interfere. + try { + (*nh)(); + } catch (const std::bad_alloc&) { + return p; + } +#endif // (defined(__GNUC__) && !defined(__EXCEPTIONS)) || (defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS) + } else { // allocation success + return p; + } +#endif // PREANSINEW + } +} + +} // end unnamed namespace + +// As promised, the definition of this function, declared above. +size_t TCMallocImplementation::GetAllocatedSize(const void* ptr) { + ASSERT(TCMallocImplementation::GetOwnership(ptr) + != TCMallocImplementation::kNotOwned); + return GetSizeWithCallback(ptr, &InvalidGetAllocatedSize); +} + +void TCMallocImplementation::MarkThreadBusy() { + // Allocate to force the creation of a thread cache, but avoid + // invoking any hooks. + do_free(do_malloc(0)); +} + +//------------------------------------------------------------------- +// Exported routines +//------------------------------------------------------------------- + +extern "C" PERFTOOLS_DLL_DECL const char* tc_version( + int* major, int* minor, const char** patch) __THROW { + if (major) *major = TC_VERSION_MAJOR; + if (minor) *minor = TC_VERSION_MINOR; + if (patch) *patch = TC_VERSION_PATCH; + return TC_VERSION_STRING; +} + +// This function behaves similarly to MSVC's _set_new_mode. +// If flag is 0 (default), calls to malloc will behave normally. +// If flag is 1, calls to malloc will behave like calls to new, +// and the std_new_handler will be invoked on failure. +// Returns the previous mode. +extern "C" PERFTOOLS_DLL_DECL int tc_set_new_mode(int flag) __THROW { + int old_mode = tc_new_mode; + tc_new_mode = flag; + return old_mode; +} + +#ifndef TCMALLOC_USING_DEBUGALLOCATION // debugallocation.cc defines its own + +// CAVEAT: The code structure below ensures that MallocHook methods are always +// called from the stack frame of the invoked allocation function. +// heap-checker.cc depends on this to start a stack trace from +// the call to the (de)allocation function. + +extern "C" PERFTOOLS_DLL_DECL void* tc_malloc(size_t size) __THROW { + void* result = do_malloc_or_cpp_alloc(size); + MallocHook::InvokeNewHook(result, size); + return result; +} + +extern "C" PERFTOOLS_DLL_DECL void tc_free(void* ptr) __THROW { + MallocHook::InvokeDeleteHook(ptr); + do_free(ptr); +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_calloc(size_t n, + size_t elem_size) __THROW { + void* result = do_calloc(n, elem_size); + MallocHook::InvokeNewHook(result, n * elem_size); + return result; +} + +extern "C" PERFTOOLS_DLL_DECL void tc_cfree(void* ptr) __THROW { + MallocHook::InvokeDeleteHook(ptr); + do_free(ptr); +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_realloc(void* old_ptr, + size_t new_size) __THROW { + if (old_ptr == NULL) { + void* result = do_malloc_or_cpp_alloc(new_size); + MallocHook::InvokeNewHook(result, new_size); + return result; + } + if (new_size == 0) { + MallocHook::InvokeDeleteHook(old_ptr); + do_free(old_ptr); + return NULL; + } + return do_realloc(old_ptr, new_size); +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_new(size_t size) { + void* p = cpp_alloc(size, false); + // We keep this next instruction out of cpp_alloc for a reason: when + // it's in, and new just calls cpp_alloc, the optimizer may fold the + // new call into cpp_alloc, which messes up our whole section-based + // stacktracing (see ATTRIBUTE_SECTION, above). This ensures cpp_alloc + // isn't the last thing this fn calls, and prevents the folding. + MallocHook::InvokeNewHook(p, size); + return p; +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_new_nothrow(size_t size, const std::nothrow_t&) __THROW { + void* p = cpp_alloc(size, true); + MallocHook::InvokeNewHook(p, size); + return p; +} + +extern "C" PERFTOOLS_DLL_DECL void tc_delete(void* p) __THROW { + MallocHook::InvokeDeleteHook(p); + do_free(p); +} + +// Standard C++ library implementations define and use this +// (via ::operator delete(ptr, nothrow)). +// But it's really the same as normal delete, so we just do the same thing. +extern "C" PERFTOOLS_DLL_DECL void tc_delete_nothrow(void* p, const std::nothrow_t&) __THROW { + MallocHook::InvokeDeleteHook(p); + do_free(p); +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_newarray(size_t size) { + void* p = cpp_alloc(size, false); + // We keep this next instruction out of cpp_alloc for a reason: when + // it's in, and new just calls cpp_alloc, the optimizer may fold the + // new call into cpp_alloc, which messes up our whole section-based + // stacktracing (see ATTRIBUTE_SECTION, above). This ensures cpp_alloc + // isn't the last thing this fn calls, and prevents the folding. + MallocHook::InvokeNewHook(p, size); + return p; +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_newarray_nothrow(size_t size, const std::nothrow_t&) + __THROW { + void* p = cpp_alloc(size, true); + MallocHook::InvokeNewHook(p, size); + return p; +} + +extern "C" PERFTOOLS_DLL_DECL void tc_deletearray(void* p) __THROW { + MallocHook::InvokeDeleteHook(p); + do_free(p); +} + +extern "C" PERFTOOLS_DLL_DECL void tc_deletearray_nothrow(void* p, const std::nothrow_t&) __THROW { + MallocHook::InvokeDeleteHook(p); + do_free(p); +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_memalign(size_t align, + size_t size) __THROW { + void* result = do_memalign_or_cpp_memalign(align, size); + MallocHook::InvokeNewHook(result, size); + return result; +} + +extern "C" PERFTOOLS_DLL_DECL int tc_posix_memalign( + void** result_ptr, size_t align, size_t size) __THROW { + if (((align % sizeof(void*)) != 0) || + ((align & (align - 1)) != 0) || + (align == 0)) { + return EINVAL; + } + + void* result = do_memalign_or_cpp_memalign(align, size); + MallocHook::InvokeNewHook(result, size); + if (result == NULL) { + return ENOMEM; + } else { + *result_ptr = result; + return 0; + } +} + +static size_t pagesize = 0; + +extern "C" PERFTOOLS_DLL_DECL void* tc_valloc(size_t size) __THROW { + // Allocate page-aligned object of length >= size bytes + if (pagesize == 0) pagesize = getpagesize(); + void* result = do_memalign_or_cpp_memalign(pagesize, size); + MallocHook::InvokeNewHook(result, size); + return result; +} + +extern "C" PERFTOOLS_DLL_DECL void* tc_pvalloc(size_t size) __THROW { + // Round up size to a multiple of pagesize + if (pagesize == 0) pagesize = getpagesize(); + if (size == 0) { // pvalloc(0) should allocate one page, according to + size = pagesize; // http://man.free4web.biz/man3/libmpatrol.3.html + } + size = (size + pagesize - 1) & ~(pagesize - 1); + void* result = do_memalign_or_cpp_memalign(pagesize, size); + MallocHook::InvokeNewHook(result, size); + return result; +} + +extern "C" PERFTOOLS_DLL_DECL void tc_malloc_stats(void) __THROW { + do_malloc_stats(); +} + +extern "C" PERFTOOLS_DLL_DECL int tc_mallopt(int cmd, int value) __THROW { + return do_mallopt(cmd, value); +} + +#ifdef HAVE_STRUCT_MALLINFO +extern "C" PERFTOOLS_DLL_DECL struct mallinfo tc_mallinfo(void) __THROW { + return do_mallinfo(); +} +#endif + +extern "C" PERFTOOLS_DLL_DECL size_t tc_malloc_size(void* ptr) __THROW { + return MallocExtension::instance()->GetAllocatedSize(ptr); +} + +#endif // TCMALLOC_USING_DEBUGALLOCATION diff --git a/src/thirdparty/gperftools-2.0/src/tcmalloc.h b/src/thirdparty/gperftools-2.0/src/tcmalloc.h new file mode 100644 index 000000000..3b0fe7cad --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tcmalloc.h @@ -0,0 +1,69 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// Some obscure memory-allocation routines may not be declared on all +// systems. In those cases, we'll just declare them ourselves. +// This file is meant to be used only internally, for unittests. + +#include + +#ifndef _XOPEN_SOURCE +# define _XOPEN_SOURCE 600 // for posix_memalign +#endif +#include // for posix_memalign +// FreeBSD has malloc.h, but complains if you use it +#if defined(HAVE_MALLOC_H) && !defined(__FreeBSD__) +#include // for memalign, valloc, pvalloc +#endif + +// __THROW is defined in glibc systems. It means, counter-intuitively, +// "This function will never throw an exception." It's an optional +// optimization tool, but we may need to use it to match glibc prototypes. +#ifndef __THROW // I guess we're not on a glibc system +# define __THROW // __THROW is just an optimization, so ok to make it "" +#endif + +#if !HAVE_CFREE_SYMBOL +extern "C" void cfree(void* ptr) __THROW; +#endif +#if !HAVE_POSIX_MEMALIGN_SYMBOL +extern "C" int posix_memalign(void** ptr, size_t align, size_t size) __THROW; +#endif +#if !HAVE_MEMALIGN_SYMBOL +extern "C" void* memalign(size_t __alignment, size_t __size) __THROW; +#endif +#if !HAVE_VALLOC_SYMBOL +extern "C" void* valloc(size_t __size) __THROW; +#endif +#if !HAVE_PVALLOC_SYMBOL +extern "C" void* pvalloc(size_t __size) __THROW; +#endif diff --git a/src/thirdparty/gperftools-2.0/src/tcmalloc_guard.h b/src/thirdparty/gperftools-2.0/src/tcmalloc_guard.h new file mode 100644 index 000000000..7874dadae --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tcmalloc_guard.h @@ -0,0 +1,48 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// We expose the TCMallocGuard class -- which initializes the tcmalloc +// allocator -- so classes that need to be sure tcmalloc is loaded +// before they do stuff -- notably heap-profiler -- can. To use this +// create a static TCMallocGuard instance at the top of a file where +// you need tcmalloc to be initialized before global constructors run. + +#ifndef TCMALLOC_TCMALLOC_GUARD_H_ +#define TCMALLOC_TCMALLOC_GUARD_H_ + +class TCMallocGuard { + public: + TCMallocGuard(); + ~TCMallocGuard(); +}; + +#endif // TCMALLOC_TCMALLOC_GUARD_H_ diff --git a/src/thirdparty/gperftools-2.0/src/tests/addressmap_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/addressmap_unittest.cc new file mode 100644 index 000000000..bfbb9a89b --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/addressmap_unittest.cc @@ -0,0 +1,170 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#include // for rand() +#include +#include +#include +#include +#include "addressmap-inl.h" +#include "base/logging.h" +#include "base/commandlineflags.h" + +DEFINE_int32(iters, 20, "Number of test iterations"); +DEFINE_int32(N, 100000, "Number of elements to test per iteration"); + +using std::pair; +using std::make_pair; +using std::vector; +using std::set; +using std::random_shuffle; + +struct UniformRandomNumberGenerator { + size_t Uniform(size_t max_size) { + if (max_size == 0) + return 0; + return rand() % max_size; // not a great random-number fn, but portable + } +}; +static UniformRandomNumberGenerator rnd; + + +// pair of associated value and object size +typedef pair ValueT; + +struct PtrAndSize { + char* ptr; + size_t size; + PtrAndSize(char* p, size_t s) : ptr(p), size(s) {} +}; + +size_t SizeFunc(const ValueT& v) { return v.second; } + +static void SetCheckCallback(const void* ptr, ValueT* val, + set >* check_set) { + check_set->insert(make_pair(ptr, val->first)); +} + +int main(int argc, char** argv) { + // Get a bunch of pointers + const int N = FLAGS_N; + static const int kMaxRealSize = 49; + // 100Mb to stress not finding previous object (AddressMap's cluster is 1Mb): + static const size_t kMaxSize = 100*1000*1000; + vector ptrs_and_sizes; + for (int i = 0; i < N; ++i) { + size_t s = rnd.Uniform(kMaxRealSize); + ptrs_and_sizes.push_back(PtrAndSize(new char[s], s)); + } + + for (int x = 0; x < FLAGS_iters; ++x) { + RAW_LOG(INFO, "Iteration %d/%d...\n", x, FLAGS_iters); + + // Permute pointers to get rid of allocation order issues + random_shuffle(ptrs_and_sizes.begin(), ptrs_and_sizes.end()); + + AddressMap map(malloc, free); + const ValueT* result; + const void* res_p; + + // Insert a bunch of entries + for (int i = 0; i < N; ++i) { + char* p = ptrs_and_sizes[i].ptr; + CHECK(!map.Find(p)); + int offs = rnd.Uniform(ptrs_and_sizes[i].size); + CHECK(!map.FindInside(&SizeFunc, kMaxSize, p + offs, &res_p)); + map.Insert(p, make_pair(i, ptrs_and_sizes[i].size)); + CHECK(result = map.Find(p)); + CHECK_EQ(result->first, i); + CHECK(result = map.FindInside(&SizeFunc, kMaxRealSize, p + offs, &res_p)); + CHECK_EQ(res_p, p); + CHECK_EQ(result->first, i); + map.Insert(p, make_pair(i + N, ptrs_and_sizes[i].size)); + CHECK(result = map.Find(p)); + CHECK_EQ(result->first, i + N); + } + + // Delete the even entries + for (int i = 0; i < N; i += 2) { + void* p = ptrs_and_sizes[i].ptr; + ValueT removed; + CHECK(map.FindAndRemove(p, &removed)); + CHECK_EQ(removed.first, i + N); + } + + // Lookup the odd entries and adjust them + for (int i = 1; i < N; i += 2) { + char* p = ptrs_and_sizes[i].ptr; + CHECK(result = map.Find(p)); + CHECK_EQ(result->first, i + N); + int offs = rnd.Uniform(ptrs_and_sizes[i].size); + CHECK(result = map.FindInside(&SizeFunc, kMaxRealSize, p + offs, &res_p)); + CHECK_EQ(res_p, p); + CHECK_EQ(result->first, i + N); + map.Insert(p, make_pair(i + 2*N, ptrs_and_sizes[i].size)); + CHECK(result = map.Find(p)); + CHECK_EQ(result->first, i + 2*N); + } + + // Insert even entries back + for (int i = 0; i < N; i += 2) { + char* p = ptrs_and_sizes[i].ptr; + int offs = rnd.Uniform(ptrs_and_sizes[i].size); + CHECK(!map.FindInside(&SizeFunc, kMaxSize, p + offs, &res_p)); + map.Insert(p, make_pair(i + 2*N, ptrs_and_sizes[i].size)); + CHECK(result = map.Find(p)); + CHECK_EQ(result->first, i + 2*N); + CHECK(result = map.FindInside(&SizeFunc, kMaxRealSize, p + offs, &res_p)); + CHECK_EQ(res_p, p); + CHECK_EQ(result->first, i + 2*N); + } + + // Check all entries + set > check_set; + map.Iterate(SetCheckCallback, &check_set); + CHECK_EQ(check_set.size(), N); + for (int i = 0; i < N; ++i) { + void* p = ptrs_and_sizes[i].ptr; + check_set.erase(make_pair(p, i + 2*N)); + CHECK(result = map.Find(p)); + CHECK_EQ(result->first, i + 2*N); + } + CHECK_EQ(check_set.size(), 0); + } + + for (int i = 0; i < N; ++i) { + delete[] ptrs_and_sizes[i].ptr; + } + + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/atomicops_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/atomicops_unittest.cc new file mode 100644 index 000000000..3892b59d8 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/atomicops_unittest.cc @@ -0,0 +1,257 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Sanjay Ghemawat + */ + +#include +#include "base/logging.h" +#include "base/atomicops.h" + +#define GG_ULONGLONG(x) static_cast(x) + +template +static void TestAtomicIncrement() { + // For now, we just test single threaded execution + + // use a guard value to make sure the NoBarrier_AtomicIncrement doesn't go + // outside the expected address bounds. This is in particular to + // test that some future change to the asm code doesn't cause the + // 32-bit NoBarrier_AtomicIncrement doesn't do the wrong thing on 64-bit + // machines. + struct { + AtomicType prev_word; + AtomicType count; + AtomicType next_word; + } s; + + AtomicType prev_word_value, next_word_value; + memset(&prev_word_value, 0xFF, sizeof(AtomicType)); + memset(&next_word_value, 0xEE, sizeof(AtomicType)); + + s.prev_word = prev_word_value; + s.count = 0; + s.next_word = next_word_value; + + ASSERT_EQ(1, base::subtle::NoBarrier_AtomicIncrement(&s.count, 1)); + ASSERT_EQ(1, s.count); + ASSERT_EQ(prev_word_value, s.prev_word); + ASSERT_EQ(next_word_value, s.next_word); + + ASSERT_EQ(3, base::subtle::NoBarrier_AtomicIncrement(&s.count, 2)); + ASSERT_EQ(3, s.count); + ASSERT_EQ(prev_word_value, s.prev_word); + ASSERT_EQ(next_word_value, s.next_word); + + ASSERT_EQ(6, base::subtle::NoBarrier_AtomicIncrement(&s.count, 3)); + ASSERT_EQ(6, s.count); + ASSERT_EQ(prev_word_value, s.prev_word); + ASSERT_EQ(next_word_value, s.next_word); + + ASSERT_EQ(3, base::subtle::NoBarrier_AtomicIncrement(&s.count, -3)); + ASSERT_EQ(3, s.count); + ASSERT_EQ(prev_word_value, s.prev_word); + ASSERT_EQ(next_word_value, s.next_word); + + ASSERT_EQ(1, base::subtle::NoBarrier_AtomicIncrement(&s.count, -2)); + ASSERT_EQ(1, s.count); + ASSERT_EQ(prev_word_value, s.prev_word); + ASSERT_EQ(next_word_value, s.next_word); + + ASSERT_EQ(0, base::subtle::NoBarrier_AtomicIncrement(&s.count, -1)); + ASSERT_EQ(0, s.count); + ASSERT_EQ(prev_word_value, s.prev_word); + ASSERT_EQ(next_word_value, s.next_word); + + ASSERT_EQ(-1, base::subtle::NoBarrier_AtomicIncrement(&s.count, -1)); + ASSERT_EQ(-1, s.count); + ASSERT_EQ(prev_word_value, s.prev_word); + ASSERT_EQ(next_word_value, s.next_word); + + ASSERT_EQ(-5, base::subtle::NoBarrier_AtomicIncrement(&s.count, -4)); + ASSERT_EQ(-5, s.count); + ASSERT_EQ(prev_word_value, s.prev_word); + ASSERT_EQ(next_word_value, s.next_word); + + ASSERT_EQ(0, base::subtle::NoBarrier_AtomicIncrement(&s.count, 5)); + ASSERT_EQ(0, s.count); + ASSERT_EQ(prev_word_value, s.prev_word); + ASSERT_EQ(next_word_value, s.next_word); +} + + +#define NUM_BITS(T) (sizeof(T) * 8) + + +template +static void TestCompareAndSwap() { + AtomicType value = 0; + AtomicType prev = base::subtle::NoBarrier_CompareAndSwap(&value, 0, 1); + ASSERT_EQ(1, value); + ASSERT_EQ(0, prev); + + // Use test value that has non-zero bits in both halves, more for testing + // 64-bit implementation on 32-bit platforms. + const AtomicType k_test_val = (GG_ULONGLONG(1) << + (NUM_BITS(AtomicType) - 2)) + 11; + value = k_test_val; + prev = base::subtle::NoBarrier_CompareAndSwap(&value, 0, 5); + ASSERT_EQ(k_test_val, value); + ASSERT_EQ(k_test_val, prev); + + value = k_test_val; + prev = base::subtle::NoBarrier_CompareAndSwap(&value, k_test_val, 5); + ASSERT_EQ(5, value); + ASSERT_EQ(k_test_val, prev); +} + + +template +static void TestAtomicExchange() { + AtomicType value = 0; + AtomicType new_value = base::subtle::NoBarrier_AtomicExchange(&value, 1); + ASSERT_EQ(1, value); + ASSERT_EQ(0, new_value); + + // Use test value that has non-zero bits in both halves, more for testing + // 64-bit implementation on 32-bit platforms. + const AtomicType k_test_val = (GG_ULONGLONG(1) << + (NUM_BITS(AtomicType) - 2)) + 11; + value = k_test_val; + new_value = base::subtle::NoBarrier_AtomicExchange(&value, k_test_val); + ASSERT_EQ(k_test_val, value); + ASSERT_EQ(k_test_val, new_value); + + value = k_test_val; + new_value = base::subtle::NoBarrier_AtomicExchange(&value, 5); + ASSERT_EQ(5, value); + ASSERT_EQ(k_test_val, new_value); +} + + +template +static void TestAtomicIncrementBounds() { + // Test increment at the half-width boundary of the atomic type. + // It is primarily for testing at the 32-bit boundary for 64-bit atomic type. + AtomicType test_val = GG_ULONGLONG(1) << (NUM_BITS(AtomicType) / 2); + AtomicType value = test_val - 1; + AtomicType new_value = base::subtle::NoBarrier_AtomicIncrement(&value, 1); + ASSERT_EQ(test_val, value); + ASSERT_EQ(value, new_value); + + base::subtle::NoBarrier_AtomicIncrement(&value, -1); + ASSERT_EQ(test_val - 1, value); +} + +// This is a simple sanity check that values are correct. Not testing +// atomicity +template +static void TestStore() { + const AtomicType kVal1 = static_cast(0xa5a5a5a5a5a5a5a5LL); + const AtomicType kVal2 = static_cast(-1); + + AtomicType value; + + base::subtle::NoBarrier_Store(&value, kVal1); + ASSERT_EQ(kVal1, value); + base::subtle::NoBarrier_Store(&value, kVal2); + ASSERT_EQ(kVal2, value); + + base::subtle::Acquire_Store(&value, kVal1); + ASSERT_EQ(kVal1, value); + base::subtle::Acquire_Store(&value, kVal2); + ASSERT_EQ(kVal2, value); + + base::subtle::Release_Store(&value, kVal1); + ASSERT_EQ(kVal1, value); + base::subtle::Release_Store(&value, kVal2); + ASSERT_EQ(kVal2, value); +} + +// This is a simple sanity check that values are correct. Not testing +// atomicity +template +static void TestLoad() { + const AtomicType kVal1 = static_cast(0xa5a5a5a5a5a5a5a5LL); + const AtomicType kVal2 = static_cast(-1); + + AtomicType value; + + value = kVal1; + ASSERT_EQ(kVal1, base::subtle::NoBarrier_Load(&value)); + value = kVal2; + ASSERT_EQ(kVal2, base::subtle::NoBarrier_Load(&value)); + + value = kVal1; + ASSERT_EQ(kVal1, base::subtle::Acquire_Load(&value)); + value = kVal2; + ASSERT_EQ(kVal2, base::subtle::Acquire_Load(&value)); + + value = kVal1; + ASSERT_EQ(kVal1, base::subtle::Release_Load(&value)); + value = kVal2; + ASSERT_EQ(kVal2, base::subtle::Release_Load(&value)); +} + +template +static void TestAtomicOps() { + TestCompareAndSwap(); + TestAtomicExchange(); + TestAtomicIncrementBounds(); + TestStore(); + TestLoad(); +} + +int main(int argc, char** argv) { + TestAtomicIncrement(); + TestAtomicIncrement(); + + TestAtomicOps(); + TestAtomicOps(); + + // I've commented the Atomic64 tests out for now, because Atomic64 + // doesn't work on x86 systems that are not compiled to support mmx + // registers. Since I want this project to be as portable as + // possible -- that is, not to assume we've compiled for mmx or even + // that the processor supports it -- and we don't actually use + // Atomic64 anywhere, I've commented it out of the test for now. + // (Luckily, if we ever do use Atomic64 by accident, we'll get told + // via a compiler error rather than some obscure runtime failure, so + // this course of action is safe.) + // If we ever *do* want to enable this, try adding -msse (or -mmmx?) + // to the CXXFLAGS in Makefile.am. +#if 0 and defined(BASE_HAS_ATOMIC64) + TestAtomicIncrement(); + TestAtomicOps(); +#endif + + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/current_allocated_bytes_test.cc b/src/thirdparty/gperftools-2.0/src/tests/current_allocated_bytes_test.cc new file mode 100644 index 000000000..e05ec18f3 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/current_allocated_bytes_test.cc @@ -0,0 +1,63 @@ +// Copyright (c) 2011, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// --- +// +// Author: Craig Silverstein + +// This tests the accounting done by tcmalloc. When we allocate and +// free a small buffer, the number of bytes used by the application +// before the alloc+free should match the number of bytes used after. +// However, the internal data structures used by tcmalloc will be +// quite different -- new spans will have been allocated, etc. This +// is, thus, a simple test that we account properly for the internal +// data structures, so that we report the actual application-used +// bytes properly. + +#include "config_for_unittests.h" +#include +#include +#include +#include "base/logging.h" + +const char kCurrent[] = "generic.current_allocated_bytes"; + +int main() { + // We don't do accounting right when using debugallocation.cc, so + // turn off the test then. TODO(csilvers): get this working too. +#ifdef NDEBUG + size_t before_bytes, after_bytes; + MallocExtension::instance()->GetNumericProperty(kCurrent, &before_bytes); + free(malloc(200)); + MallocExtension::instance()->GetNumericProperty(kCurrent, &after_bytes); + + CHECK_EQ(before_bytes, after_bytes); +#endif + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/debugallocation_test.cc b/src/thirdparty/gperftools-2.0/src/tests/debugallocation_test.cc new file mode 100644 index 000000000..56ae30e81 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/debugallocation_test.cc @@ -0,0 +1,313 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Fred Akalin + +#include +#include +#include +#include "gperftools/malloc_extension.h" +#include "base/logging.h" + +using std::vector; + +vector g_testlist; // the tests to run + +#define TEST(a, b) \ + struct Test_##a##_##b { \ + Test_##a##_##b() { g_testlist.push_back(&Run); } \ + static void Run(); \ + }; \ + static Test_##a##_##b g_test_##a##_##b; \ + void Test_##a##_##b::Run() + + +static int RUN_ALL_TESTS() { + vector::const_iterator it; + for (it = g_testlist.begin(); it != g_testlist.end(); ++it) { + (*it)(); // The test will error-exit if there's a problem. + } + fprintf(stderr, "\nPassed %d tests\n\nPASS\n", + static_cast(g_testlist.size())); + return 0; +} + +// The death tests are meant to be run from a shell-script driver, which +// passes in an integer saying which death test to run. We store that +// test-to-run here, and in the macro use a counter to see when we get +// to that test, so we can run it. +static int test_to_run = 0; // set in main() based on argv +static int test_counter = 0; // incremented every time the macro is called +#define IF_DEBUG_EXPECT_DEATH(statement, regex) do { \ + if (test_counter++ == test_to_run) { \ + fprintf(stderr, "Expected regex:%s\n", regex); \ + statement; \ + } \ +} while (false) + +// This flag won't be compiled in in opt mode. +DECLARE_int32(max_free_queue_size); + +// Test match as well as mismatch rules. But do not test on OS X; on +// OS X the OS converts new/new[] to malloc before it gets to us, so +// we are unable to catch these mismatch errors. +#ifndef __APPLE__ +TEST(DebugAllocationTest, DeallocMismatch) { + // malloc can be matched only by free + // new can be matched only by delete and delete(nothrow) + // new[] can be matched only by delete[] and delete[](nothrow) + // new(nothrow) can be matched only by delete and delete(nothrow) + // new(nothrow)[] can be matched only by delete[] and delete[](nothrow) + + // Allocate with malloc. + { + int* x = static_cast(malloc(sizeof(*x))); + IF_DEBUG_EXPECT_DEATH(delete x, "mismatch.*being dealloc.*delete"); + IF_DEBUG_EXPECT_DEATH(delete [] x, "mismatch.*being dealloc.*delete *[[]"); + // Should work fine. + free(x); + } + + // Allocate with new. + { + int* x = new int; + int* y = new int; + IF_DEBUG_EXPECT_DEATH(free(x), "mismatch.*being dealloc.*free"); + IF_DEBUG_EXPECT_DEATH(delete [] x, "mismatch.*being dealloc.*delete *[[]"); + delete x; + ::operator delete(y, std::nothrow); + } + + // Allocate with new[]. + { + int* x = new int[1]; + int* y = new int[1]; + IF_DEBUG_EXPECT_DEATH(free(x), "mismatch.*being dealloc.*free"); + IF_DEBUG_EXPECT_DEATH(delete x, "mismatch.*being dealloc.*delete"); + delete [] x; + ::operator delete[](y, std::nothrow); + } + + // Allocate with new(nothrow). + { + int* x = new(std::nothrow) int; + int* y = new(std::nothrow) int; + IF_DEBUG_EXPECT_DEATH(free(x), "mismatch.*being dealloc.*free"); + IF_DEBUG_EXPECT_DEATH(delete [] x, "mismatch.*being dealloc.*delete *[[]"); + delete x; + ::operator delete(y, std::nothrow); + } + + // Allocate with new(nothrow)[]. + { + int* x = new(std::nothrow) int[1]; + int* y = new(std::nothrow) int[1]; + IF_DEBUG_EXPECT_DEATH(free(x), "mismatch.*being dealloc.*free"); + IF_DEBUG_EXPECT_DEATH(delete x, "mismatch.*being dealloc.*delete"); + delete [] x; + ::operator delete[](y, std::nothrow); + } +} +#endif // #ifdef OS_MACOSX + +TEST(DebugAllocationTest, DoubleFree) { + int* pint = new int; + delete pint; + IF_DEBUG_EXPECT_DEATH(delete pint, "has been already deallocated"); +} + +TEST(DebugAllocationTest, StompBefore) { + int* pint = new int; +#ifndef NDEBUG // don't stomp memory if we're not in a position to detect it + pint[-1] = 5; + IF_DEBUG_EXPECT_DEATH(delete pint, "a word before object"); +#endif +} + +TEST(DebugAllocationTest, StompAfter) { + int* pint = new int; +#ifndef NDEBUG // don't stomp memory if we're not in a position to detect it + pint[1] = 5; + IF_DEBUG_EXPECT_DEATH(delete pint, "a word after object"); +#endif +} + +TEST(DebugAllocationTest, FreeQueueTest) { + // Verify that the allocator doesn't return blocks that were recently freed. + int* x = new int; + int* old_x = x; + delete x; + x = new int; + #if 1 + // This check should not be read as a universal guarantee of behavior. If + // other threads are executing, it would be theoretically possible for this + // check to fail despite the efforts of debugallocation.cc to the contrary. + // It should always hold under the controlled conditions of this unittest, + // however. + EXPECT_NE(x, old_x); // Allocator shouldn't return recently freed blocks + #else + // The below check passes, but since it isn't *required* to pass, I've left + // it commented out. + // EXPECT_EQ(x, old_x); + #endif + old_x = NULL; // avoid breaking opt build with an unused variable warning. + delete x; +} + +TEST(DebugAllocationTest, DanglingPointerWriteTest) { + // This test can only be run if debugging. + // + // If not debugging, the 'new' following the dangling write might not be + // safe. When debugging, we expect the (trashed) deleted block to be on the + // list of recently-freed blocks, so the following 'new' will be safe. +#if 1 + int* x = new int; + delete x; + int poisoned_x_value = *x; + *x = 1; // a dangling write. + + char* s = new char[FLAGS_max_free_queue_size]; + // When we delete s, we push the storage that was previously allocated to x + // off the end of the free queue. At that point, the write to that memory + // will be detected. + IF_DEBUG_EXPECT_DEATH(delete [] s, "Memory was written to after being freed."); + + // restore the poisoned value of x so that we can delete s without causing a + // crash. + *x = poisoned_x_value; + delete [] s; +#endif +} + +TEST(DebugAllocationTest, DanglingWriteAtExitTest) { + int *x = new int; + delete x; + int old_x_value = *x; + *x = 1; + // verify that dangling writes are caught at program termination if the + // corrupted block never got pushed off of the end of the free queue. + IF_DEBUG_EXPECT_DEATH(exit(0), "Memory was written to after being freed."); + *x = old_x_value; // restore x so that the test can exit successfully. +} + +TEST(DebugAllocationTest, StackTraceWithDanglingWriteAtExitTest) { + int *x = new int; + delete x; + int old_x_value = *x; + *x = 1; + // verify that we also get a stack trace when we have a dangling write. + // The " @ " is part of the stack trace output. + IF_DEBUG_EXPECT_DEATH(exit(0), " @ .*main"); + *x = old_x_value; // restore x so that the test can exit successfully. +} + +static size_t CurrentlyAllocatedBytes() { + size_t value; + CHECK(MallocExtension::instance()->GetNumericProperty( + "generic.current_allocated_bytes", &value)); + return value; +} + +TEST(DebugAllocationTest, CurrentlyAllocated) { + // Clear the free queue +#if 1 + FLAGS_max_free_queue_size = 0; + // Force a round-trip through the queue management code so that the + // new size is seen and the queue of recently-freed blocks is flushed. + free(malloc(1)); + FLAGS_max_free_queue_size = 1048576; +#endif + + // Free something and check that it disappears from allocated bytes + // immediately. + char* p = new char[1000]; + size_t after_malloc = CurrentlyAllocatedBytes(); + delete[] p; + size_t after_free = CurrentlyAllocatedBytes(); + EXPECT_LE(after_free, after_malloc - 1000); +} + +TEST(DebugAllocationTest, GetAllocatedSizeTest) { +#if 1 + // When debug_allocation is in effect, GetAllocatedSize should return + // exactly requested size, since debug_allocation doesn't allow users + // to write more than that. + for (int i = 0; i < 10; ++i) { + void *p = malloc(i); + EXPECT_EQ(i, MallocExtension::instance()->GetAllocatedSize(p)); + free(p); + } +#endif + void* a = malloc(1000); + EXPECT_GE(MallocExtension::instance()->GetAllocatedSize(a), 1000); + // This is just a sanity check. If we allocated too much, alloc is broken + EXPECT_LE(MallocExtension::instance()->GetAllocatedSize(a), 5000); + EXPECT_GE(MallocExtension::instance()->GetEstimatedAllocatedSize(1000), 1000); + free(a); +} + +TEST(DebugAllocationTest, HugeAlloc) { + // This must not be a const variable so it doesn't form an + // integral-constant-expression which can be *statically* rejected by the + // compiler as too large for the allocation. + size_t kTooBig = ~static_cast(0); + void* a = NULL; + +#ifndef NDEBUG + + a = malloc(kTooBig); + EXPECT_EQ(NULL, a); + + // kAlsoTooBig is small enough not to get caught by debugallocation's check, + // but will still fall through to tcmalloc's check. This must also be + // a non-const variable. See kTooBig for more details. + size_t kAlsoTooBig = kTooBig - 1024; + + a = malloc(kAlsoTooBig); + EXPECT_EQ(NULL, a); +#endif +} + +int main(int argc, char** argv) { + // If you run without args, we run the non-death parts of the test. + // Otherwise, argv[1] should be a number saying which death-test + // to run. We will output a regexp we expect the death-message + // to include, and then run the given death test (which hopefully + // will produce that error message). If argv[1] > the number of + // death tests, we will run only the non-death parts. One way to + // tell when you are done with all tests is when no 'expected + // regexp' message is printed for a given argv[1]. + if (argc < 2) { + test_to_run = -1; // will never match + } else { + test_to_run = atoi(argv[1]); + } + return RUN_ALL_TESTS(); +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/debugallocation_test.sh b/src/thirdparty/gperftools-2.0/src/tests/debugallocation_test.sh new file mode 100755 index 000000000..faa6c7938 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/debugallocation_test.sh @@ -0,0 +1,95 @@ +#!/bin/sh + +# Copyright (c) 2009, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# --- +# Author: Craig Silverstein + +BINDIR="${BINDIR:-.}" + +if [ "x$1" = "x-h" -o "x$1" = "x--help" ]; then + echo "USAGE: $0 [unittest dir]" + echo " By default, unittest_dir=$BINDIR" + exit 1 +fi + +DEBUGALLOCATION_TEST="${1:-$BINDIR/debugallocation_test}" + +num_failures=0 + +# Run the i-th death test and make sure the test has the expected +# regexp. We can depend on the first line of the output being +# Expected regex: +# Evaluates to "done" if we are not actually a death-test (so $1 is +# too big a number, and we can stop). Evaluates to "" otherwise. +# Increments num_failures if the death test does not succeed. +OneDeathTest() { + "$DEBUGALLOCATION_TEST" "$1" 2>&1 | { + regex_line='dummy' + # Normally the regex_line is the first line of output, but not + # always (if tcmalloc itself does any logging to stderr). + while test -n "$regex_line"; do + read regex_line + regex=`expr "$regex_line" : "Expected regex:\(.*\)"` + test -n "$regex" && break # found the regex line + done + test -z "$regex" && echo "done" || grep "$regex" 2>&1 + } +} + +death_test_num=0 # which death test to run +while :; do # same as 'while true', but more portable + echo -n "Running death test $death_test_num..." + output="`OneDeathTest $death_test_num`" + case $output in + # Empty string means grep didn't find anything. + "") echo "FAILED"; num_failures=`expr $num_failures + 1`;; + "done"*) echo "done with death tests"; break;; + # Any other string means grep found something, like it ought to. + *) echo "OK";; + esac + death_test_num=`expr $death_test_num + 1` +done + +# Test the non-death parts of the test too +echo -n "Running non-death tests..." +if "$DEBUGALLOCATION_TEST"; then + echo "OK" +else + echo "FAILED" + num_failures=`expr $num_failures + 1` +fi + +if [ "$num_failures" = 0 ]; then + echo "PASS" +else + echo "Failed with $num_failures failures" +fi +exit $num_failures diff --git a/src/thirdparty/gperftools-2.0/src/tests/frag_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/frag_unittest.cc new file mode 100644 index 000000000..1242770dd --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/frag_unittest.cc @@ -0,0 +1,132 @@ +// Copyright (c) 2003, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Test speed of handling fragmented heap + +#include "config_for_unittests.h" +#include +#include +#ifdef HAVE_SYS_RESOURCE_H +#include // for struct timeval +#include // for getrusage +#endif +#ifdef _WIN32 +#include // for GetTickCount() +#endif +#include +#include "base/logging.h" +#include "common.h" +#include + +using std::vector; + +int main(int argc, char** argv) { + // Make kAllocSize one page larger than the maximum small object size. + static const int kAllocSize = kMaxSize + kPageSize; + // Allocate 400MB in total. + static const int kTotalAlloc = 400 << 20; + static const int kAllocIterations = kTotalAlloc / kAllocSize; + + // Allocate lots of objects + vector saved(kAllocIterations); + for (int i = 0; i < kAllocIterations; i++) { + saved[i] = new char[kAllocSize]; + } + + // Check the current "slack". + size_t slack_before; + MallocExtension::instance()->GetNumericProperty("tcmalloc.slack_bytes", + &slack_before); + + // Free alternating ones to fragment heap + size_t free_bytes = 0; + for (int i = 0; i < saved.size(); i += 2) { + delete[] saved[i]; + free_bytes += kAllocSize; + } + + // Check that slack delta is within 10% of expected. + size_t slack_after; + MallocExtension::instance()->GetNumericProperty("tcmalloc.slack_bytes", + &slack_after); + CHECK_GE(slack_after, slack_before); + size_t slack = slack_after - slack_before; + + CHECK_GT(double(slack), 0.9*free_bytes); + CHECK_LT(double(slack), 1.1*free_bytes); + + // Dump malloc stats + static const int kBufSize = 1<<20; + char* buffer = new char[kBufSize]; + MallocExtension::instance()->GetStats(buffer, kBufSize); + VLOG(1, "%s", buffer); + delete[] buffer; + + // Now do timing tests + for (int i = 0; i < 5; i++) { + static const int kIterations = 100000; +#ifdef HAVE_SYS_RESOURCE_H + struct rusage r; + getrusage(RUSAGE_SELF, &r); // figure out user-time spent on this + struct timeval tv_start = r.ru_utime; +#elif defined(_WIN32) + long long int tv_start = GetTickCount(); +#else +# error No way to calculate time on your system +#endif + + for (int i = 0; i < kIterations; i++) { + size_t s; + MallocExtension::instance()->GetNumericProperty("tcmalloc.slack_bytes", + &s); + } + +#ifdef HAVE_SYS_RESOURCE_H + getrusage(RUSAGE_SELF, &r); + struct timeval tv_end = r.ru_utime; + int64 sumsec = static_cast(tv_end.tv_sec) - tv_start.tv_sec; + int64 sumusec = static_cast(tv_end.tv_usec) - tv_start.tv_usec; +#elif defined(_WIN32) + long long int tv_end = GetTickCount(); + int64 sumsec = (tv_end - tv_start) / 1000; + // Resolution in windows is only to the millisecond, alas + int64 sumusec = ((tv_end - tv_start) % 1000) * 1000; +#else +# error No way to calculate time on your system +#endif + fprintf(stderr, "getproperty: %6.1f ns/call\n", + (sumsec * 1e9 + sumusec * 1e3) / kIterations); + } + + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/getpc_test.cc b/src/thirdparty/gperftools-2.0/src/tests/getpc_test.cc new file mode 100644 index 000000000..f1497d523 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/getpc_test.cc @@ -0,0 +1,120 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// This verifies that GetPC works correctly. This test uses a minimum +// of Google infrastructure, to make it very easy to port to various +// O/Ses and CPUs and test that GetPC is working. + +#include "config.h" +#include "getpc.h" // should be first to get the _GNU_SOURCE dfn +#include +#include +#include +#include // for setitimer + +// Needs to be volatile so compiler doesn't try to optimize it away +static volatile void* getpc_retval = NULL; // what GetPC returns +static volatile bool prof_handler_called = false; + +static void prof_handler(int sig, siginfo_t*, void* signal_ucontext) { + if (!prof_handler_called) + getpc_retval = GetPC(*reinterpret_cast(signal_ucontext)); + prof_handler_called = true; // only store the retval once +} + +static void RoutineCallingTheSignal() { + struct sigaction sa; + sa.sa_sigaction = prof_handler; + sa.sa_flags = SA_RESTART | SA_SIGINFO; + sigemptyset(&sa.sa_mask); + if (sigaction(SIGPROF, &sa, NULL) != 0) { + perror("sigaction"); + exit(1); + } + + struct itimerval timer; + timer.it_interval.tv_sec = 0; + timer.it_interval.tv_usec = 1000; + timer.it_value = timer.it_interval; + setitimer(ITIMER_PROF, &timer, 0); + + // Now we need to do some work for a while, that doesn't call any + // other functions, so we can be guaranteed that when the SIGPROF + // fires, we're the routine executing. + int r = 0; + for (int i = 0; !prof_handler_called; ++i) { + for (int j = 0; j < i; j++) { + r ^= i; + r <<= 1; + r ^= j; + r >>= 1; + } + } + + // Now make sure the above loop doesn't get optimized out + srand(r); +} + +// This is an upper bound of how many bytes the instructions for +// RoutineCallingTheSignal might be. There's probably a more +// principled way to do this, but I don't know how portable it would be. +// (The function is 372 bytes when compiled with -g on Mac OS X 10.4. +// I can imagine it would be even bigger in 64-bit architectures.) +const int kRoutineSize = 512 * sizeof(void*)/4; // allow 1024 for 64-bit + +int main(int argc, char** argv) { + RoutineCallingTheSignal(); + + // Annoyingly, C++ disallows casting pointer-to-function to + // pointer-to-object, so we use a C-style cast instead. + char* expected = (char*)&RoutineCallingTheSignal; + char* actual = (char*)getpc_retval; + + // For ia64, ppc64, and parisc64, the function pointer is actually + // a struct. For instance, ia64's dl-fptr.h: + // struct fdesc { /* An FDESC is a function descriptor. */ + // ElfW(Addr) ip; /* code entry point */ + // ElfW(Addr) gp; /* global pointer */ + // }; + // We want the code entry point. +#if defined(__ia64) || defined(__ppc64) // NOTE: ppc64 is UNTESTED + expected = ((char**)expected)[0]; // this is "ip" +#endif + + if (actual < expected || actual > expected + kRoutineSize) { + printf("Test FAILED: actual PC: %p, expected PC: %p\n", actual, expected); + return 1; + } else { + printf("PASS\n"); + return 0; + } +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/heap-checker-death_unittest.sh b/src/thirdparty/gperftools-2.0/src/tests/heap-checker-death_unittest.sh new file mode 100755 index 000000000..ab4a666c6 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/heap-checker-death_unittest.sh @@ -0,0 +1,176 @@ +#!/bin/sh +# Copyright (c) 2005, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# --- +# Author: Maxim Lifantsev +# +# Run the heap checker unittest in a mode where it is supposed to crash and +# return an error if it doesn't. + +# We expect BINDIR to be set in the environment. +# If not, we set it to some reasonable value. +BINDIR="${BINDIR:-.}" + +if [ "x$1" = "x-h" -o "x$1" = "x--help" ]; then + echo "USAGE: $0 [unittest dir]" + echo " By default, unittest_dir=$BINDIR" + exit 1 +fi + +EXE="${1:-$BINDIR}/heap-checker_unittest" +TMPDIR="/tmp/heap_check_death_info" + +ALARM() { + # You need perl to run pprof, so I assume it's installed + perl -e ' + $timeout=$ARGV[0]; shift; + $retval = 255; # the default retval, for the case where we timed out + eval { # need to run in an eval-block to trigger during system() + local $SIG{ALRM} = sub { die "alarm\n" }; # \n is required! + alarm $timeout; + $retval = system(@ARGV); + # Make retval bash-style: exit status, or 128+n if terminated by signal n + $retval = ($retval & 127) ? (128 + $retval) : ($retval >> 8); + alarm 0; + }; + exit $retval; # return system()-retval, or 255 if system() never returned +' "$@" +} + +# $1: timeout for alarm; +# $2: regexp of expected exit code(s); +# $3: regexp to match a line in the output; +# $4: regexp to not match a line in the output; +# $5+ args to pass to $EXE +Test() { + # Note: make sure these varnames don't conflict with any vars outside Test()! + timeout="$1" + shift + expected_ec="$1" + shift + expected_regexp="$1" + shift + unexpected_regexp="$1" + shift + + echo -n "Testing $EXE with $@ ... " + output="$TMPDIR/output" + ALARM $timeout env "$@" $EXE > "$output" 2>&1 + actual_ec=$? + ec_ok=`expr "$actual_ec" : "$expected_ec$" >/dev/null || echo false` + matches_ok=`test -z "$expected_regexp" || \ + grep "$expected_regexp" "$output" >/dev/null 2>&1 || echo false` + negmatches_ok=`test -z "$unexpected_regexp" || \ + ! grep "$unexpected_regexp" "$output" >/dev/null 2>&1 || echo false` + if $ec_ok && $matches_ok && $negmatches_ok; then + echo "PASS" + return 0 # 0: success + fi + # If we get here, we failed. Now we just need to report why + echo "FAIL" + if [ $actual_ec -eq 255 ]; then # 255 == SIGTERM due to $ALARM + echo "Test was taking unexpectedly long time to run and so we aborted it." + echo "Try the test case manually or raise the timeout from $timeout" + echo "to distinguish test slowness from a real problem." + else + $ec_ok || \ + echo "Wrong exit code: expected: '$expected_ec'; actual: $actual_ec" + $matches_ok || \ + echo "Output did not match '$expected_regexp'" + $negmatches_ok || \ + echo "Output unexpectedly matched '$unexpected_regexp'" + fi + echo "Output from failed run:" + echo "---" + cat "$output" + echo "---" + return 1 # 1: failure +} + +TMPDIR=/tmp/heap_check_death_info +rm -rf $TMPDIR || exit 1 +mkdir $TMPDIR || exit 2 + +export HEAPCHECK=strict # default mode + +# These invocations should pass (0 == PASS): + +# This tests that turning leak-checker off dynamically works fine +Test 120 0 "^PASS$" "" HEAPCHECK="" || exit 1 + +# This disables threads so we can cause leaks reliably and test finding them +Test 120 0 "^PASS$" "" HEAP_CHECKER_TEST_NO_THREADS=1 || exit 2 + +# Test that --test_cancel_global_check works +Test 20 0 "Canceling .* whole-program .* leak check$" "" \ + HEAP_CHECKER_TEST_TEST_LEAK=1 HEAP_CHECKER_TEST_TEST_CANCEL_GLOBAL_CHECK=1 || exit 3 +Test 20 0 "Canceling .* whole-program .* leak check$" "" \ + HEAP_CHECKER_TEST_TEST_LOOP_LEAK=1 HEAP_CHECKER_TEST_TEST_CANCEL_GLOBAL_CHECK=1 || exit 4 + +# Test that very early log messages are present and controllable: +EARLY_MSG="Starting tracking the heap$" + +Test 60 0 "$EARLY_MSG" "" \ + HEAPCHECK="" HEAP_CHECKER_TEST_TEST_LEAK=1 HEAP_CHECKER_TEST_NO_THREADS=1 \ + PERFTOOLS_VERBOSE=10 || exit 5 +Test 60 0 "MemoryRegionMap Init$" "" \ + HEAPCHECK="" HEAP_CHECKER_TEST_TEST_LEAK=1 HEAP_CHECKER_TEST_NO_THREADS=1 \ + PERFTOOLS_VERBOSE=11 || exit 6 +Test 60 0 "" "$EARLY_MSG" \ + HEAPCHECK="" HEAP_CHECKER_TEST_TEST_LEAK=1 HEAP_CHECKER_TEST_NO_THREADS=1 \ + PERFTOOLS_VERBOSE=-11 || exit 7 + +# These invocations should fail with very high probability, +# rather than return 0 or hang (1 == exit(1), 134 == abort(), 139 = SIGSEGV): + +Test 60 1 "Exiting .* because of .* leaks$" "" \ + HEAP_CHECKER_TEST_TEST_LEAK=1 HEAP_CHECKER_TEST_NO_THREADS=1 || exit 8 +Test 60 1 "Exiting .* because of .* leaks$" "" \ + HEAP_CHECKER_TEST_TEST_LOOP_LEAK=1 HEAP_CHECKER_TEST_NO_THREADS=1 || exit 9 + +# Test that we produce a reasonable textual leak report. +Test 60 1 "MakeALeak" "" \ + HEAP_CHECKER_TEST_TEST_LEAK=1 HEAP_CHECK_TEST_NO_THREADS=1 \ + || exit 10 + +# Test that very early log messages are present and controllable: +Test 60 1 "Starting tracking the heap$" "" \ + HEAP_CHECKER_TEST_TEST_LEAK=1 HEAP_CHECKER_TEST_NO_THREADS=1 PERFTOOLS_VERBOSE=10 \ + || exit 11 +Test 60 1 "" "Starting tracking the heap" \ + HEAP_CHECKER_TEST_TEST_LEAK=1 HEAP_CHECKER_TEST_NO_THREADS=1 PERFTOOLS_VERBOSE=-10 \ + || exit 12 + +cd / # so we're not in TMPDIR when we delete it +rm -rf $TMPDIR + +echo "PASS" + +exit 0 diff --git a/src/thirdparty/gperftools-2.0/src/tests/heap-checker_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/heap-checker_unittest.cc new file mode 100644 index 000000000..ab326c988 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/heap-checker_unittest.cc @@ -0,0 +1,1503 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Maxim Lifantsev +// +// Running: +// ./heap-checker_unittest +// +// If the unittest crashes because it can't find pprof, try: +// PPROF_PATH=/usr/local/someplace/bin/pprof ./heap-checker_unittest +// +// To test that the whole-program heap checker will actually cause a leak, try: +// HEAPCHECK_TEST_LEAK= ./heap-checker_unittest +// HEAPCHECK_TEST_LOOP_LEAK= ./heap-checker_unittest +// +// Note: Both of the above commands *should* abort with an error message. + +// CAVEAT: Do not use vector<> and string on-heap objects in this test, +// otherwise the test can sometimes fail for tricky leak checks +// when we want some allocated object not to be found live by the heap checker. +// This can happen with memory allocators like tcmalloc that can allocate +// heap objects back to back without any book-keeping data in between. +// What happens is that end-of-storage pointers of a live vector +// (or a string depending on the STL implementation used) +// can happen to point to that other heap-allocated +// object that is not reachable otherwise and that +// we don't want to be reachable. +// +// The implication of this for real leak checking +// is just one more chance for the liveness flood to be inexact +// (see the comment in our .h file). + +#include "config_for_unittests.h" +#ifdef HAVE_POLL_H +#include +#endif +#if defined HAVE_STDINT_H +#include // to get uint16_t (ISO naming madness) +#elif defined HAVE_INTTYPES_H +#include // another place uint16_t might be defined +#endif +#include +#include +#include // errno +#ifdef HAVE_UNISTD_H +#include // for sleep(), geteuid() +#endif +#ifdef HAVE_MMAP +#include +#endif +#include // for open(), close() +#ifdef HAVE_EXECINFO_H +#include // backtrace +#endif +#ifdef HAVE_GRP_H +#include // getgrent, getgrnam +#endif +#ifdef HAVE_PWD_H +#include +#endif + +#include +#include // for cout +#include // for hex +#include +#include +#include +#include +#include +#include + +#include "base/commandlineflags.h" +#include "base/googleinit.h" +#include "base/logging.h" +#include "base/commandlineflags.h" +#include "base/thread_lister.h" +#include +#include "memory_region_map.h" +#include +#include + +// On systems (like freebsd) that don't define MAP_ANONYMOUS, use the old +// form of the name instead. +#ifndef MAP_ANONYMOUS +# define MAP_ANONYMOUS MAP_ANON +#endif + +using namespace std; + +// ========================================================================= // + +// TODO(maxim): write a shell script to test that these indeed crash us +// (i.e. we do detect leaks) +// Maybe add more such crash tests. + +DEFINE_bool(test_leak, + EnvToBool("HEAP_CHECKER_TEST_TEST_LEAK", false), + "If should cause a leak crash"); +DEFINE_bool(test_loop_leak, + EnvToBool("HEAP_CHECKER_TEST_TEST_LOOP_LEAK", false), + "If should cause a looped leak crash"); +DEFINE_bool(test_register_leak, + EnvToBool("HEAP_CHECKER_TEST_TEST_REGISTER_LEAK", false), + "If should cause a leak crash by hiding a pointer " + "that is only in a register"); +DEFINE_bool(test_cancel_global_check, + EnvToBool("HEAP_CHECKER_TEST_TEST_CANCEL_GLOBAL_CHECK", false), + "If should test HeapLeakChecker::CancelGlobalCheck " + "when --test_leak or --test_loop_leak are given; " + "the test should not fail then"); +DEFINE_bool(maybe_stripped, + EnvToBool("HEAP_CHECKER_TEST_MAYBE_STRIPPED", true), + "If we think we can be a stripped binary"); +DEFINE_bool(interfering_threads, + EnvToBool("HEAP_CHECKER_TEST_INTERFERING_THREADS", true), + "If we should use threads trying " + "to interfere with leak checking"); +DEFINE_bool(hoarding_threads, + EnvToBool("HEAP_CHECKER_TEST_HOARDING_THREADS", true), + "If threads (usually the manager thread) are known " + "to retain some old state in their global buffers, " + "so that it's hard to force leaks when threads are around"); + // TODO(maxim): Chage the default to false + // when the standard environment used NTPL threads: + // they do not seem to have this problem. +DEFINE_bool(no_threads, + EnvToBool("HEAP_CHECKER_TEST_NO_THREADS", false), + "If we should not use any threads"); + // This is used so we can make can_create_leaks_reliably true + // for any pthread implementation and test with that. + +DECLARE_int64(heap_check_max_pointer_offset); // heap-checker.cc +DECLARE_string(heap_check); // in heap-checker.cc + +#define WARN_IF(cond, msg) LOG_IF(WARNING, cond, msg) + +// This is an evil macro! Be very careful using it... +#undef VLOG // and we start by evilling overriding logging.h VLOG +#define VLOG(lvl) if (FLAGS_verbose >= (lvl)) cout << "\n" +// This is, likewise, evil +#define LOGF VLOG(INFO) + +static void RunHeapBusyThreads(); // below + + +class Closure { + public: + virtual ~Closure() { } + virtual void Run() = 0; +}; + +class Callback0 : public Closure { + public: + typedef void (*FunctionSignature)(); + + inline Callback0(FunctionSignature f) : f_(f) {} + virtual void Run() { (*f_)(); delete this; } + + private: + FunctionSignature f_; +}; + +template class Callback1 : public Closure { + public: + typedef void (*FunctionSignature)(P1); + + inline Callback1(FunctionSignature f, P1 p1) : f_(f), p1_(p1) {} + virtual void Run() { (*f_)(p1_); delete this; } + + private: + FunctionSignature f_; + P1 p1_; +}; + +template class Callback2 : public Closure { + public: + typedef void (*FunctionSignature)(P1,P2); + + inline Callback2(FunctionSignature f, P1 p1, P2 p2) : f_(f), p1_(p1), p2_(p2) {} + virtual void Run() { (*f_)(p1_, p2_); delete this; } + + private: + FunctionSignature f_; + P1 p1_; + P2 p2_; +}; + +inline Callback0* NewCallback(void (*function)()) { + return new Callback0(function); +} + +template +inline Callback1* NewCallback(void (*function)(P1), P1 p1) { + return new Callback1(function, p1); +} + +template +inline Callback2* NewCallback(void (*function)(P1,P2), P1 p1, P2 p2) { + return new Callback2(function, p1, p2); +} + + +// Set to true at end of main, so threads know. Not entirely thread-safe!, +// but probably good enough. +static bool g_have_exited_main = false; + +// If we can reliably create leaks (i.e. make leaked object +// really unreachable from any global data). +static bool can_create_leaks_reliably = false; + +// We use a simple allocation wrapper +// to make sure we wipe out the newly allocated objects +// in case they still happened to contain some pointer data +// accidentally left by the memory allocator. +struct Initialized { }; +static Initialized initialized; +void* operator new(size_t size, const Initialized&) { + // Below we use "p = new(initialized) Foo[1];" and "delete[] p;" + // instead of "p = new(initialized) Foo;" + // when we need to delete an allocated object. + void* p = malloc(size); + memset(p, 0, size); + return p; +} +void* operator new[](size_t size, const Initialized&) { + char* p = new char[size]; + memset(p, 0, size); + return p; +} + +static void DoWipeStack(int n); // defined below +static void WipeStack() { DoWipeStack(20); } + +static void Pause() { + poll(NULL, 0, 77); // time for thread activity in HeapBusyThreadBody + + // Indirectly test malloc_extension.*: + CHECK(MallocExtension::instance()->VerifyAllMemory()); + int blocks; + size_t total; + int histogram[kMallocHistogramSize]; + if (MallocExtension::instance() + ->MallocMemoryStats(&blocks, &total, histogram) && total != 0) { + VLOG(3) << "Malloc stats: " << blocks << " blocks of " + << total << " bytes"; + for (int i = 0; i < kMallocHistogramSize; ++i) { + if (histogram[i]) { + VLOG(3) << " Malloc histogram at " << i << " : " << histogram[i]; + } + } + } + WipeStack(); // e.g. MallocExtension::VerifyAllMemory + // can leave pointers to heap objects on stack +} + +// Make gcc think a pointer is "used" +template +static void Use(T** foo) { + VLOG(2) << "Dummy-using " << static_cast(*foo) << " at " << foo; +} + +// Arbitrary value, but not such that xor'ing with it is likely +// to map one valid pointer to another valid pointer: +static const uintptr_t kHideMask = + static_cast(0xF03A5F7BF03A5F7BLL); + +// Helpers to hide a pointer from live data traversal. +// We just xor the pointer so that (with high probability) +// it's not a valid address of a heap object anymore. +// Both Hide and UnHide must be executed within RunHidden() below +// to prevent leaving stale data on active stack that can be a pointer +// to a heap object that is not actually reachable via live variables. +// (UnHide might leave heap pointer value for an object +// that will be deallocated but later another object +// can be allocated at the same heap address.) +template +static void Hide(T** ptr) { + // we cast values, not dereferenced pointers, so no aliasing issues: + *ptr = reinterpret_cast(reinterpret_cast(*ptr) ^ kHideMask); + VLOG(2) << "hid: " << static_cast(*ptr); +} + +template +static void UnHide(T** ptr) { + VLOG(2) << "unhiding: " << static_cast(*ptr); + // we cast values, not dereferenced pointers, so no aliasing issues: + *ptr = reinterpret_cast(reinterpret_cast(*ptr) ^ kHideMask); +} + +static void LogHidden(const char* message, const void* ptr) { + LOGF << message << " : " + << ptr << " ^ " << reinterpret_cast(kHideMask) << endl; +} + +// volatile to fool the compiler against inlining the calls to these +void (*volatile run_hidden_ptr)(Closure* c, int n); +void (*volatile wipe_stack_ptr)(int n); + +static void DoRunHidden(Closure* c, int n) { + if (n) { + VLOG(10) << "Level " << n << " at " << &n; + (*run_hidden_ptr)(c, n-1); + (*wipe_stack_ptr)(n); + sleep(0); // undo -foptimize-sibling-calls + } else { + c->Run(); + } +} + +/*static*/ void DoWipeStack(int n) { + VLOG(10) << "Wipe level " << n << " at " << &n; + if (n) { + const int sz = 30; + volatile int arr[sz]; + for (int i = 0; i < sz; ++i) arr[i] = 0; + (*wipe_stack_ptr)(n-1); + sleep(0); // undo -foptimize-sibling-calls + } +} + +// This executes closure c several stack frames down from the current one +// and then makes an effort to also wipe out the stack data that was used by +// the closure. +// This way we prevent leak checker from finding any temporary pointers +// of the closure execution on the stack and deciding that +// these pointers (and the pointed objects) are still live. +static void RunHidden(Closure* c) { + DoRunHidden(c, 15); + DoWipeStack(20); +} + +static void DoAllocHidden(size_t size, void** ptr) { + void* p = new(initialized) char[size]; + Hide(&p); + Use(&p); // use only hidden versions + VLOG(2) << "Allocated hidden " << p << " at " << &p; + *ptr = p; // assign the hidden versions +} + +static void* AllocHidden(size_t size) { + void* r; + RunHidden(NewCallback(DoAllocHidden, size, &r)); + return r; +} + +static void DoDeAllocHidden(void** ptr) { + Use(ptr); // use only hidden versions + void* p = *ptr; + VLOG(2) << "Deallocating hidden " << p; + UnHide(&p); + delete [] reinterpret_cast(p); +} + +static void DeAllocHidden(void** ptr) { + RunHidden(NewCallback(DoDeAllocHidden, ptr)); + *ptr = NULL; + Use(ptr); +} + +void PreventHeapReclaiming(size_t size) { +#ifdef NDEBUG + if (true) { + static void** no_reclaim_list = NULL; + CHECK(size >= sizeof(void*)); + // We can't use malloc_reclaim_memory flag in opt mode as debugallocation.cc + // is not used. Instead we allocate a bunch of heap objects that are + // of the same size as what we are going to leak to ensure that the object + // we are about to leak is not at the same address as some old allocated + // and freed object that might still have pointers leading to it. + for (int i = 0; i < 100; ++i) { + void** p = reinterpret_cast(new(initialized) char[size]); + p[0] = no_reclaim_list; + no_reclaim_list = p; + } + } +#endif +} + +static bool RunSilent(HeapLeakChecker* check, + bool (HeapLeakChecker::* func)()) { + // By default, don't print the 'we detected a leak' message in the + // cases we're expecting a leak (we still print when --v is >= 1). + // This way, the logging output is less confusing: we only print + // "we detected a leak", and how to diagnose it, for *unexpected* leaks. + int32 old_FLAGS_verbose = FLAGS_verbose; + if (!VLOG_IS_ON(1)) // not on a verbose setting + FLAGS_verbose = FATAL; // only log fatal errors + const bool retval = (check->*func)(); + FLAGS_verbose = old_FLAGS_verbose; + return retval; +} + +#define RUN_SILENT(check, func) RunSilent(&(check), &HeapLeakChecker::func) + +enum CheckType { SAME_HEAP, NO_LEAKS }; + +static void VerifyLeaks(HeapLeakChecker* check, CheckType type, + int leaked_bytes, int leaked_objects) { + WipeStack(); // to help with can_create_leaks_reliably + const bool no_leaks = + type == NO_LEAKS ? RUN_SILENT(*check, BriefNoLeaks) + : RUN_SILENT(*check, BriefSameHeap); + if (can_create_leaks_reliably) { + // these might still fail occasionally, but it should be very rare + CHECK_EQ(no_leaks, false); + CHECK_EQ(check->BytesLeaked(), leaked_bytes); + CHECK_EQ(check->ObjectsLeaked(), leaked_objects); + } else { + WARN_IF(no_leaks != false, + "Expected leaks not found: " + "Some liveness flood must be too optimistic"); + } +} + +// not deallocates +static void TestHeapLeakCheckerDeathSimple() { + HeapLeakChecker check("death_simple"); + void* foo = AllocHidden(100 * sizeof(int)); + Use(&foo); + void* bar = AllocHidden(300); + Use(&bar); + LogHidden("Leaking", foo); + LogHidden("Leaking", bar); + Pause(); + VerifyLeaks(&check, NO_LEAKS, 300 + 100 * sizeof(int), 2); + DeAllocHidden(&foo); + DeAllocHidden(&bar); +} + +static void MakeDeathLoop(void** arr1, void** arr2) { + PreventHeapReclaiming(2 * sizeof(void*)); + void** a1 = new(initialized) void*[2]; + void** a2 = new(initialized) void*[2]; + a1[1] = reinterpret_cast(a2); + a2[1] = reinterpret_cast(a1); + Hide(&a1); + Hide(&a2); + Use(&a1); + Use(&a2); + VLOG(2) << "Made hidden loop at " << &a1 << " to " << arr1; + *arr1 = a1; + *arr2 = a2; +} + +// not deallocates two objects linked together +static void TestHeapLeakCheckerDeathLoop() { + HeapLeakChecker check("death_loop"); + void* arr1; + void* arr2; + RunHidden(NewCallback(MakeDeathLoop, &arr1, &arr2)); + Use(&arr1); + Use(&arr2); + LogHidden("Leaking", arr1); + LogHidden("Leaking", arr2); + Pause(); + VerifyLeaks(&check, NO_LEAKS, 4 * sizeof(void*), 2); + DeAllocHidden(&arr1); + DeAllocHidden(&arr2); +} + +// deallocates more than allocates +static void TestHeapLeakCheckerDeathInverse() { + void* bar = AllocHidden(250 * sizeof(int)); + Use(&bar); + LogHidden("Pre leaking", bar); + Pause(); + HeapLeakChecker check("death_inverse"); + void* foo = AllocHidden(100 * sizeof(int)); + Use(&foo); + LogHidden("Leaking", foo); + DeAllocHidden(&bar); + Pause(); + VerifyLeaks(&check, SAME_HEAP, + 100 * static_cast(sizeof(int)), + 1); + DeAllocHidden(&foo); +} + +// deallocates more than allocates +static void TestHeapLeakCheckerDeathNoLeaks() { + void* foo = AllocHidden(100 * sizeof(int)); + Use(&foo); + void* bar = AllocHidden(250 * sizeof(int)); + Use(&bar); + HeapLeakChecker check("death_noleaks"); + DeAllocHidden(&bar); + CHECK_EQ(check.BriefNoLeaks(), true); + DeAllocHidden(&foo); +} + +// have less objecs +static void TestHeapLeakCheckerDeathCountLess() { + void* bar1 = AllocHidden(50 * sizeof(int)); + Use(&bar1); + void* bar2 = AllocHidden(50 * sizeof(int)); + Use(&bar2); + LogHidden("Pre leaking", bar1); + LogHidden("Pre leaking", bar2); + Pause(); + HeapLeakChecker check("death_count_less"); + void* foo = AllocHidden(100 * sizeof(int)); + Use(&foo); + LogHidden("Leaking", foo); + DeAllocHidden(&bar1); + DeAllocHidden(&bar2); + Pause(); + VerifyLeaks(&check, SAME_HEAP, + 100 * sizeof(int), + 1); + DeAllocHidden(&foo); +} + +// have more objecs +static void TestHeapLeakCheckerDeathCountMore() { + void* foo = AllocHidden(100 * sizeof(int)); + Use(&foo); + LogHidden("Pre leaking", foo); + Pause(); + HeapLeakChecker check("death_count_more"); + void* bar1 = AllocHidden(50 * sizeof(int)); + Use(&bar1); + void* bar2 = AllocHidden(50 * sizeof(int)); + Use(&bar2); + LogHidden("Leaking", bar1); + LogHidden("Leaking", bar2); + DeAllocHidden(&foo); + Pause(); + VerifyLeaks(&check, SAME_HEAP, + 100 * sizeof(int), + 2); + DeAllocHidden(&bar1); + DeAllocHidden(&bar2); +} + +static void TestHiddenPointer() { + int i; + void* foo = &i; + HiddenPointer p(foo); + CHECK_EQ(foo, p.get()); + + // Confirm pointer doesn't appear to contain a byte sequence + // that == the pointer. We don't really need to test that + // the xor trick itself works, as without it nothing in this + // test suite would work. See the Hide/Unhide/*Hidden* set + // of helper methods. + CHECK_NE(foo, *reinterpret_cast(&p)); +} + +// simple tests that deallocate what they allocated +static void TestHeapLeakChecker() { + { HeapLeakChecker check("trivial"); + int foo = 5; + int* p = &foo; + Use(&p); + Pause(); + CHECK(check.BriefSameHeap()); + } + Pause(); + { HeapLeakChecker check("simple"); + void* foo = AllocHidden(100 * sizeof(int)); + Use(&foo); + void* bar = AllocHidden(200 * sizeof(int)); + Use(&bar); + DeAllocHidden(&foo); + DeAllocHidden(&bar); + Pause(); + CHECK(check.BriefSameHeap()); + } +} + +// no false positives +static void TestHeapLeakCheckerNoFalsePositives() { + { HeapLeakChecker check("trivial_p"); + int foo = 5; + int* p = &foo; + Use(&p); + Pause(); + CHECK(check.BriefSameHeap()); + } + Pause(); + { HeapLeakChecker check("simple_p"); + void* foo = AllocHidden(100 * sizeof(int)); + Use(&foo); + void* bar = AllocHidden(200 * sizeof(int)); + Use(&bar); + DeAllocHidden(&foo); + DeAllocHidden(&bar); + Pause(); + CHECK(check.SameHeap()); + } +} + +// test that we detect leaks when we have same total # of bytes and +// objects, but different individual object sizes +static void TestLeakButTotalsMatch() { + void* bar1 = AllocHidden(240 * sizeof(int)); + Use(&bar1); + void* bar2 = AllocHidden(160 * sizeof(int)); + Use(&bar2); + LogHidden("Pre leaking", bar1); + LogHidden("Pre leaking", bar2); + Pause(); + HeapLeakChecker check("trick"); + void* foo1 = AllocHidden(280 * sizeof(int)); + Use(&foo1); + void* foo2 = AllocHidden(120 * sizeof(int)); + Use(&foo2); + LogHidden("Leaking", foo1); + LogHidden("Leaking", foo2); + DeAllocHidden(&bar1); + DeAllocHidden(&bar2); + Pause(); + + // foo1 and foo2 leaked + VerifyLeaks(&check, NO_LEAKS, (280+120)*sizeof(int), 2); + + DeAllocHidden(&foo1); + DeAllocHidden(&foo2); +} + +// no false negatives from pprof +static void TestHeapLeakCheckerDeathTrick() { + void* bar1 = AllocHidden(240 * sizeof(int)); + Use(&bar1); + void* bar2 = AllocHidden(160 * sizeof(int)); + Use(&bar2); + HeapLeakChecker check("death_trick"); + DeAllocHidden(&bar1); + DeAllocHidden(&bar2); + void* foo1 = AllocHidden(280 * sizeof(int)); + Use(&foo1); + void* foo2 = AllocHidden(120 * sizeof(int)); + Use(&foo2); + // TODO(maxim): use the above if we make pprof work in automated test runs + if (!FLAGS_maybe_stripped) { + CHECK_EQ(RUN_SILENT(check, SameHeap), false); + // pprof checking should catch the leak + } else { + WARN_IF(RUN_SILENT(check, SameHeap) != false, + "death_trick leak is not caught; " + "we must be using a stripped binary"); + } + DeAllocHidden(&foo1); + DeAllocHidden(&foo2); +} + +// simple leak +static void TransLeaks() { + AllocHidden(1 * sizeof(char)); +} + +// range-based disabling using Disabler +static void ScopedDisabledLeaks() { + HeapLeakChecker::Disabler disabler; + AllocHidden(3 * sizeof(int)); + TransLeaks(); + (void)malloc(10); // Direct leak +} + +// have different disabled leaks +static void* RunDisabledLeaks(void* a) { + ScopedDisabledLeaks(); + return a; +} + +// have different disabled leaks inside of a thread +static void ThreadDisabledLeaks() { + if (FLAGS_no_threads) return; + pthread_t tid; + pthread_attr_t attr; + CHECK_EQ(pthread_attr_init(&attr), 0); + CHECK_EQ(pthread_create(&tid, &attr, RunDisabledLeaks, NULL), 0); + void* res; + CHECK_EQ(pthread_join(tid, &res), 0); +} + +// different disabled leaks (some in threads) +static void TestHeapLeakCheckerDisabling() { + HeapLeakChecker check("disabling"); + + RunDisabledLeaks(NULL); + RunDisabledLeaks(NULL); + ThreadDisabledLeaks(); + RunDisabledLeaks(NULL); + ThreadDisabledLeaks(); + ThreadDisabledLeaks(); + + Pause(); + + CHECK(check.SameHeap()); +} + +typedef set IntSet; + +static int some_ints[] = { 1, 2, 3, 21, 22, 23, 24, 25 }; + +static void DoTestSTLAlloc() { + IntSet* x = new(initialized) IntSet[1]; + *x = IntSet(some_ints, some_ints + 6); + for (int i = 0; i < 1000; i++) { + x->insert(i*3); + } + delete [] x; +} + +// Check that normal STL usage does not result in a leak report. +// (In particular we test that there's no complex STL's own allocator +// running on top of our allocator with hooks to heap profiler +// that can result in false leak report in this case.) +static void TestSTLAlloc() { + HeapLeakChecker check("stl"); + RunHidden(NewCallback(DoTestSTLAlloc)); + CHECK_EQ(check.BriefSameHeap(), true); +} + +static void DoTestSTLAllocInverse(IntSet** setx) { + IntSet* x = new(initialized) IntSet[1]; + *x = IntSet(some_ints, some_ints + 3); + for (int i = 0; i < 100; i++) { + x->insert(i*2); + } + Hide(&x); + *setx = x; +} + +static void FreeTestSTLAllocInverse(IntSet** setx) { + IntSet* x = *setx; + UnHide(&x); + delete [] x; +} + +// Check that normal leaked STL usage *does* result in a leak report. +// (In particular we test that there's no complex STL's own allocator +// running on top of our allocator with hooks to heap profiler +// that can result in false absence of leak report in this case.) +static void TestSTLAllocInverse() { + HeapLeakChecker check("death_inverse_stl"); + IntSet* x; + RunHidden(NewCallback(DoTestSTLAllocInverse, &x)); + LogHidden("Leaking", x); + if (can_create_leaks_reliably) { + WipeStack(); // to help with can_create_leaks_reliably + // these might still fail occasionally, but it should be very rare + CHECK_EQ(RUN_SILENT(check, BriefNoLeaks), false); + CHECK_GE(check.BytesLeaked(), 100 * sizeof(int)); + CHECK_GE(check.ObjectsLeaked(), 100); + // assumes set<>s are represented by some kind of binary tree + // or something else allocating >=1 heap object per set object + } else { + WARN_IF(RUN_SILENT(check, BriefNoLeaks) != false, + "Expected leaks not found: " + "Some liveness flood must be too optimistic"); + } + RunHidden(NewCallback(FreeTestSTLAllocInverse, &x)); +} + +template +static void DirectTestSTLAlloc(Alloc allocator, const char* name) { + HeapLeakChecker check((string("direct_stl-") + name).c_str()); + static const int kSize = 1000; + typename Alloc::pointer ptrs[kSize]; + for (int i = 0; i < kSize; ++i) { + typename Alloc::pointer p = allocator.allocate(i*3+1); + HeapLeakChecker::IgnoreObject(p); + // This will crash if p is not known to heap profiler: + // (i.e. STL's "allocator" does not have a direct hook to heap profiler) + HeapLeakChecker::UnIgnoreObject(p); + ptrs[i] = p; + } + for (int i = 0; i < kSize; ++i) { + allocator.deallocate(ptrs[i], i*3+1); + ptrs[i] = NULL; + } + CHECK(check.BriefSameHeap()); // just in case +} + +static struct group* grp = NULL; +static const int kKeys = 50; +static pthread_key_t key[kKeys]; + +static void KeyFree(void* ptr) { + delete [] reinterpret_cast(ptr); +} + +static bool key_init_has_run = false; + +static void KeyInit() { + for (int i = 0; i < kKeys; ++i) { + CHECK_EQ(pthread_key_create(&key[i], KeyFree), 0); + VLOG(2) << "pthread key " << i << " : " << key[i]; + } + key_init_has_run = true; // needed for a sanity-check +} + +// force various C library static and thread-specific allocations +static void TestLibCAllocate() { + CHECK(key_init_has_run); + for (int i = 0; i < kKeys; ++i) { + void* p = pthread_getspecific(key[i]); + if (NULL == p) { + if (i == 0) { + // Test-logging inside threads which (potentially) creates and uses + // thread-local data inside standard C++ library: + VLOG(0) << "Adding pthread-specifics for thread " << pthread_self() + << " pid " << getpid(); + } + p = new(initialized) char[77 + i]; + VLOG(2) << "pthread specific " << i << " : " << p; + pthread_setspecific(key[i], p); + } + } + + strerror(errno); + const time_t now = time(NULL); + ctime(&now); +#ifdef HAVE_EXECINFO_H + void *stack[1]; + backtrace(stack, 1); +#endif +#ifdef HAVE_GRP_H + gid_t gid = getgid(); + getgrgid(gid); + if (grp == NULL) grp = getgrent(); // a race condition here is okay + getgrnam(grp->gr_name); +#endif +#ifdef HAVE_PWD_H + getpwuid(geteuid()); +#endif +} + +// Continuous random heap memory activity to try to disrupt heap checking. +static void* HeapBusyThreadBody(void* a) { + const int thread_num = reinterpret_cast(a); + VLOG(0) << "A new HeapBusyThread " << thread_num; + TestLibCAllocate(); + + int user = 0; + // Try to hide ptr from heap checker in a CPU register: + // Here we are just making a best effort to put the only pointer + // to a heap object into a thread register to test + // the thread-register finding machinery in the heap checker. +#if defined(__i386__) && defined(__GNUC__) + register int** ptr asm("esi"); +#elif defined(__x86_64__) && defined(__GNUC__) + register int** ptr asm("r15"); +#else + register int** ptr; +#endif + ptr = NULL; + typedef set Set; + Set s1; + while (1) { + // TestLibCAllocate() calls libc functions that don't work so well + // after main() has exited. So we just don't do the test then. + if (!g_have_exited_main) + TestLibCAllocate(); + + if (ptr == NULL) { + ptr = new(initialized) int*[1]; + *ptr = new(initialized) int[1]; + } + set* s2 = new(initialized) set[1]; + s1.insert(random()); + s2->insert(*s1.begin()); + user += *s2->begin(); + **ptr += user; + if (random() % 51 == 0) { + s1.clear(); + if (random() % 2 == 0) { + s1.~Set(); + new(&s1) Set; + } + } + VLOG(3) << pthread_self() << " (" << getpid() << "): in wait: " + << ptr << ", " << *ptr << "; " << s1.size(); + VLOG(2) << pthread_self() << " (" << getpid() << "): in wait, ptr = " + << reinterpret_cast( + reinterpret_cast(ptr) ^ kHideMask) + << "^" << reinterpret_cast(kHideMask); + if (FLAGS_test_register_leak && thread_num % 5 == 0) { + // Hide the register "ptr" value with an xor mask. + // If one provides --test_register_leak flag, the test should + // (with very high probability) crash on some leak check + // with a leak report (of some x * sizeof(int) + y * sizeof(int*) bytes) + // pointing at the two lines above in this function + // with "new(initialized) int" in them as the allocators + // of the leaked objects. + // CAVEAT: We can't really prevent a compiler to save some + // temporary values of "ptr" on the stack and thus let us find + // the heap objects not via the register. + // Hence it's normal if for certain compilers or optimization modes + // --test_register_leak does not cause a leak crash of the above form + // (this happens e.g. for gcc 4.0.1 in opt mode). + ptr = reinterpret_cast( + reinterpret_cast(ptr) ^ kHideMask); + // busy loop to get the thread interrupted at: + for (int i = 1; i < 10000000; ++i) user += (1 + user * user * 5) / i; + ptr = reinterpret_cast( + reinterpret_cast(ptr) ^ kHideMask); + } else { + poll(NULL, 0, random() % 100); + } + VLOG(2) << pthread_self() << ": continuing"; + if (random() % 3 == 0) { + delete [] *ptr; + delete [] ptr; + ptr = NULL; + } + delete [] s2; + } + return a; +} + +static void RunHeapBusyThreads() { + KeyInit(); + if (!FLAGS_interfering_threads || FLAGS_no_threads) return; + + const int n = 17; // make many threads + + pthread_t tid; + pthread_attr_t attr; + CHECK_EQ(pthread_attr_init(&attr), 0); + // make them and let them run + for (int i = 0; i < n; ++i) { + VLOG(0) << "Creating extra thread " << i + 1; + CHECK(pthread_create(&tid, &attr, HeapBusyThreadBody, + reinterpret_cast(i)) == 0); + } + + Pause(); + Pause(); +} + +// ========================================================================= // + +// This code section is to test that objects that are reachable from global +// variables are not reported as leaks +// as well as that (Un)IgnoreObject work for such objects fine. + +// An object making functions: +// returns a "weird" pointer to a new object for which +// it's worth checking that the object is reachable via that pointer. +typedef void* (*ObjMakerFunc)(); +static list obj_makers; // list of registered object makers + +// Helper macro to register an object making function +// 'name' is an identifier of this object maker, +// 'body' is its function body that must declare +// pointer 'p' to the nex object to return. +// Usage example: +// REGISTER_OBJ_MAKER(trivial, int* p = new(initialized) int;) +#define REGISTER_OBJ_MAKER(name, body) \ + void* ObjMaker_##name##_() { \ + VLOG(1) << "Obj making " << #name; \ + body; \ + return p; \ + } \ + static ObjMakerRegistrar maker_reg_##name##__(&ObjMaker_##name##_); +// helper class for REGISTER_OBJ_MAKER +struct ObjMakerRegistrar { + ObjMakerRegistrar(ObjMakerFunc obj_maker) { obj_makers.push_back(obj_maker); } +}; + +// List of the objects/pointers made with all the obj_makers +// to test reachability via global data pointers during leak checks. +static list* live_objects = new list; + // pointer so that it does not get destructed on exit + +// Exerciser for one ObjMakerFunc. +static void TestPointerReach(ObjMakerFunc obj_maker) { + HeapLeakChecker::IgnoreObject(obj_maker()); // test IgnoreObject + + void* obj = obj_maker(); + HeapLeakChecker::IgnoreObject(obj); + HeapLeakChecker::UnIgnoreObject(obj); // test UnIgnoreObject + HeapLeakChecker::IgnoreObject(obj); // not to need deletion for obj + + live_objects->push_back(obj_maker()); // test reachability at leak check +} + +// Test all ObjMakerFunc registred via REGISTER_OBJ_MAKER. +static void TestObjMakers() { + for (list::const_iterator i = obj_makers.begin(); + i != obj_makers.end(); ++i) { + TestPointerReach(*i); + TestPointerReach(*i); // a couple more times would not hurt + TestPointerReach(*i); + } +} + +// A dummy class to mimic allocation behavior of string-s. +template +struct Array { + Array() { + size = 3 + random() % 30; + ptr = new(initialized) T[size]; + } + ~Array() { delete [] ptr; } + Array(const Array& x) { + size = x.size; + ptr = new(initialized) T[size]; + for (size_t i = 0; i < size; ++i) { + ptr[i] = x.ptr[i]; + } + } + void operator=(const Array& x) { + delete [] ptr; + size = x.size; + ptr = new(initialized) T[size]; + for (size_t i = 0; i < size; ++i) { + ptr[i] = x.ptr[i]; + } + } + void append(const Array& x) { + T* p = new(initialized) T[size + x.size]; + for (size_t i = 0; i < size; ++i) { + p[i] = ptr[i]; + } + for (size_t i = 0; i < x.size; ++i) { + p[size+i] = x.ptr[i]; + } + size += x.size; + delete [] ptr; + ptr = p; + } + private: + size_t size; + T* ptr; +}; + +// to test pointers to objects, built-in arrays, string, etc: +REGISTER_OBJ_MAKER(plain, int* p = new(initialized) int;) +REGISTER_OBJ_MAKER(int_array_1, int* p = new(initialized) int[1];) +REGISTER_OBJ_MAKER(int_array, int* p = new(initialized) int[10];) +REGISTER_OBJ_MAKER(string, Array* p = new(initialized) Array();) +REGISTER_OBJ_MAKER(string_array, + Array* p = new(initialized) Array[5];) +REGISTER_OBJ_MAKER(char_array, char* p = new(initialized) char[5];) +REGISTER_OBJ_MAKER(appended_string, + Array* p = new Array(); + p->append(Array()); +) +REGISTER_OBJ_MAKER(plain_ptr, int** p = new(initialized) int*;) +REGISTER_OBJ_MAKER(linking_ptr, + int** p = new(initialized) int*; + *p = new(initialized) int; +) + +// small objects: +REGISTER_OBJ_MAKER(0_sized, void* p = malloc(0);) // 0-sized object (important) +REGISTER_OBJ_MAKER(1_sized, void* p = malloc(1);) +REGISTER_OBJ_MAKER(2_sized, void* p = malloc(2);) +REGISTER_OBJ_MAKER(3_sized, void* p = malloc(3);) +REGISTER_OBJ_MAKER(4_sized, void* p = malloc(4);) + +static int set_data[] = { 1, 2, 3, 4, 5, 6, 7, 21, 22, 23, 24, 25, 26, 27 }; +static set live_leak_set(set_data, set_data+7); +static const set live_leak_const_set(set_data, set_data+14); + +REGISTER_OBJ_MAKER(set, + set* p = new(initialized) set(set_data, set_data + 13); +) + +class ClassA { + public: + explicit ClassA(int a) : ptr(NULL) { } + mutable char* ptr; +}; +static const ClassA live_leak_mutable(1); + +template +class TClass { + public: + explicit TClass(int a) : ptr(NULL) { } + mutable C val; + mutable C* ptr; +}; +static const TClass > live_leak_templ_mutable(1); + +class ClassB { + public: + ClassB() { } + char b[7]; + virtual void f() { } + virtual ~ClassB() { } +}; + +class ClassB2 { + public: + ClassB2() { } + char b2[11]; + virtual void f2() { } + virtual ~ClassB2() { } +}; + +class ClassD1 : public ClassB { + char d1[15]; + virtual void f() { } +}; + +class ClassD2 : public ClassB2 { + char d2[19]; + virtual void f2() { } +}; + +class ClassD : public ClassD1, public ClassD2 { + char d[3]; + virtual void f() { } + virtual void f2() { } +}; + +// to test pointers to objects of base subclasses: + +REGISTER_OBJ_MAKER(B, ClassB* p = new(initialized) ClassB;) +REGISTER_OBJ_MAKER(D1, ClassD1* p = new(initialized) ClassD1;) +REGISTER_OBJ_MAKER(D2, ClassD2* p = new(initialized) ClassD2;) +REGISTER_OBJ_MAKER(D, ClassD* p = new(initialized) ClassD;) + +REGISTER_OBJ_MAKER(D1_as_B, ClassB* p = new(initialized) ClassD1;) +REGISTER_OBJ_MAKER(D2_as_B2, ClassB2* p = new(initialized) ClassD2;) +REGISTER_OBJ_MAKER(D_as_B, ClassB* p = new(initialized) ClassD;) +REGISTER_OBJ_MAKER(D_as_D1, ClassD1* p = new(initialized) ClassD;) +// inside-object pointers: +REGISTER_OBJ_MAKER(D_as_B2, ClassB2* p = new(initialized) ClassD;) +REGISTER_OBJ_MAKER(D_as_D2, ClassD2* p = new(initialized) ClassD;) + +class InterfaceA { + public: + virtual void A() = 0; + virtual ~InterfaceA() { } + protected: + InterfaceA() { } +}; + +class InterfaceB { + public: + virtual void B() = 0; + virtual ~InterfaceB() { } + protected: + InterfaceB() { } +}; + +class InterfaceC : public InterfaceA { + public: + virtual void C() = 0; + virtual ~InterfaceC() { } + protected: + InterfaceC() { } +}; + +class ClassMltD1 : public ClassB, public InterfaceB, public InterfaceC { + public: + char d1[11]; + virtual void f() { } + virtual void A() { } + virtual void B() { } + virtual void C() { } +}; + +class ClassMltD2 : public InterfaceA, public InterfaceB, public ClassB { + public: + char d2[15]; + virtual void f() { } + virtual void A() { } + virtual void B() { } +}; + +// to specifically test heap reachability under +// inerface-only multiple inheritance (some use inside-object pointers): +REGISTER_OBJ_MAKER(MltD1, ClassMltD1* p = new(initialized) ClassMltD1;) +REGISTER_OBJ_MAKER(MltD1_as_B, ClassB* p = new(initialized) ClassMltD1;) +REGISTER_OBJ_MAKER(MltD1_as_IA, InterfaceA* p = new(initialized) ClassMltD1;) +REGISTER_OBJ_MAKER(MltD1_as_IB, InterfaceB* p = new(initialized) ClassMltD1;) +REGISTER_OBJ_MAKER(MltD1_as_IC, InterfaceC* p = new(initialized) ClassMltD1;) + +REGISTER_OBJ_MAKER(MltD2, ClassMltD2* p = new(initialized) ClassMltD2;) +REGISTER_OBJ_MAKER(MltD2_as_B, ClassB* p = new(initialized) ClassMltD2;) +REGISTER_OBJ_MAKER(MltD2_as_IA, InterfaceA* p = new(initialized) ClassMltD2;) +REGISTER_OBJ_MAKER(MltD2_as_IB, InterfaceB* p = new(initialized) ClassMltD2;) + +// to mimic UnicodeString defined in third_party/icu, +// which store a platform-independent-sized refcount in the first +// few bytes and keeps a pointer pointing behind the refcount. +REGISTER_OBJ_MAKER(unicode_string, + char* p = new char[sizeof(uint32) * 10]; + p += sizeof(uint32); +) +// similar, but for platform-dependent-sized refcount +REGISTER_OBJ_MAKER(ref_counted, + char* p = new char[sizeof(int) * 20]; + p += sizeof(int); +) + +struct Nesting { + struct Inner { + Nesting* parent; + Inner(Nesting* p) : parent(p) {} + }; + Inner i0; + char n1[5]; + Inner i1; + char n2[11]; + Inner i2; + char n3[27]; + Inner i3; + Nesting() : i0(this), i1(this), i2(this), i3(this) {} +}; + +// to test inside-object pointers pointing at objects nested into heap objects: +REGISTER_OBJ_MAKER(nesting_i0, Nesting::Inner* p = &((new Nesting())->i0);) +REGISTER_OBJ_MAKER(nesting_i1, Nesting::Inner* p = &((new Nesting())->i1);) +REGISTER_OBJ_MAKER(nesting_i2, Nesting::Inner* p = &((new Nesting())->i2);) +REGISTER_OBJ_MAKER(nesting_i3, Nesting::Inner* p = &((new Nesting())->i3);) + +// allocate many objects reachable from global data +static void TestHeapLeakCheckerLiveness() { + live_leak_mutable.ptr = new(initialized) char[77]; + live_leak_templ_mutable.ptr = new(initialized) Array(); + live_leak_templ_mutable.val = Array(); + + TestObjMakers(); +} + +// ========================================================================= // + +// Get address (PC value) following the mmap call into addr_after_mmap_call +static void* Mmapper(uintptr_t* addr_after_mmap_call) { + void* r = mmap(NULL, 100, PROT_READ|PROT_WRITE, + MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + // Get current PC value into addr_after_mmap_call + void* stack[1]; + CHECK_EQ(GetStackTrace(stack, 1, 0), 1); + *addr_after_mmap_call = reinterpret_cast(stack[0]); + sleep(0); // undo -foptimize-sibling-calls + return r; +} + +// to trick complier into preventing inlining +static void* (*mmapper_addr)(uintptr_t* addr) = &Mmapper; + +// TODO(maxim): copy/move this to memory_region_map_unittest +// TODO(maxim): expand this test to include mmap64, mremap and sbrk calls. +static void VerifyMemoryRegionMapStackGet() { + uintptr_t caller_addr_limit; + void* addr = (*mmapper_addr)(&caller_addr_limit); + uintptr_t caller = 0; + { MemoryRegionMap::LockHolder l; + for (MemoryRegionMap::RegionIterator + i = MemoryRegionMap::BeginRegionLocked(); + i != MemoryRegionMap::EndRegionLocked(); ++i) { + if (i->start_addr == reinterpret_cast(addr)) { + CHECK_EQ(caller, 0); + caller = i->caller(); + } + } + } + // caller must point into Mmapper function: + if (!(reinterpret_cast(mmapper_addr) <= caller && + caller < caller_addr_limit)) { + LOGF << std::hex << "0x" << caller + << " does not seem to point into code of function Mmapper at " + << "0x" << reinterpret_cast(mmapper_addr) + << "! Stack frame collection must be off in MemoryRegionMap!"; + LOG(FATAL, "\n"); + } + munmap(addr, 100); +} + +static void* Mallocer(uintptr_t* addr_after_malloc_call) { + void* r = malloc(100); + sleep(0); // undo -foptimize-sibling-calls + // Get current PC value into addr_after_malloc_call + void* stack[1]; + CHECK_EQ(GetStackTrace(stack, 1, 0), 1); + *addr_after_malloc_call = reinterpret_cast(stack[0]); + return r; +} + +// to trick complier into preventing inlining +static void* (*mallocer_addr)(uintptr_t* addr) = &Mallocer; + +// non-static for friendship with HeapProfiler +// TODO(maxim): expand this test to include +// realloc, calloc, memalign, valloc, pvalloc, new, and new[]. +extern void VerifyHeapProfileTableStackGet() { + uintptr_t caller_addr_limit; + void* addr = (*mallocer_addr)(&caller_addr_limit); + uintptr_t caller = + reinterpret_cast(HeapLeakChecker::GetAllocCaller(addr)); + // caller must point into Mallocer function: + if (!(reinterpret_cast(mallocer_addr) <= caller && + caller < caller_addr_limit)) { + LOGF << std::hex << "0x" << caller + << " does not seem to point into code of function Mallocer at " + << "0x" << reinterpret_cast(mallocer_addr) + << "! Stack frame collection must be off in heap profiler!"; + LOG(FATAL, "\n"); + } + free(addr); +} + +// ========================================================================= // + +static void MakeALeak(void** arr) { + PreventHeapReclaiming(10 * sizeof(int)); + void* a = new(initialized) int[10]; + Hide(&a); + *arr = a; +} + +// Helper to do 'return 0;' inside main(): insted we do 'return Pass();' +static int Pass() { + fprintf(stdout, "PASS\n"); + g_have_exited_main = true; + return 0; +} + +int main(int argc, char** argv) { + run_hidden_ptr = DoRunHidden; + wipe_stack_ptr = DoWipeStack; + if (!HeapLeakChecker::IsActive()) { + CHECK_EQ(FLAGS_heap_check, ""); + LOG(WARNING, "HeapLeakChecker got turned off; we won't test much..."); + } else { + VerifyMemoryRegionMapStackGet(); + VerifyHeapProfileTableStackGet(); + } + + KeyInit(); + + // glibc 2.4, on x86_64 at least, has a lock-ordering bug, which + // means deadlock is possible when one thread calls dl_open at the + // same time another thread is calling dl_iterate_phdr. libunwind + // calls dl_iterate_phdr, and TestLibCAllocate calls dl_open (or the + // various syscalls in it do), at least the first time it's run. + // To avoid the deadlock, we run TestLibCAllocate once before getting + // multi-threaded. + // TODO(csilvers): once libc is fixed, or libunwind can work around it, + // get rid of this early call. We *want* our test to + // find potential problems like this one! + TestLibCAllocate(); + + if (FLAGS_interfering_threads) { + RunHeapBusyThreads(); // add interference early + } + TestLibCAllocate(); + + LOGF << "In main(): heap_check=" << FLAGS_heap_check << endl; + + CHECK(HeapLeakChecker::NoGlobalLeaks()); // so far, so good + + if (FLAGS_test_leak) { + void* arr; + RunHidden(NewCallback(MakeALeak, &arr)); + Use(&arr); + LogHidden("Leaking", arr); + if (FLAGS_test_cancel_global_check) { + HeapLeakChecker::CancelGlobalCheck(); + } else { + // Verify we can call NoGlobalLeaks repeatedly without deadlocking + HeapLeakChecker::NoGlobalLeaks(); + HeapLeakChecker::NoGlobalLeaks(); + } + return Pass(); + // whole-program leak-check should (with very high probability) + // catch the leak of arr (10 * sizeof(int) bytes) + // (when !FLAGS_test_cancel_global_check) + } + + if (FLAGS_test_loop_leak) { + void* arr1; + void* arr2; + RunHidden(NewCallback(MakeDeathLoop, &arr1, &arr2)); + Use(&arr1); + Use(&arr2); + LogHidden("Loop leaking", arr1); + LogHidden("Loop leaking", arr2); + if (FLAGS_test_cancel_global_check) { + HeapLeakChecker::CancelGlobalCheck(); + } else { + // Verify we can call NoGlobalLeaks repeatedly without deadlocking + HeapLeakChecker::NoGlobalLeaks(); + HeapLeakChecker::NoGlobalLeaks(); + } + return Pass(); + // whole-program leak-check should (with very high probability) + // catch the leak of arr1 and arr2 (4 * sizeof(void*) bytes) + // (when !FLAGS_test_cancel_global_check) + } + + if (FLAGS_test_register_leak) { + // make us fail only where the .sh test expects: + Pause(); + for (int i = 0; i < 100; ++i) { // give it some time to crash + CHECK(HeapLeakChecker::NoGlobalLeaks()); + Pause(); + } + return Pass(); + } + + TestHeapLeakCheckerLiveness(); + + HeapLeakChecker heap_check("all"); + + TestHiddenPointer(); + + TestHeapLeakChecker(); + Pause(); + TestLeakButTotalsMatch(); + Pause(); + + TestHeapLeakCheckerDeathSimple(); + Pause(); + TestHeapLeakCheckerDeathLoop(); + Pause(); + TestHeapLeakCheckerDeathInverse(); + Pause(); + TestHeapLeakCheckerDeathNoLeaks(); + Pause(); + TestHeapLeakCheckerDeathCountLess(); + Pause(); + TestHeapLeakCheckerDeathCountMore(); + Pause(); + + TestHeapLeakCheckerDeathTrick(); + Pause(); + + CHECK(HeapLeakChecker::NoGlobalLeaks()); // so far, so good + + TestHeapLeakCheckerNoFalsePositives(); + Pause(); + + TestHeapLeakCheckerDisabling(); + Pause(); + + TestSTLAlloc(); + Pause(); + TestSTLAllocInverse(); + Pause(); + + // Test that various STL allocators work. Some of these are redundant, but + // we don't know how STL might change in the future. For example, + // http://wiki/Main/StringNeStdString. +#define DTSL(a) { DirectTestSTLAlloc(a, #a); \ + Pause(); } + DTSL(std::allocator()); + DTSL(std::allocator()); + DTSL(std::string().get_allocator()); + DTSL(string().get_allocator()); + DTSL(vector().get_allocator()); + DTSL(vector().get_allocator()); + DTSL(vector >().get_allocator()); + DTSL(vector().get_allocator()); + DTSL((map().get_allocator())); + DTSL((map().get_allocator())); + DTSL(set().get_allocator()); +#undef DTSL + + TestLibCAllocate(); + Pause(); + + CHECK(HeapLeakChecker::NoGlobalLeaks()); // so far, so good + + Pause(); + + if (!FLAGS_maybe_stripped) { + CHECK(heap_check.SameHeap()); + } else { + WARN_IF(heap_check.SameHeap() != true, + "overall leaks are caught; we must be using a stripped binary"); + } + + CHECK(HeapLeakChecker::NoGlobalLeaks()); // so far, so good + + return Pass(); +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/heap-checker_unittest.sh b/src/thirdparty/gperftools-2.0/src/tests/heap-checker_unittest.sh new file mode 100755 index 000000000..765e6c779 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/heap-checker_unittest.sh @@ -0,0 +1,89 @@ +#!/bin/sh + +# Copyright (c) 2005, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# --- +# Author: Craig Silverstein +# +# Runs the heap-checker unittest with various environment variables. +# This is necessary because we turn on features like the heap profiler +# and heap checker via environment variables. This test makes sure +# they all play well together. + +# We expect BINDIR and PPROF_PATH to be set in the environment. +# If not, we set them to some reasonable values +BINDIR="${BINDIR:-.}" +PPROF_PATH="${PPROF_PATH:-$BINDIR/src/pprof}" + +if [ "x$1" = "x-h" -o "$1" = "x--help" ]; then + echo "USAGE: $0 [unittest dir] [path to pprof]" + echo " By default, unittest_dir=$BINDIR, pprof_path=$PPROF_PATH" + exit 1 +fi + +HEAP_CHECKER="${1:-$BINDIR}/heap-checker_unittest" +PPROF_PATH="${2:-$PPROF_PATH}" + +TMPDIR=/tmp/heap_check_info +rm -rf $TMPDIR || exit 2 +mkdir $TMPDIR || exit 3 + +# $1: value of heap-check env. var. +run_check() { + export PPROF_PATH="$PPROF_PATH" + [ -n "$1" ] && export HEAPCHECK="$1" || unset HEAPPROFILE + + echo -n "Testing $HEAP_CHECKER with HEAPCHECK=$1 ... " + if $HEAP_CHECKER > $TMPDIR/output 2>&1; then + echo "OK" + else + echo "FAILED" + echo "Output from the failed run:" + echo "----" + cat $TMPDIR/output + echo "----" + exit 4 + fi + + # If we set HEAPPROFILE, then we expect it to actually have emitted + # a profile. Check that it did. + if [ -n "$HEAPPROFILE" ]; then + [ -e "$HEAPPROFILE.0001.heap" ] || exit 5 + fi +} + +run_check "" +run_check "local" +run_check "normal" +run_check "strict" + +rm -rf $TMPDIR # clean up + +echo "PASS" diff --git a/src/thirdparty/gperftools-2.0/src/tests/heap-profiler_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/heap-profiler_unittest.cc new file mode 100644 index 000000000..5fd8bb7a2 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/heap-profiler_unittest.cc @@ -0,0 +1,163 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// A small program that just exercises our heap profiler by allocating +// memory and letting the heap-profiler emit a profile. We don't test +// threads (TODO). By itself, this unittest tests that the heap-profiler +// doesn't crash on simple programs, but its output can be analyzed by +// another testing script to actually verify correctness. See, eg, +// heap-profiler_unittest.sh. + +#include "config_for_unittests.h" +#include +#include +#include // for mkdir() +#include // for mkdir() on freebsd and os x +#ifdef HAVE_UNISTD_H +#include // for fork() +#endif +#include // for wait() +#include +#include "base/basictypes.h" +#include "base/logging.h" +#include + +using std::string; + +static const int kMaxCount = 100000; +int* g_array[kMaxCount]; // an array of int-vectors + +static ATTRIBUTE_NOINLINE void Allocate(int start, int end, int size) { + for (int i = start; i < end; ++i) { + if (i < kMaxCount) + g_array[i] = new int[size]; + } +} + +static ATTRIBUTE_NOINLINE void Allocate2(int start, int end, int size) { + for (int i = start; i < end; ++i) { + if (i < kMaxCount) + g_array[i] = new int[size]; + } +} + +static void Deallocate(int start, int end) { + for (int i = start; i < end; ++i) { + delete[] g_array[i]; + g_array[i] = 0; + } +} + +static void TestHeapProfilerStartStopIsRunning() { + // If you run this with whole-program heap-profiling on, than + // IsHeapProfilerRunning should return true. + if (!IsHeapProfilerRunning()) { + const char* tmpdir = getenv("TMPDIR"); + if (tmpdir == NULL) + tmpdir = "/tmp"; + mkdir(tmpdir, 0755); // if necessary + HeapProfilerStart((string(tmpdir) + "/start_stop").c_str()); + CHECK(IsHeapProfilerRunning()); + + Allocate(0, 40, 100); + Deallocate(0, 40); + + HeapProfilerStop(); + CHECK(!IsHeapProfilerRunning()); + } +} + +static void TestDumpHeapProfiler() { + // If you run this with whole-program heap-profiling on, than + // IsHeapProfilerRunning should return true. + if (!IsHeapProfilerRunning()) { + const char* tmpdir = getenv("TMPDIR"); + if (tmpdir == NULL) + tmpdir = "/tmp"; + mkdir(tmpdir, 0755); // if necessary + HeapProfilerStart((string(tmpdir) + "/dump").c_str()); + CHECK(IsHeapProfilerRunning()); + + Allocate(0, 40, 100); + Deallocate(0, 40); + + char* output = GetHeapProfile(); + free(output); + HeapProfilerStop(); + } +} + + +int main(int argc, char** argv) { + if (argc > 2 || (argc == 2 && argv[1][0] == '-')) { + printf("USAGE: %s [number of children to fork]\n", argv[0]); + exit(0); + } + int num_forks = 0; + if (argc == 2) { + num_forks = atoi(argv[1]); + } + + TestHeapProfilerStartStopIsRunning(); + TestDumpHeapProfiler(); + + Allocate(0, 40, 100); + Deallocate(0, 40); + + Allocate(0, 40, 100); + Allocate(0, 40, 100); + Allocate2(40, 400, 1000); + Allocate2(400, 1000, 10000); + Deallocate(0, 1000); + + Allocate(0, 100, 100000); + Deallocate(0, 10); + Deallocate(10, 20); + Deallocate(90, 100); + Deallocate(20, 90); + + while (num_forks-- > 0) { + switch (fork()) { + case -1: + printf("FORK failed!\n"); + return 1; + case 0: // child + return execl(argv[0], argv[0], NULL); // run child with no args + default: + wait(NULL); // we'll let the kids run one at a time + } + } + + printf("DONE.\n"); + + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/heap-profiler_unittest.sh b/src/thirdparty/gperftools-2.0/src/tests/heap-profiler_unittest.sh new file mode 100755 index 000000000..ad0a1ec45 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/heap-profiler_unittest.sh @@ -0,0 +1,150 @@ +#!/bin/sh + +# Copyright (c) 2005, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# --- +# Author: Craig Silverstein +# +# Runs the heap-profiler unittest and makes sure the profile looks appropriate. +# +# We run under the assumption that if $HEAP_PROFILER is run with --help, +# it prints a usage line of the form +# USAGE: [...] +# +# This is because libtool sometimes turns the 'executable' into a +# shell script which runs an actual binary somewhere else. + +# We expect BINDIR and PPROF_PATH to be set in the environment. +# If not, we set them to some reasonable values +BINDIR="${BINDIR:-.}" +PPROF_PATH="${PPROF_PATH:-$BINDIR/src/pprof}" + +if [ "x$1" = "x-h" -o "x$1" = "x--help" ]; then + echo "USAGE: $0 [unittest dir] [path to pprof]" + echo " By default, unittest_dir=$BINDIR, pprof_path=$PPROF_PATH" + exit 1 +fi + +HEAP_PROFILER="${1:-$BINDIR}/heap-profiler_unittest" +PPROF="${2:-$PPROF_PATH}" +TEST_TMPDIR=/tmp/heap_profile_info + +# It's meaningful to the profiler, so make sure we know its state +unset HEAPPROFILE + +rm -rf "$TEST_TMPDIR" +mkdir "$TEST_TMPDIR" || exit 2 + +num_failures=0 + +# Given one profile (to check the contents of that profile) or two +# profiles (to check the diff between the profiles), and a function +# name, verify that the function name takes up at least 90% of the +# allocated memory. The function name is actually specified first. +VerifyMemFunction() { + function="$1" + shift + + # get program name. Note we have to unset HEAPPROFILE so running + # help doesn't overwrite existing profiles. + exec=`unset HEAPPROFILE; $HEAP_PROFILER --help | awk '{print $2; exit;}'` + + if [ $# = 2 ]; then + [ -f "$1" ] || { echo "Profile not found: $1"; exit 1; } + [ -f "$2" ] || { echo "Profile not found: $2"; exit 1; } + $PPROF --base="$1" $exec "$2" >"$TEST_TMPDIR/output.pprof" 2>&1 + else + [ -f "$1" ] || { echo "Profile not found: $1"; exit 1; } + $PPROF $exec "$1" >"$TEST_TMPDIR/output.pprof" 2>&1 + fi + + cat "$TEST_TMPDIR/output.pprof" \ + | tr -d % | awk '$6 ~ /^'$function'$/ && $2 > 90 {exit 1;}' + if [ $? != 1 ]; then + echo + echo "--- Test failed for $function: didn't account for 90% of executable memory" + echo "--- Program output:" + cat "$TEST_TMPDIR/output" + echo "--- pprof output:" + cat "$TEST_TMPDIR/output.pprof" + echo "---" + num_failures=`expr $num_failures + 1` + fi +} + +VerifyOutputContains() { + text="$1" + + if ! grep "$text" "$TEST_TMPDIR/output" >/dev/null 2>&1; then + echo "--- Test failed: output does not contain '$text'" + echo "--- Program output:" + cat "$TEST_TMPDIR/output" + echo "---" + num_failures=`expr $num_failures + 1` + fi +} + +HEAPPROFILE="$TEST_TMPDIR/test" +HEAP_PROFILE_INUSE_INTERVAL="10240" # need this to be 10Kb +HEAP_PROFILE_ALLOCATION_INTERVAL="$HEAP_PROFILE_INUSE_INTERVAL" +HEAP_PROFILE_DEALLOCATION_INTERVAL="$HEAP_PROFILE_INUSE_INTERVAL" +export HEAPPROFILE +export HEAP_PROFILE_INUSE_INTERVAL +export HEAP_PROFILE_ALLOCATION_INTERVAL +export HEAP_PROFILE_DEALLOCATION_INTERVAL + +# We make the unittest run a child process, to test that the child +# process doesn't try to write a heap profile as well and step on the +# parent's toes. If it does, we expect the parent-test to fail. +$HEAP_PROFILER 1 >$TEST_TMPDIR/output 2>&1 # run program, with 1 child proc + +VerifyMemFunction Allocate2 "$HEAPPROFILE.1329.heap" +VerifyMemFunction Allocate "$HEAPPROFILE.1448.heap" "$HEAPPROFILE.1548.heap" + +# Check the child process got to emit its own profile as well. +VerifyMemFunction Allocate2 "$HEAPPROFILE"_*.1329.heap +VerifyMemFunction Allocate "$HEAPPROFILE"_*.1448.heap "$HEAPPROFILE"_*.1548.heap + +# Make sure we logged both about allocating and deallocating memory +VerifyOutputContains "62 MB allocated" +VerifyOutputContains "62 MB freed" + +# Now try running without --heap_profile specified, to allow +# testing of the HeapProfileStart/Stop functionality. +$HEAP_PROFILER >"$TEST_TMPDIR/output2" 2>&1 + +rm -rf $TMPDIR # clean up + +if [ $num_failures = 0 ]; then + echo "PASS" +else + echo "Tests finished with $num_failures failures" +fi +exit $num_failures diff --git a/src/thirdparty/gperftools-2.0/src/tests/low_level_alloc_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/low_level_alloc_unittest.cc new file mode 100644 index 000000000..0e5a48aaf --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/low_level_alloc_unittest.cc @@ -0,0 +1,196 @@ +/* Copyright (c) 2006, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// A test for low_level_alloc.cc + +#include +#include +#include "base/low_level_alloc.h" +#include "base/logging.h" +#include + +using std::map; + +// a block of memory obtained from the allocator +struct BlockDesc { + char *ptr; // pointer to memory + int len; // number of bytes + int fill; // filled with data starting with this +}; + +// Check that the pattern placed in the block d +// by RandomizeBlockDesc is still there. +static void CheckBlockDesc(const BlockDesc &d) { + for (int i = 0; i != d.len; i++) { + CHECK((d.ptr[i] & 0xff) == ((d.fill + i) & 0xff)); + } +} + +// Fill the block "*d" with a pattern +// starting with a random byte. +static void RandomizeBlockDesc(BlockDesc *d) { + d->fill = rand() & 0xff; + for (int i = 0; i != d->len; i++) { + d->ptr[i] = (d->fill + i) & 0xff; + } +} + +// Use to indicate to the malloc hooks that +// this calls is from LowLevelAlloc. +static bool using_low_level_alloc = false; + +// n times, toss a coin, and based on the outcome +// either allocate a new block or deallocate an old block. +// New blocks are placed in a map with a random key +// and initialized with RandomizeBlockDesc(). +// If keys conflict, the older block is freed. +// Old blocks are always checked with CheckBlockDesc() +// before being freed. At the end of the run, +// all remaining allocated blocks are freed. +// If use_new_arena is true, use a fresh arena, and then delete it. +// If call_malloc_hook is true and user_arena is true, +// allocations and deallocations are reported via the MallocHook +// interface. +static void Test(bool use_new_arena, bool call_malloc_hook, int n) { + typedef map AllocMap; + AllocMap allocated; + AllocMap::iterator it; + BlockDesc block_desc; + int rnd; + LowLevelAlloc::Arena *arena = 0; + if (use_new_arena) { + int32 flags = call_malloc_hook? LowLevelAlloc::kCallMallocHook : 0; + arena = LowLevelAlloc::NewArena(flags, LowLevelAlloc::DefaultArena()); + } + for (int i = 0; i != n; i++) { + if (i != 0 && i % 10000 == 0) { + printf("."); + fflush(stdout); + } + + switch(rand() & 1) { // toss a coin + case 0: // coin came up heads: add a block + using_low_level_alloc = true; + block_desc.len = rand() & 0x3fff; + block_desc.ptr = + reinterpret_cast( + arena == 0 + ? LowLevelAlloc::Alloc(block_desc.len) + : LowLevelAlloc::AllocWithArena(block_desc.len, arena)); + using_low_level_alloc = false; + RandomizeBlockDesc(&block_desc); + rnd = rand(); + it = allocated.find(rnd); + if (it != allocated.end()) { + CheckBlockDesc(it->second); + using_low_level_alloc = true; + LowLevelAlloc::Free(it->second.ptr); + using_low_level_alloc = false; + it->second = block_desc; + } else { + allocated[rnd] = block_desc; + } + break; + case 1: // coin came up tails: remove a block + it = allocated.begin(); + if (it != allocated.end()) { + CheckBlockDesc(it->second); + using_low_level_alloc = true; + LowLevelAlloc::Free(it->second.ptr); + using_low_level_alloc = false; + allocated.erase(it); + } + break; + } + } + // remove all remaniing blocks + while ((it = allocated.begin()) != allocated.end()) { + CheckBlockDesc(it->second); + using_low_level_alloc = true; + LowLevelAlloc::Free(it->second.ptr); + using_low_level_alloc = false; + allocated.erase(it); + } + if (use_new_arena) { + CHECK(LowLevelAlloc::DeleteArena(arena)); + } +} + +// used for counting allocates and frees +static int32 allocates; +static int32 frees; + +// called on each alloc if kCallMallocHook specified +static void AllocHook(const void *p, size_t size) { + if (using_low_level_alloc) { + allocates++; + } +} + +// called on each free if kCallMallocHook specified +static void FreeHook(const void *p) { + if (using_low_level_alloc) { + frees++; + } +} + +int main(int argc, char *argv[]) { + // This is needed by maybe_threads_unittest.sh, which parses argv[0] + // to figure out what directory low_level_alloc_unittest is in. + if (argc != 1) { + fprintf(stderr, "USAGE: %s\n", argv[0]); + return 1; + } + + CHECK(MallocHook::AddNewHook(&AllocHook)); + CHECK(MallocHook::AddDeleteHook(&FreeHook)); + CHECK_EQ(allocates, 0); + CHECK_EQ(frees, 0); + Test(false, false, 50000); + CHECK_NE(allocates, 0); // default arena calls hooks + CHECK_NE(frees, 0); + for (int i = 0; i != 16; i++) { + bool call_hooks = ((i & 1) == 1); + allocates = 0; + frees = 0; + Test(true, call_hooks, 15000); + if (call_hooks) { + CHECK_GT(allocates, 5000); // arena calls hooks + CHECK_GT(frees, 5000); + } else { + CHECK_EQ(allocates, 0); // arena doesn't call hooks + CHECK_EQ(frees, 0); + } + } + printf("\nPASS\n"); + CHECK(MallocHook::RemoveNewHook(&AllocHook)); + CHECK(MallocHook::RemoveDeleteHook(&FreeHook)); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/malloc_extension_c_test.c b/src/thirdparty/gperftools-2.0/src/tests/malloc_extension_c_test.c new file mode 100644 index 000000000..af0e0c165 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/malloc_extension_c_test.c @@ -0,0 +1,147 @@ +/* Copyright (c) 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Craig Silverstein + * + * This tests the c shims: malloc_extension_c.h and malloc_hook_c.h. + * Mostly, we'll just care that these shims compile under gcc + * (*not* g++!) + * + * NOTE: this is C code, not C++ code! + */ + +#include +#include +#include /* for size_t */ +#include +#include + +#define FAIL(msg) do { \ + fprintf(stderr, "FATAL ERROR: %s\n", msg); \ + exit(1); \ +} while (0) + +static int g_new_hook_calls = 0; +static int g_delete_hook_calls = 0; + +void TestNewHook(const void* ptr, size_t size) { + g_new_hook_calls++; +} + +void TestDeleteHook(const void* ptr) { + g_delete_hook_calls++; +} + +void TestMallocHook(void) { + /* TODO(csilvers): figure out why we get: + * E0100 00:00:00.000000 7383 malloc_hook.cc:244] RAW: google_malloc section is missing, thus InHookCaller is broken! + */ +#if 0 + void* result[5]; + + if (MallocHook_GetCallerStackTrace(result, sizeof(result)/sizeof(*result), + 0) < 2) { /* should have this and main */ + FAIL("GetCallerStackTrace failed"); + } +#endif + + if (!MallocHook_AddNewHook(&TestNewHook)) { + FAIL("Failed to add new hook"); + } + if (!MallocHook_AddDeleteHook(&TestDeleteHook)) { + FAIL("Failed to add delete hook"); + } + free(malloc(10)); + free(malloc(20)); + if (g_new_hook_calls != 2) { + FAIL("Wrong number of calls to the new hook"); + } + if (g_delete_hook_calls != 2) { + FAIL("Wrong number of calls to the delete hook"); + } + if (!MallocHook_RemoveNewHook(&TestNewHook)) { + FAIL("Failed to remove new hook"); + } + if (!MallocHook_RemoveDeleteHook(&TestDeleteHook)) { + FAIL("Failed to remove delete hook"); + } +} + +void TestMallocExtension(void) { + int blocks; + size_t total; + int hist[64]; + char buffer[200]; + char* x = (char*)malloc(10); + + MallocExtension_VerifyAllMemory(); + MallocExtension_VerifyMallocMemory(x); + MallocExtension_MallocMemoryStats(&blocks, &total, hist); + MallocExtension_GetStats(buffer, sizeof(buffer)); + if (!MallocExtension_GetNumericProperty("generic.current_allocated_bytes", + &total)) { + FAIL("GetNumericProperty failed for generic.current_allocated_bytes"); + } + if (total < 10) { + FAIL("GetNumericProperty had bad return for generic.current_allocated_bytes"); + } + if (!MallocExtension_GetNumericProperty("generic.current_allocated_bytes", + &total)) { + FAIL("GetNumericProperty failed for generic.current_allocated_bytes"); + } + MallocExtension_MarkThreadIdle(); + MallocExtension_MarkThreadBusy(); + MallocExtension_ReleaseToSystem(1); + MallocExtension_ReleaseFreeMemory(); + if (MallocExtension_GetEstimatedAllocatedSize(10) < 10) { + FAIL("GetEstimatedAllocatedSize returned a bad value (too small)"); + } + if (MallocExtension_GetAllocatedSize(x) < 10) { + FAIL("GetEstimatedAllocatedSize returned a bad value (too small)"); + } + if (MallocExtension_GetOwnership(x) != MallocExtension_kOwned) { + FAIL("DidAllocatePtr returned a bad value (kNotOwned)"); + } + /* TODO(csilvers): this relies on undocumented behavior that + GetOwnership works on stack-allocated variables. Use a better test. */ + if (MallocExtension_GetOwnership(hist) != MallocExtension_kNotOwned) { + FAIL("DidAllocatePtr returned a bad value (kOwned)"); + } + + free(x); +} + +int main(int argc, char** argv) { + TestMallocHook(); + TestMallocExtension(); + + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/malloc_extension_test.cc b/src/thirdparty/gperftools-2.0/src/tests/malloc_extension_test.cc new file mode 100644 index 000000000..58fef7ea2 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/malloc_extension_test.cc @@ -0,0 +1,99 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// Simple test of malloc_extension. Includes test of C shims. + +#include "config_for_unittests.h" +#include +#include +#include "base/logging.h" +#include +#include + +using STL_NAMESPACE::vector; + +int main(int argc, char** argv) { + void* a = malloc(1000); + + size_t cxx_bytes_used, c_bytes_used; + ASSERT_TRUE(MallocExtension::instance()->GetNumericProperty( + "generic.current_allocated_bytes", &cxx_bytes_used)); + ASSERT_TRUE(MallocExtension_GetNumericProperty( + "generic.current_allocated_bytes", &c_bytes_used)); + ASSERT_GT(cxx_bytes_used, 1000); + ASSERT_EQ(cxx_bytes_used, c_bytes_used); + + ASSERT_TRUE(MallocExtension::instance()->VerifyAllMemory()); + ASSERT_TRUE(MallocExtension_VerifyAllMemory()); + + ASSERT_EQ(MallocExtension::kOwned, + MallocExtension::instance()->GetOwnership(a)); + // TODO(csilvers): this relies on undocumented behavior that + // GetOwnership works on stack-allocated variables. Use a better test. + ASSERT_EQ(MallocExtension::kNotOwned, + MallocExtension::instance()->GetOwnership(&cxx_bytes_used)); + ASSERT_EQ(MallocExtension::kNotOwned, + MallocExtension::instance()->GetOwnership(NULL)); + ASSERT_GE(MallocExtension::instance()->GetAllocatedSize(a), 1000); + // This is just a sanity check. If we allocated too much, tcmalloc is broken + ASSERT_LE(MallocExtension::instance()->GetAllocatedSize(a), 5000); + ASSERT_GE(MallocExtension::instance()->GetEstimatedAllocatedSize(1000), 1000); + + for (int i = 0; i < 10; ++i) { + void *p = malloc(i); + ASSERT_GE(MallocExtension::instance()->GetAllocatedSize(p), + MallocExtension::instance()->GetEstimatedAllocatedSize(i)); + free(p); + } + + // Check the c-shim version too. + ASSERT_EQ(MallocExtension_kOwned, MallocExtension_GetOwnership(a)); + ASSERT_EQ(MallocExtension_kNotOwned, + MallocExtension_GetOwnership(&cxx_bytes_used)); + ASSERT_EQ(MallocExtension_kNotOwned, MallocExtension_GetOwnership(NULL)); + ASSERT_GE(MallocExtension_GetAllocatedSize(a), 1000); + ASSERT_LE(MallocExtension_GetAllocatedSize(a), 5000); + ASSERT_GE(MallocExtension_GetEstimatedAllocatedSize(1000), 1000); + + free(a); + + // Verify that the .cc file and .h file have the same enum values. + ASSERT_EQ(static_cast(MallocExtension::kUnknownOwnership), + static_cast(MallocExtension_kUnknownOwnership)); + ASSERT_EQ(static_cast(MallocExtension::kOwned), + static_cast(MallocExtension_kOwned)); + ASSERT_EQ(static_cast(MallocExtension::kNotOwned), + static_cast(MallocExtension_kNotOwned)); + + printf("DONE\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/malloc_hook_test.cc b/src/thirdparty/gperftools-2.0/src/tests/malloc_hook_test.cc new file mode 100644 index 000000000..cbf526a50 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/malloc_hook_test.cc @@ -0,0 +1,366 @@ +// Copyright (c) 2011, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// ---- +// Author: llib@google.com (Bill Clarke) + +#include "config_for_unittests.h" +#include +#include +#ifdef HAVE_MMAP +#include +#endif +#ifdef HAVE_UNISTD_H +#include // for sleep() +#endif +#include +#include +#include +#include +#include "malloc_hook-inl.h" +#include "base/logging.h" +#include "base/simple_mutex.h" +#include "base/sysinfo.h" +#include "tests/testutil.h" + +// On systems (like freebsd) that don't define MAP_ANONYMOUS, use the old +// form of the name instead. +#ifndef MAP_ANONYMOUS +# define MAP_ANONYMOUS MAP_ANON +#endif + +namespace { + +using std::string; +using std::vector; + +vector g_testlist; // the tests to run + +#define TEST(a, b) \ + struct Test_##a##_##b { \ + Test_##a##_##b() { g_testlist.push_back(&Run); } \ + static void Run(); \ + }; \ + static Test_##a##_##b g_test_##a##_##b; \ + void Test_##a##_##b::Run() + + +static int RUN_ALL_TESTS() { + vector::const_iterator it; + for (it = g_testlist.begin(); it != g_testlist.end(); ++it) { + (*it)(); // The test will error-exit if there's a problem. + } + fprintf(stderr, "\nPassed %d tests\n\nPASS\n", + static_cast(g_testlist.size())); + return 0; +} + +void Sleep(int seconds) { +#ifdef _MSC_VER + _sleep(seconds * 1000); // Windows's _sleep takes milliseconds argument +#else + sleep(seconds); +#endif +} + +using std::min; +using base::internal::kHookListMaxValues; + +// Since HookList is a template and is defined in malloc_hook.cc, we can only +// use an instantiation of it from malloc_hook.cc. We then reinterpret those +// values as integers for testing. +typedef base::internal::HookList TestHookList; + +int TestHookList_Traverse(const TestHookList& list, int* output_array, int n) { + MallocHook::NewHook values_as_hooks[kHookListMaxValues]; + int result = list.Traverse(values_as_hooks, min(n, kHookListMaxValues)); + for (int i = 0; i < result; ++i) { + output_array[i] = reinterpret_cast(values_as_hooks[i]); + } + return result; +} + +bool TestHookList_Add(TestHookList* list, int val) { + return list->Add(reinterpret_cast(val)); +} + +bool TestHookList_Remove(TestHookList* list, int val) { + return list->Remove(reinterpret_cast(val)); +} + +// Note that this is almost the same as INIT_HOOK_LIST in malloc_hook.cc without +// the cast. +#define INIT_HOOK_LIST(initial_value) { 1, { initial_value } } + +TEST(HookListTest, InitialValueExists) { + TestHookList list = INIT_HOOK_LIST(69); + int values[2] = { 0, 0 }; + EXPECT_EQ(1, TestHookList_Traverse(list, values, 2)); + EXPECT_EQ(69, values[0]); + EXPECT_EQ(1, list.priv_end); +} + +TEST(HookListTest, CanRemoveInitialValue) { + TestHookList list = INIT_HOOK_LIST(69); + ASSERT_TRUE(TestHookList_Remove(&list, 69)); + EXPECT_EQ(0, list.priv_end); + + int values[2] = { 0, 0 }; + EXPECT_EQ(0, TestHookList_Traverse(list, values, 2)); +} + +TEST(HookListTest, AddAppends) { + TestHookList list = INIT_HOOK_LIST(69); + ASSERT_TRUE(TestHookList_Add(&list, 42)); + EXPECT_EQ(2, list.priv_end); + + int values[2] = { 0, 0 }; + EXPECT_EQ(2, TestHookList_Traverse(list, values, 2)); + EXPECT_EQ(69, values[0]); + EXPECT_EQ(42, values[1]); +} + +TEST(HookListTest, RemoveWorksAndWillClearSize) { + TestHookList list = INIT_HOOK_LIST(69); + ASSERT_TRUE(TestHookList_Add(&list, 42)); + + ASSERT_TRUE(TestHookList_Remove(&list, 69)); + EXPECT_EQ(2, list.priv_end); + + int values[2] = { 0, 0 }; + EXPECT_EQ(1, TestHookList_Traverse(list, values, 2)); + EXPECT_EQ(42, values[0]); + + ASSERT_TRUE(TestHookList_Remove(&list, 42)); + EXPECT_EQ(0, list.priv_end); + EXPECT_EQ(0, TestHookList_Traverse(list, values, 2)); +} + +TEST(HookListTest, AddPrependsAfterRemove) { + TestHookList list = INIT_HOOK_LIST(69); + ASSERT_TRUE(TestHookList_Add(&list, 42)); + + ASSERT_TRUE(TestHookList_Remove(&list, 69)); + EXPECT_EQ(2, list.priv_end); + + ASSERT_TRUE(TestHookList_Add(&list, 7)); + EXPECT_EQ(2, list.priv_end); + + int values[2] = { 0, 0 }; + EXPECT_EQ(2, TestHookList_Traverse(list, values, 2)); + EXPECT_EQ(7, values[0]); + EXPECT_EQ(42, values[1]); +} + +TEST(HookListTest, InvalidAddRejected) { + TestHookList list = INIT_HOOK_LIST(69); + EXPECT_FALSE(TestHookList_Add(&list, 0)); + + int values[2] = { 0, 0 }; + EXPECT_EQ(1, TestHookList_Traverse(list, values, 2)); + EXPECT_EQ(69, values[0]); + EXPECT_EQ(1, list.priv_end); +} + +TEST(HookListTest, FillUpTheList) { + TestHookList list = INIT_HOOK_LIST(69); + int num_inserts = 0; + while (TestHookList_Add(&list, ++num_inserts)) + ; + EXPECT_EQ(kHookListMaxValues, num_inserts); + EXPECT_EQ(kHookListMaxValues, list.priv_end); + + int values[kHookListMaxValues + 1]; + EXPECT_EQ(kHookListMaxValues, TestHookList_Traverse(list, values, + kHookListMaxValues)); + EXPECT_EQ(69, values[0]); + for (int i = 1; i < kHookListMaxValues; ++i) { + EXPECT_EQ(i, values[i]); + } +} + +void MultithreadedTestThread(TestHookList* list, int shift, + int thread_num) { + string message; + char buf[64]; + for (int i = 1; i < 1000; ++i) { + // In each loop, we insert a unique value, check it exists, remove it, and + // check it doesn't exist. We also record some stats to log at the end of + // each thread. Each insertion location and the length of the list is + // non-deterministic (except for the very first one, over all threads, and + // after the very last one the list should be empty). + int value = (i << shift) + thread_num; + EXPECT_TRUE(TestHookList_Add(list, value)); + sched_yield(); // Ensure some more interleaving. + int values[kHookListMaxValues + 1]; + int num_values = TestHookList_Traverse(*list, values, kHookListMaxValues); + EXPECT_LT(0, num_values); + int value_index; + for (value_index = 0; + value_index < num_values && values[value_index] != value; + ++value_index) + ; + EXPECT_LT(value_index, num_values); // Should have found value. + snprintf(buf, sizeof(buf), "[%d/%d; ", value_index, num_values); + message += buf; + sched_yield(); + EXPECT_TRUE(TestHookList_Remove(list, value)); + sched_yield(); + num_values = TestHookList_Traverse(*list, values, kHookListMaxValues); + for (value_index = 0; + value_index < num_values && values[value_index] != value; + ++value_index) + ; + EXPECT_EQ(value_index, num_values); // Should not have found value. + snprintf(buf, sizeof(buf), "%d]", num_values); + message += buf; + sched_yield(); + } + fprintf(stderr, "thread %d: %s\n", thread_num, message.c_str()); +} + +static volatile int num_threads_remaining; +static TestHookList list = INIT_HOOK_LIST(69); +static Mutex threadcount_lock; + +void MultithreadedTestThreadRunner(int thread_num) { + // Wait for all threads to start running. + { + MutexLock ml(&threadcount_lock); + assert(num_threads_remaining > 0); + --num_threads_remaining; + + // We should use condvars and the like, but for this test, we'll + // go simple and busy-wait. + while (num_threads_remaining > 0) { + threadcount_lock.Unlock(); + Sleep(1); + threadcount_lock.Lock(); + } + } + + // shift is the smallest number such that (1< kHookListMaxValues + int shift = 0; + for (int i = kHookListMaxValues; i > 0; i >>= 1) + shift += 1; + + MultithreadedTestThread(&list, shift, thread_num); +} + + +TEST(HookListTest, MultithreadedTest) { + ASSERT_TRUE(TestHookList_Remove(&list, 69)); + ASSERT_EQ(0, list.priv_end); + + // Run kHookListMaxValues thread, each running MultithreadedTestThread. + // First, we need to set up the rest of the globals. + num_threads_remaining = kHookListMaxValues; // a global var + RunManyThreadsWithId(&MultithreadedTestThreadRunner, num_threads_remaining, + 1 << 15); + + int values[kHookListMaxValues + 1]; + EXPECT_EQ(0, TestHookList_Traverse(list, values, kHookListMaxValues)); + EXPECT_EQ(0, list.priv_end); +} + +// We only do mmap-hooking on (some) linux systems. +#if defined(HAVE_MMAP) && defined(__linux) && \ + (defined(__i386__) || defined(__x86_64__) || defined(__PPC__)) + +int mmap_calls = 0; +int mmap_matching_calls = 0; +int munmap_calls = 0; +int munmap_matching_calls = 0; +const int kMmapMagicFd = 1; +void* const kMmapMagicPointer = reinterpret_cast(1); + +int MmapReplacement(const void* start, + size_t size, + int protection, + int flags, + int fd, + off_t offset, + void** result) { + ++mmap_calls; + if (fd == kMmapMagicFd) { + ++mmap_matching_calls; + *result = kMmapMagicPointer; + return true; + } + return false; +} + +int MunmapReplacement(const void* ptr, size_t size, int* result) { + ++munmap_calls; + if (ptr == kMmapMagicPointer) { + ++munmap_matching_calls; + *result = 0; + return true; + } + return false; +} + +TEST(MallocMookTest, MmapReplacements) { + mmap_calls = mmap_matching_calls = munmap_calls = munmap_matching_calls = 0; + MallocHook::SetMmapReplacement(&MmapReplacement); + MallocHook::SetMunmapReplacement(&MunmapReplacement); + EXPECT_EQ(kMmapMagicPointer, mmap(NULL, 1, PROT_READ, MAP_PRIVATE, + kMmapMagicFd, 0)); + EXPECT_EQ(1, mmap_matching_calls); + + char* ptr = reinterpret_cast( + mmap(NULL, 1, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)); + EXPECT_EQ(2, mmap_calls); + EXPECT_EQ(1, mmap_matching_calls); + ASSERT_NE(MAP_FAILED, ptr); + *ptr = 'a'; + + EXPECT_EQ(0, munmap(kMmapMagicPointer, 1)); + EXPECT_EQ(1, munmap_calls); + EXPECT_EQ(1, munmap_matching_calls); + + EXPECT_EQ(0, munmap(ptr, 1)); + EXPECT_EQ(2, munmap_calls); + EXPECT_EQ(1, munmap_matching_calls); + + // The DEATH test below is flaky, because we've just munmapped the memory, + // making it available for mmap()ing again. There is no guarantee that it + // will stay unmapped, and in fact it gets reused ~10% of the time. + // It the area is reused, then not only we don't die, but we also corrupt + // whoever owns that memory now. + // EXPECT_DEATH(*ptr = 'a', "SIGSEGV"); +} +#endif // #ifdef HAVE_MMAP && linux && ... + +} // namespace + +int main(int argc, char** argv) { + return RUN_ALL_TESTS(); +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/markidle_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/markidle_unittest.cc new file mode 100644 index 000000000..2f150abdb --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/markidle_unittest.cc @@ -0,0 +1,108 @@ +// Copyright (c) 2003, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// MallocExtension::MarkThreadIdle() testing +#include + +#include "config_for_unittests.h" +#include "base/logging.h" +#include +#include "tests/testutil.h" // for RunThread() + +// Helper routine to do lots of allocations +static void TestAllocation() { + static const int kNum = 100; + void* ptr[kNum]; + for (int size = 8; size <= 65536; size*=2) { + for (int i = 0; i < kNum; i++) { + ptr[i] = malloc(size); + } + for (int i = 0; i < kNum; i++) { + free(ptr[i]); + } + } +} + +// Routine that does a bunch of MarkThreadIdle() calls in sequence +// without any intervening allocations +static void MultipleIdleCalls() { + for (int i = 0; i < 4; i++) { + MallocExtension::instance()->MarkThreadIdle(); + } +} + +// Routine that does a bunch of MarkThreadIdle() calls in sequence +// with intervening allocations +static void MultipleIdleNonIdlePhases() { + for (int i = 0; i < 4; i++) { + TestAllocation(); + MallocExtension::instance()->MarkThreadIdle(); + } +} + +// Get current thread cache usage +static size_t GetTotalThreadCacheSize() { + size_t result; + CHECK(MallocExtension::instance()->GetNumericProperty( + "tcmalloc.current_total_thread_cache_bytes", + &result)); + return result; +} + +// Check that MarkThreadIdle() actually reduces the amount +// of per-thread memory. +static void TestIdleUsage() { + const size_t original = GetTotalThreadCacheSize(); + + TestAllocation(); + const size_t post_allocation = GetTotalThreadCacheSize(); + CHECK_GT(post_allocation, original); + + MallocExtension::instance()->MarkThreadIdle(); + const size_t post_idle = GetTotalThreadCacheSize(); + CHECK_LE(post_idle, original); + + // Log after testing because logging can allocate heap memory. + VLOG(0, "Original usage: %"PRIuS"\n", original); + VLOG(0, "Post allocation: %"PRIuS"\n", post_allocation); + VLOG(0, "Post idle: %"PRIuS"\n", post_idle); +} + +int main(int argc, char** argv) { + RunThread(&TestIdleUsage); + RunThread(&TestAllocation); + RunThread(&MultipleIdleCalls); + RunThread(&MultipleIdleNonIdlePhases); + + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/maybe_threads_unittest.sh b/src/thirdparty/gperftools-2.0/src/tests/maybe_threads_unittest.sh new file mode 100755 index 000000000..77b3b7885 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/maybe_threads_unittest.sh @@ -0,0 +1,79 @@ +#!/bin/sh + +# Copyright (c) 2007, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# --- +# Author: Craig Silverstein +# +# maybe_threads.cc was written to allow LD_PRELOAD=libtcmalloc.so to +# work even on binaries that were not linked with pthreads. This +# unittest tests that, by running low_level_alloc_unittest with an +# LD_PRELOAD. (low_level_alloc_unittest was chosen because it doesn't +# link in tcmalloc.) +# +# We assume all the .so files are in the same directory as both +# addressmap_unittest and profiler1_unittest. The reason we need +# profiler1_unittest is because it's instrumented to show the directory +# it's "really" in when run without any args. In practice this will either +# be BINDIR, or, when using libtool, BINDIR/.lib. + +# We expect BINDIR to be set in the environment. +# If not, we set them to some reasonable values. +BINDIR="${BINDIR:-.}" + +if [ "x$1" = "x-h" -o "x$1" = "x--help" ]; then + echo "USAGE: $0 [unittest dir]" + echo " By default, unittest_dir=$BINDIR" + exit 1 +fi + +UNITTEST_DIR=${1:-$BINDIR} + +# Figure out the "real" unittest directory. Also holds the .so files. +UNITTEST_DIR=`$UNITTEST_DIR/low_level_alloc_unittest --help 2>&1 \ + | awk '{print $2; exit;}' \ + | xargs dirname` + +# Figure out where libtcmalloc lives. It should be in UNITTEST_DIR, +# but with libtool it might be in a subdir. +if [ -r "$UNITTEST_DIR/libtcmalloc_minimal.so" ]; then + LIB_PATH="$UNITTEST_DIR/libtcmalloc_minimal.so" +elif [ -r "$UNITTEST_DIR/.libs/libtcmalloc_minimal.so" ]; then + LIB_PATH="$UNITTEST_DIR/.libs/libtcmalloc_minimal.so" +elif [ -r "$UNITTEST_DIR/libtcmalloc_minimal.dylib" ]; then # for os x + LIB_PATH="$UNITTEST_DIR/libtcmalloc_minimal.dylib" +elif [ -r "$UNITTEST_DIR/.libs/libtcmalloc_minimal.dylib" ]; then + LIB_PATH="$UNITTEST_DIR/.libs/libtcmalloc_minimal.dylib" +else + echo "Cannot run $0: cannot find libtcmalloc_minimal.so" + exit 2 +fi + +LD_PRELOAD="$LIB_PATH" $UNITTEST_DIR/low_level_alloc_unittest diff --git a/src/thirdparty/gperftools-2.0/src/tests/memalign_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/memalign_unittest.cc new file mode 100644 index 000000000..b354bb451 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/memalign_unittest.cc @@ -0,0 +1,220 @@ +// Copyright (c) 2004, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Check memalign related routines. +// +// We can't really do a huge amount of checking, but at the very +// least, the following code checks that return values are properly +// aligned, and that writing into the objects works. + +#include "config_for_unittests.h" + +// Complicated ordering requirements. tcmalloc.h defines (indirectly) +// _POSIX_C_SOURCE, which it needs so stdlib.h defines posix_memalign. +// unistd.h, on the other hand, requires _POSIX_C_SOURCE to be unset, +// at least on Mac OS X, in order to define getpagesize. The solution +// is to #include unistd.h first. This is safe because unistd.h +// doesn't sub-include stdlib.h, so we'll still get posix_memalign +// when we #include stdlib.h. Blah. +#ifdef HAVE_UNISTD_H +#include // for getpagesize() +#endif +#include "tcmalloc.h" // must come early, to pick up posix_memalign +#include +#include // defines posix_memalign +#include // for the printf at the end +#ifdef HAVE_STDINT_H +#include // for uintptr_t +#endif +#ifdef HAVE_UNISTD_H +#include // for getpagesize() +#endif +// Malloc can be in several places on older versions of OS X. +#if defined(HAVE_MALLOC_H) +#include // for memalign() and valloc() +#elif defined(HAVE_MALLOC_MALLOC_H) +#include +#elif defined(HAVE_SYS_MALLOC_H) +#include +#endif +#include "base/basictypes.h" +#include "base/logging.h" +#include "tests/testutil.h" + + +// Return the next interesting size/delta to check. Returns -1 if no more. +static int NextSize(int size) { + if (size < 100) { + return size+1; + } else if (size < 1048576) { + // Find next power of two + int power = 1; + while (power < size) { + power <<= 1; + } + + // Yield (power-1, power, power+1) + if (size < power-1) { + return power-1; + } else if (size == power-1) { + return power; + } else { + assert(size == power); + return power+1; + } + } else { + return -1; + } +} + +// Shortform for cast +static uintptr_t Number(void* p) { + return reinterpret_cast(p); +} + +// Check alignment +static void CheckAlignment(void* p, int align) { + if ((Number(p) & (align-1)) != 0) + LOG(FATAL, "wrong alignment; wanted 0x%x; got %p\n", align, p); +} + +// Fill a buffer of the specified size with a predetermined pattern +static void Fill(void* p, int n, char seed) { + unsigned char* buffer = reinterpret_cast(p); + for (int i = 0; i < n; i++) { + buffer[i] = ((seed + i) & 0xff); + } +} + +// Check that the specified buffer has the predetermined pattern +// generated by Fill() +static bool Valid(const void* p, int n, char seed) { + const unsigned char* buffer = reinterpret_cast(p); + for (int i = 0; i < n; i++) { + if (buffer[i] != ((seed + i) & 0xff)) { + return false; + } + } + return true; +} + +int main(int argc, char** argv) { + SetTestResourceLimit(); + + // Try allocating data with a bunch of alignments and sizes + for (int a = 1; a < 1048576; a *= 2) { + for (int s = 0; s != -1; s = NextSize(s)) { + void* ptr = memalign(a, s); + CheckAlignment(ptr, a); + Fill(ptr, s, 'x'); + CHECK(Valid(ptr, s, 'x')); + free(ptr); + + if ((a >= sizeof(void*)) && ((a & (a-1)) == 0)) { + CHECK(posix_memalign(&ptr, a, s) == 0); + CheckAlignment(ptr, a); + Fill(ptr, s, 'y'); + CHECK(Valid(ptr, s, 'y')); + free(ptr); + } + } + } + + { + // Check various corner cases + void* p1 = memalign(1<<20, 1<<19); + void* p2 = memalign(1<<19, 1<<19); + void* p3 = memalign(1<<21, 1<<19); + CheckAlignment(p1, 1<<20); + CheckAlignment(p2, 1<<19); + CheckAlignment(p3, 1<<21); + Fill(p1, 1<<19, 'a'); + Fill(p2, 1<<19, 'b'); + Fill(p3, 1<<19, 'c'); + CHECK(Valid(p1, 1<<19, 'a')); + CHECK(Valid(p2, 1<<19, 'b')); + CHECK(Valid(p3, 1<<19, 'c')); + free(p1); + free(p2); + free(p3); + } + + { + // posix_memalign + void* ptr; + CHECK(posix_memalign(&ptr, 0, 1) == EINVAL); + CHECK(posix_memalign(&ptr, sizeof(void*)/2, 1) == EINVAL); + CHECK(posix_memalign(&ptr, sizeof(void*)+1, 1) == EINVAL); + CHECK(posix_memalign(&ptr, 4097, 1) == EINVAL); + + // Grab some memory so that the big allocation below will definitely fail. + void* p_small = malloc(4*1048576); + CHECK(p_small != NULL); + + // Make sure overflow is returned as ENOMEM + const size_t zero = 0; + static const size_t kMinusNTimes = 10; + for ( size_t i = 1; i < kMinusNTimes; ++i ) { + int r = posix_memalign(&ptr, 1024, zero - i); + CHECK(r == ENOMEM); + } + + free(p_small); + } + + const int pagesize = getpagesize(); + { + // valloc + for (int s = 0; s != -1; s = NextSize(s)) { + void* p = valloc(s); + CheckAlignment(p, pagesize); + Fill(p, s, 'v'); + CHECK(Valid(p, s, 'v')); + free(p); + } + } + + { + // pvalloc + for (int s = 0; s != -1; s = NextSize(s)) { + void* p = pvalloc(s); + CheckAlignment(p, pagesize); + int alloc_needed = ((s + pagesize - 1) / pagesize) * pagesize; + Fill(p, alloc_needed, 'x'); + CHECK(Valid(p, alloc_needed, 'x')); + free(p); + } + } + + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/packed-cache_test.cc b/src/thirdparty/gperftools-2.0/src/tests/packed-cache_test.cc new file mode 100644 index 000000000..7f9aea60a --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/packed-cache_test.cc @@ -0,0 +1,62 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Geoff Pike + +#include +#include "base/logging.h" +#include "packed-cache-inl.h" + +static const int kHashbits = PackedCache<64, uint64>::kHashbits; + +// A basic sanity test. +void PackedCacheTest_basic() { + PackedCache<32, uint32> cache(0); + CHECK_EQ(cache.GetOrDefault(0, 1), 0); + cache.Put(0, 17); + CHECK(cache.Has(0)); + CHECK_EQ(cache.GetOrDefault(0, 1), 17); + cache.Put(19, 99); + CHECK(cache.Has(0) && cache.Has(19)); + CHECK_EQ(cache.GetOrDefault(0, 1), 17); + CHECK_EQ(cache.GetOrDefault(19, 1), 99); + // Knock <0, 17> out by using a conflicting key. + cache.Put(1 << kHashbits, 22); + CHECK(!cache.Has(0)); + CHECK_EQ(cache.GetOrDefault(0, 1), 1); + CHECK_EQ(cache.GetOrDefault(1 << kHashbits, 1), 22); +} + +int main(int argc, char **argv) { + PackedCacheTest_basic(); + + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/page_heap_test.cc b/src/thirdparty/gperftools-2.0/src/tests/page_heap_test.cc new file mode 100644 index 000000000..9f5f3c87f --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/page_heap_test.cc @@ -0,0 +1,55 @@ +// Copyright 2009 Google Inc. All Rights Reserved. +// Author: fikes@google.com (Andrew Fikes) + +#include "config_for_unittests.h" +#include "page_heap.h" +#include +#include "base/logging.h" +#include "common.h" + +namespace { + +static void CheckStats(const tcmalloc::PageHeap* ph, + uint64_t system_pages, + uint64_t free_pages, + uint64_t unmapped_pages) { + tcmalloc::PageHeap::Stats stats = ph->stats(); + EXPECT_EQ(system_pages, stats.system_bytes >> kPageShift); + EXPECT_EQ(free_pages, stats.free_bytes >> kPageShift); + EXPECT_EQ(unmapped_pages, stats.unmapped_bytes >> kPageShift); +} + +static void TestPageHeap_Stats() { + tcmalloc::PageHeap* ph = new tcmalloc::PageHeap(); + + // Empty page heap + CheckStats(ph, 0, 0, 0); + + // Allocate a span 's1' + tcmalloc::Span* s1 = ph->New(256); + CheckStats(ph, 256, 0, 0); + + // Split span 's1' into 's1', 's2'. Delete 's2' + tcmalloc::Span* s2 = ph->Split(s1, 128); + Length s2_len = s2->length; + ph->Delete(s2); + CheckStats(ph, 256, 128, 0); + + // Unmap deleted span 's2' + EXPECT_EQ(s2_len, ph->ReleaseAtLeastNPages(1)); + CheckStats(ph, 256, 0, 128); + + // Delete span 's1' + ph->Delete(s1); + CheckStats(ph, 256, 128, 128); + + delete ph; +} + +} // namespace + +int main(int argc, char **argv) { + TestPageHeap_Stats(); + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/pagemap_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/pagemap_unittest.cc new file mode 100644 index 000000000..83e76e29d --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/pagemap_unittest.cc @@ -0,0 +1,177 @@ +// Copyright (c) 2003, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#include "config_for_unittests.h" +#include +#include +#if defined HAVE_STDINT_H +#include // to get intptr_t +#elif defined HAVE_INTTYPES_H +#include // another place intptr_t might be defined +#endif +#include +#include +#include "base/logging.h" +#include "pagemap.h" + +using std::vector; + +static void Permute(vector* elements) { + if (elements->empty()) + return; + const size_t num_elements = elements->size(); + for (size_t i = num_elements - 1; i > 0; --i) { + const size_t newpos = rand() % (i + 1); + const intptr_t tmp = (*elements)[i]; // swap + (*elements)[i] = (*elements)[newpos]; + (*elements)[newpos] = tmp; + } +} + +// Note: we leak memory every time a map is constructed, so do not +// create too many maps. + +// Test specified map type +template +void TestMap(int limit, bool limit_is_below_the_overflow_boundary) { + RAW_LOG(INFO, "Running test with %d iterations...\n", limit); + + { // Test sequential ensure/assignment + Type map(malloc); + for (intptr_t i = 0; i < static_cast(limit); i++) { + map.Ensure(i, 1); + map.set(i, (void*)(i+1)); + CHECK_EQ(map.get(i), (void*)(i+1)); + } + for (intptr_t i = 0; i < static_cast(limit); i++) { + CHECK_EQ(map.get(i), (void*)(i+1)); + } + } + + { // Test bulk Ensure + Type map(malloc); + map.Ensure(0, limit); + for (intptr_t i = 0; i < static_cast(limit); i++) { + map.set(i, (void*)(i+1)); + CHECK_EQ(map.get(i), (void*)(i+1)); + } + for (intptr_t i = 0; i < static_cast(limit); i++) { + CHECK_EQ(map.get(i), (void*)(i+1)); + } + } + + // Test that we correctly notice overflow + { + Type map(malloc); + CHECK_EQ(map.Ensure(limit, limit+1), limit_is_below_the_overflow_boundary); + } + + { // Test randomized accesses + srand(301); // srand isn't great, but it's portable + vector elements; + for (intptr_t i = 0; i < static_cast(limit); i++) elements.push_back(i); + Permute(&elements); + + Type map(malloc); + for (intptr_t i = 0; i < static_cast(limit); i++) { + map.Ensure(elements[i], 1); + map.set(elements[i], (void*)(elements[i]+1)); + CHECK_EQ(map.get(elements[i]), (void*)(elements[i]+1)); + } + for (intptr_t i = 0; i < static_cast(limit); i++) { + CHECK_EQ(map.get(i), (void*)(i+1)); + } + } +} + +// REQUIRES: BITS==10, i.e., valid range is [0,1023]. +// Representations for different types will end up being: +// PageMap1: array[1024] +// PageMap2: array[32][32] +// PageMap3: array[16][16][4] +template +void TestNext(const char* name) { + RAW_LOG(ERROR, "Running NextTest %s\n", name); + Type map(malloc); + char a, b, c, d, e; + + // When map is empty + CHECK(map.Next(0) == NULL); + CHECK(map.Next(5) == NULL); + CHECK(map.Next(1<<30) == NULL); + + // Add a single value + map.Ensure(40, 1); + map.set(40, &a); + CHECK(map.Next(0) == &a); + CHECK(map.Next(39) == &a); + CHECK(map.Next(40) == &a); + CHECK(map.Next(41) == NULL); + CHECK(map.Next(1<<30) == NULL); + + // Add a few values + map.Ensure(41, 1); + map.Ensure(100, 3); + map.set(41, &b); + map.set(100, &c); + map.set(101, &d); + map.set(102, &e); + CHECK(map.Next(0) == &a); + CHECK(map.Next(39) == &a); + CHECK(map.Next(40) == &a); + CHECK(map.Next(41) == &b); + CHECK(map.Next(42) == &c); + CHECK(map.Next(63) == &c); + CHECK(map.Next(64) == &c); + CHECK(map.Next(65) == &c); + CHECK(map.Next(99) == &c); + CHECK(map.Next(100) == &c); + CHECK(map.Next(101) == &d); + CHECK(map.Next(102) == &e); + CHECK(map.Next(103) == NULL); +} + +int main(int argc, char** argv) { + TestMap< TCMalloc_PageMap1<10> > (100, true); + TestMap< TCMalloc_PageMap1<10> > (1 << 10, false); + TestMap< TCMalloc_PageMap2<20> > (100, true); + TestMap< TCMalloc_PageMap2<20> > (1 << 20, false); + TestMap< TCMalloc_PageMap3<20> > (100, true); + TestMap< TCMalloc_PageMap3<20> > (1 << 20, false); + + TestNext< TCMalloc_PageMap1<10> >("PageMap1"); + TestNext< TCMalloc_PageMap2<10> >("PageMap2"); + TestNext< TCMalloc_PageMap3<10> >("PageMap3"); + + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/profile-handler_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/profile-handler_unittest.cc new file mode 100644 index 000000000..98cfe6d5b --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/profile-handler_unittest.cc @@ -0,0 +1,506 @@ +// Copyright 2009 Google Inc. All Rights Reserved. +// Author: Nabeel Mian (nabeelmian@google.com) +// Chris Demetriou (cgd@google.com) +// +// This file contains the unit tests for profile-handler.h interface. +// +// It is linked into three separate unit tests: +// profile-handler_unittest tests basic functionality +// profile-handler_disable_test tests that the profiler +// is disabled with --install_signal_handlers=false +// profile-handler_conflict_test tests that the profiler +// is disabled when a SIGPROF handler is registered before InitGoogle. + +#include "config.h" +#include "profile-handler.h" + +#include +#include +#include +#include +#include "base/logging.h" +#include "base/simple_mutex.h" + +// Some helpful macros for the test class +#define TEST_F(cls, fn) void cls :: fn() + +// Do we expect the profiler to be enabled? +DEFINE_bool(test_profiler_enabled, true, + "expect profiler to be enabled during tests"); + +// Should we look at the kernel signal handler settings during the test? +// Not if we're in conflict_test, because we can't distinguish its nop +// handler from the real one. +DEFINE_bool(test_profiler_signal_handler, true, + "check profiler signal handler during tests"); + +namespace { + +// TODO(csilvers): error-checking on the pthreads routines +class Thread { + public: + Thread() : joinable_(false) { } + void SetJoinable(bool value) { joinable_ = value; } + void Start() { + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, joinable_ ? PTHREAD_CREATE_JOINABLE + : PTHREAD_CREATE_DETACHED); + pthread_create(&thread_, &attr, &DoRun, this); + pthread_attr_destroy(&attr); + } + void Join() { + assert(joinable_); + pthread_join(thread_, NULL); + } + virtual void Run() = 0; + private: + static void* DoRun(void* cls) { + ProfileHandlerRegisterThread(); + reinterpret_cast(cls)->Run(); + return NULL; + } + pthread_t thread_; + bool joinable_; +}; + +// Sleep interval in nano secs. ITIMER_PROF goes off only afer the specified CPU +// time is consumed. Under heavy load this process may no get scheduled in a +// timely fashion. Therefore, give enough time (20x of ProfileHandle timer +// interval 10ms (100Hz)) for this process to accumulate enought CPU time to get +// a profile tick. +int kSleepInterval = 200000000; + +// Sleep interval in nano secs. To ensure that if the timer has expired it is +// reset. +int kTimerResetInterval = 5000000; + +// Whether each thread has separate timers. +static bool timer_separate_ = false; +static int timer_type_ = ITIMER_PROF; +static int signal_number_ = SIGPROF; + +// Delays processing by the specified number of nano seconds. 'delay_ns' +// must be less than the number of nano seconds in a second (1000000000). +void Delay(int delay_ns) { + static const int kNumNSecInSecond = 1000000000; + EXPECT_LT(delay_ns, kNumNSecInSecond); + struct timespec delay = { 0, delay_ns }; + nanosleep(&delay, 0); +} + +// Checks whether the profile timer is enabled for the current thread. +bool IsTimerEnabled() { + itimerval current_timer; + EXPECT_EQ(0, getitimer(timer_type_, ¤t_timer)); + if ((current_timer.it_value.tv_sec == 0) && + (current_timer.it_value.tv_usec != 0)) { + // May be the timer has expired. Sleep for a bit and check again. + Delay(kTimerResetInterval); + EXPECT_EQ(0, getitimer(timer_type_, ¤t_timer)); + } + return (current_timer.it_value.tv_sec != 0 || + current_timer.it_value.tv_usec != 0); +} + +class VirtualTimerGetterThread : public Thread { + public: + VirtualTimerGetterThread() { + memset(&virtual_timer_, 0, sizeof virtual_timer_); + } + struct itimerval virtual_timer_; + + private: + void Run() { + CHECK_EQ(0, getitimer(ITIMER_VIRTUAL, &virtual_timer_)); + } +}; + +// This function checks whether the timers are shared between thread. This +// function spawns a thread, so use it carefully when testing thread-dependent +// behaviour. +static bool threads_have_separate_timers() { + struct itimerval new_timer_val; + + // Enable the virtual timer in the current thread. + memset(&new_timer_val, 0, sizeof new_timer_val); + new_timer_val.it_value.tv_sec = 1000000; // seconds + CHECK_EQ(0, setitimer(ITIMER_VIRTUAL, &new_timer_val, NULL)); + + // Spawn a thread, get the virtual timer's value there. + VirtualTimerGetterThread thread; + thread.SetJoinable(true); + thread.Start(); + thread.Join(); + + // Disable timer here. + memset(&new_timer_val, 0, sizeof new_timer_val); + CHECK_EQ(0, setitimer(ITIMER_VIRTUAL, &new_timer_val, NULL)); + + bool target_timer_enabled = (thread.virtual_timer_.it_value.tv_sec != 0 || + thread.virtual_timer_.it_value.tv_usec != 0); + if (!target_timer_enabled) { + LOG(INFO, "threads have separate timers"); + return true; + } else { + LOG(INFO, "threads have shared timers"); + return false; + } +} + +// Dummy worker thread to accumulate cpu time. +class BusyThread : public Thread { + public: + BusyThread() : stop_work_(false) { + } + + // Setter/Getters + bool stop_work() { + MutexLock lock(&mu_); + return stop_work_; + } + void set_stop_work(bool stop_work) { + MutexLock lock(&mu_); + stop_work_ = stop_work; + } + + private: + // Protects stop_work_ below. + Mutex mu_; + // Whether to stop work? + bool stop_work_; + + // Do work until asked to stop. + void Run() { + while (!stop_work()) { + } + // If timers are separate, check that timer is enabled for this thread. + EXPECT_TRUE(!timer_separate_ || IsTimerEnabled()); + } +}; + +class NullThread : public Thread { + private: + void Run() { + // If timers are separate, check that timer is enabled for this thread. + EXPECT_TRUE(!timer_separate_ || IsTimerEnabled()); + } +}; + +// Signal handler which tracks the profile timer ticks. +static void TickCounter(int sig, siginfo_t* sig_info, void *vuc, + void* tick_counter) { + int* counter = static_cast(tick_counter); + ++(*counter); +} + +// This class tests the profile-handler.h interface. +class ProfileHandlerTest { + protected: + + // Determines whether threads have separate timers. + static void SetUpTestCase() { + timer_type_ = (getenv("CPUPROFILE_REALTIME") ? ITIMER_REAL : ITIMER_PROF); + signal_number_ = (getenv("CPUPROFILE_REALTIME") ? SIGALRM : SIGPROF); + + timer_separate_ = threads_have_separate_timers(); + Delay(kTimerResetInterval); + } + + // Sets up the profile timers and SIGPROF/SIGALRM handler in a known state. + // It does the following: + // 1. Unregisters all the callbacks, stops the timer (if shared) and + // clears out timer_sharing state in the ProfileHandler. This clears + // out any state left behind by the previous test or during module + // initialization when the test program was started. + // 2. Spawns two threads which will be registered with the ProfileHandler. + // At this time ProfileHandler knows if the timers are shared. + // 3. Starts a busy worker thread to accumulate CPU usage. + virtual void SetUp() { + // Reset the state of ProfileHandler between each test. This unregisters + // all callbacks, stops timer (if shared) and clears timer sharing state. + ProfileHandlerReset(); + EXPECT_EQ(0, GetCallbackCount()); + VerifyDisabled(); + // ProfileHandler requires at least two threads to be registerd to determine + // whether timers are shared. + RegisterThread(); + RegisterThread(); + // Now that two threads are started, verify that the signal handler is + // disabled and the timers are correctly enabled/disabled. + VerifyDisabled(); + // Start worker to accumulate cpu usage. + StartWorker(); + } + + virtual void TearDown() { + ProfileHandlerReset(); + // Stops the worker thread. + StopWorker(); + } + + // Starts a no-op thread that gets registered with the ProfileHandler. Waits + // for the thread to stop. + void RegisterThread() { + NullThread t; + t.SetJoinable(true); + t.Start(); + t.Join(); + } + + // Starts a busy worker thread to accumulate cpu time. There should be only + // one busy worker running. This is required for the case where there are + // separate timers for each thread. + void StartWorker() { + busy_worker_ = new BusyThread(); + busy_worker_->SetJoinable(true); + busy_worker_->Start(); + // Wait for worker to start up and register with the ProfileHandler. + // TODO(nabeelmian) This may not work under very heavy load. + Delay(kSleepInterval); + } + + // Stops the worker thread. + void StopWorker() { + busy_worker_->set_stop_work(true); + busy_worker_->Join(); + delete busy_worker_; + } + + // Checks whether SIGPROF/SIGALRM signal handler is enabled. + bool IsSignalEnabled() { + struct sigaction sa; + CHECK_EQ(sigaction(signal_number_, NULL, &sa), 0); + return ((sa.sa_handler == SIG_IGN) || (sa.sa_handler == SIG_DFL)) ? + false : true; + } + + // Gets the number of callbacks registered with the ProfileHandler. + uint32 GetCallbackCount() { + ProfileHandlerState state; + ProfileHandlerGetState(&state); + return state.callback_count; + } + + // Gets the current ProfileHandler interrupt count. + uint64 GetInterruptCount() { + ProfileHandlerState state; + ProfileHandlerGetState(&state); + return state.interrupts; + } + + // Verifies that a callback is correctly registered and receiving + // profile ticks. + void VerifyRegistration(const int& tick_counter) { + // Check the callback count. + EXPECT_GT(GetCallbackCount(), 0); + // Check that the profile timer is enabled. + EXPECT_EQ(FLAGS_test_profiler_enabled, IsTimerEnabled()); + // Check that the signal handler is enabled. + if (FLAGS_test_profiler_signal_handler) { + EXPECT_EQ(FLAGS_test_profiler_enabled, IsSignalEnabled()); + } + uint64 interrupts_before = GetInterruptCount(); + // Sleep for a bit and check that tick counter is making progress. + int old_tick_count = tick_counter; + Delay(kSleepInterval); + int new_tick_count = tick_counter; + uint64 interrupts_after = GetInterruptCount(); + if (FLAGS_test_profiler_enabled) { + EXPECT_GT(new_tick_count, old_tick_count); + EXPECT_GT(interrupts_after, interrupts_before); + } else { + EXPECT_EQ(new_tick_count, old_tick_count); + EXPECT_EQ(interrupts_after, interrupts_before); + } + } + + // Verifies that a callback is not receiving profile ticks. + void VerifyUnregistration(const int& tick_counter) { + // Sleep for a bit and check that tick counter is not making progress. + int old_tick_count = tick_counter; + Delay(kSleepInterval); + int new_tick_count = tick_counter; + EXPECT_EQ(old_tick_count, new_tick_count); + // If no callbacks, signal handler and shared timer should be disabled. + if (GetCallbackCount() == 0) { + if (FLAGS_test_profiler_signal_handler) { + EXPECT_FALSE(IsSignalEnabled()); + } + if (timer_separate_) { + EXPECT_TRUE(IsTimerEnabled()); + } else { + EXPECT_FALSE(IsTimerEnabled()); + } + } + } + + // Verifies that the SIGPROF/SIGALRM interrupt handler is disabled and the + // timer, if shared, is disabled. Expects the worker to be running. + void VerifyDisabled() { + // Check that the signal handler is disabled. + if (FLAGS_test_profiler_signal_handler) { + EXPECT_FALSE(IsSignalEnabled()); + } + // Check that the callback count is 0. + EXPECT_EQ(0, GetCallbackCount()); + // Check that the timer is disabled if shared, enabled otherwise. + if (timer_separate_) { + EXPECT_TRUE(IsTimerEnabled()); + } else { + EXPECT_FALSE(IsTimerEnabled()); + } + // Verify that the ProfileHandler is not accumulating profile ticks. + uint64 interrupts_before = GetInterruptCount(); + Delay(kSleepInterval); + uint64 interrupts_after = GetInterruptCount(); + EXPECT_EQ(interrupts_before, interrupts_after); + } + + // Registers a callback and waits for kTimerResetInterval for timers to get + // reset. + ProfileHandlerToken* RegisterCallback(void* callback_arg) { + ProfileHandlerToken* token = ProfileHandlerRegisterCallback( + TickCounter, callback_arg); + Delay(kTimerResetInterval); + return token; + } + + // Unregisters a callback and waits for kTimerResetInterval for timers to get + // reset. + void UnregisterCallback(ProfileHandlerToken* token) { + ProfileHandlerUnregisterCallback(token); + Delay(kTimerResetInterval); + } + + // Busy worker thread to accumulate cpu usage. + BusyThread* busy_worker_; + + private: + // The tests to run + void RegisterUnregisterCallback(); + void MultipleCallbacks(); + void Reset(); + void RegisterCallbackBeforeThread(); + + public: +#define RUN(test) do { \ + printf("Running %s\n", #test); \ + ProfileHandlerTest pht; \ + pht.SetUp(); \ + pht.test(); \ + pht.TearDown(); \ +} while (0) + + static int RUN_ALL_TESTS() { + SetUpTestCase(); + RUN(RegisterUnregisterCallback); + RUN(MultipleCallbacks); + RUN(Reset); + RUN(RegisterCallbackBeforeThread); + printf("Done\n"); + return 0; + } +}; + +// Verifies ProfileHandlerRegisterCallback and +// ProfileHandlerUnregisterCallback. +TEST_F(ProfileHandlerTest, RegisterUnregisterCallback) { + int tick_count = 0; + ProfileHandlerToken* token = RegisterCallback(&tick_count); + VerifyRegistration(tick_count); + UnregisterCallback(token); + VerifyUnregistration(tick_count); +} + +// Verifies that multiple callbacks can be registered. +TEST_F(ProfileHandlerTest, MultipleCallbacks) { + // Register first callback. + int first_tick_count; + ProfileHandlerToken* token1 = RegisterCallback(&first_tick_count); + // Check that callback was registered correctly. + VerifyRegistration(first_tick_count); + EXPECT_EQ(1, GetCallbackCount()); + + // Register second callback. + int second_tick_count; + ProfileHandlerToken* token2 = RegisterCallback(&second_tick_count); + // Check that callback was registered correctly. + VerifyRegistration(second_tick_count); + EXPECT_EQ(2, GetCallbackCount()); + + // Unregister first callback. + UnregisterCallback(token1); + VerifyUnregistration(first_tick_count); + EXPECT_EQ(1, GetCallbackCount()); + // Verify that second callback is still registered. + VerifyRegistration(second_tick_count); + + // Unregister second callback. + UnregisterCallback(token2); + VerifyUnregistration(second_tick_count); + EXPECT_EQ(0, GetCallbackCount()); + + // Verify that the signal handler and timers are correctly disabled. + VerifyDisabled(); +} + +// Verifies ProfileHandlerReset +TEST_F(ProfileHandlerTest, Reset) { + // Verify that the profile timer interrupt is disabled. + VerifyDisabled(); + int first_tick_count; + RegisterCallback(&first_tick_count); + VerifyRegistration(first_tick_count); + EXPECT_EQ(1, GetCallbackCount()); + + // Register second callback. + int second_tick_count; + RegisterCallback(&second_tick_count); + VerifyRegistration(second_tick_count); + EXPECT_EQ(2, GetCallbackCount()); + + // Reset the profile handler and verify that callback were correctly + // unregistered and timer/signal are disabled. + ProfileHandlerReset(); + VerifyUnregistration(first_tick_count); + VerifyUnregistration(second_tick_count); + VerifyDisabled(); +} + +// Verifies that ProfileHandler correctly handles a case where a callback was +// registered before the second thread started. +TEST_F(ProfileHandlerTest, RegisterCallbackBeforeThread) { + // Stop the worker. + StopWorker(); + // Unregister all existing callbacks, stop the timer (if shared), disable + // the signal handler and reset the timer sharing state in the Profile + // Handler. + ProfileHandlerReset(); + EXPECT_EQ(0, GetCallbackCount()); + VerifyDisabled(); + + // Start the worker. At this time ProfileHandler doesn't know if timers are + // shared as only one thread has registered so far. + StartWorker(); + // Register a callback and check that profile ticks are being delivered. + int tick_count; + RegisterCallback(&tick_count); + EXPECT_EQ(1, GetCallbackCount()); + VerifyRegistration(tick_count); + + // Register a second thread and verify that timer and signal handler are + // correctly enabled. + RegisterThread(); + EXPECT_EQ(1, GetCallbackCount()); + EXPECT_EQ(FLAGS_test_profiler_enabled, IsTimerEnabled()); + if (FLAGS_test_profiler_signal_handler) { + EXPECT_EQ(FLAGS_test_profiler_enabled, IsSignalEnabled()); + } +} + +} // namespace + +int main(int argc, char** argv) { + return ProfileHandlerTest::RUN_ALL_TESTS(); +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/profiledata_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/profiledata_unittest.cc new file mode 100644 index 000000000..f569f64b6 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/profiledata_unittest.cc @@ -0,0 +1,610 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// --- +// Author: Chris Demetriou +// +// This file contains the unit tests for the ProfileData class. + +#if defined HAVE_STDINT_H +#include // to get uintptr_t +#elif defined HAVE_INTTYPES_H +#include // another place uintptr_t might be defined +#endif +#include +#include +#include +#include +#include + +#include "profiledata.h" + +#include "base/commandlineflags.h" +#include "base/logging.h" + +using std::string; + +// Some helpful macros for the test class +#define TEST_F(cls, fn) void cls :: fn() + +namespace { + +template class scoped_array { + public: + scoped_array(T* data) : data_(data) { } + ~scoped_array() { delete[] data_; } + T* get() { return data_; } + T& operator[](int i) { return data_[i]; } + private: + T* const data_; +}; + +// Re-runs fn until it doesn't cause EINTR. +#define NO_INTR(fn) do {} while ((fn) < 0 && errno == EINTR) + +// Read up to "count" bytes from file descriptor "fd" into the buffer +// starting at "buf" while handling short reads and EINTR. On +// success, return the number of bytes read. Otherwise, return -1. +static ssize_t ReadPersistent(const int fd, void *buf, const size_t count) { + CHECK_GE(fd, 0); + char *buf0 = reinterpret_cast(buf); + ssize_t num_bytes = 0; + while (num_bytes < count) { + ssize_t len; + NO_INTR(len = read(fd, buf0 + num_bytes, count - num_bytes)); + if (len < 0) { // There was an error other than EINTR. + return -1; + } + if (len == 0) { // Reached EOF. + break; + } + num_bytes += len; + } + CHECK(num_bytes <= count); + return num_bytes; +} + +// Thin wrapper around a file descriptor so that the file descriptor +// gets closed for sure. +struct FileDescriptor { + const int fd_; + explicit FileDescriptor(int fd) : fd_(fd) {} + ~FileDescriptor() { + if (fd_ >= 0) { + NO_INTR(close(fd_)); + } + } + int get() { return fd_; } +}; + +// must be the same as with ProfileData::Slot. +typedef uintptr_t ProfileDataSlot; + +// Quick and dirty function to make a number into a void* for use in a +// sample. +inline void* V(intptr_t x) { return reinterpret_cast(x); } + +// String returned by ProfileDataChecker helper functions to indicate success. +const char kNoError[] = ""; + +class ProfileDataChecker { + public: + ProfileDataChecker() { + const char* tmpdir = getenv("TMPDIR"); + if (tmpdir == NULL) + tmpdir = "/tmp"; + mkdir(tmpdir, 0755); // if necessary + filename_ = string(tmpdir) + "/profiledata_unittest.tmp"; + } + + string filename() const { return filename_; } + + // Checks the first 'num_slots' profile data slots in the file + // against the data pointed to by 'slots'. Returns kNoError if the + // data matched, otherwise returns an indication of the cause of the + // mismatch. + string Check(const ProfileDataSlot* slots, int num_slots) { + return CheckWithSkips(slots, num_slots, NULL, 0); + } + + // Checks the first 'num_slots' profile data slots in the file + // against the data pointed to by 'slots', skipping over entries + // described by 'skips' and 'num_skips'. + // + // 'skips' must be a sorted list of (0-based) slot numbers to be + // skipped, of length 'num_skips'. Note that 'num_slots' includes + // any skipped slots, i.e., the first 'num_slots' profile data slots + // will be considered, but some may be skipped. + // + // Returns kNoError if the data matched, otherwise returns an + // indication of the cause of the mismatch. + string CheckWithSkips(const ProfileDataSlot* slots, int num_slots, + const int* skips, int num_skips); + + // Validate that a profile is correctly formed. The profile is + // assumed to have been created by the same kind of binary (e.g., + // same slot size, same endian, etc.) as is validating the profile. + // + // Returns kNoError if the profile appears valid, otherwise returns + // an indication of the problem with the profile. + string ValidateProfile(); + + private: + string filename_; +}; + +string ProfileDataChecker::CheckWithSkips(const ProfileDataSlot* slots, + int num_slots, const int* skips, + int num_skips) { + FileDescriptor fd(open(filename_.c_str(), O_RDONLY)); + if (fd.get() < 0) + return "file open error"; + + scoped_array filedata(new ProfileDataSlot[num_slots]); + size_t expected_bytes = num_slots * sizeof filedata[0]; + ssize_t bytes_read = ReadPersistent(fd.get(), filedata.get(), expected_bytes); + if (expected_bytes != bytes_read) + return "file too small"; + + for (int i = 0; i < num_slots; i++) { + if (num_skips > 0 && *skips == i) { + num_skips--; + skips++; + continue; + } + if (slots[i] != filedata[i]) + return "data mismatch"; + } + return kNoError; +} + +string ProfileDataChecker::ValidateProfile() { + FileDescriptor fd(open(filename_.c_str(), O_RDONLY)); + if (fd.get() < 0) + return "file open error"; + + struct stat statbuf; + if (fstat(fd.get(), &statbuf) != 0) + return "fstat error"; + if (statbuf.st_size != static_cast(statbuf.st_size)) + return "file impossibly large"; + ssize_t filesize = statbuf.st_size; + + scoped_array filedata(new char[filesize]); + if (ReadPersistent(fd.get(), filedata.get(), filesize) != filesize) + return "read of whole file failed"; + + // Must have enough data for the header and the trailer. + if (filesize < (5 + 3) * sizeof(ProfileDataSlot)) + return "not enough data in profile for header + trailer"; + + // Check the header + if (reinterpret_cast(filedata.get())[0] != 0) + return "error in header: non-zero count"; + if (reinterpret_cast(filedata.get())[1] != 3) + return "error in header: num_slots != 3"; + if (reinterpret_cast(filedata.get())[2] != 0) + return "error in header: non-zero format version"; + // Period (slot 3) can have any value. + if (reinterpret_cast(filedata.get())[4] != 0) + return "error in header: non-zero padding value"; + ssize_t cur_offset = 5 * sizeof(ProfileDataSlot); + + // While there are samples, skip them. Each sample consists of + // at least three slots. + bool seen_trailer = false; + while (!seen_trailer) { + if (cur_offset > filesize - 3 * sizeof(ProfileDataSlot)) + return "truncated sample header"; + ProfileDataSlot* sample = + reinterpret_cast(filedata.get() + cur_offset); + ProfileDataSlot slots_this_sample = 2 + sample[1]; + ssize_t size_this_sample = slots_this_sample * sizeof(ProfileDataSlot); + if (cur_offset > filesize - size_this_sample) + return "truncated sample"; + + if (sample[0] == 0 && sample[1] == 1 && sample[2] == 0) { + seen_trailer = true; + } else { + if (sample[0] < 1) + return "error in sample: sample count < 1"; + if (sample[1] < 1) + return "error in sample: num_pcs < 1"; + for (int i = 2; i < slots_this_sample; i++) { + if (sample[i] == 0) + return "error in sample: NULL PC"; + } + } + cur_offset += size_this_sample; + } + + // There must be at least one line in the (text) list of mapped objects, + // and it must be terminated by a newline. Note, the use of newline + // here and below Might not be reasonable on non-UNIX systems. + if (cur_offset >= filesize) + return "no list of mapped objects"; + if (filedata[filesize - 1] != '\n') + return "profile did not end with a complete line"; + + while (cur_offset < filesize) { + char* line_start = filedata.get() + cur_offset; + + // Find the end of the line, and replace it with a NUL for easier + // scanning. + char* line_end = strchr(line_start, '\n'); + *line_end = '\0'; + + // Advance past any leading space. It's allowed in some lines, + // but not in others. + bool has_leading_space = false; + char* line_cur = line_start; + while (*line_cur == ' ') { + has_leading_space = true; + line_cur++; + } + + bool found_match = false; + + // Check for build lines. + if (!found_match) { + found_match = (strncmp(line_cur, "build=", 6) == 0); + // Anything may follow "build=", and leading space is allowed. + } + + // A line from ProcMapsIterator::FormatLine, of the form: + // + // 40000000-40015000 r-xp 00000000 03:01 12845071 /lib/ld-2.3.2.so + // + // Leading space is not allowed. The filename may be omitted or + // may consist of multiple words, so we scan only up to the + // space before the filename. + if (!found_match) { + int chars_scanned = -1; + sscanf(line_cur, "%*x-%*x %*c%*c%*c%*c %*x %*x:%*x %*d %n", + &chars_scanned); + found_match = (chars_scanned > 0 && !has_leading_space); + } + + // A line from DumpAddressMap, of the form: + // + // 40000000-40015000: /lib/ld-2.3.2.so + // + // Leading space is allowed. The filename may be omitted or may + // consist of multiple words, so we scan only up to the space + // before the filename. + if (!found_match) { + int chars_scanned = -1; + sscanf(line_cur, "%*x-%*x: %n", &chars_scanned); + found_match = (chars_scanned > 0); + } + + if (!found_match) + return "unrecognized line in text section"; + + cur_offset += (line_end - line_start) + 1; + } + + return kNoError; +} + +class ProfileDataTest { + protected: + void ExpectStopped() { + EXPECT_FALSE(collector_.enabled()); + } + + void ExpectRunningSamples(int samples) { + ProfileData::State state; + collector_.GetCurrentState(&state); + EXPECT_TRUE(state.enabled); + EXPECT_EQ(samples, state.samples_gathered); + } + + void ExpectSameState(const ProfileData::State& before, + const ProfileData::State& after) { + EXPECT_EQ(before.enabled, after.enabled); + EXPECT_EQ(before.samples_gathered, after.samples_gathered); + EXPECT_EQ(before.start_time, after.start_time); + EXPECT_STREQ(before.profile_name, after.profile_name); + } + + ProfileData collector_; + ProfileDataChecker checker_; + + private: + // The tests to run + void OpsWhenStopped(); + void StartStopEmpty(); + void StartStopNoOptionsEmpty(); + void StartWhenStarted(); + void StartStopEmpty2(); + void CollectOne(); + void CollectTwoMatching(); + void CollectTwoFlush(); + void StartResetRestart(); + + public: +#define RUN(test) do { \ + printf("Running %s\n", #test); \ + ProfileDataTest pdt; \ + pdt.test(); \ +} while (0) + + static int RUN_ALL_TESTS() { + RUN(OpsWhenStopped); + RUN(StartStopEmpty); + RUN(StartWhenStarted); + RUN(StartStopEmpty2); + RUN(CollectOne); + RUN(CollectTwoMatching); + RUN(CollectTwoFlush); + RUN(StartResetRestart); + return 0; + } +}; + +// Check that various operations are safe when stopped. +TEST_F(ProfileDataTest, OpsWhenStopped) { + ExpectStopped(); + EXPECT_FALSE(collector_.enabled()); + + // Verify that state is disabled, all-empty/all-0 + ProfileData::State state_before; + collector_.GetCurrentState(&state_before); + EXPECT_FALSE(state_before.enabled); + EXPECT_EQ(0, state_before.samples_gathered); + EXPECT_EQ(0, state_before.start_time); + EXPECT_STREQ("", state_before.profile_name); + + // Safe to call stop again. + collector_.Stop(); + + // Safe to call FlushTable. + collector_.FlushTable(); + + // Safe to call Add. + const void *trace[] = { V(100), V(101), V(102), V(103), V(104) }; + collector_.Add(arraysize(trace), trace); + + ProfileData::State state_after; + collector_.GetCurrentState(&state_after); + + ExpectSameState(state_before, state_after); +} + +// Start and Stop, collecting no samples. Verify output contents. +TEST_F(ProfileDataTest, StartStopEmpty) { + const int frequency = 1; + ProfileDataSlot slots[] = { + 0, 3, 0, 1000000 / frequency, 0, // binary header + 0, 1, 0 // binary trailer + }; + + ExpectStopped(); + ProfileData::Options options; + options.set_frequency(frequency); + EXPECT_TRUE(collector_.Start(checker_.filename().c_str(), options)); + ExpectRunningSamples(0); + collector_.Stop(); + ExpectStopped(); + EXPECT_EQ(kNoError, checker_.ValidateProfile()); + EXPECT_EQ(kNoError, checker_.Check(slots, arraysize(slots))); +} + +// Start and Stop with no options, collecting no samples. Verify +// output contents. +TEST_F(ProfileDataTest, StartStopNoOptionsEmpty) { + // We're not requesting a specific period, implementation can do + // whatever it likes. + ProfileDataSlot slots[] = { + 0, 3, 0, 0 /* skipped */, 0, // binary header + 0, 1, 0 // binary trailer + }; + int slots_to_skip[] = { 3 }; + + ExpectStopped(); + EXPECT_TRUE(collector_.Start(checker_.filename().c_str(), + ProfileData::Options())); + ExpectRunningSamples(0); + collector_.Stop(); + ExpectStopped(); + EXPECT_EQ(kNoError, checker_.ValidateProfile()); + EXPECT_EQ(kNoError, checker_.CheckWithSkips(slots, arraysize(slots), + slots_to_skip, + arraysize(slots_to_skip))); +} + +// Start after already started. Should return false and not impact +// collected data or state. +TEST_F(ProfileDataTest, StartWhenStarted) { + const int frequency = 1; + ProfileDataSlot slots[] = { + 0, 3, 0, 1000000 / frequency, 0, // binary header + 0, 1, 0 // binary trailer + }; + + ProfileData::Options options; + options.set_frequency(frequency); + EXPECT_TRUE(collector_.Start(checker_.filename().c_str(), options)); + + ProfileData::State state_before; + collector_.GetCurrentState(&state_before); + + options.set_frequency(frequency * 2); + CHECK(!collector_.Start("foobar", options)); + + ProfileData::State state_after; + collector_.GetCurrentState(&state_after); + ExpectSameState(state_before, state_after); + + collector_.Stop(); + ExpectStopped(); + EXPECT_EQ(kNoError, checker_.ValidateProfile()); + EXPECT_EQ(kNoError, checker_.Check(slots, arraysize(slots))); +} + +// Like StartStopEmpty, but uses a different file name and frequency. +TEST_F(ProfileDataTest, StartStopEmpty2) { + const int frequency = 2; + ProfileDataSlot slots[] = { + 0, 3, 0, 1000000 / frequency, 0, // binary header + 0, 1, 0 // binary trailer + }; + + ExpectStopped(); + ProfileData::Options options; + options.set_frequency(frequency); + EXPECT_TRUE(collector_.Start(checker_.filename().c_str(), options)); + ExpectRunningSamples(0); + collector_.Stop(); + ExpectStopped(); + EXPECT_EQ(kNoError, checker_.ValidateProfile()); + EXPECT_EQ(kNoError, checker_.Check(slots, arraysize(slots))); +} + +TEST_F(ProfileDataTest, CollectOne) { + const int frequency = 2; + ProfileDataSlot slots[] = { + 0, 3, 0, 1000000 / frequency, 0, // binary header + 1, 5, 100, 101, 102, 103, 104, // our sample + 0, 1, 0 // binary trailer + }; + + ExpectStopped(); + ProfileData::Options options; + options.set_frequency(frequency); + EXPECT_TRUE(collector_.Start(checker_.filename().c_str(), options)); + ExpectRunningSamples(0); + + const void *trace[] = { V(100), V(101), V(102), V(103), V(104) }; + collector_.Add(arraysize(trace), trace); + ExpectRunningSamples(1); + + collector_.Stop(); + ExpectStopped(); + EXPECT_EQ(kNoError, checker_.ValidateProfile()); + EXPECT_EQ(kNoError, checker_.Check(slots, arraysize(slots))); +} + +TEST_F(ProfileDataTest, CollectTwoMatching) { + const int frequency = 2; + ProfileDataSlot slots[] = { + 0, 3, 0, 1000000 / frequency, 0, // binary header + 2, 5, 100, 201, 302, 403, 504, // our two samples + 0, 1, 0 // binary trailer + }; + + ExpectStopped(); + ProfileData::Options options; + options.set_frequency(frequency); + EXPECT_TRUE(collector_.Start(checker_.filename().c_str(), options)); + ExpectRunningSamples(0); + + for (int i = 0; i < 2; ++i) { + const void *trace[] = { V(100), V(201), V(302), V(403), V(504) }; + collector_.Add(arraysize(trace), trace); + ExpectRunningSamples(i + 1); + } + + collector_.Stop(); + ExpectStopped(); + EXPECT_EQ(kNoError, checker_.ValidateProfile()); + EXPECT_EQ(kNoError, checker_.Check(slots, arraysize(slots))); +} + +TEST_F(ProfileDataTest, CollectTwoFlush) { + const int frequency = 2; + ProfileDataSlot slots[] = { + 0, 3, 0, 1000000 / frequency, 0, // binary header + 1, 5, 100, 201, 302, 403, 504, // first sample (flushed) + 1, 5, 100, 201, 302, 403, 504, // second identical sample + 0, 1, 0 // binary trailer + }; + + ExpectStopped(); + ProfileData::Options options; + options.set_frequency(frequency); + EXPECT_TRUE(collector_.Start(checker_.filename().c_str(), options)); + ExpectRunningSamples(0); + + const void *trace[] = { V(100), V(201), V(302), V(403), V(504) }; + + collector_.Add(arraysize(trace), trace); + ExpectRunningSamples(1); + collector_.FlushTable(); + + collector_.Add(arraysize(trace), trace); + ExpectRunningSamples(2); + + collector_.Stop(); + ExpectStopped(); + EXPECT_EQ(kNoError, checker_.ValidateProfile()); + EXPECT_EQ(kNoError, checker_.Check(slots, arraysize(slots))); +} + +// Start then reset, verify that the result is *not* a valid profile. +// Then start again and make sure the result is OK. +TEST_F(ProfileDataTest, StartResetRestart) { + ExpectStopped(); + ProfileData::Options options; + options.set_frequency(1); + EXPECT_TRUE(collector_.Start(checker_.filename().c_str(), options)); + ExpectRunningSamples(0); + collector_.Reset(); + ExpectStopped(); + // We expect the resulting file to be empty. This is a minimal test + // of ValidateProfile. + EXPECT_NE(kNoError, checker_.ValidateProfile()); + + struct stat statbuf; + EXPECT_EQ(0, stat(checker_.filename().c_str(), &statbuf)); + EXPECT_EQ(0, statbuf.st_size); + + const int frequency = 2; // Different frequency than used above. + ProfileDataSlot slots[] = { + 0, 3, 0, 1000000 / frequency, 0, // binary header + 0, 1, 0 // binary trailer + }; + + options.set_frequency(frequency); + EXPECT_TRUE(collector_.Start(checker_.filename().c_str(), options)); + ExpectRunningSamples(0); + collector_.Stop(); + ExpectStopped(); + EXPECT_EQ(kNoError, checker_.ValidateProfile()); + EXPECT_EQ(kNoError, checker_.Check(slots, arraysize(slots))); +} + +} // namespace + +int main(int argc, char** argv) { + int rc = ProfileDataTest::RUN_ALL_TESTS(); + printf("%s\n", rc == 0 ? "PASS" : "FAIL"); + return rc; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/profiler_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/profiler_unittest.cc new file mode 100644 index 000000000..399891bc5 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/profiler_unittest.cc @@ -0,0 +1,142 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// Does some simple arithmetic and a few libc routines, so we can profile it. +// Define WITH_THREADS to add pthread functionality as well (otherwise, btw, +// the num_threads argument to this program is ingored). + +#include "config_for_unittests.h" +#include +#include +#ifdef HAVE_UNISTD_H +#include // for fork() +#endif +#include // for wait() +#include "gperftools/profiler.h" +#include "base/simple_mutex.h" +#include "tests/testutil.h" + +static int result = 0; +static int g_iters = 0; // argv[1] + +Mutex mutex(Mutex::LINKER_INITIALIZED); + +static void test_other_thread() { +#ifndef NO_THREADS + ProfilerRegisterThread(); + + int i, m; + char b[128]; + MutexLock ml(&mutex); + for (m = 0; m < 1000000; ++m) { // run millions of times + for (i = 0; i < g_iters; ++i ) { + result ^= i; + } + snprintf(b, sizeof(b), "other: %d", result); // get some libc action + } +#endif +} + +static void test_main_thread() { + int i, m; + char b[128]; + MutexLock ml(&mutex); + for (m = 0; m < 1000000; ++m) { // run millions of times + for (i = 0; i < g_iters; ++i ) { + result ^= i; + } + snprintf(b, sizeof(b), "same: %d", result); // get some libc action + } +} + +int main(int argc, char** argv) { + if ( argc <= 1 ) { + fprintf(stderr, "USAGE: %s [num_threads] [filename]\n", argv[0]); + fprintf(stderr, " iters: How many million times to run the XOR test.\n"); + fprintf(stderr, " num_threads: how many concurrent threads.\n"); + fprintf(stderr, " 0 or 1 for single-threaded mode,\n"); + fprintf(stderr, " -# to fork instead of thread.\n"); + fprintf(stderr, " filename: The name of the output profile.\n"); + fprintf(stderr, (" If you don't specify, set CPUPROFILE " + "in the environment instead!\n")); + return 1; + } + + g_iters = atoi(argv[1]); + int num_threads = 1; + const char* filename = NULL; + if (argc > 2) { + num_threads = atoi(argv[2]); + } + if (argc > 3) { + filename = argv[3]; + } + + if (filename) { + ProfilerStart(filename); + } + + test_main_thread(); + + ProfilerFlush(); // just because we can + + // The other threads, if any, will run only half as long as the main thread + RunManyThreads(test_other_thread, num_threads); + + // Or maybe they asked to fork. The fork test is only interesting + // when we use CPUPROFILE to name, so check for that +#ifdef HAVE_UNISTD_H + for (; num_threads < 0; ++num_threads) { // - to fork + if (filename) { + printf("FORK test only makes sense when no filename is specified.\n"); + return 2; + } + switch (fork()) { + case -1: + printf("FORK failed!\n"); + return 1; + case 0: // child + return execl(argv[0], argv[0], argv[1], NULL); + default: + wait(NULL); // we'll let the kids run one at a time + } + } +#endif + + test_main_thread(); + + if (filename) { + ProfilerStop(); + } + + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/profiler_unittest.sh b/src/thirdparty/gperftools-2.0/src/tests/profiler_unittest.sh new file mode 100755 index 000000000..4668fa70c --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/profiler_unittest.sh @@ -0,0 +1,261 @@ +#!/bin/sh + +# Copyright (c) 2005, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# --- +# Author: Craig Silverstein +# +# Runs the 4 profiler unittests and makes sure their profiles look +# appropriate. We expect two commandline args, as described below. +# +# We run under the assumption that if $PROFILER1 is run with no +# arguments, it prints a usage line of the form +# USAGE: [...] +# +# This is because libtool sometimes turns the 'executable' into a +# shell script which runs an actual binary somewhere else. + +# We expect BINDIR and PPROF_PATH to be set in the environment. +# If not, we set them to some reasonable values +BINDIR="${BINDIR:-.}" +PPROF_PATH="${PPROF_PATH:-$BINDIR/src/pprof}" + +if [ "x$1" = "x-h" -o "x$1" = "x--help" ]; then + echo "USAGE: $0 [unittest dir] [path to pprof]" + echo " By default, unittest_dir=$BINDIR, pprof_path=$PPROF_PATH" + exit 1 +fi + +TMPDIR=/tmp/profile_info + +UNITTEST_DIR=${1:-$BINDIR} +PPROF=${2:-$PPROF_PATH} + +# We test the sliding-window functionality of the cpu-profile reader +# by using a small stride, forcing lots of reads. +PPROF_FLAGS="--test_stride=128" + +PROFILER1="$UNITTEST_DIR/profiler1_unittest" +PROFILER2="$UNITTEST_DIR/profiler2_unittest" +PROFILER3="$UNITTEST_DIR/profiler3_unittest" +PROFILER4="$UNITTEST_DIR/profiler4_unittest" + +# Unfortunately, for us, libtool can replace executables with a shell +# script that does some work before calling the 'real' executable +# under a different name. We need the 'real' executable name to run +# pprof on it. We've constructed all the binaries used in this +# unittest so when they are called with no arguments, they report +# their argv[0], which is the real binary name. +Realname() { + "$1" 2>&1 | awk '{print $2; exit;}' +} + +PROFILER1_REALNAME=`Realname "$PROFILER1"` +PROFILER2_REALNAME=`Realname "$PROFILER2"` +PROFILER3_REALNAME=`Realname "$PROFILER3"` +PROFILER4_REALNAME=`Realname "$PROFILER4"` + +# It's meaningful to the profiler, so make sure we know its state +unset CPUPROFILE + +rm -rf "$TMPDIR" +mkdir "$TMPDIR" || exit 2 + +num_failures=0 + +RegisterFailure() { + num_failures=`expr $num_failures + 1` +} + +# Takes two filenames representing profiles, with their executable scripts, +# and a multiplier, and verifies that the 'contentful' functions in +# each profile take the same time (possibly scaled by the given +# multiplier). It used to be "same" meant within 50%, after adding an +# noise-reducing X units to each value. But even that would often +# spuriously fail, so now it's "both non-zero". We're pretty forgiving. +VerifySimilar() { + prof1="$TMPDIR/$1" + exec1="$2" + prof2="$TMPDIR/$3" + exec2="$4" + mult="$5" + + # We are careful not to put exec1 and exec2 in quotes, because if + # they are the empty string, it means we want to use the 1-arg + # version of pprof. + mthread1=`"$PPROF" $PPROF_FLAGS $exec1 "$prof1" | grep test_main_thread | awk '{print $1}'` + mthread2=`"$PPROF" $PPROF_FLAGS $exec2 "$prof2" | grep test_main_thread | awk '{print $1}'` + mthread1_plus=`expr $mthread1 + 5` + mthread2_plus=`expr $mthread2 + 5` + if [ -z "$mthread1" ] || [ -z "$mthread2" ] || \ + [ "$mthread1" -le 0 -o "$mthread2" -le 0 ] +# || [ `expr $mthread1_plus \* $mult` -gt `expr $mthread2_plus \* 2` -o \ +# `expr $mthread1_plus \* $mult \* 2` -lt `expr $mthread2_plus` ] + then + echo + echo ">>> profile on $exec1 vs $exec2 with multiplier $mult failed:" + echo "Actual times (in profiling units) were '$mthread1' vs. '$mthread2'" + echo + RegisterFailure + fi +} + +# Takes two filenames representing profiles, and optionally their +# executable scripts (these may be empty if the profiles include +# symbols), and verifies that the two profiles are identical. +VerifyIdentical() { + prof1="$TMPDIR/$1" + exec1="$2" + prof2="$TMPDIR/$3" + exec2="$4" + + # We are careful not to put exec1 and exec2 in quotes, because if + # they are the empty string, it means we want to use the 1-arg + # version of pprof. + "$PPROF" $PPROF_FLAGS $exec1 "$prof1" > "$TMPDIR/out1" + "$PPROF" $PPROF_FLAGS $exec2 "$prof2" > "$TMPDIR/out2" + diff=`diff "$TMPDIR/out1" "$TMPDIR/out2"` + + if [ ! -z "$diff" ]; then + echo + echo ">>> profile doesn't match, args: $exec1 $prof1 vs. $exec2 $prof2" + echo ">>> Diff:" + echo "$diff" + echo + RegisterFailure + fi +} + +# Takes a filename representing a profile, with its executable, +# and a multiplier, and verifies that the main-thread function takes +# the same amount of time as the other-threads function (possibly scaled +# by the given multiplier). Figuring out the multiplier can be tricky, +# since by design the main thread runs twice as long as each of the +# 'other' threads! It used to be "same" meant within 50%, after adding an +# noise-reducing X units to each value. But even that would often +# spuriously fail, so now it's "both non-zero". We're pretty forgiving. +VerifyAcrossThreads() { + prof1="$TMPDIR/$1" + # We need to run the script with no args to get the actual exe name + exec1="$2" + mult="$3" + + # We are careful not to put exec1 in quotes, because if it is the + # empty string, it means we want to use the 1-arg version of pprof. + mthread=`$PPROF $PPROF_FLAGS $exec1 "$prof1" | grep test_main_thread | awk '{print $1}'` + othread=`$PPROF $PPROF_FLAGS $exec1 "$prof1" | grep test_other_thread | awk '{print $1}'` + if [ -z "$mthread" ] || [ -z "$othread" ] || \ + [ "$mthread" -le 0 -o "$othread" -le 0 ] +# || [ `expr $mthread \* $mult \* 3` -gt `expr $othread \* 10` -o \ +# `expr $mthread \* $mult \* 10` -lt `expr $othread \* 3` ] + then + echo + echo ">>> profile on $exec1 (main vs thread) with multiplier $mult failed:" + echo "Actual times (in profiling units) were '$mthread' vs. '$othread'" + echo + RegisterFailure + fi +} + +echo +echo ">>> WARNING <<<" +echo "This test looks at timing information to determine correctness." +echo "If your system is loaded, the test may spuriously fail." +echo "If the test does fail with an 'Actual times' error, try running again." +echo + +# profiler1 is a non-threaded version +"$PROFILER1" 50 1 "$TMPDIR/p1" || RegisterFailure +"$PROFILER1" 100 1 "$TMPDIR/p2" || RegisterFailure +VerifySimilar p1 "$PROFILER1_REALNAME" p2 "$PROFILER1_REALNAME" 2 + +# Verify the same thing works if we statically link +"$PROFILER2" 50 1 "$TMPDIR/p3" || RegisterFailure +"$PROFILER2" 100 1 "$TMPDIR/p4" || RegisterFailure +VerifySimilar p3 "$PROFILER2_REALNAME" p4 "$PROFILER2_REALNAME" 2 + +# Verify the same thing works if we specify via CPUPROFILE +CPUPROFILE="$TMPDIR/p5" "$PROFILER2" 50 || RegisterFailure +CPUPROFILE="$TMPDIR/p6" "$PROFILER2" 100 || RegisterFailure +VerifySimilar p5 "$PROFILER2_REALNAME" p6 "$PROFILER2_REALNAME" 2 + +CPUPROFILE="$TMPDIR/p5b" "$PROFILER3" 30 || RegisterFailure +CPUPROFILE="$TMPDIR/p5c" "$PROFILER3" 60 || RegisterFailure +VerifySimilar p5b "$PROFILER3_REALNAME" p5c "$PROFILER3_REALNAME" 2 + +# Now try what happens when we use threads +"$PROFILER3" 30 2 "$TMPDIR/p7" || RegisterFailure +"$PROFILER3" 60 2 "$TMPDIR/p8" || RegisterFailure +VerifySimilar p7 "$PROFILER3_REALNAME" p8 "$PROFILER3_REALNAME" 2 + +"$PROFILER4" 30 2 "$TMPDIR/p9" || RegisterFailure +"$PROFILER4" 60 2 "$TMPDIR/p10" || RegisterFailure +VerifySimilar p9 "$PROFILER4_REALNAME" p10 "$PROFILER4_REALNAME" 2 + +# More threads! +"$PROFILER4" 25 3 "$TMPDIR/p9" || RegisterFailure +"$PROFILER4" 50 3 "$TMPDIR/p10" || RegisterFailure +VerifySimilar p9 "$PROFILER4_REALNAME" p10 "$PROFILER4_REALNAME" 2 + +# Compare how much time the main thread takes compared to the other threads +# Recall the main thread runs twice as long as the other threads, by design. +"$PROFILER4" 20 4 "$TMPDIR/p11" || RegisterFailure +VerifyAcrossThreads p11 "$PROFILER4_REALNAME" 2 + +# Test symbol save and restore +"$PROFILER1" 50 1 "$TMPDIR/p12" || RegisterFailure +"$PPROF" $PPROF_FLAGS "$PROFILER1_REALNAME" "$TMPDIR/p12" --raw \ + >"$TMPDIR/p13" 2>/dev/null || RegisterFailure +VerifyIdentical p12 "$PROFILER1_REALNAME" p13 "" || RegisterFailure + +"$PROFILER3" 30 2 "$TMPDIR/p14" || RegisterFailure +"$PPROF" $PPROF_FLAGS "$PROFILER3_REALNAME" "$TMPDIR/p14" --raw \ + >"$TMPDIR/p15" 2>/dev/null || RegisterFailure +VerifyIdentical p14 "$PROFILER3_REALNAME" p15 "" || RegisterFailure + +# Test using ITIMER_REAL instead of ITIMER_PROF. +env CPUPROFILE_REALTIME=1 "$PROFILER3" 30 2 "$TMPDIR/p16" || RegisterFailure +env CPUPROFILE_REALTIME=1 "$PROFILER3" 60 2 "$TMPDIR/p17" || RegisterFailure +VerifySimilar p16 "$PROFILER3_REALNAME" p17 "$PROFILER3_REALNAME" 2 + + +# Make sure that when we have a process with a fork, the profiles don't +# clobber each other +CPUPROFILE="$TMPDIR/pfork" "$PROFILER1" 1 -2 || RegisterFailure +n=`ls $TMPDIR/pfork* | wc -l` +if [ $n != 3 ]; then + echo "FORK test FAILED: expected 3 profiles (for main + 2 children), found $n" + num_failures=`expr $num_failures + 1` +fi + +rm -rf "$TMPDIR" # clean up + +echo "Tests finished with $num_failures failures" +exit $num_failures diff --git a/src/thirdparty/gperftools-2.0/src/tests/raw_printer_test.cc b/src/thirdparty/gperftools-2.0/src/tests/raw_printer_test.cc new file mode 100644 index 000000000..3138b50c5 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/raw_printer_test.cc @@ -0,0 +1,60 @@ +// Copyright 2009 Google Inc. All Rights Reserved. +// Author: sanjay@google.com (Sanjay Ghemawat) + +#include "raw_printer.h" +#include +#include +#include "base/logging.h" + +using std::string; + +#define TEST(a, b) void TEST_##a##_##b() +#define RUN_TEST(a, b) TEST_##a##_##b() + +TEST(RawPrinter, Empty) { + char buffer[1]; + base::RawPrinter printer(buffer, arraysize(buffer)); + CHECK_EQ(0, printer.length()); + CHECK_EQ(string(""), buffer); + CHECK_EQ(0, printer.space_left()); + printer.Printf("foo"); + CHECK_EQ(string(""), string(buffer)); + CHECK_EQ(0, printer.length()); + CHECK_EQ(0, printer.space_left()); +} + +TEST(RawPrinter, PartiallyFilled) { + char buffer[100]; + base::RawPrinter printer(buffer, arraysize(buffer)); + printer.Printf("%s %s", "hello", "world"); + CHECK_EQ(string("hello world"), string(buffer)); + CHECK_EQ(11, printer.length()); + CHECK_LT(0, printer.space_left()); +} + +TEST(RawPrinter, Truncated) { + char buffer[3]; + base::RawPrinter printer(buffer, arraysize(buffer)); + printer.Printf("%d", 12345678); + CHECK_EQ(string("12"), string(buffer)); + CHECK_EQ(2, printer.length()); + CHECK_EQ(0, printer.space_left()); +} + +TEST(RawPrinter, ExactlyFilled) { + char buffer[12]; + base::RawPrinter printer(buffer, arraysize(buffer)); + printer.Printf("%s %s", "hello", "world"); + CHECK_EQ(string("hello world"), string(buffer)); + CHECK_EQ(11, printer.length()); + CHECK_EQ(0, printer.space_left()); +} + +int main(int argc, char **argv) { + RUN_TEST(RawPrinter, Empty); + RUN_TEST(RawPrinter, PartiallyFilled); + RUN_TEST(RawPrinter, Truncated); + RUN_TEST(RawPrinter, ExactlyFilled); + printf("PASS\n"); + return 0; // 0 means success +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/realloc_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/realloc_unittest.cc new file mode 100644 index 000000000..426742144 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/realloc_unittest.cc @@ -0,0 +1,124 @@ +// Copyright (c) 2004, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Test realloc() functionality + +#include "config_for_unittests.h" +#include // for assert +#include +#include // for size_t, NULL +#include // for free, malloc, realloc +#include // for min +#include "base/logging.h" + +using std::min; + + +// Fill a buffer of the specified size with a predetermined pattern +static void Fill(unsigned char* buffer, int n) { + for (int i = 0; i < n; i++) { + buffer[i] = (i & 0xff); + } +} + +// Check that the specified buffer has the predetermined pattern +// generated by Fill() +static bool Valid(unsigned char* buffer, int n) { + for (int i = 0; i < n; i++) { + if (buffer[i] != (i & 0xff)) { + return false; + } + } + return true; +} + +// Return the next interesting size/delta to check. Returns -1 if no more. +static int NextSize(int size) { + if (size < 100) { + return size+1; + } else if (size < 100000) { + // Find next power of two + int power = 1; + while (power < size) { + power <<= 1; + } + + // Yield (power-1, power, power+1) + if (size < power-1) { + return power-1; + } else if (size == power-1) { + return power; + } else { + assert(size == power); + return power+1; + } + } else { + return -1; + } +} + +int main(int argc, char** argv) { + for (int src_size = 0; src_size >= 0; src_size = NextSize(src_size)) { + for (int dst_size = 0; dst_size >= 0; dst_size = NextSize(dst_size)) { + unsigned char* src = (unsigned char*) malloc(src_size); + Fill(src, src_size); + unsigned char* dst = (unsigned char*) realloc(src, dst_size); + CHECK(Valid(dst, min(src_size, dst_size))); + Fill(dst, dst_size); + CHECK(Valid(dst, dst_size)); + if (dst != NULL) free(dst); + } + } + + // Now make sure realloc works correctly even when we overflow the + // packed cache, so some entries are evicted from the cache. + // The cache has 2^12 entries, keyed by page number. + const int kNumEntries = 1 << 14; + int** p = (int**)malloc(sizeof(*p) * kNumEntries); + int sum = 0; + for (int i = 0; i < kNumEntries; i++) { + p[i] = (int*)malloc(8192); // no page size is likely to be bigger + p[i][1000] = i; // use memory deep in the heart of p + } + for (int i = 0; i < kNumEntries; i++) { + p[i] = (int*)realloc(p[i], 9000); + } + for (int i = 0; i < kNumEntries; i++) { + sum += p[i][1000]; + free(p[i]); + } + CHECK_EQ(kNumEntries/2 * (kNumEntries - 1), sum); // assume kNE is even + free(p); + + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/sampler_test.cc b/src/thirdparty/gperftools-2.0/src/tests/sampler_test.cc new file mode 100755 index 000000000..c55d5dcea --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/sampler_test.cc @@ -0,0 +1,657 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// All Rights Reserved. +// +// Author: Daniel Ford +// +// Checks basic properties of the sampler + +#include "config_for_unittests.h" +#include // defines posix_memalign +#include // for the printf at the end +#if defined HAVE_STDINT_H +#include // to get uintptr_t +#elif defined HAVE_INTTYPES_H +#include // another place uintptr_t might be defined +#endif +#include +#include +#include +#include +#include +#include +#include "base/logging.h" +#include "base/commandlineflags.h" +#include "sampler.h" // The Sampler class being tested + +using std::sort; +using std::min; +using std::max; +using std::vector; +using std::abs; + +vector g_testlist; // the tests to run + +#define TEST(a, b) \ + struct Test_##a##_##b { \ + Test_##a##_##b() { g_testlist.push_back(&Run); } \ + static void Run(); \ + }; \ + static Test_##a##_##b g_test_##a##_##b; \ + void Test_##a##_##b::Run() + + +static int RUN_ALL_TESTS() { + vector::const_iterator it; + for (it = g_testlist.begin(); it != g_testlist.end(); ++it) { + (*it)(); // The test will error-exit if there's a problem. + } + fprintf(stderr, "\nPassed %d tests\n\nPASS\n", (int)g_testlist.size()); + return 0; +} + +#undef LOG // defined in base/logging.h +// Ideally, we'd put the newline at the end, but this hack puts the +// newline at the end of the previous log message, which is good enough :-) +#define LOG(level) std::cerr << "\n" + +static std::string StringPrintf(const char* format, ...) { + char buf[256]; // should be big enough for all logging + va_list ap; + va_start(ap, format); + perftools_vsnprintf(buf, sizeof(buf), format, ap); + va_end(ap); + return buf; +} + +namespace { +template class scoped_array { + public: + scoped_array(T* p) : p_(p) { } + ~scoped_array() { delete[] p_; } + const T* get() const { return p_; } + T* get() { return p_; } + T& operator[](int i) { return p_[i]; } + private: + T* p_; +}; +} + +// Note that these tests are stochastic. +// This mean that the chance of correct code passing the test is, +// in the case of 5 standard deviations: +// kSigmas=5: ~99.99994267% +// in the case of 4 standard deviations: +// kSigmas=4: ~99.993666% +static const double kSigmas = 4; +static const size_t kSamplingInterval = 512*1024; + +// Tests that GetSamplePeriod returns the expected value +// which is 1<<19 +TEST(Sampler, TestGetSamplePeriod) { + tcmalloc::Sampler sampler; + sampler.Init(1); + uint64_t sample_period; + sample_period = sampler.GetSamplePeriod(); + CHECK_GT(sample_period, 0); +} + +// Tests of the quality of the random numbers generated +// This uses the Anderson Darling test for uniformity. +// See "Evaluating the Anderson-Darling Distribution" by Marsaglia +// for details. + +// Short cut version of ADinf(z), z>0 (from Marsaglia) +// This returns the p-value for Anderson Darling statistic in +// the limit as n-> infinity. For finite n, apply the error fix below. +double AndersonDarlingInf(double z) { + if (z < 2) { + return exp(-1.2337141 / z) / sqrt(z) * (2.00012 + (0.247105 - + (0.0649821 - (0.0347962 - (0.011672 - 0.00168691 + * z) * z) * z) * z) * z); + } + return exp( - exp(1.0776 - (2.30695 - (0.43424 - (0.082433 - + (0.008056 - 0.0003146 * z) * z) * z) * z) * z)); +} + +// Corrects the approximation error in AndersonDarlingInf for small values of n +// Add this to AndersonDarlingInf to get a better approximation +// (from Marsaglia) +double AndersonDarlingErrFix(int n, double x) { + if (x > 0.8) { + return (-130.2137 + (745.2337 - (1705.091 - (1950.646 - + (1116.360 - 255.7844 * x) * x) * x) * x) * x) / n; + } + double cutoff = 0.01265 + 0.1757 / n; + double t; + if (x < cutoff) { + t = x / cutoff; + t = sqrt(t) * (1 - t) * (49 * t - 102); + return t * (0.0037 / (n * n) + 0.00078 / n + 0.00006) / n; + } else { + t = (x - cutoff) / (0.8 - cutoff); + t = -0.00022633 + (6.54034 - (14.6538 - (14.458 - (8.259 - 1.91864 + * t) * t) * t) * t) * t; + return t * (0.04213 + 0.01365 / n) / n; + } +} + +// Returns the AndersonDarling p-value given n and the value of the statistic +double AndersonDarlingPValue(int n, double z) { + double ad = AndersonDarlingInf(z); + double errfix = AndersonDarlingErrFix(n, ad); + return ad + errfix; +} + +double AndersonDarlingStatistic(int n, double* random_sample) { + double ad_sum = 0; + for (int i = 0; i < n; i++) { + ad_sum += (2*i + 1) * log(random_sample[i] * (1 - random_sample[n-1-i])); + } + double ad_statistic = - n - 1/static_cast(n) * ad_sum; + return ad_statistic; +} + +// Tests if the array of doubles is uniformly distributed. +// Returns the p-value of the Anderson Darling Statistic +// for the given set of sorted random doubles +// See "Evaluating the Anderson-Darling Distribution" by +// Marsaglia and Marsaglia for details. +double AndersonDarlingTest(int n, double* random_sample) { + double ad_statistic = AndersonDarlingStatistic(n, random_sample); + LOG(INFO) << StringPrintf("AD stat = %f, n=%d\n", ad_statistic, n); + double p = AndersonDarlingPValue(n, ad_statistic); + return p; +} + +// Test the AD Test. The value of the statistic should go to zero as n->infty +// Not run as part of regular tests +void ADTestTest(int n) { + scoped_array random_sample(new double[n]); + for (int i = 0; i < n; i++) { + random_sample[i] = (i+0.01)/n; + } + sort(random_sample.get(), random_sample.get() + n); + double ad_stat = AndersonDarlingStatistic(n, random_sample.get()); + LOG(INFO) << StringPrintf("Testing the AD test. n=%d, ad_stat = %f", + n, ad_stat); +} + +// Print the CDF of the distribution of the Anderson-Darling Statistic +// Used for checking the Anderson-Darling Test +// Not run as part of regular tests +void ADCDF() { + for (int i = 1; i < 40; i++) { + double x = i/10.0; + LOG(INFO) << "x= " << x << " adpv= " + << AndersonDarlingPValue(100, x) << ", " + << AndersonDarlingPValue(1000, x); + } +} + +// Testing that NextRandom generates uniform +// random numbers. +// Applies the Anderson-Darling test for uniformity +void TestNextRandom(int n) { + tcmalloc::Sampler sampler; + sampler.Init(1); + uint64_t x = 1; + // This assumes that the prng returns 48 bit numbers + uint64_t max_prng_value = static_cast(1)<<48; + // Initialize + for (int i = 1; i <= 20; i++) { // 20 mimics sampler.Init() + x = sampler.NextRandom(x); + } + scoped_array int_random_sample(new uint64_t[n]); + // Collect samples + for (int i = 0; i < n; i++) { + int_random_sample[i] = x; + x = sampler.NextRandom(x); + } + // First sort them... + sort(int_random_sample.get(), int_random_sample.get() + n); + scoped_array random_sample(new double[n]); + // Convert them to uniform randoms (in the range [0,1]) + for (int i = 0; i < n; i++) { + random_sample[i] = static_cast(int_random_sample[i])/max_prng_value; + } + // Now compute the Anderson-Darling statistic + double ad_pvalue = AndersonDarlingTest(n, random_sample.get()); + LOG(INFO) << StringPrintf("pvalue for AndersonDarlingTest " + "with n= %d is p= %f\n", n, ad_pvalue); + CHECK_GT(min(ad_pvalue, 1 - ad_pvalue), 0.0001); + // << StringPrintf("prng is not uniform, %d\n", n); +} + + +TEST(Sampler, TestNextRandom_MultipleValues) { + TestNextRandom(10); // Check short-range correlation + TestNextRandom(100); + TestNextRandom(1000); + TestNextRandom(10000); // Make sure there's no systematic error +} + +// Tests that PickNextSamplePeriod generates +// geometrically distributed random numbers. +// First converts to uniforms then applied the +// Anderson-Darling test for uniformity. +void TestPickNextSample(int n) { + tcmalloc::Sampler sampler; + sampler.Init(1); + scoped_array int_random_sample(new uint64_t[n]); + int sample_period = sampler.GetSamplePeriod(); + int ones_count = 0; + for (int i = 0; i < n; i++) { + int_random_sample[i] = sampler.PickNextSamplingPoint(); + CHECK_GE(int_random_sample[i], 1); + if (int_random_sample[i] == 1) { + ones_count += 1; + } + CHECK_LT(ones_count, 4); // << " out of " << i << " samples."; + } + // First sort them... + sort(int_random_sample.get(), int_random_sample.get() + n); + scoped_array random_sample(new double[n]); + // Convert them to uniform random numbers + // by applying the geometric CDF + for (int i = 0; i < n; i++) { + random_sample[i] = 1 - exp(-static_cast(int_random_sample[i]) + / sample_period); + } + // Now compute the Anderson-Darling statistic + double geom_ad_pvalue = AndersonDarlingTest(n, random_sample.get()); + LOG(INFO) << StringPrintf("pvalue for geometric AndersonDarlingTest " + "with n= %d is p= %f\n", n, geom_ad_pvalue); + CHECK_GT(min(geom_ad_pvalue, 1 - geom_ad_pvalue), 0.0001); + // << "PickNextSamplingPoint does not produce good " + // "geometric/exponential random numbers\n"; +} + +TEST(Sampler, TestPickNextSample_MultipleValues) { + TestPickNextSample(10); // Make sure the first few are good (enough) + TestPickNextSample(100); + TestPickNextSample(1000); + TestPickNextSample(10000); // Make sure there's no systematic error +} + + +// This is superceeded by the Anderson-Darling Test +// and it not run now. +// Tests how fast nearby values are spread out with LRand64 +// The purpose of this code is to determine how many +// steps to apply to the seed during initialization +void TestLRand64Spread() { + tcmalloc::Sampler sampler; + sampler.Init(1); + uint64_t current_value; + printf("Testing LRand64 Spread\n"); + for (int i = 1; i < 10; i++) { + printf("%d ", i); + current_value = i; + for (int j = 1; j < 100; j++) { + current_value = sampler.NextRandom(current_value); + } + LOG(INFO) << current_value; + } +} + + +// Test for Fastlog2 code +// We care about the percentage error because we're using this +// for choosing step sizes, so "close" is relative to the size of +// the step we would get if we used the built-in log function +TEST(Sampler, FastLog2) { + tcmalloc::Sampler sampler; + sampler.Init(1); + double max_ratio_error = 0; + for (double d = -1021.9; d < 1; d+= 0.13124235) { + double e = pow(2.0, d); + double truelog = log(e) / log(2.0); // log_2(e) + double fastlog = sampler.FastLog2(e); + max_ratio_error = max(max_ratio_error, + max(truelog/fastlog-1, fastlog/truelog-1)); + CHECK_LE(max_ratio_error, 0.01); + // << StringPrintf("d = %f, e=%f, truelog = %f, fastlog= %f\n", + // d, e, truelog, fastlog); + } + LOG(INFO) << StringPrintf("Fastlog2: max_ratio_error = %f\n", + max_ratio_error); +} + +// Futher tests + +bool CheckMean(size_t mean, int num_samples) { + tcmalloc::Sampler sampler; + sampler.Init(1); + size_t total = 0; + for (int i = 0; i < num_samples; i++) { + total += sampler.PickNextSamplingPoint(); + } + double empirical_mean = total / static_cast(num_samples); + double expected_sd = mean / pow(num_samples * 1.0, 0.5); + return(fabs(mean-empirical_mean) < expected_sd * kSigmas); +} + +// Prints a sequence so you can look at the distribution +void OutputSequence(int sequence_length) { + tcmalloc::Sampler sampler; + sampler.Init(1); + size_t next_step; + for (int i = 0; i< sequence_length; i++) { + next_step = sampler.PickNextSamplingPoint(); + LOG(INFO) << next_step; + } +} + + +double StandardDeviationsErrorInSample( + int total_samples, int picked_samples, + int alloc_size, int sampling_interval) { + double p = 1 - exp(-(static_cast(alloc_size) / sampling_interval)); + double expected_samples = total_samples * p; + double sd = pow(p*(1-p)*total_samples, 0.5); + return((picked_samples - expected_samples) / sd); +} + +TEST(Sampler, LargeAndSmallAllocs_CombinedTest) { + tcmalloc::Sampler sampler; + sampler.Init(1); + int counter_big = 0; + int counter_small = 0; + int size_big = 129*8*1024+1; + int size_small = 1024*8; + int num_iters = 128*4*8; + // Allocate in mixed chunks + for (int i = 0; i < num_iters; i++) { + if (sampler.SampleAllocation(size_big)) { + counter_big += 1; + } + for (int i = 0; i < 129; i++) { + if (sampler.SampleAllocation(size_small)) { + counter_small += 1; + } + } + } + // Now test that there are the right number of each + double large_allocs_sds = + StandardDeviationsErrorInSample(num_iters, counter_big, + size_big, kSamplingInterval); + double small_allocs_sds = + StandardDeviationsErrorInSample(num_iters*129, counter_small, + size_small, kSamplingInterval); + LOG(INFO) << StringPrintf("large_allocs_sds = %f\n", large_allocs_sds); + LOG(INFO) << StringPrintf("small_allocs_sds = %f\n", small_allocs_sds); + CHECK_LE(fabs(large_allocs_sds), kSigmas); + CHECK_LE(fabs(small_allocs_sds), kSigmas); +} + +// Tests whether the mean is about right over 1000 samples +TEST(Sampler, IsMeanRight) { + CHECK(CheckMean(kSamplingInterval, 1000)); +} + +// This flag is for the OldSampler class to use +const int64 FLAGS_mock_tcmalloc_sample_parameter = 1<<19; + +// A cut down and slightly refactored version of the old Sampler +class OldSampler { + public: + void Init(uint32_t seed); + void Cleanup() {} + + // Record allocation of "k" bytes. Return true iff allocation + // should be sampled + bool SampleAllocation(size_t k); + + // Generate a geometric with mean 1M (or FLAG value) + void PickNextSample(size_t k); + + // Initialize the statics for the Sample class + static void InitStatics() { + sample_period = 1048583; + } + size_t bytes_until_sample_; + + private: + uint32_t rnd_; // Cheap random number generator + static uint64_t sample_period; + // Should be a prime just above a power of 2: + // 2, 5, 11, 17, 37, 67, 131, 257, + // 521, 1031, 2053, 4099, 8209, 16411, + // 32771, 65537, 131101, 262147, 524309, 1048583, + // 2097169, 4194319, 8388617, 16777259, 33554467 +}; + +// Statics for OldSampler +uint64_t OldSampler::sample_period; + +void OldSampler::Init(uint32_t seed) { + // Initialize PRNG -- run it for a bit to get to good values + if (seed != 0) { + rnd_ = seed; + } else { + rnd_ = 12345; + } + bytes_until_sample_ = 0; + for (int i = 0; i < 100; i++) { + PickNextSample(sample_period * 2); + } +}; + +// A cut-down version of the old PickNextSampleRoutine +void OldSampler::PickNextSample(size_t k) { + // Make next "random" number + // x^32+x^22+x^2+x^1+1 is a primitive polynomial for random numbers + static const uint32_t kPoly = (1 << 22) | (1 << 2) | (1 << 1) | (1 << 0); + uint32_t r = rnd_; + rnd_ = (r << 1) ^ ((static_cast(r) >> 31) & kPoly); + + // Next point is "rnd_ % (sample_period)". I.e., average + // increment is "sample_period/2". + const int flag_value = FLAGS_mock_tcmalloc_sample_parameter; + static int last_flag_value = -1; + + if (flag_value != last_flag_value) { + // There should be a spinlock here, but this code is + // for benchmarking only. + sample_period = 1048583; + last_flag_value = flag_value; + } + + bytes_until_sample_ += rnd_ % sample_period; + + if (k > (static_cast(-1) >> 2)) { + // If the user has asked for a huge allocation then it is possible + // for the code below to loop infinitely. Just return (note that + // this throws off the sampling accuracy somewhat, but a user who + // is allocating more than 1G of memory at a time can live with a + // minor inaccuracy in profiling of small allocations, and also + // would rather not wait for the loop below to terminate). + return; + } + + while (bytes_until_sample_ < k) { + // Increase bytes_until_sample_ by enough average sampling periods + // (sample_period >> 1) to allow us to sample past the current + // allocation. + bytes_until_sample_ += (sample_period >> 1); + } + + bytes_until_sample_ -= k; +} + +inline bool OldSampler::SampleAllocation(size_t k) { + if (bytes_until_sample_ < k) { + PickNextSample(k); + return true; + } else { + bytes_until_sample_ -= k; + return false; + } +} + +// This checks that the stated maximum value for the +// tcmalloc_sample_parameter flag never overflows bytes_until_sample_ +TEST(Sampler, bytes_until_sample_Overflow_Underflow) { + tcmalloc::Sampler sampler; + sampler.Init(1); + uint64_t one = 1; + // sample_parameter = 0; // To test the edge case + uint64_t sample_parameter_array[4] = {0, 1, one<<19, one<<58}; + for (int i = 0; i < 4; i++) { + uint64_t sample_parameter = sample_parameter_array[i]; + LOG(INFO) << "sample_parameter = " << sample_parameter; + double sample_scaling = - log(2.0) * sample_parameter; + // Take the top 26 bits as the random number + // (This plus the 1<<26 sampling bound give a max step possible of + // 1209424308 bytes.) + const uint64_t prng_mod_power = 48; // Number of bits in prng + + // First, check the largest_prng value + uint64_t largest_prng_value = (static_cast(1)<<48) - 1; + double q = (largest_prng_value >> (prng_mod_power - 26)) + 1.0; + LOG(INFO) << StringPrintf("q = %f\n", q); + LOG(INFO) << StringPrintf("FastLog2(q) = %f\n", sampler.FastLog2(q)); + LOG(INFO) << StringPrintf("log2(q) = %f\n", log(q)/log(2.0)); + // Replace min(sampler.FastLog2(q) - 26, 0.0) with + // (sampler.FastLog2(q) - 26.000705) when using that optimization + uint64_t smallest_sample_step + = static_cast(min(sampler.FastLog2(q) - 26, 0.0) + * sample_scaling + 1); + LOG(INFO) << "Smallest sample step is " << smallest_sample_step; + uint64_t cutoff = static_cast(10) + * (sample_parameter/(one<<24) + 1); + LOG(INFO) << "Acceptable value is < " << cutoff; + // This checks that the answer is "small" and positive + CHECK_LE(smallest_sample_step, cutoff); + + // Next, check with the smallest prng value + uint64_t smallest_prng_value = 0; + q = (smallest_prng_value >> (prng_mod_power - 26)) + 1.0; + LOG(INFO) << StringPrintf("q = %f\n", q); + // Replace min(sampler.FastLog2(q) - 26, 0.0) with + // (sampler.FastLog2(q) - 26.000705) when using that optimization + uint64_t largest_sample_step + = static_cast(min(sampler.FastLog2(q) - 26, 0.0) + * sample_scaling + 1); + LOG(INFO) << "Largest sample step is " << largest_sample_step; + CHECK_LE(largest_sample_step, one<<63); + CHECK_GE(largest_sample_step, smallest_sample_step); + } +} + + +// Test that NextRand is in the right range. Unfortunately, this is a +// stochastic test which could miss problems. +TEST(Sampler, NextRand_range) { + tcmalloc::Sampler sampler; + sampler.Init(1); + uint64_t one = 1; + // The next number should be (one << 48) - 1 + uint64_t max_value = (one << 48) - 1; + uint64_t x = (one << 55); + int n = 22; // 27; + LOG(INFO) << "Running sampler.NextRandom 1<<" << n << " times"; + for (int i = 1; i <= (1<>27); i++) { // 20 mimics sampler.Init() + rnd = sampler.NextRandom(rnd); + CHECK_LE(rnd, max_value); + double q = (rnd >> (prng_mod_power - 26)) + 1.0; + CHECK_GE(q, 0); // << rnd << " " << prng_mod_power; + } + // Test some potentially out of bounds value for rnd + for (int i = 1; i <= 66; i++) { + rnd = one << i; + double q = (rnd >> (prng_mod_power - 26)) + 1.0; + LOG(INFO) << "rnd = " << rnd << " i=" << i << " q=" << q; + CHECK_GE(q, 0); + // << " rnd=" << rnd << " i=" << i << " prng_mod_power" << prng_mod_power; + } +} + +void test_arithmetic(uint64_t rnd) { + const uint64_t prng_mod_power = 48; // Number of bits in prng + uint64_t shifted_rnd = rnd >> (prng_mod_power - 26); + CHECK_GE(shifted_rnd, 0); + CHECK_LT(shifted_rnd, (1<<26)); + LOG(INFO) << shifted_rnd; + LOG(INFO) << static_cast(shifted_rnd); + CHECK_GE(static_cast(static_cast(shifted_rnd)), 0); + // << " rnd=" << rnd << " srnd=" << shifted_rnd; + CHECK_GE(static_cast(shifted_rnd), 0); + // << " rnd=" << rnd << " srnd=" << shifted_rnd; + double q = static_cast(shifted_rnd) + 1.0; + CHECK_GT(q, 0); +} + +// Tests certain arithmetic operations to make sure they compute what we +// expect them too (for testing across different platforms) +// know bad values under with -c dbg --cpu piii for _some_ binaries: +// rnd=227453640600554 +// shifted_rnd=54229173 +// (hard to reproduce) +TEST(Sampler, arithmetic_2) { + uint64_t rnd = 227453640600554LL; + test_arithmetic(rnd); +} + + +// It's not really a test, but it's good to know +TEST(Sample, size_of_class) { + tcmalloc::Sampler sampler; + sampler.Init(1); + LOG(INFO) << "Size of Sampler class is: " << sizeof(tcmalloc::Sampler); + LOG(INFO) << "Size of Sampler object is: " << sizeof(sampler); +} + +// Make sure sampling is enabled, or the tests won't work right. +DECLARE_int64(tcmalloc_sample_parameter); + +int main(int argc, char **argv) { + if (FLAGS_tcmalloc_sample_parameter == 0) + FLAGS_tcmalloc_sample_parameter = 524288; + return RUN_ALL_TESTS(); +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/sampling_test.cc b/src/thirdparty/gperftools-2.0/src/tests/sampling_test.cc new file mode 100644 index 000000000..8132475c5 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/sampling_test.cc @@ -0,0 +1,82 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// This tests ReadStackTraces and ReadGrowthStackTraces. It does this +// by doing a bunch of allocations and then calling those functions. +// A driver shell-script can call this, and then call pprof, and +// verify the expected output. The output is written to +// argv[1].heap and argv[1].growth + +#include "config_for_unittests.h" +#include +#include +#include +#include "base/logging.h" +#include + +using std::string; + +extern "C" void* AllocateAllocate() ATTRIBUTE_NOINLINE; + +extern "C" void* AllocateAllocate() { + // The VLOG's are mostly to discourage inlining + VLOG(1, "Allocating some more"); + void* p = malloc(10000); + VLOG(1, "Done allocating"); + return p; +} + +static void WriteStringToFile(const string& s, const string& filename) { + FILE* fp = fopen(filename.c_str(), "w"); + fwrite(s.data(), 1, s.length(), fp); + fclose(fp); +} + +int main(int argc, char** argv) { + if (argc < 2) { + fprintf(stderr, "USAGE: %s \n", argv[0]); + exit(1); + } + for (int i = 0; i < 8000; i++) { + AllocateAllocate(); + } + + string s; + MallocExtension::instance()->GetHeapSample(&s); + WriteStringToFile(s, string(argv[1]) + ".heap"); + + s.clear(); + MallocExtension::instance()->GetHeapGrowthStacks(&s); + WriteStringToFile(s, string(argv[1]) + ".growth"); + + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/sampling_test.sh b/src/thirdparty/gperftools-2.0/src/tests/sampling_test.sh new file mode 100755 index 000000000..2a5842681 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/sampling_test.sh @@ -0,0 +1,94 @@ +#!/bin/sh + +# Copyright (c) 2008, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# --- +# Author: Craig Silverstein +# +# This is a test that tcmalloc creates, and pprof reads, sampling data +# correctly: both for the heap profile (ReadStackTraces) and for +# growth in the heap sized (ReadGrowthStackTraces). + +BINDIR="${BINDIR:-.}" +PPROF_PATH="${PPROF_PATH:-$BINDIR/src/pprof}" + +if [ "x$1" = "x-h" -o "x$1" = "x--help" ]; then + echo "USAGE: $0 [unittest dir] [path to pprof]" + echo " By default, unittest_dir=$BINDIR, pprof_path=$PPROF_PATH" + exit 1 +fi + +SAMPLING_TEST="${1:-$BINDIR/sampling_test}" +PPROF="${2:-$PPROF_PATH}" +OUTDIR="/tmp/sampling_test_dir" + +# libtool is annoying, and puts the actual executable in a different +# directory, replacing the seeming-executable with a shell script. +# We use the error output of sampling_test to indicate its real location +SAMPLING_TEST_BINARY=`"$SAMPLING_TEST" 2>&1 | awk '/USAGE/ {print $2; exit;}'` + +# A kludge for cygwin. Unfortunately, 'test -f' says that 'foo' exists +# even when it doesn't, and only foo.exe exists. Other unix utilities +# (like nm) need you to say 'foo.exe'. We use one such utility, cat, to +# see what the *real* binary name is. +if ! cat "$SAMPLING_TEST_BINARY" >/dev/null 2>&1; then + SAMPLING_TEST_BINARY="$SAMPLING_TEST_BINARY".exe +fi + +die() { # runs the command given as arguments, and then dies. + echo "FAILED. Output from $@" + echo "----" + "$@" + echo "----" + exit 1 +} + +rm -rf "$OUTDIR" || die "Unable to delete $OUTDIR" +mkdir "$OUTDIR" || die "Unable to create $OUTDIR" + +# This puts the output into out.heap and out.growth. It allocates +# 8*10^7 bytes of memory, which is 76M. Because we sample, the +# estimate may be a bit high or a bit low: we accept anything from +# 50M to 99M. +"$SAMPLING_TEST" "$OUTDIR/out" + +echo "Testing heap output..." +"$PPROF" --text "$SAMPLING_TEST_BINARY" "$OUTDIR/out.heap" \ + | grep '[5-9][0-9]\.[0-9][ 0-9.%]*_*AllocateAllocate' >/dev/null \ + || die "$PPROF" --text "$SAMPLING_TEST_BINARY" "$OUTDIR/out.heap" +echo "OK" + +echo "Testing growth output..." +"$PPROF" --text "$SAMPLING_TEST_BINARY" "$OUTDIR/out.growth" \ + | grep '[5-9][0-9]\.[0-9][ 0-9.%]*_*AllocateAllocate' >/dev/null \ + || die "$PPROF" --text "$SAMPLING_TEST_BINARY" "$OUTDIR/out.growth" +echo "OK" + +echo "PASS" diff --git a/src/thirdparty/gperftools-2.0/src/tests/simple_compat_test.cc b/src/thirdparty/gperftools-2.0/src/tests/simple_compat_test.cc new file mode 100644 index 000000000..824cfcf69 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/simple_compat_test.cc @@ -0,0 +1,67 @@ +// Copyright (c) 2012, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// This just verifies that we can compile code that #includes stuff +// via the backwards-compatibility 'google/' #include-dir. It does +// not include config.h on purpose, to better simulate a perftools +// client. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// We don't link in -lprofiler for this test, so be sure not to make +// any function calls that require the cpu-profiler code. The +// heap-profiler is ok. + +HeapLeakChecker::Disabler* heap_checker_h; +void (*heap_profiler_h)(const char*) = &HeapProfilerStart; +MallocExtension::Ownership malloc_extension_h; +MallocExtension_Ownership malloc_extension_c_h; +MallocHook::NewHook* malloc_hook_h; +MallocHook_NewHook* malloc_hook_c_h; +ProfilerOptions* profiler_h; +int (*stacktrace_h)(void**, int, int) = &GetStackTrace; +void* (*tcmalloc_h)(size_t) = &tc_new; + +int main(int argc, char** argv) { + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/stack_trace_table_test.cc b/src/thirdparty/gperftools-2.0/src/tests/stack_trace_table_test.cc new file mode 100644 index 000000000..61f9e643d --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/stack_trace_table_test.cc @@ -0,0 +1,97 @@ +// Copyright 2009 Google Inc. All Rights Reserved. +// Author: fikes@google.com (Andrew Fikes) + +#include "config_for_unittests.h" +#include // for puts() +#include "stack_trace_table.h" +#include "base/logging.h" +#include "base/spinlock.h" +#include "static_vars.h" + +#undef ARRAYSIZE // may be defined on, eg, windows +#define ARRAYSIZE(a) ( sizeof(a) / sizeof(*(a)) ) + +static void CheckTracesAndReset(tcmalloc::StackTraceTable* table, + const uintptr_t* expected, int len) { + void** entries = table->ReadStackTracesAndClear(); + for (int i = 0; i < len; ++i) { + CHECK_EQ(reinterpret_cast(entries[i]), expected[i]); + } + delete[] entries; +} + +static void AddTrace(tcmalloc::StackTraceTable* table, + const tcmalloc::StackTrace& t) { + // Normally we'd need this lock, but since the test is single-threaded + // we don't. I comment it out on windows because the DLL-decl thing + // is really annoying in this case. +#ifndef _MSC_VER + SpinLockHolder h(tcmalloc::Static::pageheap_lock()); +#endif + table->AddTrace(t); +} + +int main(int argc, char **argv) { + tcmalloc::StackTraceTable table; + + // Empty table + CHECK_EQ(table.depth_total(), 0); + CHECK_EQ(table.bucket_total(), 0); + static const uintptr_t k1[] = {0}; + CheckTracesAndReset(&table, k1, ARRAYSIZE(k1)); + + tcmalloc::StackTrace t1; + t1.size = static_cast(1024); + t1.depth = static_cast(2); + t1.stack[0] = reinterpret_cast(1); + t1.stack[1] = reinterpret_cast(2); + + + tcmalloc::StackTrace t2; + t2.size = static_cast(512); + t2.depth = static_cast(2); + t2.stack[0] = reinterpret_cast(2); + t2.stack[1] = reinterpret_cast(1); + + // Table w/ just t1 + AddTrace(&table, t1); + CHECK_EQ(table.depth_total(), 2); + CHECK_EQ(table.bucket_total(), 1); + static const uintptr_t k2[] = {1, 1024, 2, 1, 2, 0}; + CheckTracesAndReset(&table, k2, ARRAYSIZE(k2)); + + // Table w/ t1, t2 + AddTrace(&table, t1); + AddTrace(&table, t2); + CHECK_EQ(table.depth_total(), 4); + CHECK_EQ(table.bucket_total(), 2); + static const uintptr_t k3[] = {1, 1024, 2, 1, 2, 1, 512, 2, 2, 1, 0}; + CheckTracesAndReset(&table, k3, ARRAYSIZE(k3)); + + // Table w/ 2 x t1, 1 x t2 + AddTrace(&table, t1); + AddTrace(&table, t2); + AddTrace(&table, t1); + CHECK_EQ(table.depth_total(), 4); + CHECK_EQ(table.bucket_total(), 2); + static const uintptr_t k4[] = {2, 2048, 2, 1, 2, 1, 512, 2, 2, 1, 0}; + CheckTracesAndReset(&table, k4, ARRAYSIZE(k4)); + + // Same stack as t1, but w/ different size + tcmalloc::StackTrace t3; + t3.size = static_cast(2); + t3.depth = static_cast(2); + t3.stack[0] = reinterpret_cast(1); + t3.stack[1] = reinterpret_cast(2); + + // Table w/ t1, t3 + AddTrace(&table, t1); + AddTrace(&table, t3); + CHECK_EQ(table.depth_total(), 2); + CHECK_EQ(table.bucket_total(), 1); + static const uintptr_t k5[] = {2, 1026, 2, 1, 2, 0}; + CheckTracesAndReset(&table, k5, ARRAYSIZE(k5)); + + puts("PASS"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/stacktrace_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/stacktrace_unittest.cc new file mode 100644 index 000000000..3c9f73531 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/stacktrace_unittest.cc @@ -0,0 +1,194 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "config_for_unittests.h" +#ifdef HAVE_EXECINFO_H +#include +#endif +#include +#include +#include "base/commandlineflags.h" +#include "base/logging.h" +#include + +namespace { + +// Obtain a backtrace, verify that the expected callers are present in the +// backtrace, and maybe print the backtrace to stdout. + +// The sequence of functions whose return addresses we expect to see in the +// backtrace. +const int BACKTRACE_STEPS = 6; + +struct AddressRange { + const void *start, *end; +}; + +// Expected function [start,end] range. +AddressRange expected_range[BACKTRACE_STEPS]; + +#if __GNUC__ +// Using GCC extension: address of a label can be taken with '&&label'. +// Start should be a label somewhere before recursive call, end somewhere +// after it. +#define INIT_ADDRESS_RANGE(fn, start_label, end_label, prange) \ + do { \ + (prange)->start = &&start_label; \ + (prange)->end = &&end_label; \ + CHECK_LT((prange)->start, (prange)->end); \ + } while (0) +// This macro expands into "unmovable" code (opaque to GCC), and that +// prevents GCC from moving a_label up or down in the code. +// Without it, there is no code following the 'end' label, and GCC +// (4.3.1, 4.4.0) thinks it safe to assign &&end an address that is before +// the recursive call. +#define DECLARE_ADDRESS_LABEL(a_label) \ + a_label: do { __asm__ __volatile__(""); } while (0) +// Gcc 4.4.0 may split function into multiple chunks, and the chunk +// performing recursive call may end up later in the code then the return +// instruction (this actually happens with FDO). +// Adjust function range from __builtin_return_address. +#define ADJUST_ADDRESS_RANGE_FROM_RA(prange) \ + do { \ + void *ra = __builtin_return_address(0); \ + CHECK_LT((prange)->start, ra); \ + if (ra > (prange)->end) { \ + printf("Adjusting range from %p..%p to %p..%p\n", \ + (prange)->start, (prange)->end, \ + (prange)->start, ra); \ + (prange)->end = ra; \ + } \ + } while (0) +#else +// Assume the Check* functions below are not longer than 256 bytes. +#define INIT_ADDRESS_RANGE(fn, start_label, end_label, prange) \ + do { \ + (prange)->start = reinterpret_cast(&fn); \ + (prange)->end = reinterpret_cast(&fn) + 256; \ + } while (0) +#define DECLARE_ADDRESS_LABEL(a_label) do { } while (0) +#define ADJUST_ADDRESS_RANGE_FROM_RA(prange) do { } while (0) +#endif // __GNUC__ + +//-----------------------------------------------------------------------// + +void CheckRetAddrIsInFunction(void *ret_addr, const AddressRange &range) +{ + CHECK_GE(ret_addr, range.start); + CHECK_LE(ret_addr, range.end); +} + +//-----------------------------------------------------------------------// + +void ATTRIBUTE_NOINLINE CheckStackTrace(int); +void ATTRIBUTE_NOINLINE CheckStackTraceLeaf(void) { + const int STACK_LEN = 10; + void *stack[STACK_LEN]; + int size; + + ADJUST_ADDRESS_RANGE_FROM_RA(&expected_range[1]); + INIT_ADDRESS_RANGE(CheckStackTraceLeaf, start, end, &expected_range[0]); + DECLARE_ADDRESS_LABEL(start); + size = GetStackTrace(stack, STACK_LEN, 0); + printf("Obtained %d stack frames.\n", size); + CHECK_GE(size, 1); + CHECK_LE(size, STACK_LEN); + +#ifdef HAVE_EXECINFO_H + { + char **strings = backtrace_symbols(stack, size); + printf("Obtained %d stack frames.\n", size); + for (int i = 0; i < size; i++) + printf("%s %p\n", strings[i], stack[i]); + printf("CheckStackTrace() addr: %p\n", &CheckStackTrace); + free(strings); + } +#endif + + for (int i = 0; i < BACKTRACE_STEPS; i++) { + printf("Backtrace %d: expected: %p..%p actual: %p ... ", + i, expected_range[i].start, expected_range[i].end, stack[i]); + fflush(stdout); + CheckRetAddrIsInFunction(stack[i], expected_range[i]); + printf("OK\n"); + } + DECLARE_ADDRESS_LABEL(end); +} + +//-----------------------------------------------------------------------// + +/* Dummy functions to make the backtrace more interesting. */ +void ATTRIBUTE_NOINLINE CheckStackTrace4(int i) { + ADJUST_ADDRESS_RANGE_FROM_RA(&expected_range[2]); + INIT_ADDRESS_RANGE(CheckStackTrace4, start, end, &expected_range[1]); + DECLARE_ADDRESS_LABEL(start); + for (int j = i; j >= 0; j--) + CheckStackTraceLeaf(); + DECLARE_ADDRESS_LABEL(end); +} +void ATTRIBUTE_NOINLINE CheckStackTrace3(int i) { + ADJUST_ADDRESS_RANGE_FROM_RA(&expected_range[3]); + INIT_ADDRESS_RANGE(CheckStackTrace3, start, end, &expected_range[2]); + DECLARE_ADDRESS_LABEL(start); + for (int j = i; j >= 0; j--) + CheckStackTrace4(j); + DECLARE_ADDRESS_LABEL(end); +} +void ATTRIBUTE_NOINLINE CheckStackTrace2(int i) { + ADJUST_ADDRESS_RANGE_FROM_RA(&expected_range[4]); + INIT_ADDRESS_RANGE(CheckStackTrace2, start, end, &expected_range[3]); + DECLARE_ADDRESS_LABEL(start); + for (int j = i; j >= 0; j--) + CheckStackTrace3(j); + DECLARE_ADDRESS_LABEL(end); +} +void ATTRIBUTE_NOINLINE CheckStackTrace1(int i) { + ADJUST_ADDRESS_RANGE_FROM_RA(&expected_range[5]); + INIT_ADDRESS_RANGE(CheckStackTrace1, start, end, &expected_range[4]); + DECLARE_ADDRESS_LABEL(start); + for (int j = i; j >= 0; j--) + CheckStackTrace2(j); + DECLARE_ADDRESS_LABEL(end); +} +void ATTRIBUTE_NOINLINE CheckStackTrace(int i) { + INIT_ADDRESS_RANGE(CheckStackTrace, start, end, &expected_range[5]); + DECLARE_ADDRESS_LABEL(start); + for (int j = i; j >= 0; j--) + CheckStackTrace1(j); + DECLARE_ADDRESS_LABEL(end); +} + +} // namespace +//-----------------------------------------------------------------------// + +int main(int argc, char ** argv) { + CheckStackTrace(0); + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/system-alloc_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/system-alloc_unittest.cc new file mode 100644 index 000000000..f0259a19b --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/system-alloc_unittest.cc @@ -0,0 +1,154 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Arun Sharma + +#include "config_for_unittests.h" +#include "system-alloc.h" +#include +#if defined HAVE_STDINT_H +#include // to get uintptr_t +#elif defined HAVE_INTTYPES_H +#include // another place uintptr_t might be defined +#endif +#include +#include +#include +#include "base/logging.h" // for Check_GEImpl, Check_LTImpl, etc +#include // for MallocExtension::instance +#include "common.h" // for kAddressBits + +class ArraySysAllocator : public SysAllocator { +public: + // Was this allocator invoked at least once? + bool invoked_; + + ArraySysAllocator() : SysAllocator() { + ptr_ = 0; + invoked_ = false; + } + + void* Alloc(size_t size, size_t *actual_size, size_t alignment) { + invoked_ = true; + + if (size > kArraySize) { + return NULL; + } + + void *result = &array_[ptr_]; + uintptr_t ptr = reinterpret_cast(result); + + if (actual_size) { + *actual_size = size; + } + + // Try to get more memory for alignment + size_t extra = alignment - (ptr & (alignment-1)); + size += extra; + CHECK_LT(ptr_ + size, kArraySize); + + if ((ptr & (alignment-1)) != 0) { + ptr += alignment - (ptr & (alignment-1)); + } + + ptr_ += size; + return reinterpret_cast(ptr); + } + + void DumpStats() { + } + +private: + static const int kArraySize = 8 * 1024 * 1024; + char array_[kArraySize]; + // We allocate the next chunk from here + int ptr_; + +}; +const int ArraySysAllocator::kArraySize; +ArraySysAllocator a; + +static void TestBasicInvoked() { + MallocExtension::instance()->SetSystemAllocator(&a); + + // An allocation size that is likely to trigger the system allocator. + // XXX: this is implementation specific. + char *p = new char[1024 * 1024]; + delete [] p; + + // Make sure that our allocator was invoked. + CHECK(a.invoked_); +} + +#if 0 // could port this to various OSs, but won't bother for now +TEST(AddressBits, CpuVirtualBits) { + // Check that kAddressBits is as least as large as either the number of bits + // in a pointer or as the number of virtual bits handled by the processor. + // To be effective this test must be run on each processor model. + const int kPointerBits = 8 * sizeof(void*); + const int kImplementedVirtualBits = NumImplementedVirtualBits(); + + CHECK_GE(kAddressBits, std::min(kImplementedVirtualBits, kPointerBits)); +} +#endif + +static void TestBasicRetryFailTest() { + // Check with the allocator still works after a failed allocation. + // + // There is no way to call malloc and guarantee it will fail. malloc takes a + // size_t parameter and the C++ standard does not constrain the size of + // size_t. For example, consider an implementation where size_t is 32 bits + // and pointers are 64 bits. + // + // It is likely, though, that sizeof(size_t) == sizeof(void*). In that case, + // the first allocation here might succeed but the second allocation must + // fail. + // + // If the second allocation succeeds, you will have to rewrite or + // disable this test. + // The weird parens are to avoid macro-expansion of 'max' on windows. + const size_t kHugeSize = (std::numeric_limits::max)() / 2; + void* p1 = malloc(kHugeSize); + void* p2 = malloc(kHugeSize); + CHECK(p2 == NULL); + if (p1 != NULL) free(p1); + + char* q = new char[1024]; + CHECK(q != NULL); + delete [] q; +} + +int main(int argc, char** argv) { + TestBasicInvoked(); + TestBasicRetryFailTest(); + + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/tcmalloc_large_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/tcmalloc_large_unittest.cc new file mode 100644 index 000000000..ad3482ed2 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/tcmalloc_large_unittest.cc @@ -0,0 +1,137 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Michael Chastain +// +// This is a unit test for large allocations in malloc and friends. +// "Large" means "so large that they overflow the address space". +// For 32 bits, this means allocations near 2^32 bytes and 2^31 bytes. +// For 64 bits, this means allocations near 2^64 bytes and 2^63 bytes. + +#include // for size_t, NULL +#include // for malloc, free, realloc +#include +#include // for set, etc + +#include "base/logging.h" // for operator<<, CHECK, etc + +using std::set; + +// Alloc a size that should always fail. + +void TryAllocExpectFail(size_t size) { + void* p1 = malloc(size); + CHECK(p1 == NULL); + + void* p2 = malloc(1); + CHECK(p2 != NULL); + + void* p3 = realloc(p2, size); + CHECK(p3 == NULL); + + free(p2); +} + +// Alloc a size that might work and might fail. +// If it does work, touch some pages. + +void TryAllocMightFail(size_t size) { + unsigned char* p = static_cast(malloc(size)); + if ( p != NULL ) { + unsigned char volatile* vp = p; // prevent optimizations + static const size_t kPoints = 1024; + + for ( size_t i = 0; i < kPoints; ++i ) { + vp[i * (size / kPoints)] = static_cast(i); + } + + for ( size_t i = 0; i < kPoints; ++i ) { + CHECK(vp[i * (size / kPoints)] == static_cast(i)); + } + + vp[size-1] = 'M'; + CHECK(vp[size-1] == 'M'); + } + + free(p); +} + +int main (int argc, char** argv) { + // Allocate some 0-byte objects. They better be unique. + // 0 bytes is not large but it exercises some paths related to + // large-allocation code. + { + static const int kZeroTimes = 1024; + printf("Test malloc(0) x %d\n", kZeroTimes); + set p_set; + for ( int i = 0; i < kZeroTimes; ++i ) { + char* p = new char; + CHECK(p != NULL); + CHECK(p_set.find(p) == p_set.end()); + p_set.insert(p_set.end(), p); + } + // Just leak the memory. + } + + // Grab some memory so that some later allocations are guaranteed to fail. + printf("Test small malloc\n"); + void* p_small = malloc(4*1048576); + CHECK(p_small != NULL); + + // Test sizes up near the maximum size_t. + // These allocations test the wrap-around code. + printf("Test malloc(0 - N)\n"); + const size_t zero = 0; + static const size_t kMinusNTimes = 16384; + for ( size_t i = 1; i < kMinusNTimes; ++i ) { + TryAllocExpectFail(zero - i); + } + + // Test sizes a bit smaller. + // The small malloc above guarantees that all these return NULL. + printf("Test malloc(0 - 1048576 - N)\n"); + static const size_t kMinusMBMinusNTimes = 16384; + for ( size_t i = 0; i < kMinusMBMinusNTimes; ++i) { + TryAllocExpectFail(zero - 1048576 - i); + } + + // Test sizes at half of size_t. + // These might or might not fail to allocate. + printf("Test malloc(max/2 +- N)\n"); + static const size_t kHalfPlusMinusTimes = 64; + const size_t half = (zero - 2) / 2 + 1; + for ( size_t i = 0; i < kHalfPlusMinusTimes; ++i) { + TryAllocMightFail(half - i); + TryAllocMightFail(half + i); + } + + printf("PASS\n"); + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/tcmalloc_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/tcmalloc_unittest.cc new file mode 100644 index 000000000..cfdc79c1f --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/tcmalloc_unittest.cc @@ -0,0 +1,1327 @@ +// Copyright (c) 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Unittest for the TCMalloc implementation. +// +// * The test consists of a set of threads. +// * Each thread maintains a set of allocated objects, with +// a bound on the total amount of data in the set. +// * Each allocated object's contents are generated by +// hashing the object pointer, and a generation count +// in the object. This allows us to easily check for +// data corruption. +// * At any given step, the thread can do any of the following: +// a. Allocate an object +// b. Increment an object's generation count and update +// its contents. +// c. Pass the object to another thread +// d. Free an object +// Also, at the end of every step, object(s) are freed to maintain +// the memory upper-bound. +// +// If this test is compiled with -DDEBUGALLOCATION, then we don't +// run some tests that test the inner workings of tcmalloc and +// break on debugallocation: that certain allocations are aligned +// in a certain way (even though no standard requires it), and that +// realloc() tries to minimize copying (which debug allocators don't +// care about). + +#include "config_for_unittests.h" +// Complicated ordering requirements. tcmalloc.h defines (indirectly) +// _POSIX_C_SOURCE, which it needs so stdlib.h defines posix_memalign. +// unistd.h, on the other hand, requires _POSIX_C_SOURCE to be unset, +// at least on FreeBSD, in order to define sbrk. The solution +// is to #include unistd.h first. This is safe because unistd.h +// doesn't sub-include stdlib.h, so we'll still get posix_memalign +// when we #include stdlib.h. Blah. +#ifdef HAVE_UNISTD_H +#include // for testing sbrk hooks +#endif +#include "tcmalloc.h" // must come early, to pick up posix_memalign +#include +#include +#include +#if defined HAVE_STDINT_H +#include // for intptr_t +#endif +#include // for size_t +#ifdef HAVE_FCNTL_H +#include // for open; used with mmap-hook test +#endif +#ifdef HAVE_MMAP +#include // for testing mmap hooks +#endif +#ifdef HAVE_MALLOC_H +#include // defines pvalloc/etc on cygwin +#endif +#include +#include +#include +#include +#include +#include "base/logging.h" +#include "base/simple_mutex.h" +#include "gperftools/malloc_hook.h" +#include "gperftools/malloc_extension.h" +#include "gperftools/tcmalloc.h" +#include "thread_cache.h" +#include "tests/testutil.h" + +// Windows doesn't define pvalloc and a few other obsolete unix +// functions; nor does it define posix_memalign (which is not obsolete). +#if defined(_WIN32) +# define cfree free // don't bother to try to test these obsolete fns +# define valloc malloc +# define pvalloc malloc +// I'd like to map posix_memalign to _aligned_malloc, but _aligned_malloc +// must be paired with _aligned_free (not normal free), which is too +// invasive a change to how we allocate memory here. So just bail +static bool kOSSupportsMemalign = false; +static inline void* Memalign(size_t align, size_t size) { + //LOG(FATAL) << "memalign not supported on windows"; + exit(1); + return NULL; +} +static inline int PosixMemalign(void** ptr, size_t align, size_t size) { + //LOG(FATAL) << "posix_memalign not supported on windows"; + exit(1); + return -1; +} + +// OS X defines posix_memalign in some OS versions but not others; +// it's confusing enough to check that it's easiest to just not to test. +#elif defined(__APPLE__) +static bool kOSSupportsMemalign = false; +static inline void* Memalign(size_t align, size_t size) { + //LOG(FATAL) << "memalign not supported on OS X"; + exit(1); + return NULL; +} +static inline int PosixMemalign(void** ptr, size_t align, size_t size) { + //LOG(FATAL) << "posix_memalign not supported on OS X"; + exit(1); + return -1; +} + +#else +static bool kOSSupportsMemalign = true; +static inline void* Memalign(size_t align, size_t size) { + return memalign(align, size); +} +static inline int PosixMemalign(void** ptr, size_t align, size_t size) { + return posix_memalign(ptr, align, size); +} + +#endif + +// On systems (like freebsd) that don't define MAP_ANONYMOUS, use the old +// form of the name instead. +#ifndef MAP_ANONYMOUS +# define MAP_ANONYMOUS MAP_ANON +#endif + +#define LOGSTREAM stdout + +using std::vector; +using std::string; + +DECLARE_double(tcmalloc_release_rate); +DECLARE_int32(max_free_queue_size); // in debugallocation.cc +DECLARE_int64(tcmalloc_sample_parameter); + +namespace testing { + +static const int FLAGS_numtests = 50000; +static const int FLAGS_log_every_n_tests = 50000; // log exactly once + +// Testing parameters +static const int FLAGS_lgmaxsize = 16; // lg() of the max size object to alloc +static const int FLAGS_numthreads = 10; // Number of threads +static const int FLAGS_threadmb = 4; // Max memory size allocated by thread +static const int FLAGS_lg_max_memalign = 18; // lg of max alignment for memalign + +static const double FLAGS_memalign_min_fraction = 0; // min expected% +static const double FLAGS_memalign_max_fraction = 0.4; // max expected% +static const double FLAGS_memalign_max_alignment_ratio = 6; // alignment/size + +// Weights of different operations +static const int FLAGS_allocweight = 50; // Weight for picking allocation +static const int FLAGS_freeweight = 50; // Weight for picking free +static const int FLAGS_updateweight = 10; // Weight for picking update +static const int FLAGS_passweight = 1; // Weight for passing object + +static const int kSizeBits = 8 * sizeof(size_t); +static const size_t kMaxSize = ~static_cast(0); +static const size_t kMaxSignedSize = ((size_t(1) << (kSizeBits-1)) - 1); + +static const size_t kNotTooBig = 100000; +// We want an allocation that is definitely more than main memory. OS +// X has special logic to discard very big allocs before even passing +// the request along to the user-defined memory allocator; we're not +// interested in testing their logic, so we have to make sure we're +// not *too* big. +static const size_t kTooBig = kMaxSize - 100000; + +static int news_handled = 0; + +// Global array of threads +class TesterThread; +static TesterThread** threads; + +// To help with generating random numbers +class TestHarness { + private: + // Information kept per type + struct Type { + string name; + int type; + int weight; + }; + + public: + TestHarness(int seed) + : types_(new vector), total_weight_(0), num_tests_(0) { + srandom(seed); + } + ~TestHarness() { + delete types_; + } + + // Add operation type with specified weight. When starting a new + // iteration, an operation type is picked with probability + // proportional to its weight. + // + // "type" must be non-negative. + // "weight" must be non-negative. + void AddType(int type, int weight, const char* name); + + // Call this to get the type of operation for the next iteration. + // It returns a random operation type from the set of registered + // operations. Returns -1 if tests should finish. + int PickType(); + + // If n == 0, returns the next pseudo-random number in the range [0 .. 0] + // If n != 0, returns the next pseudo-random number in the range [0 .. n) + int Uniform(int n) { + if (n == 0) { + return random() * 0; + } else { + return random() % n; + } + } + // Pick "base" uniformly from range [0,max_log] and then return + // "base" random bits. The effect is to pick a number in the range + // [0,2^max_log-1] with bias towards smaller numbers. + int Skewed(int max_log) { + const int base = random() % (max_log+1); + return random() % (1 << base); + } + + private: + vector* types_; // Registered types + int total_weight_; // Total weight of all types + int num_tests_; // Num tests run so far +}; + +void TestHarness::AddType(int type, int weight, const char* name) { + Type t; + t.name = name; + t.type = type; + t.weight = weight; + types_->push_back(t); + total_weight_ += weight; +} + +int TestHarness::PickType() { + if (num_tests_ >= FLAGS_numtests) return -1; + num_tests_++; + + assert(total_weight_ > 0); + // This is a little skewed if total_weight_ doesn't divide 2^31, but it's close + int v = Uniform(total_weight_); + int i; + for (i = 0; i < types_->size(); i++) { + v -= (*types_)[i].weight; + if (v < 0) { + break; + } + } + + assert(i < types_->size()); + if ((num_tests_ % FLAGS_log_every_n_tests) == 0) { + fprintf(LOGSTREAM, " Test %d out of %d: %s\n", + num_tests_, FLAGS_numtests, (*types_)[i].name.c_str()); + } + return (*types_)[i].type; +} + +class AllocatorState : public TestHarness { + public: + explicit AllocatorState(int seed) : TestHarness(seed), memalign_fraction_(0) { + if (kOSSupportsMemalign) { + CHECK_GE(FLAGS_memalign_max_fraction, 0); + CHECK_LE(FLAGS_memalign_max_fraction, 1); + CHECK_GE(FLAGS_memalign_min_fraction, 0); + CHECK_LE(FLAGS_memalign_min_fraction, 1); + double delta = FLAGS_memalign_max_fraction - FLAGS_memalign_min_fraction; + CHECK_GE(delta, 0); + memalign_fraction_ = (Uniform(10000)/10000.0 * delta + + FLAGS_memalign_min_fraction); + //fprintf(LOGSTREAM, "memalign fraction: %f\n", memalign_fraction_); + } + } + virtual ~AllocatorState() {} + + // Allocate memory. Randomly choose between malloc() or posix_memalign(). + void* alloc(size_t size) { + if (Uniform(100) < memalign_fraction_ * 100) { + // Try a few times to find a reasonable alignment, or fall back on malloc. + for (int i = 0; i < 5; i++) { + size_t alignment = 1 << Uniform(FLAGS_lg_max_memalign); + if (alignment >= sizeof(intptr_t) && + (size < sizeof(intptr_t) || + alignment < FLAGS_memalign_max_alignment_ratio * size)) { + void *result = reinterpret_cast(static_cast(0x1234)); + int err = PosixMemalign(&result, alignment, size); + if (err != 0) { + CHECK_EQ(err, ENOMEM); + } + return err == 0 ? result : NULL; + } + } + } + return malloc(size); + } + + private: + double memalign_fraction_; +}; + + +// Info kept per thread +class TesterThread { + private: + // Info kept per allocated object + struct Object { + char* ptr; // Allocated pointer + int size; // Allocated size + int generation; // Generation counter of object contents + }; + + Mutex lock_; // For passing in another thread's obj + int id_; // My thread id + AllocatorState rnd_; // For generating random numbers + vector heap_; // This thread's heap + vector passed_; // Pending objects passed from others + size_t heap_size_; // Current heap size + int locks_ok_; // Number of OK TryLock() ops + int locks_failed_; // Number of failed TryLock() ops + + // Type of operations + enum Type { ALLOC, FREE, UPDATE, PASS }; + + // ACM minimal standard random number generator. (re-entrant.) + class ACMRandom { + int32 seed_; + public: + explicit ACMRandom(int32 seed) { seed_ = seed; } + int32 Next() { + const int32 M = 2147483647L; // 2^31-1 + const int32 A = 16807; + // In effect, we are computing seed_ = (seed_ * A) % M, where M = 2^31-1 + uint32 lo = A * (int32)(seed_ & 0xFFFF); + uint32 hi = A * (int32)((uint32)seed_ >> 16); + lo += (hi & 0x7FFF) << 16; + if (lo > M) { + lo &= M; + ++lo; + } + lo += hi >> 15; + if (lo > M) { + lo &= M; + ++lo; + } + return (seed_ = (int32) lo); + } + }; + + public: + TesterThread(int id) + : id_(id), + rnd_(id+1), + heap_size_(0), + locks_ok_(0), + locks_failed_(0) { + } + + virtual ~TesterThread() { + if (FLAGS_verbose) + fprintf(LOGSTREAM, "Thread %2d: locks %6d ok; %6d trylocks failed\n", + id_, locks_ok_, locks_failed_); + if (locks_ok_ + locks_failed_ >= 1000) { + CHECK_LE(locks_failed_, locks_ok_ / 2); + } + } + + virtual void Run() { + rnd_.AddType(ALLOC, FLAGS_allocweight, "allocate"); + rnd_.AddType(FREE, FLAGS_freeweight, "free"); + rnd_.AddType(UPDATE, FLAGS_updateweight, "update"); + rnd_.AddType(PASS, FLAGS_passweight, "pass"); + + while (true) { + AcquirePassedObjects(); + + switch (rnd_.PickType()) { + case ALLOC: AllocateObject(); break; + case FREE: FreeObject(); break; + case UPDATE: UpdateObject(); break; + case PASS: PassObject(); break; + case -1: goto done; + default: assert(NULL == "Unknown type"); + } + + ShrinkHeap(); + } + + done: + DeleteHeap(); + } + + // Allocate a new object + void AllocateObject() { + Object object; + object.size = rnd_.Skewed(FLAGS_lgmaxsize); + object.ptr = static_cast(rnd_.alloc(object.size)); + CHECK(object.ptr); + object.generation = 0; + FillContents(&object); + heap_.push_back(object); + heap_size_ += object.size; + } + + // Mutate a random object + void UpdateObject() { + if (heap_.empty()) return; + const int index = rnd_.Uniform(heap_.size()); + CheckContents(heap_[index]); + heap_[index].generation++; + FillContents(&heap_[index]); + } + + // Free a random object + void FreeObject() { + if (heap_.empty()) return; + const int index = rnd_.Uniform(heap_.size()); + Object object = heap_[index]; + CheckContents(object); + free(object.ptr); + heap_size_ -= object.size; + heap_[index] = heap_[heap_.size()-1]; + heap_.pop_back(); + } + + // Delete all objects in the heap + void DeleteHeap() { + while (!heap_.empty()) { + FreeObject(); + } + } + + // Free objects until our heap is small enough + void ShrinkHeap() { + while (heap_size_ > FLAGS_threadmb << 20) { + assert(!heap_.empty()); + FreeObject(); + } + } + + // Pass a random object to another thread + void PassObject() { + // Pick object to pass + if (heap_.empty()) return; + const int index = rnd_.Uniform(heap_.size()); + Object object = heap_[index]; + CheckContents(object); + + // Pick thread to pass + const int tid = rnd_.Uniform(FLAGS_numthreads); + TesterThread* thread = threads[tid]; + + if (thread->lock_.TryLock()) { + // Pass the object + locks_ok_++; + thread->passed_.push_back(object); + thread->lock_.Unlock(); + heap_size_ -= object.size; + heap_[index] = heap_[heap_.size()-1]; + heap_.pop_back(); + } else { + locks_failed_++; + } + } + + // Grab any objects passed to this thread by another thread + void AcquirePassedObjects() { + // We do not create unnecessary contention by always using + // TryLock(). Plus we unlock immediately after swapping passed + // objects into a local vector. + vector copy; + { // Locking scope + if (!lock_.TryLock()) { + locks_failed_++; + return; + } + locks_ok_++; + swap(copy, passed_); + lock_.Unlock(); + } + + for (int i = 0; i < copy.size(); ++i) { + const Object& object = copy[i]; + CheckContents(object); + heap_.push_back(object); + heap_size_ += object.size; + } + } + + // Fill object contents according to ptr/generation + void FillContents(Object* object) { + ACMRandom r(reinterpret_cast(object->ptr) & 0x7fffffff); + for (int i = 0; i < object->generation; ++i) { + r.Next(); + } + const char c = static_cast(r.Next()); + memset(object->ptr, c, object->size); + } + + // Check object contents + void CheckContents(const Object& object) { + ACMRandom r(reinterpret_cast(object.ptr) & 0x7fffffff); + for (int i = 0; i < object.generation; ++i) { + r.Next(); + } + + // For large objects, we just check a prefix/suffix + const char expected = static_cast(r.Next()); + const int limit1 = object.size < 32 ? object.size : 32; + const int start2 = limit1 > object.size - 32 ? limit1 : object.size - 32; + for (int i = 0; i < limit1; ++i) { + CHECK_EQ(object.ptr[i], expected); + } + for (int i = start2; i < object.size; ++i) { + CHECK_EQ(object.ptr[i], expected); + } + } +}; + +static void RunThread(int thread_id) { + threads[thread_id]->Run(); +} + +static void TryHugeAllocation(size_t s, AllocatorState* rnd) { + void* p = rnd->alloc(s); + CHECK(p == NULL); // huge allocation s should fail! +} + +static void TestHugeAllocations(AllocatorState* rnd) { + // Check that asking for stuff tiny bit smaller than largest possible + // size returns NULL. + for (size_t i = 0; i < 70000; i += rnd->Uniform(20)) { + TryHugeAllocation(kMaxSize - i, rnd); + } + // Asking for memory sizes near signed/unsigned boundary (kMaxSignedSize) + // might work or not, depending on the amount of virtual memory. +#ifndef DEBUGALLOCATION // debug allocation takes forever for huge allocs + for (size_t i = 0; i < 100; i++) { + void* p = NULL; + p = rnd->alloc(kMaxSignedSize + i); + if (p) free(p); // if: free(NULL) is not necessarily defined + p = rnd->alloc(kMaxSignedSize - i); + if (p) free(p); + } +#endif + + // Check that ReleaseFreeMemory has no visible effect (aka, does not + // crash the test): + MallocExtension* inst = MallocExtension::instance(); + CHECK(inst); + inst->ReleaseFreeMemory(); +} + +static void TestCalloc(size_t n, size_t s, bool ok) { + char* p = reinterpret_cast(calloc(n, s)); + if (FLAGS_verbose) + fprintf(LOGSTREAM, "calloc(%"PRIxS", %"PRIxS"): %p\n", n, s, p); + if (!ok) { + CHECK(p == NULL); // calloc(n, s) should not succeed + } else { + CHECK(p != NULL); // calloc(n, s) should succeed + for (int i = 0; i < n*s; i++) { + CHECK(p[i] == '\0'); + } + free(p); + } +} + +// This makes sure that reallocing a small number of bytes in either +// direction doesn't cause us to allocate new memory. +static void TestRealloc() { +#ifndef DEBUGALLOCATION // debug alloc doesn't try to minimize reallocs + // When sampling, we always allocate in units of page-size, which + // makes reallocs of small sizes do extra work (thus, failing these + // checks). Since sampling is random, we turn off sampling to make + // sure that doesn't happen to us here. + const int64 old_sample_parameter = FLAGS_tcmalloc_sample_parameter; + FLAGS_tcmalloc_sample_parameter = 0; // turn off sampling + + int start_sizes[] = { 100, 1000, 10000, 100000 }; + int deltas[] = { 1, -2, 4, -8, 16, -32, 64, -128 }; + + for (int s = 0; s < sizeof(start_sizes)/sizeof(*start_sizes); ++s) { + void* p = malloc(start_sizes[s]); + CHECK(p); + // The larger the start-size, the larger the non-reallocing delta. + for (int d = 0; d < (s+1) * 2; ++d) { + void* new_p = realloc(p, start_sizes[s] + deltas[d]); + CHECK(p == new_p); // realloc should not allocate new memory + } + // Test again, but this time reallocing smaller first. + for (int d = 0; d < s*2; ++d) { + void* new_p = realloc(p, start_sizes[s] - deltas[d]); + CHECK(p == new_p); // realloc should not allocate new memory + } + free(p); + } + FLAGS_tcmalloc_sample_parameter = old_sample_parameter; +#endif +} + +static void TestNewHandler() throw (std::bad_alloc) { + ++news_handled; + throw std::bad_alloc(); +} + +static void TestOneNew(void* (*func)(size_t)) { + // success test + try { + void* ptr = (*func)(kNotTooBig); + if (0 == ptr) { + fprintf(LOGSTREAM, "allocation should not have failed.\n"); + abort(); + } + } catch (...) { + fprintf(LOGSTREAM, "allocation threw unexpected exception.\n"); + abort(); + } + + // failure test + // we should always receive a bad_alloc exception + try { + (*func)(kTooBig); + fprintf(LOGSTREAM, "allocation should have failed.\n"); + abort(); + } catch (const std::bad_alloc&) { + // correct + } catch (...) { + fprintf(LOGSTREAM, "allocation threw unexpected exception.\n"); + abort(); + } +} + +static void TestNew(void* (*func)(size_t)) { + news_handled = 0; + + // test without new_handler: + std::new_handler saved_handler = std::set_new_handler(0); + TestOneNew(func); + + // test with new_handler: + std::set_new_handler(TestNewHandler); + TestOneNew(func); + if (news_handled != 1) { + fprintf(LOGSTREAM, "new_handler was not called.\n"); + abort(); + } + std::set_new_handler(saved_handler); +} + +static void TestOneNothrowNew(void* (*func)(size_t, const std::nothrow_t&)) { + // success test + try { + void* ptr = (*func)(kNotTooBig, std::nothrow); + if (0 == ptr) { + fprintf(LOGSTREAM, "allocation should not have failed.\n"); + abort(); + } + } catch (...) { + fprintf(LOGSTREAM, "allocation threw unexpected exception.\n"); + abort(); + } + + // failure test + // we should always receive a bad_alloc exception + try { + if ((*func)(kTooBig, std::nothrow) != 0) { + fprintf(LOGSTREAM, "allocation should have failed.\n"); + abort(); + } + } catch (...) { + fprintf(LOGSTREAM, "nothrow allocation threw unexpected exception.\n"); + abort(); + } +} + +static void TestNothrowNew(void* (*func)(size_t, const std::nothrow_t&)) { + news_handled = 0; + + // test without new_handler: + std::new_handler saved_handler = std::set_new_handler(0); + TestOneNothrowNew(func); + + // test with new_handler: + std::set_new_handler(TestNewHandler); + TestOneNothrowNew(func); + if (news_handled != 1) { + fprintf(LOGSTREAM, "nothrow new_handler was not called.\n"); + abort(); + } + std::set_new_handler(saved_handler); +} + + +// These are used as callbacks by the sanity-check. Set* and Reset* +// register the hook that counts how many times the associated memory +// function is called. After each such call, call Verify* to verify +// that we used the tcmalloc version of the call, and not the libc. +// Note the ... in the hook signature: we don't care what arguments +// the hook takes. +#define MAKE_HOOK_CALLBACK(hook_type) \ + static int g_##hook_type##_calls = 0; \ + static void IncrementCallsTo##hook_type(...) { \ + g_##hook_type##_calls++; \ + } \ + static void Verify##hook_type##WasCalled() { \ + CHECK_GT(g_##hook_type##_calls, 0); \ + g_##hook_type##_calls = 0; /* reset for next call */ \ + } \ + static void Set##hook_type() { \ + CHECK(MallocHook::Add##hook_type( \ + (MallocHook::hook_type)&IncrementCallsTo##hook_type)); \ + } \ + static void Reset##hook_type() { \ + CHECK(MallocHook::Remove##hook_type( \ + (MallocHook::hook_type)&IncrementCallsTo##hook_type)); \ + } + +// We do one for each hook typedef in malloc_hook.h +MAKE_HOOK_CALLBACK(NewHook); +MAKE_HOOK_CALLBACK(DeleteHook); +MAKE_HOOK_CALLBACK(MmapHook); +MAKE_HOOK_CALLBACK(MremapHook); +MAKE_HOOK_CALLBACK(MunmapHook); +MAKE_HOOK_CALLBACK(SbrkHook); + +static void TestAlignmentForSize(int size) { + fprintf(LOGSTREAM, "Testing alignment of malloc(%d)\n", size); + static const int kNum = 100; + void* ptrs[kNum]; + for (int i = 0; i < kNum; i++) { + ptrs[i] = malloc(size); + uintptr_t p = reinterpret_cast(ptrs[i]); + CHECK((p % sizeof(void*)) == 0); + CHECK((p % sizeof(double)) == 0); + + // Must have 16-byte alignment for large enough objects + if (size >= 16) { + CHECK((p % 16) == 0); + } + } + for (int i = 0; i < kNum; i++) { + free(ptrs[i]); + } +} + +static void TestMallocAlignment() { + for (int lg = 0; lg < 16; lg++) { + TestAlignmentForSize((1<(arg); + if (state->ptr >= r->address && + state->ptr < r->address + r->length) { + if (state->expected_type == base::MallocRange::FREE) { + // We are expecting r->type == FREE, but ReleaseMemory + // may have already moved us to UNMAPPED state instead (this happens in + // approximately 0.1% of executions). Accept either state. + CHECK(r->type == base::MallocRange::FREE || + r->type == base::MallocRange::UNMAPPED); + } else { + CHECK_EQ(r->type, state->expected_type); + } + CHECK_GE(r->length, state->min_size); + state->matched = true; + } +} + +// Check that at least one of the callbacks from Ranges() contains +// the specified address with the specified type, and has size +// >= min_size. +static void CheckRangeCallback(void* ptr, base::MallocRange::Type type, + size_t min_size) { + RangeCallbackState state; + state.ptr = reinterpret_cast(ptr); + state.expected_type = type; + state.min_size = min_size; + state.matched = false; + MallocExtension::instance()->Ranges(&state, RangeCallback); + CHECK(state.matched); +} + +} + +static void TestRanges() { + static const int MB = 1048576; + void* a = malloc(MB); + void* b = malloc(MB); + CheckRangeCallback(a, base::MallocRange::INUSE, MB); + CheckRangeCallback(b, base::MallocRange::INUSE, MB); + free(a); + CheckRangeCallback(a, base::MallocRange::FREE, MB); + CheckRangeCallback(b, base::MallocRange::INUSE, MB); + MallocExtension::instance()->ReleaseFreeMemory(); + CheckRangeCallback(a, base::MallocRange::UNMAPPED, MB); + CheckRangeCallback(b, base::MallocRange::INUSE, MB); + free(b); + CheckRangeCallback(a, base::MallocRange::UNMAPPED, MB); + CheckRangeCallback(b, base::MallocRange::FREE, MB); +} + +#ifndef DEBUGALLOCATION +static size_t GetUnmappedBytes() { + size_t bytes; + CHECK(MallocExtension::instance()->GetNumericProperty( + "tcmalloc.pageheap_unmapped_bytes", &bytes)); + return bytes; +} +#endif + +static void TestReleaseToSystem() { + // Debug allocation mode adds overhead to each allocation which + // messes up all the equality tests here. I just disable the + // teset in this mode. TODO(csilvers): get it to work for debugalloc? +#ifndef DEBUGALLOCATION + const double old_tcmalloc_release_rate = FLAGS_tcmalloc_release_rate; + FLAGS_tcmalloc_release_rate = 0; + + static const int MB = 1048576; + void* a = malloc(MB); + void* b = malloc(MB); + MallocExtension::instance()->ReleaseFreeMemory(); + size_t starting_bytes = GetUnmappedBytes(); + + // Calling ReleaseFreeMemory() a second time shouldn't do anything. + MallocExtension::instance()->ReleaseFreeMemory(); + EXPECT_EQ(starting_bytes, GetUnmappedBytes()); + + // ReleaseToSystem shouldn't do anything either. + MallocExtension::instance()->ReleaseToSystem(MB); + EXPECT_EQ(starting_bytes, GetUnmappedBytes()); + + free(a); + + // The span to release should be 1MB. + MallocExtension::instance()->ReleaseToSystem(MB/2); + EXPECT_EQ(starting_bytes + MB, GetUnmappedBytes()); + + // Should do nothing since the previous call released too much. + MallocExtension::instance()->ReleaseToSystem(MB/4); + EXPECT_EQ(starting_bytes + MB, GetUnmappedBytes()); + + free(b); + + // Use up the extra MB/4 bytes from 'a' and also release 'b'. + MallocExtension::instance()->ReleaseToSystem(MB/2); + EXPECT_EQ(starting_bytes + 2*MB, GetUnmappedBytes()); + + // Should do nothing since the previous call released too much. + MallocExtension::instance()->ReleaseToSystem(MB/2); + EXPECT_EQ(starting_bytes + 2*MB, GetUnmappedBytes()); + + // Nothing else to release. + MallocExtension::instance()->ReleaseFreeMemory(); + EXPECT_EQ(starting_bytes + 2*MB, GetUnmappedBytes()); + + a = malloc(MB); + free(a); + EXPECT_EQ(starting_bytes + MB, GetUnmappedBytes()); + + // Releasing less than a page should still trigger a release. + MallocExtension::instance()->ReleaseToSystem(1); + EXPECT_EQ(starting_bytes + 2*MB, GetUnmappedBytes()); + + FLAGS_tcmalloc_release_rate = old_tcmalloc_release_rate; +#endif // #ifndef DEBUGALLOCATION +} + +// On MSVC10, in release mode, the optimizer convinces itself +// g_no_memory is never changed (I guess it doesn't realize OnNoMemory +// might be called). Work around this by setting the var volatile. +volatile bool g_no_memory = false; +std::new_handler g_old_handler = NULL; +static void OnNoMemory() { + g_no_memory = true; + std::set_new_handler(g_old_handler); +} + +static void TestSetNewMode() { + int old_mode = tc_set_new_mode(1); + + g_old_handler = std::set_new_handler(&OnNoMemory); + g_no_memory = false; + void* ret = malloc(kTooBig); + EXPECT_EQ(NULL, ret); + EXPECT_TRUE(g_no_memory); + + g_old_handler = std::set_new_handler(&OnNoMemory); + g_no_memory = false; + ret = calloc(1, kTooBig); + EXPECT_EQ(NULL, ret); + EXPECT_TRUE(g_no_memory); + + g_old_handler = std::set_new_handler(&OnNoMemory); + g_no_memory = false; + ret = realloc(NULL, kTooBig); + EXPECT_EQ(NULL, ret); + EXPECT_TRUE(g_no_memory); + + if (kOSSupportsMemalign) { + // Not really important, but must be small enough such that + // kAlignment + kTooBig does not overflow. + const int kAlignment = 1 << 5; + + g_old_handler = std::set_new_handler(&OnNoMemory); + g_no_memory = false; + ret = Memalign(kAlignment, kTooBig); + EXPECT_EQ(NULL, ret); + EXPECT_TRUE(g_no_memory); + + g_old_handler = std::set_new_handler(&OnNoMemory); + g_no_memory = false; + EXPECT_EQ(ENOMEM, + PosixMemalign(&ret, kAlignment, kTooBig)); + EXPECT_EQ(NULL, ret); + EXPECT_TRUE(g_no_memory); + } + + tc_set_new_mode(old_mode); +} + +static int RunAllTests(int argc, char** argv) { + // Optional argv[1] is the seed + AllocatorState rnd(argc > 1 ? atoi(argv[1]) : 100); + + SetTestResourceLimit(); + + // TODO(odo): This test has been disabled because it is only by luck that it + // does not result in fragmentation. When tcmalloc makes an allocation which + // spans previously unused leaves of the pagemap it will allocate and fill in + // the leaves to cover the new allocation. The leaves happen to be 256MiB in + // the 64-bit build, and with the sbrk allocator these allocations just + // happen to fit in one leaf by luck. With other allocators (mmap, + // memfs_malloc when used with small pages) the allocations generally span + // two leaves and this results in a very bad fragmentation pattern with this + // code. The same failure can be forced with the sbrk allocator just by + // allocating something on the order of 128MiB prior to starting this test so + // that the test allocations straddle a 256MiB boundary. + + // TODO(csilvers): port MemoryUsage() over so the test can use that +#if 0 +# include // for getpid() + // Allocate and deallocate blocks of increasing sizes to check if the alloc + // metadata fragments the memory. (Do not put other allocations/deallocations + // before this test, it may break). + { + size_t memory_usage = MemoryUsage(getpid()); + fprintf(LOGSTREAM, "Testing fragmentation\n"); + for ( int i = 200; i < 240; ++i ) { + int size = i << 20; + void *test1 = rnd.alloc(size); + CHECK(test1); + for ( int j = 0; j < size; j += (1 << 12) ) { + static_cast(test1)[j] = 1; + } + free(test1); + } + // There may still be a bit of fragmentation at the beginning, until we + // reach kPageMapBigAllocationThreshold bytes so we check for + // 200 + 240 + margin. + CHECK_LT(MemoryUsage(getpid()), memory_usage + (450 << 20) ); + } +#endif + + // Check that empty allocation works + fprintf(LOGSTREAM, "Testing empty allocation\n"); + { + void* p1 = rnd.alloc(0); + CHECK(p1 != NULL); + void* p2 = rnd.alloc(0); + CHECK(p2 != NULL); + CHECK(p1 != p2); + free(p1); + free(p2); + } + + // This code stresses some of the memory allocation via STL. + // It may call operator delete(void*, nothrow_t). + fprintf(LOGSTREAM, "Testing STL use\n"); + { + std::vector v; + v.push_back(1); + v.push_back(2); + v.push_back(3); + v.push_back(0); + std::stable_sort(v.begin(), v.end()); + } + + // Test each of the memory-allocation functions once, just as a sanity-check + fprintf(LOGSTREAM, "Sanity-testing all the memory allocation functions\n"); + { + // We use new-hook and delete-hook to verify we actually called the + // tcmalloc version of these routines, and not the libc version. + SetNewHook(); // defined as part of MAKE_HOOK_CALLBACK, above + SetDeleteHook(); // ditto + + void* p1 = malloc(10); + CHECK(p1 != NULL); // force use of this variable + VerifyNewHookWasCalled(); + // Also test the non-standard tc_malloc_size + size_t actual_p1_size = tc_malloc_size(p1); + CHECK_GE(actual_p1_size, 10); + CHECK_LT(actual_p1_size, 100000); // a reasonable upper-bound, I think + free(p1); + VerifyDeleteHookWasCalled(); + + + p1 = calloc(10, 2); + CHECK(p1 != NULL); + VerifyNewHookWasCalled(); + // We make sure we realloc to a big size, since some systems (OS + // X) will notice if the realloced size continues to fit into the + // malloc-block and make this a noop if so. + p1 = realloc(p1, 30000); + CHECK(p1 != NULL); + VerifyNewHookWasCalled(); + VerifyDeleteHookWasCalled(); + cfree(p1); // synonym for free + VerifyDeleteHookWasCalled(); + + if (kOSSupportsMemalign) { + CHECK_EQ(PosixMemalign(&p1, sizeof(p1), 40), 0); + CHECK(p1 != NULL); + VerifyNewHookWasCalled(); + free(p1); + VerifyDeleteHookWasCalled(); + + p1 = Memalign(sizeof(p1) * 2, 50); + CHECK(p1 != NULL); + VerifyNewHookWasCalled(); + free(p1); + VerifyDeleteHookWasCalled(); + } + + // Windows has _aligned_malloc. Let's test that that's captured too. +#if (defined(_MSC_VER) || defined(__MINGW32__)) && !defined(PERFTOOLS_NO_ALIGNED_MALLOC) + p1 = _aligned_malloc(sizeof(p1) * 2, 64); + CHECK(p1 != NULL); + VerifyNewHookWasCalled(); + _aligned_free(p1); + VerifyDeleteHookWasCalled(); +#endif + + p1 = valloc(60); + CHECK(p1 != NULL); + VerifyNewHookWasCalled(); + free(p1); + VerifyDeleteHookWasCalled(); + + p1 = pvalloc(70); + CHECK(p1 != NULL); + VerifyNewHookWasCalled(); + free(p1); + VerifyDeleteHookWasCalled(); + + char* p2 = new char; + CHECK(p2 != NULL); + VerifyNewHookWasCalled(); + delete p2; + VerifyDeleteHookWasCalled(); + + p2 = new char[100]; + CHECK(p2 != NULL); + VerifyNewHookWasCalled(); + delete[] p2; + VerifyDeleteHookWasCalled(); + + p2 = new(std::nothrow) char; + CHECK(p2 != NULL); + VerifyNewHookWasCalled(); + delete p2; + VerifyDeleteHookWasCalled(); + + p2 = new(std::nothrow) char[100]; + CHECK(p2 != NULL); + VerifyNewHookWasCalled(); + delete[] p2; + VerifyDeleteHookWasCalled(); + + // Another way of calling operator new + p2 = static_cast(::operator new(100)); + CHECK(p2 != NULL); + VerifyNewHookWasCalled(); + ::operator delete(p2); + VerifyDeleteHookWasCalled(); + + // Try to call nothrow's delete too. Compilers use this. + p2 = static_cast(::operator new(100, std::nothrow)); + CHECK(p2 != NULL); + VerifyNewHookWasCalled(); + ::operator delete(p2, std::nothrow); + VerifyDeleteHookWasCalled(); + + // Try strdup(), which the system allocates but we must free. If + // all goes well, libc will use our malloc! + p2 = strdup("test"); + CHECK(p2 != NULL); + VerifyNewHookWasCalled(); + free(p2); + VerifyDeleteHookWasCalled(); + + + // Test mmap too: both anonymous mmap and mmap of a file + // Note that for right now we only override mmap on linux + // systems, so those are the only ones for which we check. + SetMmapHook(); + SetMremapHook(); + SetMunmapHook(); +#if defined(HAVE_MMAP) && defined(__linux) && \ + (defined(__i386__) || defined(__x86_64__)) + int size = 8192*2; + p1 = mmap(NULL, size, PROT_WRITE|PROT_READ, MAP_ANONYMOUS|MAP_PRIVATE, + -1, 0); + CHECK(p1 != NULL); + VerifyMmapHookWasCalled(); + p1 = mremap(p1, size, size/2, 0); + CHECK(p1 != NULL); + VerifyMremapHookWasCalled(); + size /= 2; + munmap(p1, size); + VerifyMunmapHookWasCalled(); + + int fd = open("/dev/zero", O_RDONLY); + CHECK_GE(fd, 0); // make sure the open succeeded + p1 = mmap(NULL, 8192, PROT_READ, MAP_SHARED, fd, 0); + CHECK(p1 != NULL); + VerifyMmapHookWasCalled(); + munmap(p1, 8192); + VerifyMunmapHookWasCalled(); + close(fd); +#else // this is just to quiet the compiler: make sure all fns are called + IncrementCallsToMmapHook(); + IncrementCallsToMunmapHook(); + IncrementCallsToMremapHook(); + VerifyMmapHookWasCalled(); + VerifyMremapHookWasCalled(); + VerifyMunmapHookWasCalled(); +#endif + + // Test sbrk + SetSbrkHook(); +#if defined(HAVE_SBRK) && defined(__linux) && \ + (defined(__i386__) || defined(__x86_64__)) + p1 = sbrk(8192); + CHECK(p1 != NULL); + VerifySbrkHookWasCalled(); + p1 = sbrk(-8192); + CHECK(p1 != NULL); + VerifySbrkHookWasCalled(); + // However, sbrk hook should *not* be called with sbrk(0) + p1 = sbrk(0); + CHECK(p1 != NULL); + CHECK_EQ(g_SbrkHook_calls, 0); +#else // this is just to quiet the compiler: make sure all fns are called + IncrementCallsToSbrkHook(); + VerifySbrkHookWasCalled(); +#endif + + // Reset the hooks to what they used to be. These are all + // defined as part of MAKE_HOOK_CALLBACK, above. + ResetNewHook(); + ResetDeleteHook(); + ResetMmapHook(); + ResetMremapHook(); + ResetMunmapHook(); + ResetSbrkHook(); + } + + // Check that "lots" of memory can be allocated + fprintf(LOGSTREAM, "Testing large allocation\n"); + { + const int mb_to_allocate = 100; + void* p = rnd.alloc(mb_to_allocate << 20); + CHECK(p != NULL); // could not allocate + free(p); + } + + TestMallocAlignment(); + + // Check calloc() with various arguments + fprintf(LOGSTREAM, "Testing calloc\n"); + TestCalloc(0, 0, true); + TestCalloc(0, 1, true); + TestCalloc(1, 1, true); + TestCalloc(1<<10, 0, true); + TestCalloc(1<<20, 0, true); + TestCalloc(0, 1<<10, true); + TestCalloc(0, 1<<20, true); + TestCalloc(1<<20, 2, true); + TestCalloc(2, 1<<20, true); + TestCalloc(1000, 1000, true); + + TestCalloc(kMaxSize, 2, false); + TestCalloc(2, kMaxSize, false); + TestCalloc(kMaxSize, kMaxSize, false); + + TestCalloc(kMaxSignedSize, 3, false); + TestCalloc(3, kMaxSignedSize, false); + TestCalloc(kMaxSignedSize, kMaxSignedSize, false); + + // Test that realloc doesn't always reallocate and copy memory. + fprintf(LOGSTREAM, "Testing realloc\n"); + TestRealloc(); + + fprintf(LOGSTREAM, "Testing operator new(nothrow).\n"); + TestNothrowNew(&::operator new); + fprintf(LOGSTREAM, "Testing operator new[](nothrow).\n"); + TestNothrowNew(&::operator new[]); + fprintf(LOGSTREAM, "Testing operator new.\n"); + TestNew(&::operator new); + fprintf(LOGSTREAM, "Testing operator new[].\n"); + TestNew(&::operator new[]); + + // Create threads + fprintf(LOGSTREAM, "Testing threaded allocation/deallocation (%d threads)\n", + FLAGS_numthreads); + threads = new TesterThread*[FLAGS_numthreads]; + for (int i = 0; i < FLAGS_numthreads; ++i) { + threads[i] = new TesterThread(i); + } + + // This runs all the tests at the same time, with a 1M stack size each + RunManyThreadsWithId(RunThread, FLAGS_numthreads, 1<<20); + + for (int i = 0; i < FLAGS_numthreads; ++i) delete threads[i]; // Cleanup + + // Do the memory intensive tests after threads are done, since exhausting + // the available address space can make pthread_create to fail. + + // Check that huge allocations fail with NULL instead of crashing + fprintf(LOGSTREAM, "Testing huge allocations\n"); + TestHugeAllocations(&rnd); + + // Check that large allocations fail with NULL instead of crashing +#ifndef DEBUGALLOCATION // debug allocation takes forever for huge allocs + fprintf(LOGSTREAM, "Testing out of memory\n"); + for (int s = 0; ; s += (10<<20)) { + void* large_object = rnd.alloc(s); + if (large_object == NULL) break; + free(large_object); + } +#endif + + TestHugeThreadCache(); + TestRanges(); + TestReleaseToSystem(); + TestSetNewMode(); + + return 0; +} + +} + +using testing::RunAllTests; + +int main(int argc, char** argv) { +#ifdef DEBUGALLOCATION // debug allocation takes forever for huge allocs + FLAGS_max_free_queue_size = 0; // return freed blocks to tcmalloc immediately +#endif + + RunAllTests(argc, argv); + + // Test tc_version() + fprintf(LOGSTREAM, "Testing tc_version()\n"); + int major; + int minor; + const char* patch; + char mmp[64]; + const char* human_version = tc_version(&major, &minor, &patch); + snprintf(mmp, sizeof(mmp), "%d.%d%s", major, minor, patch); + CHECK(!strcmp(PACKAGE_STRING, human_version)); + CHECK(!strcmp(PACKAGE_VERSION, mmp)); + + fprintf(LOGSTREAM, "PASS\n"); +} diff --git a/src/thirdparty/gperftools-2.0/src/tests/testutil.cc b/src/thirdparty/gperftools-2.0/src/tests/testutil.cc new file mode 100644 index 000000000..745de9990 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/testutil.cc @@ -0,0 +1,223 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein +// +// A few routines that are useful for multiple tests in this directory. + +#include "config_for_unittests.h" +#include // for NULL, abort() +// On FreeBSD, if you #include , you have to get stdint first. +#ifdef HAVE_STDINT_H +#include +#endif +#ifdef HAVE_SYS_RESOURCE_H +#include +#endif +#include "tests/testutil.h" + + +// When compiled 64-bit and run on systems with swap several unittests will end +// up trying to consume all of RAM+swap, and that can take quite some time. By +// limiting the address-space size we get sufficient coverage without blowing +// out job limits. +void SetTestResourceLimit() { +#ifdef HAVE_SYS_RESOURCE_H + // The actual resource we need to set varies depending on which flavour of + // unix. On Linux we need RLIMIT_AS because that covers the use of mmap. + // Otherwise hopefully RLIMIT_RSS is good enough. (Unfortunately 64-bit + // and 32-bit headers disagree on the type of these constants!) +#ifdef RLIMIT_AS +#define USE_RESOURCE RLIMIT_AS +#else +#define USE_RESOURCE RLIMIT_RSS +#endif + + // Restrict the test to 1GiB, which should fit comfortably well on both + // 32-bit and 64-bit hosts, and executes in ~1s. + const rlim_t kMaxMem = 1<<30; + + struct rlimit rlim; + if (getrlimit(USE_RESOURCE, &rlim) == 0) { + if (rlim.rlim_cur == RLIM_INFINITY || rlim.rlim_cur > kMaxMem) { + rlim.rlim_cur = kMaxMem; + setrlimit(USE_RESOURCE, &rlim); // ignore result + } + } +#endif /* HAVE_SYS_RESOURCE_H */ +} + + +struct FunctionAndId { + void (*ptr_to_function)(int); + int id; +}; + +#if defined(NO_THREADS) || !(defined(HAVE_PTHREAD) || defined(_WIN32)) + +extern "C" void RunThread(void (*fn)()) { + (*fn)(); +} + +extern "C" void RunManyThreads(void (*fn)(), int count) { + // I guess the best we can do is run fn sequentially, 'count' times + for (int i = 0; i < count; i++) + (*fn)(); +} + +extern "C" void RunManyThreadsWithId(void (*fn)(int), int count, int) { + for (int i = 0; i < count; i++) + (*fn)(i); // stacksize doesn't make sense in a non-threaded context +} + +#elif defined(_WIN32) + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN /* We always want minimal includes */ +#endif +#include + +extern "C" { + // This helper function has the signature that pthread_create wants. + DWORD WINAPI RunFunctionInThread(LPVOID ptr_to_ptr_to_fn) { + (**static_cast(ptr_to_ptr_to_fn))(); // runs fn + return 0; + } + + DWORD WINAPI RunFunctionInThreadWithId(LPVOID ptr_to_fnid) { + FunctionAndId* fn_and_id = static_cast(ptr_to_fnid); + (*fn_and_id->ptr_to_function)(fn_and_id->id); // runs fn + return 0; + } + + void RunManyThreads(void (*fn)(), int count) { + DWORD dummy; + HANDLE* hThread = new HANDLE[count]; + for (int i = 0; i < count; i++) { + hThread[i] = CreateThread(NULL, 0, RunFunctionInThread, &fn, 0, &dummy); + if (hThread[i] == NULL) ExitProcess(i); + } + WaitForMultipleObjects(count, hThread, TRUE, INFINITE); + for (int i = 0; i < count; i++) { + CloseHandle(hThread[i]); + } + delete[] hThread; + } + + void RunThread(void (*fn)()) { + RunManyThreads(fn, 1); + } + + void RunManyThreadsWithId(void (*fn)(int), int count, int stacksize) { + DWORD dummy; + HANDLE* hThread = new HANDLE[count]; + FunctionAndId* fn_and_ids = new FunctionAndId[count]; + for (int i = 0; i < count; i++) { + fn_and_ids[i].ptr_to_function = fn; + fn_and_ids[i].id = i; + hThread[i] = CreateThread(NULL, stacksize, RunFunctionInThreadWithId, + &fn_and_ids[i], 0, &dummy); + if (hThread[i] == NULL) ExitProcess(i); + } + WaitForMultipleObjects(count, hThread, TRUE, INFINITE); + for (int i = 0; i < count; i++) { + CloseHandle(hThread[i]); + } + delete[] fn_and_ids; + delete[] hThread; + } +} + +#else // not NO_THREADS, not !HAVE_PTHREAD, not _WIN32 + +#include + +#define SAFE_PTHREAD(fncall) do { if ((fncall) != 0) abort(); } while (0) + +extern "C" { + // This helper function has the signature that pthread_create wants. + static void* RunFunctionInThread(void *ptr_to_ptr_to_fn) { + (**static_cast(ptr_to_ptr_to_fn))(); // runs fn + return NULL; + } + + static void* RunFunctionInThreadWithId(void *ptr_to_fnid) { + FunctionAndId* fn_and_id = static_cast(ptr_to_fnid); + (*fn_and_id->ptr_to_function)(fn_and_id->id); // runs fn + return NULL; + } + + // Run a function in a thread of its own and wait for it to finish. + // This is useful for tcmalloc testing, because each thread is + // handled separately in tcmalloc, so there's interesting stuff to + // test even if the threads are not running concurrently. + void RunThread(void (*fn)()) { + pthread_t thr; + // Even though fn is on the stack, it's safe to pass a pointer to it, + // because we pthread_join immediately (ie, before RunInThread exits). + SAFE_PTHREAD(pthread_create(&thr, NULL, RunFunctionInThread, &fn)); + SAFE_PTHREAD(pthread_join(thr, NULL)); + } + + void RunManyThreads(void (*fn)(), int count) { + pthread_t* thr = new pthread_t[count]; + for (int i = 0; i < count; i++) { + SAFE_PTHREAD(pthread_create(&thr[i], NULL, RunFunctionInThread, &fn)); + } + for (int i = 0; i < count; i++) { + SAFE_PTHREAD(pthread_join(thr[i], NULL)); + } + delete[] thr; + } + + void RunManyThreadsWithId(void (*fn)(int), int count, int stacksize) { + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setstacksize(&attr, stacksize); + + pthread_t* thr = new pthread_t[count]; + FunctionAndId* fn_and_ids = new FunctionAndId[count]; + for (int i = 0; i < count; i++) { + fn_and_ids[i].ptr_to_function = fn; + fn_and_ids[i].id = i; + SAFE_PTHREAD(pthread_create(&thr[i], &attr, + RunFunctionInThreadWithId, &fn_and_ids[i])); + } + for (int i = 0; i < count; i++) { + SAFE_PTHREAD(pthread_join(thr[i], NULL)); + } + delete[] fn_and_ids; + delete[] thr; + + pthread_attr_destroy(&attr); + } +} + +#endif diff --git a/src/thirdparty/gperftools-2.0/src/tests/testutil.h b/src/thirdparty/gperftools-2.0/src/tests/testutil.h new file mode 100644 index 000000000..26b04e4e1 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/testutil.h @@ -0,0 +1,61 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Craig Silverstein + +#ifndef TCMALLOC_TOOLS_TESTUTIL_H_ +#define TCMALLOC_TOOLS_TESTUTIL_H_ + +// Run a function in a thread of its own and wait for it to finish. +// The function you pass in must have the signature +// void MyFunction(); +extern "C" void RunThread(void (*fn)()); + +// Run a function X times, in X threads, and wait for them all to finish. +// The function you pass in must have the signature +// void MyFunction(); +extern "C" void RunManyThreads(void (*fn)(), int count); + +// The 'advanced' version: run a function X times, in X threads, and +// wait for them all to finish. Give them all the specified stack-size. +// (If you're curious why this takes a stacksize and the others don't, +// it's because the one client of this fn wanted to specify stacksize. :-) ) +// The function you pass in must have the signature +// void MyFunction(int idx); +// where idx is the index of the thread (which of the X threads this is). +extern "C" void RunManyThreadsWithId(void (*fn)(int), int count, int stacksize); + +// When compiled 64-bit and run on systems with swap several unittests will end +// up trying to consume all of RAM+swap, and that can take quite some time. By +// limiting the address-space size we get sufficient coverage without blowing +// out job limits. +void SetTestResourceLimit(); + +#endif // TCMALLOC_TOOLS_TESTUTIL_H_ diff --git a/src/thirdparty/gperftools-2.0/src/tests/thread_dealloc_unittest.cc b/src/thirdparty/gperftools-2.0/src/tests/thread_dealloc_unittest.cc new file mode 100644 index 000000000..e6fd9b3ed --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/tests/thread_dealloc_unittest.cc @@ -0,0 +1,83 @@ +// Copyright (c) 2004, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat +// +// Check that we do not leak memory when cycling through lots of threads. + +#include "config_for_unittests.h" +#include +#ifdef HAVE_UNISTD_H +#include // for sleep() +#endif +#include "base/logging.h" +#include +#include "tests/testutil.h" // for RunThread() + +// Size/number of objects to allocate per thread (1 MB per thread) +static const int kObjectSize = 1024; +static const int kNumObjects = 1024; + +// Number of threads to create and destroy +static const int kNumThreads = 1000; + +// Allocate lots of stuff +static void AllocStuff() { + void** objects = new void*[kNumObjects]; + for (int i = 0; i < kNumObjects; i++) { + objects[i] = malloc(kObjectSize); + } + for (int i = 0; i < kNumObjects; i++) { + free(objects[i]); + } + delete[] objects; +} + +int main(int argc, char** argv) { + static const int kDisplaySize = 1048576; + char* display = new char[kDisplaySize]; + + for (int i = 0; i < kNumThreads; i++) { + RunThread(&AllocStuff); + + if (((i+1) % 200) == 0) { + fprintf(stderr, "Iteration: %d of %d\n", (i+1), kNumThreads); + MallocExtension::instance()->GetStats(display, kDisplaySize); + fprintf(stderr, "%s\n", display); + } + } + delete[] display; + + printf("PASS\n"); +#ifdef HAVE_UNISTD_H + sleep(1); // Prevent exit race problem with glibc +#endif + return 0; +} diff --git a/src/thirdparty/gperftools-2.0/src/third_party/valgrind.h b/src/thirdparty/gperftools-2.0/src/third_party/valgrind.h new file mode 100644 index 000000000..577c59ab0 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/third_party/valgrind.h @@ -0,0 +1,3924 @@ +/* -*- c -*- + ---------------------------------------------------------------- + + Notice that the following BSD-style license applies to this one + file (valgrind.h) only. The rest of Valgrind is licensed under the + terms of the GNU General Public License, version 2, unless + otherwise indicated. See the COPYING file in the source + distribution for details. + + ---------------------------------------------------------------- + + This file is part of Valgrind, a dynamic binary instrumentation + framework. + + Copyright (C) 2000-2008 Julian Seward. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ---------------------------------------------------------------- + + Notice that the above BSD-style license applies to this one file + (valgrind.h) only. The entire rest of Valgrind is licensed under + the terms of the GNU General Public License, version 2. See the + COPYING file in the source distribution for details. + + ---------------------------------------------------------------- +*/ + + +/* This file is for inclusion into client (your!) code. + + You can use these macros to manipulate and query Valgrind's + execution inside your own programs. + + The resulting executables will still run without Valgrind, just a + little bit more slowly than they otherwise would, but otherwise + unchanged. When not running on valgrind, each client request + consumes very few (eg. 7) instructions, so the resulting performance + loss is negligible unless you plan to execute client requests + millions of times per second. Nevertheless, if that is still a + problem, you can compile with the NVALGRIND symbol defined (gcc + -DNVALGRIND) so that client requests are not even compiled in. */ + +#ifndef __VALGRIND_H +#define __VALGRIND_H + +#include + +/* Nb: this file might be included in a file compiled with -ansi. So + we can't use C++ style "//" comments nor the "asm" keyword (instead + use "__asm__"). */ + +/* Derive some tags indicating what the target platform is. Note + that in this file we're using the compiler's CPP symbols for + identifying architectures, which are different to the ones we use + within the rest of Valgrind. Note, __powerpc__ is active for both + 32 and 64-bit PPC, whereas __powerpc64__ is only active for the + latter (on Linux, that is). */ +#undef PLAT_x86_linux +#undef PLAT_amd64_linux +#undef PLAT_ppc32_linux +#undef PLAT_ppc64_linux +#undef PLAT_ppc32_aix5 +#undef PLAT_ppc64_aix5 + +#if !defined(_AIX) && defined(__i386__) +# define PLAT_x86_linux 1 +#elif !defined(_AIX) && defined(__x86_64__) +# define PLAT_amd64_linux 1 +#elif !defined(_AIX) && defined(__powerpc__) && !defined(__powerpc64__) +# define PLAT_ppc32_linux 1 +#elif !defined(_AIX) && defined(__powerpc__) && defined(__powerpc64__) +# define PLAT_ppc64_linux 1 +#elif defined(_AIX) && defined(__64BIT__) +# define PLAT_ppc64_aix5 1 +#elif defined(_AIX) && !defined(__64BIT__) +# define PLAT_ppc32_aix5 1 +#endif + + +/* If we're not compiling for our target platform, don't generate + any inline asms. */ +#if !defined(PLAT_x86_linux) && !defined(PLAT_amd64_linux) \ + && !defined(PLAT_ppc32_linux) && !defined(PLAT_ppc64_linux) \ + && !defined(PLAT_ppc32_aix5) && !defined(PLAT_ppc64_aix5) +# if !defined(NVALGRIND) +# define NVALGRIND 1 +# endif +#endif + + +/* ------------------------------------------------------------------ */ +/* ARCHITECTURE SPECIFICS for SPECIAL INSTRUCTIONS. There is nothing */ +/* in here of use to end-users -- skip to the next section. */ +/* ------------------------------------------------------------------ */ + +#if defined(NVALGRIND) + +/* Define NVALGRIND to completely remove the Valgrind magic sequence + from the compiled code (analogous to NDEBUG's effects on + assert()) */ +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + { \ + (_zzq_rlval) = (_zzq_default); \ + } + +#else /* ! NVALGRIND */ + +/* The following defines the magic code sequences which the JITter + spots and handles magically. Don't look too closely at them as + they will rot your brain. + + The assembly code sequences for all architectures is in this one + file. This is because this file must be stand-alone, and we don't + want to have multiple files. + + For VALGRIND_DO_CLIENT_REQUEST, we must ensure that the default + value gets put in the return slot, so that everything works when + this is executed not under Valgrind. Args are passed in a memory + block, and so there's no intrinsic limit to the number that could + be passed, but it's currently five. + + The macro args are: + _zzq_rlval result lvalue + _zzq_default default value (result returned when running on real CPU) + _zzq_request request code + _zzq_arg1..5 request params + + The other two macros are used to support function wrapping, and are + a lot simpler. VALGRIND_GET_NR_CONTEXT returns the value of the + guest's NRADDR pseudo-register and whatever other information is + needed to safely run the call original from the wrapper: on + ppc64-linux, the R2 value at the divert point is also needed. This + information is abstracted into a user-visible type, OrigFn. + + VALGRIND_CALL_NOREDIR_* behaves the same as the following on the + guest, but guarantees that the branch instruction will not be + redirected: x86: call *%eax, amd64: call *%rax, ppc32/ppc64: + branch-and-link-to-r11. VALGRIND_CALL_NOREDIR is just text, not a + complete inline asm, since it needs to be combined with more magic + inline asm stuff to be useful. +*/ + +/* ------------------------- x86-linux ------------------------- */ + +#if defined(PLAT_x86_linux) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "roll $3, %%edi ; roll $13, %%edi\n\t" \ + "roll $29, %%edi ; roll $19, %%edi\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + { volatile unsigned int _zzq_args[6]; \ + volatile unsigned int _zzq_result; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %EDX = client_request ( %EAX ) */ \ + "xchgl %%ebx,%%ebx" \ + : "=d" (_zzq_result) \ + : "a" (&_zzq_args[0]), "0" (_zzq_default) \ + : "cc", "memory" \ + ); \ + _zzq_rlval = _zzq_result; \ + } + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %EAX = guest_NRADDR */ \ + "xchgl %%ecx,%%ecx" \ + : "=a" (__addr) \ + : \ + : "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_EAX \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* call-noredir *%EAX */ \ + "xchgl %%edx,%%edx\n\t" +#endif /* PLAT_x86_linux */ + +/* ------------------------ amd64-linux ------------------------ */ + +#if defined(PLAT_amd64_linux) + +typedef + struct { + unsigned long long int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rolq $3, %%rdi ; rolq $13, %%rdi\n\t" \ + "rolq $61, %%rdi ; rolq $51, %%rdi\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + { volatile unsigned long long int _zzq_args[6]; \ + volatile unsigned long long int _zzq_result; \ + _zzq_args[0] = (unsigned long long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %RDX = client_request ( %RAX ) */ \ + "xchgq %%rbx,%%rbx" \ + : "=d" (_zzq_result) \ + : "a" (&_zzq_args[0]), "0" (_zzq_default) \ + : "cc", "memory" \ + ); \ + _zzq_rlval = _zzq_result; \ + } + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned long long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %RAX = guest_NRADDR */ \ + "xchgq %%rcx,%%rcx" \ + : "=a" (__addr) \ + : \ + : "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_RAX \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* call-noredir *%RAX */ \ + "xchgq %%rdx,%%rdx\n\t" +#endif /* PLAT_amd64_linux */ + +/* ------------------------ ppc32-linux ------------------------ */ + +#if defined(PLAT_ppc32_linux) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rlwinm 0,0,3,0,0 ; rlwinm 0,0,13,0,0\n\t" \ + "rlwinm 0,0,29,0,0 ; rlwinm 0,0,19,0,0\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + { unsigned int _zzq_args[6]; \ + unsigned int _zzq_result; \ + unsigned int* _zzq_ptr; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile("mr 3,%1\n\t" /*default*/ \ + "mr 4,%2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1\n\t" \ + "mr %0,3" /*result*/ \ + : "=b" (_zzq_result) \ + : "b" (_zzq_default), "b" (_zzq_ptr) \ + : "cc", "memory", "r3", "r4"); \ + _zzq_rlval = _zzq_result; \ + } + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R11 */ \ + "or 3,3,3\n\t" +#endif /* PLAT_ppc32_linux */ + +/* ------------------------ ppc64-linux ------------------------ */ + +#if defined(PLAT_ppc64_linux) + +typedef + struct { + unsigned long long int nraddr; /* where's the code? */ + unsigned long long int r2; /* what tocptr do we need? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ + "rotldi 0,0,61 ; rotldi 0,0,51\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + { unsigned long long int _zzq_args[6]; \ + register unsigned long long int _zzq_result __asm__("r3"); \ + register unsigned long long int* _zzq_ptr __asm__("r4"); \ + _zzq_args[0] = (unsigned long long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1" \ + : "=r" (_zzq_result) \ + : "0" (_zzq_default), "r" (_zzq_ptr) \ + : "cc", "memory"); \ + _zzq_rlval = _zzq_result; \ + } + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + register unsigned long long int __addr __asm__("r3"); \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2" \ + : "=r" (__addr) \ + : \ + : "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR_GPR2 */ \ + "or 4,4,4" \ + : "=r" (__addr) \ + : \ + : "cc", "memory" \ + ); \ + _zzq_orig->r2 = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R11 */ \ + "or 3,3,3\n\t" + +#endif /* PLAT_ppc64_linux */ + +/* ------------------------ ppc32-aix5 ------------------------- */ + +#if defined(PLAT_ppc32_aix5) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + unsigned int r2; /* what tocptr do we need? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rlwinm 0,0,3,0,0 ; rlwinm 0,0,13,0,0\n\t" \ + "rlwinm 0,0,29,0,0 ; rlwinm 0,0,19,0,0\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + { unsigned int _zzq_args[7]; \ + register unsigned int _zzq_result; \ + register unsigned int* _zzq_ptr; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + _zzq_args[6] = (unsigned int)(_zzq_default); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile("mr 4,%1\n\t" \ + "lwz 3, 24(4)\n\t" \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1\n\t" \ + "mr %0,3" \ + : "=b" (_zzq_result) \ + : "b" (_zzq_ptr) \ + : "r3", "r4", "cc", "memory"); \ + _zzq_rlval = _zzq_result; \ + } + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + register unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "r3", "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR_GPR2 */ \ + "or 4,4,4\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "r3", "cc", "memory" \ + ); \ + _zzq_orig->r2 = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R11 */ \ + "or 3,3,3\n\t" + +#endif /* PLAT_ppc32_aix5 */ + +/* ------------------------ ppc64-aix5 ------------------------- */ + +#if defined(PLAT_ppc64_aix5) + +typedef + struct { + unsigned long long int nraddr; /* where's the code? */ + unsigned long long int r2; /* what tocptr do we need? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ + "rotldi 0,0,61 ; rotldi 0,0,51\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + { unsigned long long int _zzq_args[7]; \ + register unsigned long long int _zzq_result; \ + register unsigned long long int* _zzq_ptr; \ + _zzq_args[0] = (unsigned int long long)(_zzq_request); \ + _zzq_args[1] = (unsigned int long long)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int long long)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int long long)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int long long)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int long long)(_zzq_arg5); \ + _zzq_args[6] = (unsigned int long long)(_zzq_default); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile("mr 4,%1\n\t" \ + "ld 3, 48(4)\n\t" \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1\n\t" \ + "mr %0,3" \ + : "=b" (_zzq_result) \ + : "b" (_zzq_ptr) \ + : "r3", "r4", "cc", "memory"); \ + _zzq_rlval = _zzq_result; \ + } + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + register unsigned long long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "r3", "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR_GPR2 */ \ + "or 4,4,4\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "r3", "cc", "memory" \ + ); \ + _zzq_orig->r2 = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R11 */ \ + "or 3,3,3\n\t" + +#endif /* PLAT_ppc64_aix5 */ + +/* Insert assembly code for other platforms here... */ + +#endif /* NVALGRIND */ + + +/* ------------------------------------------------------------------ */ +/* PLATFORM SPECIFICS for FUNCTION WRAPPING. This is all very */ +/* ugly. It's the least-worst tradeoff I can think of. */ +/* ------------------------------------------------------------------ */ + +/* This section defines magic (a.k.a appalling-hack) macros for doing + guaranteed-no-redirection macros, so as to get from function + wrappers to the functions they are wrapping. The whole point is to + construct standard call sequences, but to do the call itself with a + special no-redirect call pseudo-instruction that the JIT + understands and handles specially. This section is long and + repetitious, and I can't see a way to make it shorter. + + The naming scheme is as follows: + + CALL_FN_{W,v}_{v,W,WW,WWW,WWWW,5W,6W,7W,etc} + + 'W' stands for "word" and 'v' for "void". Hence there are + different macros for calling arity 0, 1, 2, 3, 4, etc, functions, + and for each, the possibility of returning a word-typed result, or + no result. +*/ + +/* Use these to write the name of your wrapper. NOTE: duplicates + VG_WRAP_FUNCTION_Z{U,Z} in pub_tool_redir.h. */ + +#define I_WRAP_SONAME_FNNAME_ZU(soname,fnname) \ + _vgwZU_##soname##_##fnname + +#define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname) \ + _vgwZZ_##soname##_##fnname + +/* Use this macro from within a wrapper function to collect the + context (address and possibly other info) of the original function. + Once you have that you can then use it in one of the CALL_FN_ + macros. The type of the argument _lval is OrigFn. */ +#define VALGRIND_GET_ORIG_FN(_lval) VALGRIND_GET_NR_CONTEXT(_lval) + +/* Derivatives of the main macros below, for calling functions + returning void. */ + +#define CALL_FN_v_v(fnptr) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_v(_junk,fnptr); } while (0) + +#define CALL_FN_v_W(fnptr, arg1) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_W(_junk,fnptr,arg1); } while (0) + +#define CALL_FN_v_WW(fnptr, arg1,arg2) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0) + +#define CALL_FN_v_WWW(fnptr, arg1,arg2,arg3) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0) + +/* ------------------------- x86-linux ------------------------- */ + +#if defined(PLAT_x86_linux) + +/* These regs are trashed by the hidden call. No need to mention eax + as gcc can already see that, plus causes gcc to bomb. */ +#define __CALLER_SAVED_REGS /*"eax"*/ "ecx", "edx" + +/* These CALL_FN_ macros assume that on x86-linux, sizeof(unsigned + long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $4, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $8, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $12, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $16, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $20, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $24, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $28, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $32, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $36, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + "pushl 40(%%eax)\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $40, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + "pushl 44(%%eax)\n\t" \ + "pushl 40(%%eax)\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $44, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + "pushl 48(%%eax)\n\t" \ + "pushl 44(%%eax)\n\t" \ + "pushl 40(%%eax)\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $48, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_x86_linux */ + +/* ------------------------ amd64-linux ------------------------ */ + +#if defined(PLAT_amd64_linux) + +/* ARGREGS: rdi rsi rdx rcx r8 r9 (the rest on stack in R-to-L order) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS /*"rax",*/ "rcx", "rdx", "rsi", \ + "rdi", "r8", "r9", "r10", "r11" + +/* These CALL_FN_ macros assume that on amd64-linux, sizeof(unsigned + long) == 8. */ + +/* NB 9 Sept 07. There is a nasty kludge here in all these CALL_FN_ + macros. In order not to trash the stack redzone, we need to drop + %rsp by 128 before the hidden call, and restore afterwards. The + nastyness is that it is only by luck that the stack still appears + to be unwindable during the hidden call - since then the behaviour + of any routine using this macro does not match what the CFI data + says. Sigh. + + Why is this important? Imagine that a wrapper has a stack + allocated local, and passes to the hidden call, a pointer to it. + Because gcc does not know about the hidden call, it may allocate + that local in the redzone. Unfortunately the hidden call may then + trash it before it comes to use it. So we must step clear of the + redzone, for the duration of the hidden call, to make it safe. + + Probably the same problem afflicts the other redzone-style ABIs too + (ppc64-linux, ppc32-aix5, ppc64-aix5); but for those, the stack is + self describing (none of this CFI nonsense) so at least messing + with the stack pointer doesn't give a danger of non-unwindable + stack. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + "addq $128,%%rsp\n\t" \ + VALGRIND_CALL_NOREDIR_RAX \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $8, %%rsp\n" \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $16, %%rsp\n" \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $24, %%rsp\n" \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "pushq 80(%%rax)\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $32, %%rsp\n" \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "pushq 88(%%rax)\n\t" \ + "pushq 80(%%rax)\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $40, %%rsp\n" \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "pushq 96(%%rax)\n\t" \ + "pushq 88(%%rax)\n\t" \ + "pushq 80(%%rax)\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $48, %%rsp\n" \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_amd64_linux */ + +/* ------------------------ ppc32-linux ------------------------ */ + +#if defined(PLAT_ppc32_linux) + +/* This is useful for finding out about the on-stack stuff: + + extern int f9 ( int,int,int,int,int,int,int,int,int ); + extern int f10 ( int,int,int,int,int,int,int,int,int,int ); + extern int f11 ( int,int,int,int,int,int,int,int,int,int,int ); + extern int f12 ( int,int,int,int,int,int,int,int,int,int,int,int ); + + int g9 ( void ) { + return f9(11,22,33,44,55,66,77,88,99); + } + int g10 ( void ) { + return f10(11,22,33,44,55,66,77,88,99,110); + } + int g11 ( void ) { + return f11(11,22,33,44,55,66,77,88,99,110,121); + } + int g12 ( void ) { + return f12(11,22,33,44,55,66,77,88,99,110,121,132); + } +*/ + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* These CALL_FN_ macros assume that on ppc32-linux, + sizeof(unsigned long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "addi 1,1,-16\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "addi 1,1,16\n\t" \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "addi 1,1,-16\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,12(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "addi 1,1,16\n\t" \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + _argvec[11] = (unsigned long)arg11; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "addi 1,1,-32\n\t" \ + /* arg11 */ \ + "lwz 3,44(11)\n\t" \ + "stw 3,16(1)\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,12(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "addi 1,1,32\n\t" \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + _argvec[11] = (unsigned long)arg11; \ + _argvec[12] = (unsigned long)arg12; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "addi 1,1,-32\n\t" \ + /* arg12 */ \ + "lwz 3,48(11)\n\t" \ + "stw 3,20(1)\n\t" \ + /* arg11 */ \ + "lwz 3,44(11)\n\t" \ + "stw 3,16(1)\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,12(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "addi 1,1,32\n\t" \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc32_linux */ + +/* ------------------------ ppc64-linux ------------------------ */ + +#if defined(PLAT_ppc64_linux) + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* These CALL_FN_ macros assume that on ppc64-linux, sizeof(unsigned + long) == 8. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+0]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+1]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+2]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+3]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+4]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+5]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+6]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+7]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+8]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+9]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-128\n\t" /* expand stack frame */ \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + "addi 1,1,128" /* restore frame */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+10]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-128\n\t" /* expand stack frame */ \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + "addi 1,1,128" /* restore frame */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+11]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-144\n\t" /* expand stack frame */ \ + /* arg11 */ \ + "ld 3,88(11)\n\t" \ + "std 3,128(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + "addi 1,1,144" /* restore frame */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+12]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + _argvec[2+12] = (unsigned long)arg12; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-144\n\t" /* expand stack frame */ \ + /* arg12 */ \ + "ld 3,96(11)\n\t" \ + "std 3,136(1)\n\t" \ + /* arg11 */ \ + "ld 3,88(11)\n\t" \ + "std 3,128(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + "addi 1,1,144" /* restore frame */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc64_linux */ + +/* ------------------------ ppc32-aix5 ------------------------- */ + +#if defined(PLAT_ppc32_aix5) + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* Expand the stack frame, copying enough info that unwinding + still works. Trashes r3. */ + +#define VG_EXPAND_FRAME_BY_trashes_r3(_n_fr) \ + "addi 1,1,-" #_n_fr "\n\t" \ + "lwz 3," #_n_fr "(1)\n\t" \ + "stw 3,0(1)\n\t" + +#define VG_CONTRACT_FRAME_BY(_n_fr) \ + "addi 1,1," #_n_fr "\n\t" + +/* These CALL_FN_ macros assume that on ppc32-aix5, sizeof(unsigned + long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+0]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+1]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+2]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+3]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+4]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+5]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+6]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+7]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+8]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ + "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+9]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(64) \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,56(1)\n\t" \ + /* args1-8 */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ + "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(64) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+10]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(64) \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,60(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,56(1)\n\t" \ + /* args1-8 */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ + "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(64) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+11]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(72) \ + /* arg11 */ \ + "lwz 3,44(11)\n\t" \ + "stw 3,64(1)\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,60(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,56(1)\n\t" \ + /* args1-8 */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ + "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(72) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+12]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + _argvec[2+12] = (unsigned long)arg12; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(72) \ + /* arg12 */ \ + "lwz 3,48(11)\n\t" \ + "stw 3,68(1)\n\t" \ + /* arg11 */ \ + "lwz 3,44(11)\n\t" \ + "stw 3,64(1)\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,60(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,56(1)\n\t" \ + /* args1-8 */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ + "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(72) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc32_aix5 */ + +/* ------------------------ ppc64-aix5 ------------------------- */ + +#if defined(PLAT_ppc64_aix5) + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* Expand the stack frame, copying enough info that unwinding + still works. Trashes r3. */ + +#define VG_EXPAND_FRAME_BY_trashes_r3(_n_fr) \ + "addi 1,1,-" #_n_fr "\n\t" \ + "ld 3," #_n_fr "(1)\n\t" \ + "std 3,0(1)\n\t" + +#define VG_CONTRACT_FRAME_BY(_n_fr) \ + "addi 1,1," #_n_fr "\n\t" + +/* These CALL_FN_ macros assume that on ppc64-aix5, sizeof(unsigned + long) == 8. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+0]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+1]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+2]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+3]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+4]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+5]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+6]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+7]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+8]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+9]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(128) \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(128) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+10]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(128) \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(128) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+11]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(144) \ + /* arg11 */ \ + "ld 3,88(11)\n\t" \ + "std 3,128(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(144) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+12]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + _argvec[2+12] = (unsigned long)arg12; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(144) \ + /* arg12 */ \ + "ld 3,96(11)\n\t" \ + "std 3,136(1)\n\t" \ + /* arg11 */ \ + "ld 3,88(11)\n\t" \ + "std 3,128(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(144) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc64_aix5 */ + + +/* ------------------------------------------------------------------ */ +/* ARCHITECTURE INDEPENDENT MACROS for CLIENT REQUESTS. */ +/* */ +/* ------------------------------------------------------------------ */ + +/* Some request codes. There are many more of these, but most are not + exposed to end-user view. These are the public ones, all of the + form 0x1000 + small_number. + + Core ones are in the range 0x00000000--0x0000ffff. The non-public + ones start at 0x2000. +*/ + +/* These macros are used by tools -- they must be public, but don't + embed them into other programs. */ +#define VG_USERREQ_TOOL_BASE(a,b) \ + ((unsigned int)(((a)&0xff) << 24 | ((b)&0xff) << 16)) +#define VG_IS_TOOL_USERREQ(a, b, v) \ + (VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000)) + +/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !! + This enum comprises an ABI exported by Valgrind to programs + which use client requests. DO NOT CHANGE THE ORDER OF THESE + ENTRIES, NOR DELETE ANY -- add new ones at the end. */ +typedef + enum { VG_USERREQ__RUNNING_ON_VALGRIND = 0x1001, + VG_USERREQ__DISCARD_TRANSLATIONS = 0x1002, + + /* These allow any function to be called from the simulated + CPU but run on the real CPU. Nb: the first arg passed to + the function is always the ThreadId of the running + thread! So CLIENT_CALL0 actually requires a 1 arg + function, etc. */ + VG_USERREQ__CLIENT_CALL0 = 0x1101, + VG_USERREQ__CLIENT_CALL1 = 0x1102, + VG_USERREQ__CLIENT_CALL2 = 0x1103, + VG_USERREQ__CLIENT_CALL3 = 0x1104, + + /* Can be useful in regression testing suites -- eg. can + send Valgrind's output to /dev/null and still count + errors. */ + VG_USERREQ__COUNT_ERRORS = 0x1201, + + /* These are useful and can be interpreted by any tool that + tracks malloc() et al, by using vg_replace_malloc.c. */ + VG_USERREQ__MALLOCLIKE_BLOCK = 0x1301, + VG_USERREQ__FREELIKE_BLOCK = 0x1302, + /* Memory pool support. */ + VG_USERREQ__CREATE_MEMPOOL = 0x1303, + VG_USERREQ__DESTROY_MEMPOOL = 0x1304, + VG_USERREQ__MEMPOOL_ALLOC = 0x1305, + VG_USERREQ__MEMPOOL_FREE = 0x1306, + VG_USERREQ__MEMPOOL_TRIM = 0x1307, + VG_USERREQ__MOVE_MEMPOOL = 0x1308, + VG_USERREQ__MEMPOOL_CHANGE = 0x1309, + VG_USERREQ__MEMPOOL_EXISTS = 0x130a, + + /* Allow printfs to valgrind log. */ + VG_USERREQ__PRINTF = 0x1401, + VG_USERREQ__PRINTF_BACKTRACE = 0x1402, + + /* Stack support. */ + VG_USERREQ__STACK_REGISTER = 0x1501, + VG_USERREQ__STACK_DEREGISTER = 0x1502, + VG_USERREQ__STACK_CHANGE = 0x1503 + } Vg_ClientRequest; + +#if !defined(__GNUC__) +# define __extension__ /* */ +#endif + +/* Returns the number of Valgrinds this code is running under. That + is, 0 if running natively, 1 if running under Valgrind, 2 if + running under Valgrind which is running under another Valgrind, + etc. */ +#define RUNNING_ON_VALGRIND __extension__ \ + ({unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* if not */, \ + VG_USERREQ__RUNNING_ON_VALGRIND, \ + 0, 0, 0, 0, 0); \ + _qzz_res; \ + }) + + +/* Discard translation of code in the range [_qzz_addr .. _qzz_addr + + _qzz_len - 1]. Useful if you are debugging a JITter or some such, + since it provides a way to make sure valgrind will retranslate the + invalidated area. Returns no value. */ +#define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__DISCARD_TRANSLATIONS, \ + _qzz_addr, _qzz_len, 0, 0, 0); \ + } + + +/* These requests are for getting Valgrind itself to print something. + Possibly with a backtrace. This is a really ugly hack. */ + +#if defined(NVALGRIND) + +# define VALGRIND_PRINTF(...) +# define VALGRIND_PRINTF_BACKTRACE(...) + +#else /* NVALGRIND */ + +/* Modern GCC will optimize the static routine out if unused, + and unused attribute will shut down warnings about it. */ +static int VALGRIND_PRINTF(const char *format, ...) + __attribute__((format(__printf__, 1, 2), __unused__)); +static int +VALGRIND_PRINTF(const char *format, ...) +{ + unsigned long _qzz_res; + va_list vargs; + va_start(vargs, format); + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, VG_USERREQ__PRINTF, + (unsigned long)format, (unsigned long)vargs, + 0, 0, 0); + va_end(vargs); + return (int)_qzz_res; +} + +static int VALGRIND_PRINTF_BACKTRACE(const char *format, ...) + __attribute__((format(__printf__, 1, 2), __unused__)); +static int +VALGRIND_PRINTF_BACKTRACE(const char *format, ...) +{ + unsigned long _qzz_res; + va_list vargs; + va_start(vargs, format); + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, VG_USERREQ__PRINTF_BACKTRACE, + (unsigned long)format, (unsigned long)vargs, + 0, 0, 0); + va_end(vargs); + return (int)_qzz_res; +} + +#endif /* NVALGRIND */ + + +/* These requests allow control to move from the simulated CPU to the + real CPU, calling an arbitary function. + + Note that the current ThreadId is inserted as the first argument. + So this call: + + VALGRIND_NON_SIMD_CALL2(f, arg1, arg2) + + requires f to have this signature: + + Word f(Word tid, Word arg1, Word arg2) + + where "Word" is a word-sized type. + + Note that these client requests are not entirely reliable. For example, + if you call a function with them that subsequently calls printf(), + there's a high chance Valgrind will crash. Generally, your prospects of + these working are made higher if the called function does not refer to + any global variables, and does not refer to any libc or other functions + (printf et al). Any kind of entanglement with libc or dynamic linking is + likely to have a bad outcome, for tricky reasons which we've grappled + with a lot in the past. +*/ +#define VALGRIND_NON_SIMD_CALL0(_qyy_fn) \ + __extension__ \ + ({unsigned long _qyy_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ + VG_USERREQ__CLIENT_CALL0, \ + _qyy_fn, \ + 0, 0, 0, 0); \ + _qyy_res; \ + }) + +#define VALGRIND_NON_SIMD_CALL1(_qyy_fn, _qyy_arg1) \ + __extension__ \ + ({unsigned long _qyy_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ + VG_USERREQ__CLIENT_CALL1, \ + _qyy_fn, \ + _qyy_arg1, 0, 0, 0); \ + _qyy_res; \ + }) + +#define VALGRIND_NON_SIMD_CALL2(_qyy_fn, _qyy_arg1, _qyy_arg2) \ + __extension__ \ + ({unsigned long _qyy_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ + VG_USERREQ__CLIENT_CALL2, \ + _qyy_fn, \ + _qyy_arg1, _qyy_arg2, 0, 0); \ + _qyy_res; \ + }) + +#define VALGRIND_NON_SIMD_CALL3(_qyy_fn, _qyy_arg1, _qyy_arg2, _qyy_arg3) \ + __extension__ \ + ({unsigned long _qyy_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ + VG_USERREQ__CLIENT_CALL3, \ + _qyy_fn, \ + _qyy_arg1, _qyy_arg2, \ + _qyy_arg3, 0); \ + _qyy_res; \ + }) + + +/* Counts the number of errors that have been recorded by a tool. Nb: + the tool must record the errors with VG_(maybe_record_error)() or + VG_(unique_error)() for them to be counted. */ +#define VALGRIND_COUNT_ERRORS \ + __extension__ \ + ({unsigned int _qyy_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ + VG_USERREQ__COUNT_ERRORS, \ + 0, 0, 0, 0, 0); \ + _qyy_res; \ + }) + +/* Mark a block of memory as having been allocated by a malloc()-like + function. `addr' is the start of the usable block (ie. after any + redzone) `rzB' is redzone size if the allocator can apply redzones; + use '0' if not. Adding redzones makes it more likely Valgrind will spot + block overruns. `is_zeroed' indicates if the memory is zeroed, as it is + for calloc(). Put it immediately after the point where a block is + allocated. + + If you're using Memcheck: If you're allocating memory via superblocks, + and then handing out small chunks of each superblock, if you don't have + redzones on your small blocks, it's worth marking the superblock with + VALGRIND_MAKE_MEM_NOACCESS when it's created, so that block overruns are + detected. But if you can put redzones on, it's probably better to not do + this, so that messages for small overruns are described in terms of the + small block rather than the superblock (but if you have a big overrun + that skips over a redzone, you could miss an error this way). See + memcheck/tests/custom_alloc.c for an example. + + WARNING: if your allocator uses malloc() or 'new' to allocate + superblocks, rather than mmap() or brk(), this will not work properly -- + you'll likely get assertion failures during leak detection. This is + because Valgrind doesn't like seeing overlapping heap blocks. Sorry. + + Nb: block must be freed via a free()-like function specified + with VALGRIND_FREELIKE_BLOCK or mismatch errors will occur. */ +#define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MALLOCLIKE_BLOCK, \ + addr, sizeB, rzB, is_zeroed, 0); \ + } + +/* Mark a block of memory as having been freed by a free()-like function. + `rzB' is redzone size; it must match that given to + VALGRIND_MALLOCLIKE_BLOCK. Memory not freed will be detected by the leak + checker. Put it immediately after the point where the block is freed. */ +#define VALGRIND_FREELIKE_BLOCK(addr, rzB) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__FREELIKE_BLOCK, \ + addr, rzB, 0, 0, 0); \ + } + +/* Create a memory pool. */ +#define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__CREATE_MEMPOOL, \ + pool, rzB, is_zeroed, 0, 0); \ + } + +/* Destroy a memory pool. */ +#define VALGRIND_DESTROY_MEMPOOL(pool) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__DESTROY_MEMPOOL, \ + pool, 0, 0, 0, 0); \ + } + +/* Associate a piece of memory with a memory pool. */ +#define VALGRIND_MEMPOOL_ALLOC(pool, addr, size) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MEMPOOL_ALLOC, \ + pool, addr, size, 0, 0); \ + } + +/* Disassociate a piece of memory from a memory pool. */ +#define VALGRIND_MEMPOOL_FREE(pool, addr) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MEMPOOL_FREE, \ + pool, addr, 0, 0, 0); \ + } + +/* Disassociate any pieces outside a particular range. */ +#define VALGRIND_MEMPOOL_TRIM(pool, addr, size) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MEMPOOL_TRIM, \ + pool, addr, size, 0, 0); \ + } + +/* Resize and/or move a piece associated with a memory pool. */ +#define VALGRIND_MOVE_MEMPOOL(poolA, poolB) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MOVE_MEMPOOL, \ + poolA, poolB, 0, 0, 0); \ + } + +/* Resize and/or move a piece associated with a memory pool. */ +#define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MEMPOOL_CHANGE, \ + pool, addrA, addrB, size, 0); \ + } + +/* Return 1 if a mempool exists, else 0. */ +#define VALGRIND_MEMPOOL_EXISTS(pool) \ + ({unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MEMPOOL_EXISTS, \ + pool, 0, 0, 0, 0); \ + _qzz_res; \ + }) + +/* Mark a piece of memory as being a stack. Returns a stack id. */ +#define VALGRIND_STACK_REGISTER(start, end) \ + ({unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__STACK_REGISTER, \ + start, end, 0, 0, 0); \ + _qzz_res; \ + }) + +/* Unmark the piece of memory associated with a stack id as being a + stack. */ +#define VALGRIND_STACK_DEREGISTER(id) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__STACK_DEREGISTER, \ + id, 0, 0, 0, 0); \ + } + +/* Change the start and end address of the stack id. */ +#define VALGRIND_STACK_CHANGE(id, start, end) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__STACK_CHANGE, \ + id, start, end, 0, 0); \ + } + + +#undef PLAT_x86_linux +#undef PLAT_amd64_linux +#undef PLAT_ppc32_linux +#undef PLAT_ppc64_linux +#undef PLAT_ppc32_aix5 +#undef PLAT_ppc64_aix5 + +#endif /* __VALGRIND_H */ diff --git a/src/thirdparty/gperftools-2.0/src/thread_cache.cc b/src/thirdparty/gperftools-2.0/src/thread_cache.cc new file mode 100644 index 000000000..d6dead39c --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/thread_cache.cc @@ -0,0 +1,503 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Ken Ashcraft + +#include +#include "thread_cache.h" +#include +#include // for memcpy +#include // for max, min +#include "base/commandlineflags.h" // for SpinLockHolder +#include "base/spinlock.h" // for SpinLockHolder +#include "central_freelist.h" // for CentralFreeListPadded +#include "maybe_threads.h" + +using std::min; +using std::max; + +DEFINE_int64(tcmalloc_max_total_thread_cache_bytes, + EnvToInt64("TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES", + kDefaultOverallThreadCacheSize), + "Bound on the total amount of bytes allocated to " + "thread caches. This bound is not strict, so it is possible " + "for the cache to go over this bound in certain circumstances. " + "Maximum value of this flag is capped to 1 GB."); + +namespace tcmalloc { + +static bool phinited = false; + +volatile size_t ThreadCache::per_thread_cache_size_ = kMaxThreadCacheSize; +size_t ThreadCache::overall_thread_cache_size_ = kDefaultOverallThreadCacheSize; +ssize_t ThreadCache::unclaimed_cache_space_ = kDefaultOverallThreadCacheSize; +PageHeapAllocator threadcache_allocator; +ThreadCache* ThreadCache::thread_heaps_ = NULL; +int ThreadCache::thread_heap_count_ = 0; +ThreadCache* ThreadCache::next_memory_steal_ = NULL; +#ifdef HAVE_TLS +__thread ThreadCache* ThreadCache::threadlocal_heap_ +# ifdef HAVE___ATTRIBUTE__ + __attribute__ ((tls_model ("initial-exec"))) +# endif + ; +#endif +bool ThreadCache::tsd_inited_ = false; +pthread_key_t ThreadCache::heap_key_; + +#if defined(HAVE_TLS) +bool kernel_supports_tls = false; // be conservative +# if defined(_WIN32) // windows has supported TLS since winnt, I think. + void CheckIfKernelSupportsTLS() { + kernel_supports_tls = true; + } +# elif !HAVE_DECL_UNAME // if too old for uname, probably too old for TLS + void CheckIfKernelSupportsTLS() { + kernel_supports_tls = false; + } +# else +# include // DECL_UNAME checked for too + void CheckIfKernelSupportsTLS() { + struct utsname buf; + if (uname(&buf) < 0) { // should be impossible + Log(kLog, __FILE__, __LINE__, + "uname failed assuming no TLS support (errno)", errno); + kernel_supports_tls = false; + } else if (strcasecmp(buf.sysname, "linux") == 0) { + // The linux case: the first kernel to support TLS was 2.6.0 + if (buf.release[0] < '2' && buf.release[1] == '.') // 0.x or 1.x + kernel_supports_tls = false; + else if (buf.release[0] == '2' && buf.release[1] == '.' && + buf.release[2] >= '0' && buf.release[2] < '6' && + buf.release[3] == '.') // 2.0 - 2.5 + kernel_supports_tls = false; + else + kernel_supports_tls = true; + } else if (strcasecmp(buf.sysname, "CYGWIN_NT-6.1-WOW64") == 0) { + // In my testing, this version of cygwin, at least, would hang + // when using TLS. + kernel_supports_tls = false; + } else { // some other kernel, we'll be optimisitic + kernel_supports_tls = true; + } + // TODO(csilvers): VLOG(1) the tls status once we support RAW_VLOG + } +# endif // HAVE_DECL_UNAME +#endif // HAVE_TLS + +void ThreadCache::Init(pthread_t tid) { + size_ = 0; + + max_size_ = 0; + IncreaseCacheLimitLocked(); + if (max_size_ == 0) { + // There isn't enough memory to go around. Just give the minimum to + // this thread. + max_size_ = kMinThreadCacheSize; + + // Take unclaimed_cache_space_ negative. + unclaimed_cache_space_ -= kMinThreadCacheSize; + ASSERT(unclaimed_cache_space_ < 0); + } + + next_ = NULL; + prev_ = NULL; + tid_ = tid; + in_setspecific_ = false; + for (size_t cl = 0; cl < kNumClasses; ++cl) { + list_[cl].Init(); + } + + uint32_t sampler_seed; + memcpy(&sampler_seed, &tid, sizeof(sampler_seed)); + sampler_.Init(sampler_seed); +} + +void ThreadCache::Cleanup() { + // Put unused memory back into central cache + for (int cl = 0; cl < kNumClasses; ++cl) { + if (list_[cl].length() > 0) { + ReleaseToCentralCache(&list_[cl], cl, list_[cl].length()); + } + } +} + +// Remove some objects of class "cl" from central cache and add to thread heap. +// On success, return the first object for immediate use; otherwise return NULL. +void* ThreadCache::FetchFromCentralCache(size_t cl, size_t byte_size) { + FreeList* list = &list_[cl]; + ASSERT(list->empty()); + const int batch_size = Static::sizemap()->num_objects_to_move(cl); + + const int num_to_move = min(list->max_length(), batch_size); + void *start, *end; + int fetch_count = Static::central_cache()[cl].RemoveRange( + &start, &end, num_to_move); + + ASSERT((start == NULL) == (fetch_count == 0)); + if (--fetch_count >= 0) { + size_ += byte_size * fetch_count; + list->PushRange(fetch_count, SLL_Next(start), end); + } + + // Increase max length slowly up to batch_size. After that, + // increase by batch_size in one shot so that the length is a + // multiple of batch_size. + if (list->max_length() < batch_size) { + list->set_max_length(list->max_length() + 1); + } else { + // Don't let the list get too long. In 32 bit builds, the length + // is represented by a 16 bit int, so we need to watch out for + // integer overflow. + int new_length = min(list->max_length() + batch_size, + kMaxDynamicFreeListLength); + // The list's max_length must always be a multiple of batch_size, + // and kMaxDynamicFreeListLength is not necessarily a multiple + // of batch_size. + new_length -= new_length % batch_size; + ASSERT(new_length % batch_size == 0); + list->set_max_length(new_length); + } + return start; +} + +void ThreadCache::ListTooLong(FreeList* list, size_t cl) { + const int batch_size = Static::sizemap()->num_objects_to_move(cl); + ReleaseToCentralCache(list, cl, batch_size); + + // If the list is too long, we need to transfer some number of + // objects to the central cache. Ideally, we would transfer + // num_objects_to_move, so the code below tries to make max_length + // converge on num_objects_to_move. + + if (list->max_length() < batch_size) { + // Slow start the max_length so we don't overreserve. + list->set_max_length(list->max_length() + 1); + } else if (list->max_length() > batch_size) { + // If we consistently go over max_length, shrink max_length. If we don't + // shrink it, some amount of memory will always stay in this freelist. + list->set_length_overages(list->length_overages() + 1); + if (list->length_overages() > kMaxOverages) { + ASSERT(list->max_length() > batch_size); + list->set_max_length(list->max_length() - batch_size); + list->set_length_overages(0); + } + } +} + +// Remove some objects of class "cl" from thread heap and add to central cache +void ThreadCache::ReleaseToCentralCache(FreeList* src, size_t cl, int N) { + ASSERT(src == &list_[cl]); + if (N > src->length()) N = src->length(); + size_t delta_bytes = N * Static::sizemap()->ByteSizeForClass(cl); + + // We return prepackaged chains of the correct size to the central cache. + // TODO: Use the same format internally in the thread caches? + int batch_size = Static::sizemap()->num_objects_to_move(cl); + while (N > batch_size) { + void *tail, *head; + src->PopRange(batch_size, &head, &tail); + Static::central_cache()[cl].InsertRange(head, tail, batch_size); + N -= batch_size; + } + void *tail, *head; + src->PopRange(N, &head, &tail); + Static::central_cache()[cl].InsertRange(head, tail, N); + size_ -= delta_bytes; +} + +// Release idle memory to the central cache +void ThreadCache::Scavenge() { + // If the low-water mark for the free list is L, it means we would + // not have had to allocate anything from the central cache even if + // we had reduced the free list size by L. We aim to get closer to + // that situation by dropping L/2 nodes from the free list. This + // may not release much memory, but if so we will call scavenge again + // pretty soon and the low-water marks will be high on that call. + //int64 start = CycleClock::Now(); + for (int cl = 0; cl < kNumClasses; cl++) { + FreeList* list = &list_[cl]; + const int lowmark = list->lowwatermark(); + if (lowmark > 0) { + const int drop = (lowmark > 1) ? lowmark/2 : 1; + ReleaseToCentralCache(list, cl, drop); + + // Shrink the max length if it isn't used. Only shrink down to + // batch_size -- if the thread was active enough to get the max_length + // above batch_size, it will likely be that active again. If + // max_length shinks below batch_size, the thread will have to + // go through the slow-start behavior again. The slow-start is useful + // mainly for threads that stay relatively idle for their entire + // lifetime. + const int batch_size = Static::sizemap()->num_objects_to_move(cl); + if (list->max_length() > batch_size) { + list->set_max_length( + max(list->max_length() - batch_size, batch_size)); + } + } + list->clear_lowwatermark(); + } + + IncreaseCacheLimit(); +} + +void ThreadCache::IncreaseCacheLimit() { + SpinLockHolder h(Static::pageheap_lock()); + IncreaseCacheLimitLocked(); +} + +void ThreadCache::IncreaseCacheLimitLocked() { + if (unclaimed_cache_space_ > 0) { + // Possibly make unclaimed_cache_space_ negative. + unclaimed_cache_space_ -= kStealAmount; + max_size_ += kStealAmount; + return; + } + // Don't hold pageheap_lock too long. Try to steal from 10 other + // threads before giving up. The i < 10 condition also prevents an + // infinite loop in case none of the existing thread heaps are + // suitable places to steal from. + for (int i = 0; i < 10; + ++i, next_memory_steal_ = next_memory_steal_->next_) { + // Reached the end of the linked list. Start at the beginning. + if (next_memory_steal_ == NULL) { + ASSERT(thread_heaps_ != NULL); + next_memory_steal_ = thread_heaps_; + } + if (next_memory_steal_ == this || + next_memory_steal_->max_size_ <= kMinThreadCacheSize) { + continue; + } + next_memory_steal_->max_size_ -= kStealAmount; + max_size_ += kStealAmount; + + next_memory_steal_ = next_memory_steal_->next_; + return; + } +} + +int ThreadCache::GetSamplePeriod() { + return sampler_.GetSamplePeriod(); +} + +void ThreadCache::InitModule() { + SpinLockHolder h(Static::pageheap_lock()); + if (!phinited) { + Static::InitStaticVars(); + threadcache_allocator.Init(); + phinited = 1; + } +} + +void ThreadCache::InitTSD() { + ASSERT(!tsd_inited_); + perftools_pthread_key_create(&heap_key_, DestroyThreadCache); + tsd_inited_ = true; + +#ifdef PTHREADS_CRASHES_IF_RUN_TOO_EARLY + // We may have used a fake pthread_t for the main thread. Fix it. + pthread_t zero; + memset(&zero, 0, sizeof(zero)); + SpinLockHolder h(Static::pageheap_lock()); + for (ThreadCache* h = thread_heaps_; h != NULL; h = h->next_) { + if (h->tid_ == zero) { + h->tid_ = pthread_self(); + } + } +#endif +} + +ThreadCache* ThreadCache::CreateCacheIfNecessary() { + // Initialize per-thread data if necessary + ThreadCache* heap = NULL; + { + SpinLockHolder h(Static::pageheap_lock()); + // On some old glibc's, and on freebsd's libc (as of freebsd 8.1), + // calling pthread routines (even pthread_self) too early could + // cause a segfault. Since we can call pthreads quite early, we + // have to protect against that in such situations by making a + // 'fake' pthread. This is not ideal since it doesn't work well + // when linking tcmalloc statically with apps that create threads + // before main, so we only do it if we have to. +#ifdef PTHREADS_CRASHES_IF_RUN_TOO_EARLY + pthread_t me; + if (!tsd_inited_) { + memset(&me, 0, sizeof(me)); + } else { + me = pthread_self(); + } +#else + const pthread_t me = pthread_self(); +#endif + + // This may be a recursive malloc call from pthread_setspecific() + // In that case, the heap for this thread has already been created + // and added to the linked list. So we search for that first. + for (ThreadCache* h = thread_heaps_; h != NULL; h = h->next_) { + if (h->tid_ == me) { + heap = h; + break; + } + } + + if (heap == NULL) heap = NewHeap(me); + } + + // We call pthread_setspecific() outside the lock because it may + // call malloc() recursively. We check for the recursive call using + // the "in_setspecific_" flag so that we can avoid calling + // pthread_setspecific() if we are already inside pthread_setspecific(). + if (!heap->in_setspecific_ && tsd_inited_) { + heap->in_setspecific_ = true; + perftools_pthread_setspecific(heap_key_, heap); +#ifdef HAVE_TLS + // Also keep a copy in __thread for faster retrieval + threadlocal_heap_ = heap; +#endif + heap->in_setspecific_ = false; + } + return heap; +} + +ThreadCache* ThreadCache::NewHeap(pthread_t tid) { + // Create the heap and add it to the linked list + ThreadCache *heap = threadcache_allocator.New(); + heap->Init(tid); + heap->next_ = thread_heaps_; + heap->prev_ = NULL; + if (thread_heaps_ != NULL) { + thread_heaps_->prev_ = heap; + } else { + // This is the only thread heap at the momment. + ASSERT(next_memory_steal_ == NULL); + next_memory_steal_ = heap; + } + thread_heaps_ = heap; + thread_heap_count_++; + return heap; +} + +void ThreadCache::BecomeIdle() { + if (!tsd_inited_) return; // No caches yet + ThreadCache* heap = GetThreadHeap(); + if (heap == NULL) return; // No thread cache to remove + if (heap->in_setspecific_) return; // Do not disturb the active caller + + heap->in_setspecific_ = true; + perftools_pthread_setspecific(heap_key_, NULL); +#ifdef HAVE_TLS + // Also update the copy in __thread + threadlocal_heap_ = NULL; +#endif + heap->in_setspecific_ = false; + if (GetThreadHeap() == heap) { + // Somehow heap got reinstated by a recursive call to malloc + // from pthread_setspecific. We give up in this case. + return; + } + + // We can now get rid of the heap + DeleteCache(heap); +} + +void ThreadCache::DestroyThreadCache(void* ptr) { + // Note that "ptr" cannot be NULL since pthread promises not + // to invoke the destructor on NULL values, but for safety, + // we check anyway. + if (ptr == NULL) return; +#ifdef HAVE_TLS + // Prevent fast path of GetThreadHeap() from returning heap. + threadlocal_heap_ = NULL; +#endif + DeleteCache(reinterpret_cast(ptr)); +} + +void ThreadCache::DeleteCache(ThreadCache* heap) { + // Remove all memory from heap + heap->Cleanup(); + + // Remove from linked list + SpinLockHolder h(Static::pageheap_lock()); + if (heap->next_ != NULL) heap->next_->prev_ = heap->prev_; + if (heap->prev_ != NULL) heap->prev_->next_ = heap->next_; + if (thread_heaps_ == heap) thread_heaps_ = heap->next_; + thread_heap_count_--; + + if (next_memory_steal_ == heap) next_memory_steal_ = heap->next_; + if (next_memory_steal_ == NULL) next_memory_steal_ = thread_heaps_; + unclaimed_cache_space_ += heap->max_size_; + + threadcache_allocator.Delete(heap); +} + +void ThreadCache::RecomputePerThreadCacheSize() { + // Divide available space across threads + int n = thread_heap_count_ > 0 ? thread_heap_count_ : 1; + size_t space = overall_thread_cache_size_ / n; + + // Limit to allowed range + if (space < kMinThreadCacheSize) space = kMinThreadCacheSize; + if (space > kMaxThreadCacheSize) space = kMaxThreadCacheSize; + + double ratio = space / max(1, per_thread_cache_size_); + size_t claimed = 0; + for (ThreadCache* h = thread_heaps_; h != NULL; h = h->next_) { + // Increasing the total cache size should not circumvent the + // slow-start growth of max_size_. + if (ratio < 1.0) { + h->max_size_ = static_cast(h->max_size_ * ratio); + } + claimed += h->max_size_; + } + unclaimed_cache_space_ = overall_thread_cache_size_ - claimed; + per_thread_cache_size_ = space; +} + +void ThreadCache::GetThreadStats(uint64_t* total_bytes, uint64_t* class_count) { + for (ThreadCache* h = thread_heaps_; h != NULL; h = h->next_) { + *total_bytes += h->Size(); + if (class_count) { + for (int cl = 0; cl < kNumClasses; ++cl) { + class_count[cl] += h->freelist_length(cl); + } + } + } +} + +void ThreadCache::set_overall_thread_cache_size(size_t new_size) { + // Clip the value to a reasonable range + if (new_size < kMinThreadCacheSize) new_size = kMinThreadCacheSize; + if (new_size > (1<<30)) new_size = (1<<30); // Limit to 1GB + overall_thread_cache_size_ = new_size; + + RecomputePerThreadCacheSize(); +} + +} // namespace tcmalloc diff --git a/src/thirdparty/gperftools-2.0/src/thread_cache.h b/src/thirdparty/gperftools-2.0/src/thread_cache.h new file mode 100644 index 000000000..1d0413b2a --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/thread_cache.h @@ -0,0 +1,403 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// --- +// Author: Sanjay Ghemawat + +#ifndef TCMALLOC_THREAD_CACHE_H_ +#define TCMALLOC_THREAD_CACHE_H_ + +#include +#ifdef HAVE_PTHREAD +#include // for pthread_t, pthread_key_t +#endif +#include // for size_t, NULL +#ifdef HAVE_STDINT_H +#include // for uint32_t, uint64_t +#endif +#include // for ssize_t +#include "common.h" +#include "linked_list.h" +#include "maybe_threads.h" +#include "page_heap_allocator.h" +#include "sampler.h" +#include "static_vars.h" + +#include "common.h" // for SizeMap, kMaxSize, etc +#include "internal_logging.h" // for ASSERT, etc +#include "linked_list.h" // for SLL_Pop, SLL_PopRange, etc +#include "page_heap_allocator.h" // for PageHeapAllocator +#include "sampler.h" // for Sampler +#include "static_vars.h" // for Static + +namespace tcmalloc { + +// Even if we have support for thread-local storage in the compiler +// and linker, the OS may not support it. We need to check that at +// runtime. Right now, we have to keep a manual set of "bad" OSes. +#if defined(HAVE_TLS) +extern bool kernel_supports_tls; // defined in thread_cache.cc +void CheckIfKernelSupportsTLS(); +inline bool KernelSupportsTLS() { + return kernel_supports_tls; +} +#endif // HAVE_TLS + +//------------------------------------------------------------------- +// Data kept per thread +//------------------------------------------------------------------- + +class ThreadCache { + public: + // All ThreadCache objects are kept in a linked list (for stats collection) + ThreadCache* next_; + ThreadCache* prev_; + + void Init(pthread_t tid); + void Cleanup(); + + // Accessors (mostly just for printing stats) + int freelist_length(size_t cl) const { return list_[cl].length(); } + + // Total byte size in cache + size_t Size() const { return size_; } + + // Allocate an object of the given size and class. The size given + // must be the same as the size of the class in the size map. + void* Allocate(size_t size, size_t cl); + void Deallocate(void* ptr, size_t size_class); + + void Scavenge(); + + int GetSamplePeriod(); + + // Record allocation of "k" bytes. Return true iff allocation + // should be sampled + bool SampleAllocation(size_t k); + + static void InitModule(); + static void InitTSD(); + static ThreadCache* GetThreadHeap(); + static ThreadCache* GetCache(); + static ThreadCache* GetCacheIfPresent(); + static ThreadCache* CreateCacheIfNecessary(); + static void BecomeIdle(); + + // Return the number of thread heaps in use. + static inline int HeapsInUse(); + + // Writes to total_bytes the total number of bytes used by all thread heaps. + // class_count must be an array of size kNumClasses. Writes the number of + // items on the corresponding freelist. class_count may be NULL. + // The storage of both parameters must be zero intialized. + // REQUIRES: Static::pageheap_lock is held. + static void GetThreadStats(uint64_t* total_bytes, uint64_t* class_count); + + // Sets the total thread cache size to new_size, recomputing the + // individual thread cache sizes as necessary. + // REQUIRES: Static::pageheap lock is held. + static void set_overall_thread_cache_size(size_t new_size); + static size_t overall_thread_cache_size() { + return overall_thread_cache_size_; + } + + private: + class FreeList { + private: + void* list_; // Linked list of nodes + +#ifdef _LP64 + // On 64-bit hardware, manipulating 16-bit values may be slightly slow. + uint32_t length_; // Current length. + uint32_t lowater_; // Low water mark for list length. + uint32_t max_length_; // Dynamic max list length based on usage. + // Tracks the number of times a deallocation has caused + // length_ > max_length_. After the kMaxOverages'th time, max_length_ + // shrinks and length_overages_ is reset to zero. + uint32_t length_overages_; +#else + // If we aren't using 64-bit pointers then pack these into less space. + uint16_t length_; + uint16_t lowater_; + uint16_t max_length_; + uint16_t length_overages_; +#endif + + public: + void Init() { + list_ = NULL; + length_ = 0; + lowater_ = 0; + max_length_ = 1; + length_overages_ = 0; + } + + // Return current length of list + size_t length() const { + return length_; + } + + // Return the maximum length of the list. + size_t max_length() const { + return max_length_; + } + + // Set the maximum length of the list. If 'new_max' > length(), the + // client is responsible for removing objects from the list. + void set_max_length(size_t new_max) { + max_length_ = new_max; + } + + // Return the number of times that length() has gone over max_length(). + size_t length_overages() const { + return length_overages_; + } + + void set_length_overages(size_t new_count) { + length_overages_ = new_count; + } + + // Is list empty? + bool empty() const { + return list_ == NULL; + } + + // Low-water mark management + int lowwatermark() const { return lowater_; } + void clear_lowwatermark() { lowater_ = length_; } + + void Push(void* ptr) { + SLL_Push(&list_, ptr); + length_++; + } + + void* Pop() { + ASSERT(list_ != NULL); + length_--; + if (length_ < lowater_) lowater_ = length_; + return SLL_Pop(&list_); + } + + void* Next() { + return SLL_Next(&list_); + } + + void PushRange(int N, void *start, void *end) { + SLL_PushRange(&list_, start, end); + length_ += N; + } + + void PopRange(int N, void **start, void **end) { + SLL_PopRange(&list_, N, start, end); + ASSERT(length_ >= N); + length_ -= N; + if (length_ < lowater_) lowater_ = length_; + } + }; + + // Gets and returns an object from the central cache, and, if possible, + // also adds some objects of that size class to this thread cache. + void* FetchFromCentralCache(size_t cl, size_t byte_size); + + // Releases some number of items from src. Adjusts the list's max_length + // to eventually converge on num_objects_to_move(cl). + void ListTooLong(FreeList* src, size_t cl); + + // Releases N items from this thread cache. + void ReleaseToCentralCache(FreeList* src, size_t cl, int N); + + // Increase max_size_ by reducing unclaimed_cache_space_ or by + // reducing the max_size_ of some other thread. In both cases, + // the delta is kStealAmount. + void IncreaseCacheLimit(); + // Same as above but requires Static::pageheap_lock() is held. + void IncreaseCacheLimitLocked(); + + // If TLS is available, we also store a copy of the per-thread object + // in a __thread variable since __thread variables are faster to read + // than pthread_getspecific(). We still need pthread_setspecific() + // because __thread variables provide no way to run cleanup code when + // a thread is destroyed. + // We also give a hint to the compiler to use the "initial exec" TLS + // model. This is faster than the default TLS model, at the cost that + // you cannot dlopen this library. (To see the difference, look at + // the CPU use of __tls_get_addr with and without this attribute.) + // Since we don't really use dlopen in google code -- and using dlopen + // on a malloc replacement is asking for trouble in any case -- that's + // a good tradeoff for us. +#ifdef HAVE_TLS + static __thread ThreadCache* threadlocal_heap_ +# ifdef HAVE___ATTRIBUTE__ + __attribute__ ((tls_model ("initial-exec"))) +# endif + ; +#endif + + // Thread-specific key. Initialization here is somewhat tricky + // because some Linux startup code invokes malloc() before it + // is in a good enough state to handle pthread_keycreate(). + // Therefore, we use TSD keys only after tsd_inited is set to true. + // Until then, we use a slow path to get the heap object. + static bool tsd_inited_; + static pthread_key_t heap_key_; + + // Linked list of heap objects. Protected by Static::pageheap_lock. + static ThreadCache* thread_heaps_; + static int thread_heap_count_; + + // A pointer to one of the objects in thread_heaps_. Represents + // the next ThreadCache from which a thread over its max_size_ should + // steal memory limit. Round-robin through all of the objects in + // thread_heaps_. Protected by Static::pageheap_lock. + static ThreadCache* next_memory_steal_; + + // Overall thread cache size. Protected by Static::pageheap_lock. + static size_t overall_thread_cache_size_; + + // Global per-thread cache size. Writes are protected by + // Static::pageheap_lock. Reads are done without any locking, which should be + // fine as long as size_t can be written atomically and we don't place + // invariants between this variable and other pieces of state. + static volatile size_t per_thread_cache_size_; + + // Represents overall_thread_cache_size_ minus the sum of max_size_ + // across all ThreadCaches. Protected by Static::pageheap_lock. + static ssize_t unclaimed_cache_space_; + + // This class is laid out with the most frequently used fields + // first so that hot elements are placed on the same cache line. + + size_t size_; // Combined size of data + size_t max_size_; // size_ > max_size_ --> Scavenge() + + // We sample allocations, biased by the size of the allocation + Sampler sampler_; // A sampler + + FreeList list_[kNumClasses]; // Array indexed by size-class + + pthread_t tid_; // Which thread owns it + bool in_setspecific_; // In call to pthread_setspecific? + + // Allocate a new heap. REQUIRES: Static::pageheap_lock is held. + static ThreadCache* NewHeap(pthread_t tid); + + // Use only as pthread thread-specific destructor function. + static void DestroyThreadCache(void* ptr); + + static void DeleteCache(ThreadCache* heap); + static void RecomputePerThreadCacheSize(); + + // Ensure that this class is cacheline-aligned. This is critical for + // performance, as false sharing would negate many of the benefits + // of a per-thread cache. +} CACHELINE_ALIGNED; + +// Allocator for thread heaps +// This is logically part of the ThreadCache class, but MSVC, at +// least, does not like using ThreadCache as a template argument +// before the class is fully defined. So we put it outside the class. +extern PageHeapAllocator threadcache_allocator; + +inline int ThreadCache::HeapsInUse() { + return threadcache_allocator.inuse(); +} + +inline bool ThreadCache::SampleAllocation(size_t k) { + return sampler_.SampleAllocation(k); +} + +inline void* ThreadCache::Allocate(size_t size, size_t cl) { + ASSERT(size <= kMaxSize); + ASSERT(size == Static::sizemap()->ByteSizeForClass(cl)); + + FreeList* list = &list_[cl]; + if (list->empty()) { + return FetchFromCentralCache(cl, size); + } + size_ -= size; + return list->Pop(); +} + +inline void ThreadCache::Deallocate(void* ptr, size_t cl) { + FreeList* list = &list_[cl]; + size_ += Static::sizemap()->ByteSizeForClass(cl); + ssize_t size_headroom = max_size_ - size_ - 1; + + // This catches back-to-back frees of allocs in the same size + // class. A more comprehensive (and expensive) test would be to walk + // the entire freelist. But this might be enough to find some bugs. + ASSERT(ptr != list->Next()); + + list->Push(ptr); + ssize_t list_headroom = + static_cast(list->max_length()) - list->length(); + + // There are two relatively uncommon things that require further work. + // In the common case we're done, and in that case we need a single branch + // because of the bitwise-or trick that follows. + if ((list_headroom | size_headroom) < 0) { + if (list_headroom < 0) { + ListTooLong(list, cl); + } + if (size_ >= max_size_) Scavenge(); + } +} + +inline ThreadCache* ThreadCache::GetThreadHeap() { +#ifdef HAVE_TLS + // __thread is faster, but only when the kernel supports it + if (KernelSupportsTLS()) + return threadlocal_heap_; +#endif + return reinterpret_cast( + perftools_pthread_getspecific(heap_key_)); +} + +inline ThreadCache* ThreadCache::GetCache() { + ThreadCache* ptr = NULL; + if (!tsd_inited_) { + InitModule(); + } else { + ptr = GetThreadHeap(); + } + if (ptr == NULL) ptr = CreateCacheIfNecessary(); + return ptr; +} + +// In deletion paths, we do not try to create a thread-cache. This is +// because we may be in the thread destruction code and may have +// already cleaned up the cache for this thread. +inline ThreadCache* ThreadCache::GetCacheIfPresent() { + if (!tsd_inited_) return NULL; + return GetThreadHeap(); +} + +} // namespace tcmalloc + +#endif // TCMALLOC_THREAD_CACHE_H_ diff --git a/src/thirdparty/gperftools-2.0/src/windows/TODO b/src/thirdparty/gperftools-2.0/src/windows/TODO new file mode 100644 index 000000000..708ec237a --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/TODO @@ -0,0 +1,86 @@ +* Get heap-profile-table.cc using DeleteMatchingFiles +* Get heap-profile-table.cc using FillProcSelfMaps, DumpProcSelfMaps +* Play around with ExperimentalGetStackTrace +* Support the windows-level memory-allocation functions? See + /home/build/googleclient/earth/client/tools/memorytracking/client/memorytrace/src/memorytrace.cpp + /home/build/googleclient/total_recall/common/sitestep/* + http://www.internals.com/articles/apispy/apispy.htm + http://www.wheaty.net/APISPY32.zip +* Verify /proc/xxx/maps: + http://www.geocities.com/wah_java_dotnet/procmap/index.html +* Figure out how to edit the executable IAT so tcmalloc.dll is loaded first +* Use QueryPerformanceCounter instead of GetTickCount() (also for sparsehash) + +---- +More info on windows-level memory-allocation functions: + C runtime malloc + LocalAlloc + GlobalAlloc + HeapAlloc + VirtualAlloc + mmap stuff + +malloc, LocalAlloc and GlobalAlloc call HeapAlloc, which calls +VirtualAlloc when needed, which calls VirtualAllocEx (the __sbrk equiv?) + +siggi sez: If you want to do a generic job, you probably need to +preserve the semantics of all of these Win32 calls: + Heap32First + Heap32ListFirst + Heap32ListNext + Heap32Next + HeapAlloc + HeapCompact + HeapCreate + HeapCreateTagsW + HeapDestroy + HeapExtend + HeapFree + HeapLock + HeapQueryInformation + HeapQueryTagW + HeapReAlloc + HeapSetInformation + HeapSize + HeapSummary + HeapUnlock + HeapUsage + HeapValidate + HeapWalk + +kernel32.dll export functions and nt.dll export functions: + http://www.shorthike.com/svn/trunk/tools_win32/dm/lib/kernel32.def + http://undocumented.ntinternals.net/ + +You can edit the executable IAT to have the patching DLL be the +first one loaded. + +Most complete way to intercept system calls is patch the functions +(not the IAT). + +Microsoft has somee built-in routines for heap-checking: + http://support.microsoft.com/kb/268343 + +---- +Itimer replacement: + http://msdn2.microsoft.com/en-us/library/ms712713.aspx + +---- +Changes I've had to make to the project file: + +0) When creating the project file, click on "no autogenerated files" + +--- For each project: +1) Alt-F7 -> General -> [pulldown "all configurations" ] -> Output Directory -> $(SolutionDir)$(ConfigurationName) +2) Alt-F7 -> General -> [pulldown "all configurations" ] -> Intermediate Directory -> $(ConfigurationName) + +--- For each .cc file: +1) Alt-F7 -> C/C++ -> General -> [pulldown "all configurations"] -> Additional Include Directives --> src/windows + src/ +2) Alt-F7 -> C/C++ -> Code Generation -> Runtime Library -> Multi-threaded, debug/release, DLL or not + +--- For DLL: +3) Alt-F7 -> Linker -> Input -> [pulldown "all configurations" ] -> Module Definition File -> src\windows\vc7and8.def +--- For binaries depending on a DLL: +3) Right-click on project -> Project Dependencies -> [add dll] +--- For static binaries (not depending on a DLL) +3) Alt-F7 -> C/C++ -> Command Line -> [pulldown "all configurations"] -> /D PERFTOOLS_DLL_DECL= diff --git a/src/thirdparty/gperftools-2.0/src/windows/addr2line-pdb.c b/src/thirdparty/gperftools-2.0/src/windows/addr2line-pdb.c new file mode 100644 index 000000000..5c65a0357 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/addr2line-pdb.c @@ -0,0 +1,163 @@ +/* Copyright (c) 2008, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: David Vitek + * + * Dump function addresses using Microsoft debug symbols. This works + * on PDB files. Note that this program will download symbols to + * c:\websymbols without asking. + */ + +#define WIN32_LEAN_AND_MEAN +#define _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_DEPRECATE + +#include +#include + +#include +#include + +#define SEARCH_CAP (1024*1024) +#define WEBSYM "SRV*c:\\websymbols*http://msdl.microsoft.com/download/symbols" + +void usage() { + fprintf(stderr, "usage: " + "addr2line-pdb [-f|--functions] [-C|--demangle] [-e filename]\n"); + fprintf(stderr, "(Then list the hex addresses on stdin, one per line)\n"); +} + +int main(int argc, char *argv[]) { + DWORD error; + HANDLE process; + ULONG64 module_base; + int i; + char* search; + char buf[256]; /* Enough to hold one hex address, I trust! */ + int rv = 0; + /* We may add SYMOPT_UNDNAME if --demangle is specified: */ + DWORD symopts = SYMOPT_DEFERRED_LOADS | SYMOPT_DEBUG | SYMOPT_LOAD_LINES; + char* filename = "a.out"; /* The default if -e isn't specified */ + int print_function_name = 0; /* Set to 1 if -f is specified */ + + for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "--functions") == 0 || strcmp(argv[i], "-f") == 0) { + print_function_name = 1; + } else if (strcmp(argv[i], "--demangle") == 0 || + strcmp(argv[i], "-C") == 0) { + symopts |= SYMOPT_UNDNAME; + } else if (strcmp(argv[i], "-e") == 0) { + if (i + 1 >= argc) { + fprintf(stderr, "FATAL ERROR: -e must be followed by a filename\n"); + return 1; + } + filename = argv[i+1]; + i++; /* to skip over filename too */ + } else if (strcmp(argv[i], "--help") == 0) { + usage(); + exit(0); + } else { + usage(); + exit(1); + } + } + + process = GetCurrentProcess(); + + if (!SymInitialize(process, NULL, FALSE)) { + error = GetLastError(); + fprintf(stderr, "SymInitialize returned error : %d\n", error); + return 1; + } + + search = malloc(SEARCH_CAP); + if (SymGetSearchPath(process, search, SEARCH_CAP)) { + if (strlen(search) + sizeof(";" WEBSYM) > SEARCH_CAP) { + fprintf(stderr, "Search path too long\n"); + SymCleanup(process); + return 1; + } + strcat(search, ";" WEBSYM); + } else { + error = GetLastError(); + fprintf(stderr, "SymGetSearchPath returned error : %d\n", error); + rv = 1; /* An error, but not a fatal one */ + strcpy(search, WEBSYM); /* Use a default value */ + } + if (!SymSetSearchPath(process, search)) { + error = GetLastError(); + fprintf(stderr, "SymSetSearchPath returned error : %d\n", error); + rv = 1; /* An error, but not a fatal one */ + } + + SymSetOptions(symopts); + module_base = SymLoadModuleEx(process, NULL, filename, NULL, 0, 0, NULL, 0); + if (!module_base) { + /* SymLoadModuleEx failed */ + error = GetLastError(); + fprintf(stderr, "SymLoadModuleEx returned error : %d for %s\n", + error, filename); + SymCleanup(process); + return 1; + } + + buf[sizeof(buf)-1] = '\0'; /* Just to be safe */ + while (fgets(buf, sizeof(buf)-1, stdin)) { + /* GNU addr2line seems to just do a strtol and ignore any + * weird characters it gets, so we will too. + */ + unsigned __int64 addr = _strtoui64(buf, NULL, 16); + ULONG64 buffer[(sizeof(SYMBOL_INFO) + + MAX_SYM_NAME*sizeof(TCHAR) + + sizeof(ULONG64) - 1) + / sizeof(ULONG64)]; + PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer; + IMAGEHLP_LINE64 line; + DWORD dummy; + pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO); + pSymbol->MaxNameLen = MAX_SYM_NAME; + if (print_function_name) { + if (SymFromAddr(process, (DWORD64)addr, NULL, pSymbol)) { + printf("%s\n", pSymbol->Name); + } else { + printf("??\n"); + } + } + line.SizeOfStruct = sizeof(IMAGEHLP_LINE64); + if (SymGetLineFromAddr64(process, (DWORD64)addr, &dummy, &line)) { + printf("%s:%d\n", line.FileName, (int)line.LineNumber); + } else { + printf("??:0\n"); + } + } + SymUnloadModule64(process, module_base); + SymCleanup(process); + return rv; +} diff --git a/src/thirdparty/gperftools-2.0/src/windows/auto_testing_hook.h b/src/thirdparty/gperftools-2.0/src/windows/auto_testing_hook.h new file mode 100644 index 000000000..5a0479773 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/auto_testing_hook.h @@ -0,0 +1,155 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Utility for using SideStep with unit tests. + +#ifndef CEEE_TESTING_SIDESTEP_AUTO_TESTING_HOOK_H_ +#define CEEE_TESTING_SIDESTEP_AUTO_TESTING_HOOK_H_ + +#include "base/basictypes.h" +#include "base/logging.h" +#include "preamble_patcher.h" + +#define SIDESTEP_CHK(x) CHECK(x) +#define SIDESTEP_EXPECT_TRUE(x) SIDESTEP_CHK(x) + +namespace sidestep { + +// Same trick as common/scope_cleanup.h ScopeGuardImplBase +class AutoTestingHookBase { + public: + virtual ~AutoTestingHookBase() {} +}; + +// This is the typedef you normally use for the class, e.g. +// +// AutoTestingHook hook = MakeTestingHook(TargetFunc, HookTargetFunc); +// +// The 'hook' variable will then be destroyed when it goes out of scope. +// +// NOTE: You must not hold this type as a member of another class. Its +// destructor will not get called. +typedef const AutoTestingHookBase& AutoTestingHook; + +// This is the class you must use when holding a hook as a member of another +// class, e.g. +// +// public: +// AutoTestingHookHolder holder_; +// MyClass() : my_hook_holder(MakeTestingHookHolder(Target, Hook)) {} +class AutoTestingHookHolder { + public: + explicit AutoTestingHookHolder(AutoTestingHookBase* hook) : hook_(hook) {} + ~AutoTestingHookHolder() { delete hook_; } + private: + AutoTestingHookHolder() {} // disallow + AutoTestingHookBase* hook_; +}; + +// This class helps patch a function, then unpatch it when the object exits +// scope, and also maintains the pointer to the original function stub. +// +// To enable use of the class without having to explicitly provide the +// type of the function pointers (and instead only providing it +// implicitly) we use the same trick as ScopeGuard (see +// common/scope_cleanup.h) uses, so to create a hook you use the MakeHook +// function rather than a constructor. +// +// NOTE: This function is only safe for e.g. unit tests and _not_ for +// production code. See PreamblePatcher class for details. +template +class AutoTestingHookImpl : public AutoTestingHookBase { + public: + static AutoTestingHookImpl MakeTestingHook(T target_function, + T replacement_function, + bool do_it) { + return AutoTestingHookImpl(target_function, replacement_function, do_it); + } + + static AutoTestingHookImpl* MakeTestingHookHolder(T target_function, + T replacement_function, + bool do_it) { + return new AutoTestingHookImpl(target_function, + replacement_function, do_it); + } + + ~AutoTestingHookImpl() { + if (did_it_) { + SIDESTEP_CHK(SIDESTEP_SUCCESS == PreamblePatcher::Unpatch( + (void*)target_function_, (void*)replacement_function_, + (void*)original_function_)); + } + } + + // Returns a pointer to the original function. To use this method you will + // have to explicitly create an AutoTestingHookImpl of the specific + // function pointer type (i.e. not use the AutoTestingHook typedef). + T original_function() { + return original_function_; + } + + private: + AutoTestingHookImpl(T target_function, T replacement_function, bool do_it) + : target_function_(target_function), + original_function_(NULL), + replacement_function_(replacement_function), + did_it_(do_it) { + if (do_it) { + SIDESTEP_CHK(SIDESTEP_SUCCESS == PreamblePatcher::Patch(target_function, + replacement_function, + &original_function_)); + } + } + + T target_function_; // always valid + T original_function_; // always valid + T replacement_function_; // always valid + bool did_it_; // Remember if we did it or not... +}; + +template +inline AutoTestingHookImpl MakeTestingHook(T target, + T replacement, + bool do_it) { + return AutoTestingHookImpl::MakeTestingHook(target, replacement, do_it); +} + +template +inline AutoTestingHookImpl MakeTestingHook(T target, T replacement) { + return AutoTestingHookImpl::MakeTestingHook(target, replacement, true); +} + +template +inline AutoTestingHookImpl* MakeTestingHookHolder(T target, T replacement) { + return AutoTestingHookImpl::MakeTestingHookHolder(target, replacement, + true); +} + +}; // namespace sidestep + +#endif // CEEE_TESTING_SIDESTEP_AUTO_TESTING_HOOK_H_ diff --git a/src/thirdparty/gperftools-2.0/src/windows/config.h b/src/thirdparty/gperftools-2.0/src/windows/config.h new file mode 100644 index 000000000..9d61884e2 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/config.h @@ -0,0 +1,306 @@ +/* A manual version of config.h fit for windows machines. */ + +/* Sometimes we accidentally #include this config.h instead of the one + in .. -- this is particularly true for msys/mingw, which uses the + unix config.h but also runs code in the windows directory. + */ +#ifdef __MINGW32__ +#include "../config.h" +#define GOOGLE_PERFTOOLS_WINDOWS_CONFIG_H_ +#endif + +#ifndef GOOGLE_PERFTOOLS_WINDOWS_CONFIG_H_ +#define GOOGLE_PERFTOOLS_WINDOWS_CONFIG_H_ + +/* define this if you are linking tcmalloc statically and overriding the + * default allocators. + * For instructions on how to use this mode, see + * http://groups.google.com/group/google-perftools/browse_thread/thread/41cd3710af85e57b + */ +#undef WIN32_OVERRIDE_ALLOCATORS + +/* Define to 1 if your libc has a snprintf implementation */ +#undef HAVE_SNPRINTF + +/* Define to 1 if compiler supports __builtin_stack_pointer */ +#undef HAVE_BUILTIN_STACK_POINTER + +/* Define to 1 if you have the header file. */ +#undef HAVE_CONFLICT_SIGNAL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_CYGWIN_SIGNAL_H + +/* Define to 1 if you have the declaration of `cfree', and to 0 if you don't. + */ +#undef HAVE_DECL_CFREE + +/* Define to 1 if you have the declaration of `memalign', and to 0 if you + don't. */ +#undef HAVE_DECL_MEMALIGN + +/* Define to 1 if you have the declaration of `posix_memalign', and to 0 if + you don't. */ +#undef HAVE_DECL_POSIX_MEMALIGN + +/* Define to 1 if you have the declaration of `pvalloc', and to 0 if you + don't. */ +#undef HAVE_DECL_PVALLOC + +/* Define to 1 if you have the declaration of `uname', and to 0 if you don't. + */ +#undef HAVE_DECL_UNAME + +/* Define to 1 if you have the declaration of `valloc', and to 0 if you don't. + */ +#undef HAVE_DECL_VALLOC + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if the system has the type `Elf32_Versym'. */ +#undef HAVE_ELF32_VERSYM + +/* Define to 1 if you have the header file. */ +#undef HAVE_EXECINFO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FEATURES_H + +/* Define to 1 if you have the `geteuid' function. */ +#undef HAVE_GETEUID + +/* Define to 1 if you have the `getpagesize' function. */ +#define HAVE_GETPAGESIZE 1 /* we define it in windows/port.cc */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_GLOB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_GRP_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBUNWIND_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LINUX_PTRACE_H + +/* Define to 1 if you have the header file. */ +#define HAVE_MALLOC_H 1 + +/* Define to 1 if you have the header file. */ +#undef HAVE_MALLOC_MALLOC_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* define if the compiler implements namespaces */ +#define HAVE_NAMESPACES 1 + +/* Define to 1 if you have the header file. */ +#undef HAVE_POLL_H + +/* define if libc has program_invocation_name */ +#undef HAVE_PROGRAM_INVOCATION_NAME + +/* Define if you have POSIX threads libraries and header files. */ +#undef HAVE_PTHREAD + +/* Define to 1 if you have the header file. */ +#undef HAVE_PWD_H + +/* Define to 1 if you have the `sbrk' function. */ +#undef HAVE_SBRK + +/* Define to 1 if you have the header file. */ +#undef HAVE_SCHED_H + +/* 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 header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if the system has the type `struct mallinfo'. */ +#undef HAVE_STRUCT_MALLINFO + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_CDEFS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_MALLOC_H + +/* 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_PRCTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_RESOURCE_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* 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_SYSCALL_H + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* is broken on redhat 7 */ +#undef HAVE_SYS_UCONTEXT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_WAIT_H + +/* Define to 1 if compiler supports __thread */ +#define HAVE_TLS 1 + +/* Define to 1 if you have the header file. */ +#undef HAVE_UCONTEXT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNWIND_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_VALGRIND_H + +/* define if your compiler has __attribute__ */ +#undef HAVE___ATTRIBUTE__ + +/* Define to 1 if compiler supports __environ */ +#undef HAVE___ENVIRON + +/* Define to 1 if the system has the type `__int64'. */ +#define HAVE___INT64 1 + +/* prefix where we look for installed files */ +#undef INSTALL_PREFIX + +/* Define to 1 if int32_t is equivalent to intptr_t */ +#undef INT32_EQUALS_INTPTR + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 'volatile' if __malloc_hook is declared volatile */ +#undef MALLOC_HOOK_MAYBE_VOLATILE + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#define PACKAGE "gperftools" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "opensource@google.com" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "gperftools" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "gperftools 2.0" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "gperftools" + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "2.0" + +/* How to access the PC from a struct ucontext */ +#undef PC_FROM_UCONTEXT + +/* Always the empty-string on non-windows systems. On windows, should be + "__declspec(dllexport)". This way, when we compile the dll, we export our + functions/classes. It's safe to define this here because config.h is only + used internally, to compile the DLL, and every DLL source file #includes + "config.h" before anything else. */ +#ifndef PERFTOOLS_DLL_DECL +# define PERFTOOLS_IS_A_DLL 1 /* not set if you're statically linking */ +# define PERFTOOLS_DLL_DECL __declspec(dllexport) +# define PERFTOOLS_DLL_DECL_FOR_UNITTESTS __declspec(dllimport) +#endif + +/* printf format code for printing a size_t and ssize_t */ +#define PRIdS "Id" + +/* printf format code for printing a size_t and ssize_t */ +#define PRIuS "Iu" + +/* printf format code for printing a size_t and ssize_t */ +#define PRIxS "Ix" + +/* Mark the systems where we know it's bad if pthreads runs too + early before main (before threads are initialized, presumably). */ +#ifdef __FreeBSD__ +#define PTHREADS_CRASHES_IF_RUN_TOO_EARLY 1 +#endif + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +#undef PTHREAD_CREATE_JOINABLE + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* the namespace where STL code like vector<> is defined */ +#define STL_NAMESPACE std + +/* Version number of package */ +#undef VERSION + +/* C99 says: define this to get the PRI... macros from stdint.h */ +#ifndef __STDC_FORMAT_MACROS +# define __STDC_FORMAT_MACROS 1 +#endif + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +// --------------------------------------------------------------------- +// Extra stuff not found in config.h.in + +// This must be defined before the windows.h is included. We need at +// least 0x0400 for mutex.h to have access to TryLock, and at least +// 0x0501 for patch_functions.cc to have access to GetModuleHandleEx. +// (This latter is an optimization we could take out if need be.) +#ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0501 +#endif + +// We want to make sure not to ever try to #include heap-checker.h +#define NO_HEAP_CHECK 1 + +// TODO(csilvers): include windows/port.h in every relevant source file instead? +#include "windows/port.h" + +#endif /* GOOGLE_PERFTOOLS_WINDOWS_CONFIG_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/windows/get_mangled_names.cc b/src/thirdparty/gperftools-2.0/src/windows/get_mangled_names.cc new file mode 100644 index 000000000..e8a96dfff --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/get_mangled_names.cc @@ -0,0 +1,64 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// --- +// Author: Craig Silverstein (opensource@google.com) + +// When you are porting perftools to a new compiler or architecture +// (win64 vs win32) for instance, you'll need to change the mangled +// symbol names for operator new and friends at the top of +// patch_functions.cc. This file helps you do that. +// +// It does this by defining these functions with the proper signature. +// All you need to do is compile this file and the run dumpbin on it. +// (See http://msdn.microsoft.com/en-us/library/5x49w699.aspx for more +// on dumpbin). To do this in MSVC, use the MSVC commandline shell: +// http://msdn.microsoft.com/en-us/library/ms235639(VS.80).aspx) +// +// The run: +// cl /c get_mangled_names.cc +// dumpbin /symbols get_mangled_names.obj +// +// It will print out the mangled (and associated unmangled) names of +// the 8 symbols you need to put at the top of patch_functions.cc + +#include // for size_t +#include // for nothrow_t + +static char m; // some dummy memory so new doesn't return NULL. + +void* operator new(size_t size) { return &m; } +void operator delete(void* p) throw() { } +void* operator new[](size_t size) { return &m; } +void operator delete[](void* p) throw() { } + +void* operator new(size_t size, const std::nothrow_t&) throw() { return &m; } +void operator delete(void* p, const std::nothrow_t&) throw() { } +void* operator new[](size_t size, const std::nothrow_t&) throw() { return &m; } +void operator delete[](void* p, const std::nothrow_t&) throw() { } diff --git a/src/thirdparty/gperftools-2.0/src/windows/google/tcmalloc.h b/src/thirdparty/gperftools-2.0/src/windows/google/tcmalloc.h new file mode 100644 index 000000000..c7db63194 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/google/tcmalloc.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2003, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* The code has moved to gperftools/. Use that include-directory for + * new code. + */ +#include diff --git a/src/thirdparty/gperftools-2.0/src/windows/gperftools/tcmalloc.h.in b/src/thirdparty/gperftools-2.0/src/windows/gperftools/tcmalloc.h.in new file mode 100644 index 000000000..d09ec9536 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/gperftools/tcmalloc.h.in @@ -0,0 +1,123 @@ +/* Copyright (c) 2003, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Sanjay Ghemawat + * .h.in file by Craig Silverstein + */ + +#ifndef TCMALLOC_TCMALLOC_H_ +#define TCMALLOC_TCMALLOC_H_ + +#include // for size_t +#ifdef HAVE_SYS_CDEFS_H +#include // where glibc defines __THROW +#endif + +// __THROW is defined in glibc systems. It means, counter-intuitively, +// "This function will never throw an exception." It's an optional +// optimization tool, but we may need to use it to match glibc prototypes. +#ifndef __THROW /* I guess we're not on a glibc system */ +# define __THROW /* __THROW is just an optimization, so ok to make it "" */ +#endif + +// Define the version number so folks can check against it +#define TC_VERSION_MAJOR @TC_VERSION_MAJOR@ +#define TC_VERSION_MINOR @TC_VERSION_MINOR@ +#define TC_VERSION_PATCH "@TC_VERSION_PATCH@" +#define TC_VERSION_STRING "gperftools @TC_VERSION_MAJOR@.@TC_VERSION_MINOR@@TC_VERSION_PATCH@" + +#include // for struct mallinfo, if it's defined + +// Annoying stuff for windows -- makes sure clients can import these functions +#ifndef PERFTOOLS_DLL_DECL +# ifdef _WIN32 +# define PERFTOOLS_DLL_DECL __declspec(dllimport) +# else +# define PERFTOOLS_DLL_DECL +# endif +#endif + +#ifdef __cplusplus +namespace std { +struct nothrow_t; +} + +extern "C" { +#endif + // Returns a human-readable version string. If major, minor, + // and/or patch are not NULL, they are set to the major version, + // minor version, and patch-code (a string, usually ""). + PERFTOOLS_DLL_DECL const char* tc_version(int* major, int* minor, + const char** patch) __THROW; + + PERFTOOLS_DLL_DECL void* tc_malloc(size_t size) __THROW; + PERFTOOLS_DLL_DECL void tc_free(void* ptr) __THROW; + PERFTOOLS_DLL_DECL void* tc_realloc(void* ptr, size_t size) __THROW; + PERFTOOLS_DLL_DECL void* tc_calloc(size_t nmemb, size_t size) __THROW; + PERFTOOLS_DLL_DECL void tc_cfree(void* ptr) __THROW; + + PERFTOOLS_DLL_DECL void* tc_memalign(size_t __alignment, + size_t __size) __THROW; + PERFTOOLS_DLL_DECL int tc_posix_memalign(void** ptr, + size_t align, size_t size) __THROW; + PERFTOOLS_DLL_DECL void* tc_valloc(size_t __size) __THROW; + PERFTOOLS_DLL_DECL void* tc_pvalloc(size_t __size) __THROW; + + PERFTOOLS_DLL_DECL void tc_malloc_stats(void) __THROW; + PERFTOOLS_DLL_DECL int tc_mallopt(int cmd, int value) __THROW; +#if 0 + PERFTOOLS_DLL_DECL struct mallinfo tc_mallinfo(void) __THROW; +#endif + + // This is an alias for MallocExtension::instance()->GetAllocatedSize(). + // It is equivalent to + // OS X: malloc_size() + // glibc: malloc_usable_size() + // Windows: _msize() + PERFTOOLS_DLL_DECL size_t tc_malloc_size(void* ptr) __THROW; + +#ifdef __cplusplus + PERFTOOLS_DLL_DECL int tc_set_new_mode(int flag) __THROW; + PERFTOOLS_DLL_DECL void* tc_new(size_t size); + PERFTOOLS_DLL_DECL void* tc_new_nothrow(size_t size, + const std::nothrow_t&) __THROW; + PERFTOOLS_DLL_DECL void tc_delete(void* p) __THROW; + PERFTOOLS_DLL_DECL void tc_delete_nothrow(void* p, + const std::nothrow_t&) __THROW; + PERFTOOLS_DLL_DECL void* tc_newarray(size_t size); + PERFTOOLS_DLL_DECL void* tc_newarray_nothrow(size_t size, + const std::nothrow_t&) __THROW; + PERFTOOLS_DLL_DECL void tc_deletearray(void* p) __THROW; + PERFTOOLS_DLL_DECL void tc_deletearray_nothrow(void* p, + const std::nothrow_t&) __THROW; +} +#endif + +#endif // #ifndef TCMALLOC_TCMALLOC_H_ diff --git a/src/thirdparty/gperftools-2.0/src/windows/ia32_modrm_map.cc b/src/thirdparty/gperftools-2.0/src/windows/ia32_modrm_map.cc new file mode 100644 index 000000000..f1f190628 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/ia32_modrm_map.cc @@ -0,0 +1,121 @@ +/* Copyright (c) 2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Joi Sigurdsson + * + * Table of relevant information about how to decode the ModR/M byte. + * Based on information in the IA-32 Intel® Architecture + * Software Developer’s Manual Volume 2: Instruction Set Reference. + */ + +#include "mini_disassembler.h" +#include "mini_disassembler_types.h" + +namespace sidestep { + +const ModrmEntry MiniDisassembler::s_ia16_modrm_map_[] = { +// mod == 00 + /* r/m == 000 */ { false, false, OS_ZERO }, + /* r/m == 001 */ { false, false, OS_ZERO }, + /* r/m == 010 */ { false, false, OS_ZERO }, + /* r/m == 011 */ { false, false, OS_ZERO }, + /* r/m == 100 */ { false, false, OS_ZERO }, + /* r/m == 101 */ { false, false, OS_ZERO }, + /* r/m == 110 */ { true, false, OS_WORD }, + /* r/m == 111 */ { false, false, OS_ZERO }, +// mod == 01 + /* r/m == 000 */ { true, false, OS_BYTE }, + /* r/m == 001 */ { true, false, OS_BYTE }, + /* r/m == 010 */ { true, false, OS_BYTE }, + /* r/m == 011 */ { true, false, OS_BYTE }, + /* r/m == 100 */ { true, false, OS_BYTE }, + /* r/m == 101 */ { true, false, OS_BYTE }, + /* r/m == 110 */ { true, false, OS_BYTE }, + /* r/m == 111 */ { true, false, OS_BYTE }, +// mod == 10 + /* r/m == 000 */ { true, false, OS_WORD }, + /* r/m == 001 */ { true, false, OS_WORD }, + /* r/m == 010 */ { true, false, OS_WORD }, + /* r/m == 011 */ { true, false, OS_WORD }, + /* r/m == 100 */ { true, false, OS_WORD }, + /* r/m == 101 */ { true, false, OS_WORD }, + /* r/m == 110 */ { true, false, OS_WORD }, + /* r/m == 111 */ { true, false, OS_WORD }, +// mod == 11 + /* r/m == 000 */ { false, false, OS_ZERO }, + /* r/m == 001 */ { false, false, OS_ZERO }, + /* r/m == 010 */ { false, false, OS_ZERO }, + /* r/m == 011 */ { false, false, OS_ZERO }, + /* r/m == 100 */ { false, false, OS_ZERO }, + /* r/m == 101 */ { false, false, OS_ZERO }, + /* r/m == 110 */ { false, false, OS_ZERO }, + /* r/m == 111 */ { false, false, OS_ZERO } +}; + +const ModrmEntry MiniDisassembler::s_ia32_modrm_map_[] = { +// mod == 00 + /* r/m == 000 */ { false, false, OS_ZERO }, + /* r/m == 001 */ { false, false, OS_ZERO }, + /* r/m == 010 */ { false, false, OS_ZERO }, + /* r/m == 011 */ { false, false, OS_ZERO }, + /* r/m == 100 */ { false, true, OS_ZERO }, + /* r/m == 101 */ { true, false, OS_DOUBLE_WORD }, + /* r/m == 110 */ { false, false, OS_ZERO }, + /* r/m == 111 */ { false, false, OS_ZERO }, +// mod == 01 + /* r/m == 000 */ { true, false, OS_BYTE }, + /* r/m == 001 */ { true, false, OS_BYTE }, + /* r/m == 010 */ { true, false, OS_BYTE }, + /* r/m == 011 */ { true, false, OS_BYTE }, + /* r/m == 100 */ { true, true, OS_BYTE }, + /* r/m == 101 */ { true, false, OS_BYTE }, + /* r/m == 110 */ { true, false, OS_BYTE }, + /* r/m == 111 */ { true, false, OS_BYTE }, +// mod == 10 + /* r/m == 000 */ { true, false, OS_DOUBLE_WORD }, + /* r/m == 001 */ { true, false, OS_DOUBLE_WORD }, + /* r/m == 010 */ { true, false, OS_DOUBLE_WORD }, + /* r/m == 011 */ { true, false, OS_DOUBLE_WORD }, + /* r/m == 100 */ { true, true, OS_DOUBLE_WORD }, + /* r/m == 101 */ { true, false, OS_DOUBLE_WORD }, + /* r/m == 110 */ { true, false, OS_DOUBLE_WORD }, + /* r/m == 111 */ { true, false, OS_DOUBLE_WORD }, +// mod == 11 + /* r/m == 000 */ { false, false, OS_ZERO }, + /* r/m == 001 */ { false, false, OS_ZERO }, + /* r/m == 010 */ { false, false, OS_ZERO }, + /* r/m == 011 */ { false, false, OS_ZERO }, + /* r/m == 100 */ { false, false, OS_ZERO }, + /* r/m == 101 */ { false, false, OS_ZERO }, + /* r/m == 110 */ { false, false, OS_ZERO }, + /* r/m == 111 */ { false, false, OS_ZERO }, +}; + +}; // namespace sidestep diff --git a/src/thirdparty/gperftools-2.0/src/windows/ia32_opcode_map.cc b/src/thirdparty/gperftools-2.0/src/windows/ia32_opcode_map.cc new file mode 100644 index 000000000..ba6a79e3d --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/ia32_opcode_map.cc @@ -0,0 +1,1219 @@ +/* Copyright (c) 2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Joi Sigurdsson + * + * Opcode decoding maps. Based on the IA-32 Intel® Architecture + * Software Developer’s Manual Volume 2: Instruction Set Reference. Idea + * for how to lay out the tables in memory taken from the implementation + * in the Bastard disassembly environment. + */ + +#include "mini_disassembler.h" + +namespace sidestep { + +/* +* This is the first table to be searched; the first field of each +* Opcode in the table is either 0 to indicate you're in the +* right table, or an index to the correct table, in the global +* map g_pentiumOpcodeMap +*/ +const Opcode s_first_opcode_byte[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xE */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF */ { 1, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x10 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x11 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x12 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x13 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x14 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x15 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x16 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x17 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x18 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x19 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1C */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1E */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1F */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x20 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x21 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x22 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x23 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x24 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x25 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x26 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x27 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "daa", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x28 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x29 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2C */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2E */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2F */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "das", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x30 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x31 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x32 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x33 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x34 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x35 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x36 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x37 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "aaa", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x38 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x39 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3C */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3E */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3F */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "aas", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, +#ifdef _M_X64 + /* REX Prefixes in 64-bit mode. */ + /* 0x40 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x41 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x42 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x43 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x44 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x45 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x46 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x47 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x48 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x49 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4A */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4B */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4C */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4D */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4E */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4F */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, +#else + /* 0x40 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x41 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x42 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x43 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x44 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x45 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x46 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x47 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x48 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x49 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4A */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4B */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4C */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4E */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4F */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, +#endif + /* 0x50 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x51 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x52 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x53 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x54 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x55 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x56 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x57 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x58 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x59 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5A */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5B */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5C */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5E */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5F */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x60 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "pushad", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x61 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "popad", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x62 */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_A, AM_NOT_USED, "bound", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x63 */ { 0, IT_GENERIC, AM_E | OT_W, AM_G | OT_W, AM_NOT_USED, "arpl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x64 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x65 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x66 */ { 0, IT_PREFIX_OPERAND, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x67 */ { 0, IT_PREFIX_ADDRESS, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x68 */ { 0, IT_GENERIC, AM_I | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x69 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_I | OT_V, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6A */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_I | OT_B, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6C */ { 0, IT_GENERIC, AM_Y | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "insb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6D */ { 0, IT_GENERIC, AM_Y | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "insd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6E */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_X | OT_B, AM_NOT_USED, "outsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6F */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_X | OT_V, AM_NOT_USED, "outsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x70 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x71 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x72 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x73 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x74 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x75 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x76 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x77 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "ja", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x78 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "js", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x79 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7A */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7B */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7C */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7D */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7E */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7F */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x80 */ { 2, IT_REFERENCE, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x81 */ { 3, IT_REFERENCE, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x82 */ { 4, IT_REFERENCE, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x83 */ { 5, IT_REFERENCE, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x84 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x85 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x86 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x87 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x88 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x89 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8C */ { 0, IT_GENERIC, AM_E | OT_W, AM_S | OT_W, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8D */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_ADDRESS_MODE_M, AM_NOT_USED, "lea", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8E */ { 0, IT_GENERIC, AM_S | OT_W, AM_E | OT_W, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8F */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x90 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "nop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x91 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x92 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x93 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x94 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x95 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x96 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x97 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x98 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cwde", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x99 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cdq", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9A */ { 0, IT_JUMP, AM_A | OT_P, AM_NOT_USED, AM_NOT_USED, "callf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9B */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "wait", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9C */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "pushfd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9D */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "popfd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9E */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sahf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9F */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "lahf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA0 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_O | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA1 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_O | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA2 */ { 0, IT_GENERIC, AM_O | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA3 */ { 0, IT_GENERIC, AM_O | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA4 */ { 0, IT_GENERIC, AM_X | OT_B, AM_Y | OT_B, AM_NOT_USED, "movsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA5 */ { 0, IT_GENERIC, AM_X | OT_V, AM_Y | OT_V, AM_NOT_USED, "movsd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA6 */ { 0, IT_GENERIC, AM_X | OT_B, AM_Y | OT_B, AM_NOT_USED, "cmpsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA7 */ { 0, IT_GENERIC, AM_X | OT_V, AM_Y | OT_V, AM_NOT_USED, "cmpsd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA8 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA9 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xAA */ { 0, IT_GENERIC, AM_Y | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "stosb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xAB */ { 0, IT_GENERIC, AM_Y | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "stosd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xAC */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_X| OT_B, AM_NOT_USED, "lodsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xAD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_X| OT_V, AM_NOT_USED, "lodsd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xAE */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_Y | OT_B, AM_NOT_USED, "scasb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xAF */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_Y | OT_V, AM_NOT_USED, "scasd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB0 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB1 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB2 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB3 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB4 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB5 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB6 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB7 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, +#ifdef _M_X64 + /* 0xB8 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V | IOS_64, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB9 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V | IOS_64, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBA */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V | IOS_64, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBB */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V | IOS_64, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBC */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V | IOS_64, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V | IOS_64, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBE */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V | IOS_64, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBF */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V | IOS_64, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, +#else + /* 0xB8 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB9 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBA */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBB */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBC */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBE */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBF */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, +#endif + /* 0xC0 */ { 6, IT_REFERENCE, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC1 */ { 7, IT_REFERENCE, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC2 */ { 0, IT_RETURN, AM_I | OT_W, AM_NOT_USED, AM_NOT_USED, "ret", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC3 */ { 0, IT_RETURN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ret", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC4 */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_P, AM_NOT_USED, "les", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC5 */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_P, AM_NOT_USED, "lds", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC8 */ { 0, IT_GENERIC, AM_I | OT_W, AM_I | OT_B, AM_NOT_USED, "enter", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC9 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "leave", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xCA */ { 0, IT_RETURN, AM_I | OT_W, AM_NOT_USED, AM_NOT_USED, "retf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xCB */ { 0, IT_RETURN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "retf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xCC */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "int3", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xCD */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "int", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xCE */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "into", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xCF */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "iret", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD0 */ { 8, IT_REFERENCE, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD1 */ { 9, IT_REFERENCE, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD2 */ { 10, IT_REFERENCE, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD3 */ { 11, IT_REFERENCE, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD4 */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "aam", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD5 */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "aad", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD6 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD7 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "xlat", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + + // The following 8 lines would be references to the FPU tables, but we currently + // do not support the FPU instructions in this disassembler. + + /* 0xD8 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD9 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xDA */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xDB */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xDC */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xDD */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xDE */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xDF */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + + + /* 0xE0 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "loopnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xE1 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "loopz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xE2 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "loop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xE3 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jcxz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xE4 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xE5 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xE6 */ { 0, IT_GENERIC, AM_I | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xE7 */ { 0, IT_GENERIC, AM_I | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xE8 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "call", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xE9 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xEA */ { 0, IT_JUMP, AM_A | OT_P, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xEB */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xEC */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_REGISTER | OT_W, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xED */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_W, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xEE */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_REGISTER | OT_B, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xEF */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_REGISTER | OT_V, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF0 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "lock:", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF2 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "repne:", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF3 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rep:", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF4 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "hlt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF5 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cmc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF6 */ { 12, IT_REFERENCE, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF7 */ { 13, IT_REFERENCE, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF8 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "clc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF9 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "stc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xFA */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cli", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xFB */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sti", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xFC */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cld", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xFD */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "std", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xFE */ { 14, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xFF */ { 15, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_0f[] = { + /* 0x0 */ { 16, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 17, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "lar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "lsl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "clts", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "invd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "wbinvd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ud2", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xE */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x10 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "movups", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "movsd" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "movss" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "movupd" } }, + /* 0x11 */ { 0, IT_GENERIC, AM_W | OT_PS, AM_V | OT_PS, AM_NOT_USED, "movups", true, + /* F2h */ { 0, IT_GENERIC, AM_W | OT_SD, AM_V | OT_SD, AM_NOT_USED, "movsd" }, + /* F3h */ { 0, IT_GENERIC, AM_W | OT_SS, AM_V | OT_SS, AM_NOT_USED, "movss" }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_PD, AM_V | OT_PD, AM_NOT_USED, "movupd" } }, + /* 0x12 */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movlps", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhlps" }, // only one of ... + /* F3h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhlps" }, // ...these two is correct, Intel doesn't specify which + /* 66h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_S, AM_NOT_USED, "movlpd" } }, + /* 0x13 */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movlps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movlpd" } }, + /* 0x14 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_Q, AM_NOT_USED, "unpcklps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_Q, AM_NOT_USED, "unpcklpd" } }, + /* 0x15 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_Q, AM_NOT_USED, "unpckhps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_Q, AM_NOT_USED, "unpckhpd" } }, + /* 0x16 */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movhps", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movlhps" }, // only one of... + /* F3h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movlhps" }, // ...these two is correct, Intel doesn't specify which + /* 66h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movhpd" } }, + /* 0x17 */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhpd" } }, + /* 0x18 */ { 18, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x19 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1A */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1B */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1C */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1D */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1E */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1F */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x20 */ { 0, IT_GENERIC, AM_R | OT_D, AM_C | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x21 */ { 0, IT_GENERIC, AM_R | OT_D, AM_D | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x22 */ { 0, IT_GENERIC, AM_C | OT_D, AM_R | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x23 */ { 0, IT_GENERIC, AM_D | OT_D, AM_R | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x24 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x25 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x26 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x27 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x28 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "movaps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "movapd" } }, + /* 0x29 */ { 0, IT_GENERIC, AM_W | OT_PS, AM_V | OT_PS, AM_NOT_USED, "movaps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_PD, AM_V | OT_PD, AM_NOT_USED, "movapd" } }, + /* 0x2A */ { 0, IT_GENERIC, AM_V | OT_PS, AM_Q | OT_Q, AM_NOT_USED, "cvtpi2ps", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_E | OT_D, AM_NOT_USED, "cvtsi2sd" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_E | OT_D, AM_NOT_USED, "cvtsi2ss" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_Q | OT_DQ, AM_NOT_USED, "cvtpi2pd" } }, + /* 0x2B */ { 0, IT_GENERIC, AM_W | OT_PS, AM_V | OT_PS, AM_NOT_USED, "movntps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_PD, AM_V | OT_PD, AM_NOT_USED, "movntpd" } }, + /* 0x2C */ { 0, IT_GENERIC, AM_Q | OT_Q, AM_W | OT_PS, AM_NOT_USED, "cvttps2pi", true, + /* F2h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SD, AM_NOT_USED, "cvttsd2si" }, + /* F3h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SS, AM_NOT_USED, "cvttss2si" }, + /* 66h */ { 0, IT_GENERIC, AM_Q | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvttpd2pi" } }, + /* 0x2D */ { 0, IT_GENERIC, AM_Q | OT_Q, AM_W | OT_PS, AM_NOT_USED, "cvtps2pi", true, + /* F2h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SD, AM_NOT_USED, "cvtsd2si" }, + /* F3h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SS, AM_NOT_USED, "cvtss2si" }, + /* 66h */ { 0, IT_GENERIC, AM_Q | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvtpd2pi" } }, + /* 0x2E */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "ucomiss", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "ucomisd" } }, + /* 0x2F */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_SS, AM_NOT_USED, "comiss", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "comisd" } }, + /* 0x30 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "wrmsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x31 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rdtsc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x32 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rdmsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x33 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rdpmc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x34 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sysenter", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x35 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sysexit", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x36 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x37 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x38 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x39 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3A */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3B */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3C */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "movnti", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3D */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3E */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3F */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x40 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x41 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x42 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x43 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x44 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x45 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x46 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x47 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmova", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x48 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovs", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x49 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4A */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4C */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4D */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4E */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4F */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x50 */ { 0, IT_GENERIC, AM_E | OT_D, AM_V | OT_PS, AM_NOT_USED, "movmskps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_E | OT_D, AM_V | OT_PD, AM_NOT_USED, "movmskpd" } }, + /* 0x51 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "sqrtps", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "sqrtsd" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "sqrtss" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "sqrtpd" } }, + /* 0x52 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "rsqrtps", true, + /* F2h */ { 0 }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "rsqrtss" }, + /* 66h */ { 0 } }, + /* 0x53 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "rcpps", true, + /* F2h */ { 0 }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "rcpss" }, + /* 66h */ { 0 } }, + /* 0x54 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "andps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "andpd" } }, + /* 0x55 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "andnps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "andnpd" } }, + /* 0x56 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "orps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "orpd" } }, + /* 0x57 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "xorps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "xorpd" } }, + /* 0x58 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "addps", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "addsd" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "addss" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "addpd" } }, + /* 0x59 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "mulps", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "mulsd" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "mulss" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "mulpd" } }, + /* 0x5A */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PS, AM_NOT_USED, "cvtps2pd", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "cvtsd2ss" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "cvtss2sd" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PD, AM_NOT_USED, "cvtpd2ps" } }, + /* 0x5B */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_DQ, AM_NOT_USED, "cvtdq2ps", true, + /* F2h */ { 0 }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PS, AM_NOT_USED, "cvttps2dq" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PS, AM_NOT_USED, "cvtps2dq" } }, + /* 0x5C */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "subps", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "subsd" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "subss" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "subpd" } }, + /* 0x5D */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "minps", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "minsd" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "minss" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "minpd" } }, + /* 0x5E */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "divps", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "divsd" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "divss" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "divpd" } }, + /* 0x5F */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "maxps", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "maxsd" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "maxss" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "maxpd" } }, + /* 0x60 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpcklbw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklbw" } }, + /* 0x61 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpcklwd", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklwd" } }, + /* 0x62 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckldq", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpckldq" } }, + /* 0x63 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "packsswb", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "packsswb" } }, + /* 0x64 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "pcmpgtb", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpgtb" } }, + /* 0x65 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "pcmpgtw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpgtw" } }, + /* 0x66 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "pcmpgtd", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpgtd" } }, + /* 0x67 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "packuswb", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "packuswb" } }, + /* 0x68 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckhbw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "punpckhbw" } }, + /* 0x69 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckhwd", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "punpckhwd" } }, + /* 0x6A */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckhdq", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "punpckhdq" } }, + /* 0x6B */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "packssdw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "packssdw" } }, + /* 0x6C */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "not used without prefix", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklqdq" } }, + /* 0x6D */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "not used without prefix", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklqdq" } }, + /* 0x6E */ { 0, IT_GENERIC, AM_P | OT_D, AM_E | OT_D, AM_NOT_USED, "movd", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_E | OT_D, AM_NOT_USED, "movd" } }, + /* 0x6F */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "movq", true, + /* F2h */ { 0 }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "movdqu" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "movdqa" } }, + /* 0x70 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_I | OT_B, "pshuf", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_I | OT_B, "pshuflw" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_I | OT_B, "pshufhw" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_I | OT_B, "pshufd" } }, + /* 0x71 */ { 19, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x72 */ { 20, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x73 */ { 21, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x74 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pcmpeqb", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpeqb" } }, + /* 0x75 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pcmpeqw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpeqw" } }, + /* 0x76 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pcmpeqd", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpeqd" } }, + /* 0x77 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "emms", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + + // The following six opcodes are escapes into the MMX stuff, which this disassembler does not support. + /* 0x78 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x79 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7A */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7B */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7C */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7D */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + + /* 0x7E */ { 0, IT_GENERIC, AM_E | OT_D, AM_P | OT_D, AM_NOT_USED, "movd", true, + /* F2h */ { 0 }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movq" }, + /* 66h */ { 0, IT_GENERIC, AM_E | OT_D, AM_V | OT_DQ, AM_NOT_USED, "movd" } }, + /* 0x7F */ { 0, IT_GENERIC, AM_Q | OT_Q, AM_P | OT_Q, AM_NOT_USED, "movq", true, + /* F2h */ { 0 }, + /* F3h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_V | OT_DQ, AM_NOT_USED, "movdqu" }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_V | OT_DQ, AM_NOT_USED, "movdqa" } }, + /* 0x80 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x81 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x82 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x83 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x84 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x85 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x86 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x87 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "ja", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x88 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "js", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x89 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8A */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8B */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8C */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8D */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8E */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x8F */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x90 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "seto", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x91 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x92 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x93 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x94 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x95 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x96 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x97 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "seta", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x98 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "sets", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x99 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9A */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9B */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9C */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9D */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9E */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x9F */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA0 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA1 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA2 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cpuid", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "bt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B, "shld", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B | AM_REGISTER, "shld", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA6 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA7 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA8 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xA9 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xAA */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rsm", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xAB */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "bts", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xAC */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B, "shrd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xAD */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B | AM_REGISTER, "shrd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xAE */ { 22, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xAF */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "cmpxchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "cmpxchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB2 */ { 0, IT_GENERIC, AM_M | OT_P, AM_NOT_USED, AM_NOT_USED, "lss", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "btr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB4 */ { 0, IT_GENERIC, AM_M | OT_P, AM_NOT_USED, AM_NOT_USED, "lfs", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB5 */ { 0, IT_GENERIC, AM_M | OT_P, AM_NOT_USED, AM_NOT_USED, "lgs", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB6 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_B, AM_NOT_USED, "movzx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB7 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "movzx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB8 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xB9 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ud1", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBA */ { 23, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBB */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "btc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBC */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "bsf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBD */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "bsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBE */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_B, AM_NOT_USED, "movsx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xBF */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "movsx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "xadd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "xadd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC2 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_I | OT_B, "cmpps", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_I | OT_B, "cmpsd" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_I | OT_B, "cmpss" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_I | OT_B, "cmppd" } }, + /* 0xC3 */ { 0, IT_GENERIC, AM_E | OT_D, AM_G | OT_D, AM_NOT_USED, "movnti", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_E | OT_D, AM_I | OT_B, "pinsrw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_E | OT_D, AM_I | OT_B, "pinsrw" } }, + /* 0xC5 */ { 0, IT_GENERIC, AM_G | OT_D, AM_P | OT_Q, AM_I | OT_B, "pextrw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_G | OT_D, AM_V | OT_DQ, AM_I | OT_B, "pextrw" } }, + /* 0xC6 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_I | OT_B, "shufps", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_I | OT_B, "shufpd" } }, + /* 0xC7 */ { 24, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC8 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xC9 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xCA */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xCB */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xCC */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xCD */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xCE */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xCF */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xD1 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrlw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrlw" } }, + /* 0xD2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrld", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrld" } }, + /* 0xD3 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrlq", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrlq" } }, + /* 0xD4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddq", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddq" } }, + /* 0xD5 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmullw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmullw" } }, + /* 0xD6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "unused without prefix", true, + /* F2h */ { 0, IT_GENERIC, AM_P | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movdq2q" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_Q | OT_Q, AM_NOT_USED, "movq2dq" }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movq" } }, + /* 0xD7 */ { 0, IT_GENERIC, AM_G | OT_D, AM_P | OT_Q, AM_NOT_USED, "pmovmskb", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_G | OT_D, AM_V | OT_DQ, AM_NOT_USED, "pmovmskb" } }, + /* 0xD8 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubusb", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubusb" } }, + /* 0xD9 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubusw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubusw" } }, + /* 0xDA */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pminub", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pminub" } }, + /* 0xDB */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pand", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pand" } }, + /* 0xDC */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddusb", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddusb" } }, + /* 0xDD */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddusw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddusw" } }, + /* 0xDE */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmaxub", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmaxub" } }, + /* 0xDF */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pandn", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pandn" } }, + /* 0xE0 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pavgb", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pavgb" } }, + /* 0xE1 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psraw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrqw" } }, + /* 0xE2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrad", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrad" } }, + /* 0xE3 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pavgw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pavgw" } }, + /* 0xE4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmulhuw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmulhuw" } }, + /* 0xE5 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmulhuw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmulhw" } }, + /* 0xE6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "not used without prefix", true, + /* F2h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvtpd2dq" }, + /* F3h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_DQ, AM_NOT_USED, "cvtdq2pd" }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvttpd2dq" } }, + /* 0xE7 */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movntq", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_V | OT_DQ, AM_NOT_USED, "movntdq" } }, + /* 0xE8 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubsb", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubsb" } }, + /* 0xE9 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubsw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubsw" } }, + /* 0xEA */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pminsw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pminsw" } }, + /* 0xEB */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "por", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "por" } }, + /* 0xEC */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddsb", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddsb" } }, + /* 0xED */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddsw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddsw" } }, + /* 0xEE */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmaxsw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmaxsw" } }, + /* 0xEF */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pxor", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pxor" } }, + /* 0xF0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0xF1 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psllw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psllw" } }, + /* 0xF2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pslld", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pslld" } }, + /* 0xF3 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psllq", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psllq" } }, + /* 0xF4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmuludq", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmuludq" } }, + /* 0xF5 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmaddwd", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmaddwd" } }, + /* 0xF6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psadbw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psadbw" } }, + /* 0xF7 */ { 0, IT_GENERIC, AM_P | OT_PI, AM_Q | OT_PI, AM_NOT_USED, "maskmovq", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "maskmovdqu" } }, + /* 0xF8 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubb", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubb" } }, + /* 0xF9 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubw" } }, + /* 0xFA */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubd", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubd" } }, + /* 0xFB */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubq", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubq" } }, + /* 0xFC */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddb", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddb" } }, + /* 0xFD */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddw" } }, + /* 0xFE */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddd", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddd" } }, + /* 0xFF */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_0f00[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "sldt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "str", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "lldt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "ltr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "verr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "verw", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_0f01[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "sgdt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "sidt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "lgdt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "lidt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "smsw", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "lmsw", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_M | OT_B, AM_NOT_USED, AM_NOT_USED, "invlpg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_0f18[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_M | OT_ADDRESS_MODE_M, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_0f71[] = { + /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrlw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrlw" } }, + /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psraw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psraw" } }, + /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psllw", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psllw" } }, + /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_0f72[] = { + /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrld", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrld" } }, + /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrad", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrad" } }, + /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "pslld", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "pslld" } }, + /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_0f73[] = { + /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrlq", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrlq" } }, + /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psllq", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psllq" } }, + /* 0x7 */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "pslldq", true, + /* F2h */ { 0 }, + /* F3h */ { 0 }, + /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "pslldq" } }, +}; + +const Opcode s_opcode_byte_after_0fae[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "fxsave", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "fxrstor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ldmxcsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "stmxcsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "lfence", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "mfence", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "clflush/sfence", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, +}; + +const Opcode s_opcode_byte_after_0fba[] = { + /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "bt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "bts", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "btr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "btc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_0fc7[] = { + /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_M | OT_Q, AM_NOT_USED, AM_NOT_USED, "cmpxch8b", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_80[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_81[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_82[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_83[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_c0[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_c1[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_d0[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_d1[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_d2[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_d3[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_f6[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "not", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "neg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, OT_B | AM_REGISTER, AM_E | OT_B, AM_NOT_USED, "mul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, OT_B | AM_REGISTER, AM_E | OT_B, AM_NOT_USED, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_E | OT_B, AM_NOT_USED, "div", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_E | OT_B, AM_NOT_USED, "idiv", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_f7[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "not", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "neg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "mul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "div", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "idiv", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_fe[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +const Opcode s_opcode_byte_after_ff[] = { + /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x2 */ { 0, IT_JUMP, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "call", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x3 */ { 0, IT_JUMP, AM_E | OT_P, AM_NOT_USED, AM_NOT_USED, "call", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x4 */ { 0, IT_JUMP, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x5 */ { 0, IT_JUMP, AM_E | OT_P, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, + /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } +}; + +/* +* A table of all the other tables, containing some extra information, e.g. +* how to mask out the byte we're looking at. +*/ +const OpcodeTable MiniDisassembler::s_ia32_opcode_map_[]={ + // One-byte opcodes and jumps to larger + /* 0 */ {s_first_opcode_byte, 0, 0xff, 0, 0xff}, + // Two-byte opcodes (second byte) + /* 1 */ {s_opcode_byte_after_0f, 0, 0xff, 0, 0xff}, + // Start of tables for opcodes using ModR/M bits as extension + /* 2 */ {s_opcode_byte_after_80, 3, 0x07, 0, 0x07}, + /* 3 */ {s_opcode_byte_after_81, 3, 0x07, 0, 0x07}, + /* 4 */ {s_opcode_byte_after_82, 3, 0x07, 0, 0x07}, + /* 5 */ {s_opcode_byte_after_83, 3, 0x07, 0, 0x07}, + /* 6 */ {s_opcode_byte_after_c0, 3, 0x07, 0, 0x07}, + /* 7 */ {s_opcode_byte_after_c1, 3, 0x07, 0, 0x07}, + /* 8 */ {s_opcode_byte_after_d0, 3, 0x07, 0, 0x07}, + /* 9 */ {s_opcode_byte_after_d1, 3, 0x07, 0, 0x07}, + /* 10 */ {s_opcode_byte_after_d2, 3, 0x07, 0, 0x07}, + /* 11 */ {s_opcode_byte_after_d3, 3, 0x07, 0, 0x07}, + /* 12 */ {s_opcode_byte_after_f6, 3, 0x07, 0, 0x07}, + /* 13 */ {s_opcode_byte_after_f7, 3, 0x07, 0, 0x07}, + /* 14 */ {s_opcode_byte_after_fe, 3, 0x07, 0, 0x01}, + /* 15 */ {s_opcode_byte_after_ff, 3, 0x07, 0, 0x07}, + /* 16 */ {s_opcode_byte_after_0f00, 3, 0x07, 0, 0x07}, + /* 17 */ {s_opcode_byte_after_0f01, 3, 0x07, 0, 0x07}, + /* 18 */ {s_opcode_byte_after_0f18, 3, 0x07, 0, 0x07}, + /* 19 */ {s_opcode_byte_after_0f71, 3, 0x07, 0, 0x07}, + /* 20 */ {s_opcode_byte_after_0f72, 3, 0x07, 0, 0x07}, + /* 21 */ {s_opcode_byte_after_0f73, 3, 0x07, 0, 0x07}, + /* 22 */ {s_opcode_byte_after_0fae, 3, 0x07, 0, 0x07}, + /* 23 */ {s_opcode_byte_after_0fba, 3, 0x07, 0, 0x07}, + /* 24 */ {s_opcode_byte_after_0fc7, 3, 0x07, 0, 0x01} +}; + +}; // namespace sidestep diff --git a/src/thirdparty/gperftools-2.0/src/windows/mingw.h b/src/thirdparty/gperftools-2.0/src/windows/mingw.h new file mode 100644 index 000000000..2aa5eb3ed --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/mingw.h @@ -0,0 +1,67 @@ +/* Copyright (c) 2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Craig Silverstein + * + * MinGW is an interesting mix of unix and windows. We use a normal + * configure script, but still need the windows port.h to define some + * stuff that MinGW doesn't support, like pthreads. + */ + +#ifndef GOOGLE_PERFTOOLS_WINDOWS_MINGW_H_ +#define GOOGLE_PERFTOOLS_WINDOWS_MINGW_H_ + +#ifdef __MINGW32__ + +// Older version of the mingw msvcrt don't define _aligned_malloc +#if __MSVCRT_VERSION__ < 0x0700 +# define PERFTOOLS_NO_ALIGNED_MALLOC 1 +#endif + +// This must be defined before the windows.h is included. We need at +// least 0x0400 for mutex.h to have access to TryLock, and at least +// 0x0501 for patch_functions.cc to have access to GetModuleHandleEx. +// (This latter is an optimization we could take out if need be.) +#ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0501 +#endif + +#define HAVE_SNPRINTF 1 + +// Some mingw distributions have a pthreads wrapper, but it doesn't +// work as well as native windows spinlocks (at least for us). So +// pretend the pthreads wrapper doesn't exist, even when it does. +#undef HAVE_PTHREAD + +#include "windows/port.h" + +#endif /* __MINGW32__ */ + +#endif /* GOOGLE_PERFTOOLS_WINDOWS_MINGW_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/windows/mini_disassembler.cc b/src/thirdparty/gperftools-2.0/src/windows/mini_disassembler.cc new file mode 100644 index 000000000..9e336ba4f --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/mini_disassembler.cc @@ -0,0 +1,431 @@ +/* Copyright (c) 2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Joi Sigurdsson + * + * Implementation of MiniDisassembler. + */ + +#include "mini_disassembler.h" + +namespace sidestep { + +MiniDisassembler::MiniDisassembler(bool operand_default_is_32_bits, + bool address_default_is_32_bits) + : operand_default_is_32_bits_(operand_default_is_32_bits), + address_default_is_32_bits_(address_default_is_32_bits) { + Initialize(); +} + +MiniDisassembler::MiniDisassembler() + : operand_default_is_32_bits_(true), + address_default_is_32_bits_(true) { + Initialize(); +} + +InstructionType MiniDisassembler::Disassemble( + unsigned char* start_byte, + unsigned int& instruction_bytes) { + // Clean up any state from previous invocations. + Initialize(); + + // Start by processing any prefixes. + unsigned char* current_byte = start_byte; + unsigned int size = 0; + InstructionType instruction_type = ProcessPrefixes(current_byte, size); + + if (IT_UNKNOWN == instruction_type) + return instruction_type; + + current_byte += size; + size = 0; + + // Invariant: We have stripped all prefixes, and the operand_is_32_bits_ + // and address_is_32_bits_ flags are correctly set. + + instruction_type = ProcessOpcode(current_byte, 0, size); + + // Check for error processing instruction + if ((IT_UNKNOWN == instruction_type_) || (IT_UNUSED == instruction_type_)) { + return IT_UNKNOWN; + } + + current_byte += size; + + // Invariant: operand_bytes_ indicates the total size of operands + // specified by the opcode and/or ModR/M byte and/or SIB byte. + // pCurrentByte points to the first byte after the ModR/M byte, or after + // the SIB byte if it is present (i.e. the first byte of any operands + // encoded in the instruction). + + // We get the total length of any prefixes, the opcode, and the ModR/M and + // SIB bytes if present, by taking the difference of the original starting + // address and the current byte (which points to the first byte of the + // operands if present, or to the first byte of the next instruction if + // they are not). Adding the count of bytes in the operands encoded in + // the instruction gives us the full length of the instruction in bytes. + instruction_bytes += operand_bytes_ + (current_byte - start_byte); + + // Return the instruction type, which was set by ProcessOpcode(). + return instruction_type_; +} + +void MiniDisassembler::Initialize() { + operand_is_32_bits_ = operand_default_is_32_bits_; + address_is_32_bits_ = address_default_is_32_bits_; +#ifdef _M_X64 + operand_default_support_64_bits_ = true; +#else + operand_default_support_64_bits_ = false; +#endif + operand_is_64_bits_ = false; + operand_bytes_ = 0; + have_modrm_ = false; + should_decode_modrm_ = false; + instruction_type_ = IT_UNKNOWN; + got_f2_prefix_ = false; + got_f3_prefix_ = false; + got_66_prefix_ = false; +} + +InstructionType MiniDisassembler::ProcessPrefixes(unsigned char* start_byte, + unsigned int& size) { + InstructionType instruction_type = IT_GENERIC; + const Opcode& opcode = s_ia32_opcode_map_[0].table_[*start_byte]; + + switch (opcode.type_) { + case IT_PREFIX_ADDRESS: + address_is_32_bits_ = !address_default_is_32_bits_; + goto nochangeoperand; + case IT_PREFIX_OPERAND: + operand_is_32_bits_ = !operand_default_is_32_bits_; + nochangeoperand: + case IT_PREFIX: + + if (0xF2 == (*start_byte)) + got_f2_prefix_ = true; + else if (0xF3 == (*start_byte)) + got_f3_prefix_ = true; + else if (0x66 == (*start_byte)) + got_66_prefix_ = true; + else if (operand_default_support_64_bits_ && (*start_byte) & 0x48) + operand_is_64_bits_ = true; + + instruction_type = opcode.type_; + size ++; + // we got a prefix, so add one and check next byte + ProcessPrefixes(start_byte + 1, size); + default: + break; // not a prefix byte + } + + return instruction_type; +} + +InstructionType MiniDisassembler::ProcessOpcode(unsigned char* start_byte, + unsigned int table_index, + unsigned int& size) { + const OpcodeTable& table = s_ia32_opcode_map_[table_index]; // Get our table + unsigned char current_byte = (*start_byte) >> table.shift_; + current_byte = current_byte & table.mask_; // Mask out the bits we will use + + // Check whether the byte we have is inside the table we have. + if (current_byte < table.min_lim_ || current_byte > table.max_lim_) { + instruction_type_ = IT_UNKNOWN; + return instruction_type_; + } + + const Opcode& opcode = table.table_[current_byte]; + if (IT_UNUSED == opcode.type_) { + // This instruction is not used by the IA-32 ISA, so we indicate + // this to the user. Probably means that we were pointed to + // a byte in memory that was not the start of an instruction. + instruction_type_ = IT_UNUSED; + return instruction_type_; + } else if (IT_REFERENCE == opcode.type_) { + // We are looking at an opcode that has more bytes (or is continued + // in the ModR/M byte). Recursively find the opcode definition in + // the table for the opcode's next byte. + size++; + ProcessOpcode(start_byte + 1, opcode.table_index_, size); + return instruction_type_; + } + + const SpecificOpcode* specific_opcode = (SpecificOpcode*)&opcode; + if (opcode.is_prefix_dependent_) { + if (got_f2_prefix_ && opcode.opcode_if_f2_prefix_.mnemonic_ != 0) { + specific_opcode = &opcode.opcode_if_f2_prefix_; + } else if (got_f3_prefix_ && opcode.opcode_if_f3_prefix_.mnemonic_ != 0) { + specific_opcode = &opcode.opcode_if_f3_prefix_; + } else if (got_66_prefix_ && opcode.opcode_if_66_prefix_.mnemonic_ != 0) { + specific_opcode = &opcode.opcode_if_66_prefix_; + } + } + + // Inv: The opcode type is known. + instruction_type_ = specific_opcode->type_; + + // Let's process the operand types to see if we have any immediate + // operands, and/or a ModR/M byte. + + ProcessOperand(specific_opcode->flag_dest_); + ProcessOperand(specific_opcode->flag_source_); + ProcessOperand(specific_opcode->flag_aux_); + + // Inv: We have processed the opcode and incremented operand_bytes_ + // by the number of bytes of any operands specified by the opcode + // that are stored in the instruction (not registers etc.). Now + // we need to return the total number of bytes for the opcode and + // for the ModR/M or SIB bytes if they are present. + + if (table.mask_ != 0xff) { + if (have_modrm_) { + // we're looking at a ModR/M byte so we're not going to + // count that into the opcode size + ProcessModrm(start_byte, size); + return IT_GENERIC; + } else { + // need to count the ModR/M byte even if it's just being + // used for opcode extension + size++; + return IT_GENERIC; + } + } else { + if (have_modrm_) { + // The ModR/M byte is the next byte. + size++; + ProcessModrm(start_byte + 1, size); + return IT_GENERIC; + } else { + size++; + return IT_GENERIC; + } + } +} + +bool MiniDisassembler::ProcessOperand(int flag_operand) { + bool succeeded = true; + if (AM_NOT_USED == flag_operand) + return succeeded; + + // Decide what to do based on the addressing mode. + switch (flag_operand & AM_MASK) { + // No ModR/M byte indicated by these addressing modes, and no + // additional (e.g. immediate) parameters. + case AM_A: // Direct address + case AM_F: // EFLAGS register + case AM_X: // Memory addressed by the DS:SI register pair + case AM_Y: // Memory addressed by the ES:DI register pair + case AM_IMPLICIT: // Parameter is implicit, occupies no space in + // instruction + break; + + // There is a ModR/M byte but it does not necessarily need + // to be decoded. + case AM_C: // reg field of ModR/M selects a control register + case AM_D: // reg field of ModR/M selects a debug register + case AM_G: // reg field of ModR/M selects a general register + case AM_P: // reg field of ModR/M selects an MMX register + case AM_R: // mod field of ModR/M may refer only to a general register + case AM_S: // reg field of ModR/M selects a segment register + case AM_T: // reg field of ModR/M selects a test register + case AM_V: // reg field of ModR/M selects a 128-bit XMM register + have_modrm_ = true; + break; + + // In these addressing modes, there is a ModR/M byte and it needs to be + // decoded. No other (e.g. immediate) params than indicated in ModR/M. + case AM_E: // Operand is either a general-purpose register or memory, + // specified by ModR/M byte + case AM_M: // ModR/M byte will refer only to memory + case AM_Q: // Operand is either an MMX register or memory (complex + // evaluation), specified by ModR/M byte + case AM_W: // Operand is either a 128-bit XMM register or memory (complex + // eval), specified by ModR/M byte + have_modrm_ = true; + should_decode_modrm_ = true; + break; + + // These addressing modes specify an immediate or an offset value + // directly, so we need to look at the operand type to see how many + // bytes. + case AM_I: // Immediate data. + case AM_J: // Jump to offset. + case AM_O: // Operand is at offset. + switch (flag_operand & OT_MASK) { + case OT_B: // Byte regardless of operand-size attribute. + operand_bytes_ += OS_BYTE; + break; + case OT_C: // Byte or word, depending on operand-size attribute. + if (operand_is_32_bits_) + operand_bytes_ += OS_WORD; + else + operand_bytes_ += OS_BYTE; + break; + case OT_D: // Doubleword, regardless of operand-size attribute. + operand_bytes_ += OS_DOUBLE_WORD; + break; + case OT_DQ: // Double-quadword, regardless of operand-size attribute. + operand_bytes_ += OS_DOUBLE_QUAD_WORD; + break; + case OT_P: // 32-bit or 48-bit pointer, depending on operand-size + // attribute. + if (operand_is_32_bits_) + operand_bytes_ += OS_48_BIT_POINTER; + else + operand_bytes_ += OS_32_BIT_POINTER; + break; + case OT_PS: // 128-bit packed single-precision floating-point data. + operand_bytes_ += OS_128_BIT_PACKED_SINGLE_PRECISION_FLOATING; + break; + case OT_Q: // Quadword, regardless of operand-size attribute. + operand_bytes_ += OS_QUAD_WORD; + break; + case OT_S: // 6-byte pseudo-descriptor. + operand_bytes_ += OS_PSEUDO_DESCRIPTOR; + break; + case OT_SD: // Scalar Double-Precision Floating-Point Value + case OT_PD: // Unaligned packed double-precision floating point value + operand_bytes_ += OS_DOUBLE_PRECISION_FLOATING; + break; + case OT_SS: + // Scalar element of a 128-bit packed single-precision + // floating data. + // We simply return enItUnknown since we don't have to support + // floating point + succeeded = false; + break; + case OT_V: // Word, doubleword or quadword, depending on operand-size + // attribute. + if (operand_is_64_bits_ && flag_operand & AM_I && + flag_operand & IOS_64) + operand_bytes_ += OS_QUAD_WORD; + else if (operand_is_32_bits_) + operand_bytes_ += OS_DOUBLE_WORD; + else + operand_bytes_ += OS_WORD; + break; + case OT_W: // Word, regardless of operand-size attribute. + operand_bytes_ += OS_WORD; + break; + + // Can safely ignore these. + case OT_A: // Two one-word operands in memory or two double-word + // operands in memory + case OT_PI: // Quadword MMX technology register (e.g. mm0) + case OT_SI: // Doubleword integer register (e.g., eax) + break; + + default: + break; + } + break; + + default: + break; + } + + return succeeded; +} + +bool MiniDisassembler::ProcessModrm(unsigned char* start_byte, + unsigned int& size) { + // If we don't need to decode, we just return the size of the ModR/M + // byte (there is never a SIB byte in this case). + if (!should_decode_modrm_) { + size++; + return true; + } + + // We never care about the reg field, only the combination of the mod + // and r/m fields, so let's start by packing those fields together into + // 5 bits. + unsigned char modrm = (*start_byte); + unsigned char mod = modrm & 0xC0; // mask out top two bits to get mod field + modrm = modrm & 0x07; // mask out bottom 3 bits to get r/m field + mod = mod >> 3; // shift the mod field to the right place + modrm = mod | modrm; // combine the r/m and mod fields as discussed + mod = mod >> 3; // shift the mod field to bits 2..0 + + // Invariant: modrm contains the mod field in bits 4..3 and the r/m field + // in bits 2..0, and mod contains the mod field in bits 2..0 + + const ModrmEntry* modrm_entry = 0; + if (address_is_32_bits_) + modrm_entry = &s_ia32_modrm_map_[modrm]; + else + modrm_entry = &s_ia16_modrm_map_[modrm]; + + // Invariant: modrm_entry points to information that we need to decode + // the ModR/M byte. + + // Add to the count of operand bytes, if the ModR/M byte indicates + // that some operands are encoded in the instruction. + if (modrm_entry->is_encoded_in_instruction_) + operand_bytes_ += modrm_entry->operand_size_; + + // Process the SIB byte if necessary, and return the count + // of ModR/M and SIB bytes. + if (modrm_entry->use_sib_byte_) { + size++; + return ProcessSib(start_byte + 1, mod, size); + } else { + size++; + return true; + } +} + +bool MiniDisassembler::ProcessSib(unsigned char* start_byte, + unsigned char mod, + unsigned int& size) { + // get the mod field from the 2..0 bits of the SIB byte + unsigned char sib_base = (*start_byte) & 0x07; + if (0x05 == sib_base) { + switch (mod) { + case 0x00: // mod == 00 + case 0x02: // mod == 10 + operand_bytes_ += OS_DOUBLE_WORD; + break; + case 0x01: // mod == 01 + operand_bytes_ += OS_BYTE; + break; + case 0x03: // mod == 11 + // According to the IA-32 docs, there does not seem to be a disp + // value for this value of mod + default: + break; + } + } + + size++; + return true; +} + +}; // namespace sidestep diff --git a/src/thirdparty/gperftools-2.0/src/windows/mini_disassembler.h b/src/thirdparty/gperftools-2.0/src/windows/mini_disassembler.h new file mode 100644 index 000000000..52daa5d85 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/mini_disassembler.h @@ -0,0 +1,197 @@ +/* Copyright (c) 2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Joi Sigurdsson + * + * Definition of MiniDisassembler. + */ + +#ifndef GOOGLE_PERFTOOLS_MINI_DISASSEMBLER_H_ +#define GOOGLE_PERFTOOLS_MINI_DISASSEMBLER_H_ + +#include "config.h" +#include +#include "mini_disassembler_types.h" + +// compatibility shim +#include "base/logging.h" +#define SIDESTEP_ASSERT(cond) RAW_DCHECK(cond, #cond) +#define SIDESTEP_LOG(msg) RAW_VLOG(1, msg) + +namespace sidestep { + +// This small disassembler is very limited +// in its functionality, and in fact does only the bare minimum required by the +// preamble patching utility. It may be useful for other purposes, however. +// +// The limitations include at least the following: +// -# No support for coprocessor opcodes, MMX, etc. +// -# No machine-readable identification of opcodes or decoding of +// assembly parameters. The name of the opcode (as a string) is given, +// however, to aid debugging. +// +// You may ask what this little disassembler actually does, then? The answer is +// that it does the following, which is exactly what the patching utility needs: +// -# Indicates if opcode is a jump (any kind) or a return (any kind) +// because this is important for the patching utility to determine if +// a function is too short or there are jumps too early in it for it +// to be preamble patched. +// -# The opcode length is always calculated, so that the patching utility +// can figure out where the next instruction starts, and whether it +// already has enough instructions to replace with the absolute jump +// to the patching code. +// +// The usage is quite simple; just create a MiniDisassembler and use its +// Disassemble() method. +// +// If you would like to extend this disassembler, please refer to the +// IA-32 Intel® Architecture Software Developer’s Manual Volume 2: +// Instruction Set Reference for information about operand decoding +// etc. +class PERFTOOLS_DLL_DECL MiniDisassembler { + public: + + // Creates a new instance and sets defaults. + // + // @param operand_default_32_bits If true, the default operand size is + // set to 32 bits, which is the default under Win32. Otherwise it is 16 bits. + // @param address_default_32_bits If true, the default address size is + // set to 32 bits, which is the default under Win32. Otherwise it is 16 bits. + MiniDisassembler(bool operand_default_32_bits, + bool address_default_32_bits); + + // Equivalent to MiniDisassembler(true, true); + MiniDisassembler(); + + // Attempts to disassemble a single instruction starting from the + // address in memory it is pointed to. + // + // @param start Address where disassembly should start. + // @param instruction_bytes Variable that will be incremented by + // the length in bytes of the instruction. + // @return enItJump, enItReturn or enItGeneric on success. enItUnknown + // if unable to disassemble, enItUnused if this seems to be an unused + // opcode. In the last two (error) cases, cbInstruction will be set + // to 0xffffffff. + // + // @post This instance of the disassembler is ready to be used again, + // with unchanged defaults from creation time. + InstructionType Disassemble(unsigned char* start, unsigned int& instruction_bytes); + + private: + + // Makes the disassembler ready for reuse. + void Initialize(); + + // Sets the flags for address and operand sizes. + // @return Number of prefix bytes. + InstructionType ProcessPrefixes(unsigned char* start, unsigned int& size); + + // Sets the flag for whether we have ModR/M, and increments + // operand_bytes_ if any are specifies by the opcode directly. + // @return Number of opcode bytes. + InstructionType ProcessOpcode(unsigned char* start, + unsigned int table, + unsigned int& size); + + // Checks the type of the supplied operand. Increments + // operand_bytes_ if it directly indicates an immediate etc. + // operand. Asserts have_modrm_ if the operand specifies + // a ModR/M byte. + bool ProcessOperand(int flag_operand); + + // Increments operand_bytes_ by size specified by ModR/M and + // by SIB if present. + // @return 0 in case of error, 1 if there is just a ModR/M byte, + // 2 if there is a ModR/M byte and a SIB byte. + bool ProcessModrm(unsigned char* start, unsigned int& size); + + // Processes the SIB byte that it is pointed to. + // @param start Pointer to the SIB byte. + // @param mod The mod field from the ModR/M byte. + // @return 1 to indicate success (indicates 1 SIB byte) + bool ProcessSib(unsigned char* start, unsigned char mod, unsigned int& size); + + // The instruction type we have decoded from the opcode. + InstructionType instruction_type_; + + // Counts the number of bytes that is occupied by operands in + // the current instruction (note: we don't care about how large + // operands stored in registers etc. are). + unsigned int operand_bytes_; + + // True iff there is a ModR/M byte in this instruction. + bool have_modrm_; + + // True iff we need to decode the ModR/M byte (sometimes it just + // points to a register, we can tell by the addressing mode). + bool should_decode_modrm_; + + // Current operand size is 32 bits if true, 16 bits if false. + bool operand_is_32_bits_; + + // Default operand size is 32 bits if true, 16 bits if false. + bool operand_default_is_32_bits_; + + // Current address size is 32 bits if true, 16 bits if false. + bool address_is_32_bits_; + + // Default address size is 32 bits if true, 16 bits if false. + bool address_default_is_32_bits_; + + // Determines if 64 bit operands are supported (x64). + bool operand_default_support_64_bits_; + + // Current operand size is 64 bits if true, 32 bits if false. + bool operand_is_64_bits_; + + // Huge big opcode table based on the IA-32 manual, defined + // in Ia32OpcodeMap.cc + static const OpcodeTable s_ia32_opcode_map_[]; + + // Somewhat smaller table to help with decoding ModR/M bytes + // when 16-bit addressing mode is being used. Defined in + // Ia32ModrmMap.cc + static const ModrmEntry s_ia16_modrm_map_[]; + + // Somewhat smaller table to help with decoding ModR/M bytes + // when 32-bit addressing mode is being used. Defined in + // Ia32ModrmMap.cc + static const ModrmEntry s_ia32_modrm_map_[]; + + // Indicators of whether we got certain prefixes that certain + // silly Intel instructions depend on in nonstandard ways for + // their behaviors. + bool got_f2_prefix_, got_f3_prefix_, got_66_prefix_; +}; + +}; // namespace sidestep + +#endif // GOOGLE_PERFTOOLS_MINI_DISASSEMBLER_H_ diff --git a/src/thirdparty/gperftools-2.0/src/windows/mini_disassembler_types.h b/src/thirdparty/gperftools-2.0/src/windows/mini_disassembler_types.h new file mode 100644 index 000000000..83dee8ba9 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/mini_disassembler_types.h @@ -0,0 +1,236 @@ +/* Copyright (c) 2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Joi Sigurdsson + * + * Several simple types used by the disassembler and some of the patching + * mechanisms. + */ + +#ifndef GOOGLE_PERFTOOLS_MINI_DISASSEMBLER_TYPES_H_ +#define GOOGLE_PERFTOOLS_MINI_DISASSEMBLER_TYPES_H_ + +namespace sidestep { + +// Categories of instructions that we care about +enum InstructionType { + // This opcode is not used + IT_UNUSED, + // This disassembler does not recognize this opcode (error) + IT_UNKNOWN, + // This is not an instruction but a reference to another table + IT_REFERENCE, + // This byte is a prefix byte that we can ignore + IT_PREFIX, + // This is a prefix byte that switches to the nondefault address size + IT_PREFIX_ADDRESS, + // This is a prefix byte that switches to the nondefault operand size + IT_PREFIX_OPERAND, + // A jump or call instruction + IT_JUMP, + // A return instruction + IT_RETURN, + // Any other type of instruction (in this case we don't care what it is) + IT_GENERIC, +}; + +// Lists IA-32 operand sizes in multiples of 8 bits +enum OperandSize { + OS_ZERO = 0, + OS_BYTE = 1, + OS_WORD = 2, + OS_DOUBLE_WORD = 4, + OS_QUAD_WORD = 8, + OS_DOUBLE_QUAD_WORD = 16, + OS_32_BIT_POINTER = 32/8, + OS_48_BIT_POINTER = 48/8, + OS_SINGLE_PRECISION_FLOATING = 32/8, + OS_DOUBLE_PRECISION_FLOATING = 64/8, + OS_DOUBLE_EXTENDED_PRECISION_FLOATING = 80/8, + OS_128_BIT_PACKED_SINGLE_PRECISION_FLOATING = 128/8, + OS_PSEUDO_DESCRIPTOR = 6 +}; + +// Operand addressing methods from the IA-32 manual. The enAmMask value +// is a mask for the rest. The other enumeration values are named for the +// names given to the addressing methods in the manual, e.g. enAm_D is for +// the D addressing method. +// +// The reason we use a full 4 bytes and a mask, is that we need to combine +// these flags with the enOperandType to store the details +// on the operand in a single integer. +enum AddressingMethod { + AM_NOT_USED = 0, // This operand is not used for this instruction + AM_MASK = 0x00FF0000, // Mask for the rest of the values in this enumeration + AM_A = 0x00010000, // A addressing type + AM_C = 0x00020000, // C addressing type + AM_D = 0x00030000, // D addressing type + AM_E = 0x00040000, // E addressing type + AM_F = 0x00050000, // F addressing type + AM_G = 0x00060000, // G addressing type + AM_I = 0x00070000, // I addressing type + AM_J = 0x00080000, // J addressing type + AM_M = 0x00090000, // M addressing type + AM_O = 0x000A0000, // O addressing type + AM_P = 0x000B0000, // P addressing type + AM_Q = 0x000C0000, // Q addressing type + AM_R = 0x000D0000, // R addressing type + AM_S = 0x000E0000, // S addressing type + AM_T = 0x000F0000, // T addressing type + AM_V = 0x00100000, // V addressing type + AM_W = 0x00110000, // W addressing type + AM_X = 0x00120000, // X addressing type + AM_Y = 0x00130000, // Y addressing type + AM_REGISTER = 0x00140000, // Specific register is always used as this op + AM_IMPLICIT = 0x00150000, // An implicit, fixed value is used +}; + +// Operand types from the IA-32 manual. The enOtMask value is +// a mask for the rest. The rest of the values are named for the +// names given to these operand types in the manual, e.g. enOt_ps +// is for the ps operand type in the manual. +// +// The reason we use a full 4 bytes and a mask, is that we need +// to combine these flags with the enAddressingMethod to store the details +// on the operand in a single integer. +enum OperandType { + OT_MASK = 0xFF000000, + OT_A = 0x01000000, + OT_B = 0x02000000, + OT_C = 0x03000000, + OT_D = 0x04000000, + OT_DQ = 0x05000000, + OT_P = 0x06000000, + OT_PI = 0x07000000, + OT_PS = 0x08000000, // actually unsupported for (we don't know its size) + OT_Q = 0x09000000, + OT_S = 0x0A000000, + OT_SS = 0x0B000000, + OT_SI = 0x0C000000, + OT_V = 0x0D000000, + OT_W = 0x0E000000, + OT_SD = 0x0F000000, // scalar double-precision floating-point value + OT_PD = 0x10000000, // double-precision floating point + // dummy "operand type" for address mode M - which doesn't specify + // operand type + OT_ADDRESS_MODE_M = 0x80000000 +}; + +// Flag that indicates if an immediate operand is 64-bits. +// +// The Intel 64 and IA-32 Architecture Software Developer's Manual currently +// defines MOV as the only instruction supporting a 64-bit immediate operand. +enum ImmediateOperandSize { + IOS_MASK = 0x0000F000, + IOS_DEFAULT = 0x0, + IOS_64 = 0x00001000 +}; + +// Everything that's in an Opcode (see below) except the three +// alternative opcode structs for different prefixes. +struct SpecificOpcode { + // Index to continuation table, or 0 if this is the last + // byte in the opcode. + int table_index_; + + // The opcode type + InstructionType type_; + + // Description of the type of the dest, src and aux operands, + // put together from enOperandType, enAddressingMethod and + // enImmediateOperandSize flags. + int flag_dest_; + int flag_source_; + int flag_aux_; + + // We indicate the mnemonic for debugging purposes + const char* mnemonic_; +}; + +// The information we keep in our tables about each of the different +// valid instructions recognized by the IA-32 architecture. +struct Opcode { + // Index to continuation table, or 0 if this is the last + // byte in the opcode. + int table_index_; + + // The opcode type + InstructionType type_; + + // Description of the type of the dest, src and aux operands, + // put together from an enOperandType flag and an enAddressingMethod + // flag. + int flag_dest_; + int flag_source_; + int flag_aux_; + + // We indicate the mnemonic for debugging purposes + const char* mnemonic_; + + // Alternative opcode info if certain prefixes are specified. + // In most cases, all of these are zeroed-out. Only used if + // bPrefixDependent is true. + bool is_prefix_dependent_; + SpecificOpcode opcode_if_f2_prefix_; + SpecificOpcode opcode_if_f3_prefix_; + SpecificOpcode opcode_if_66_prefix_; +}; + +// Information about each table entry. +struct OpcodeTable { + // Table of instruction entries + const Opcode* table_; + // How many bytes left to shift ModR/M byte before applying mask + unsigned char shift_; + // Mask to apply to byte being looked at before comparing to table + unsigned char mask_; + // Minimum/maximum indexes in table. + unsigned char min_lim_; + unsigned char max_lim_; +}; + +// Information about each entry in table used to decode ModR/M byte. +struct ModrmEntry { + // Is the operand encoded as bytes in the instruction (rather than + // if it's e.g. a register in which case it's just encoded in the + // ModR/M byte) + bool is_encoded_in_instruction_; + + // Is there a SIB byte? In this case we always need to decode it. + bool use_sib_byte_; + + // What is the size of the operand (only important if it's encoded + // in the instruction)? + OperandSize operand_size_; +}; + +}; // namespace sidestep + +#endif // GOOGLE_PERFTOOLS_MINI_DISASSEMBLER_TYPES_H_ diff --git a/src/thirdparty/gperftools-2.0/src/windows/nm-pdb.c b/src/thirdparty/gperftools-2.0/src/windows/nm-pdb.c new file mode 100644 index 000000000..9beb21dea --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/nm-pdb.c @@ -0,0 +1,273 @@ +/* Copyright (c) 2008, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: David Vitek + * + * Dump function addresses using Microsoft debug symbols. This works + * on PDB files. Note that this program will download symbols to + * c:\websymbols without asking. + */ + +#define WIN32_LEAN_AND_MEAN +#define _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_DEPRECATE + +#include +#include +#include // for _strdup + +#include +#include + +// Unfortunately, there is no versioning info in dbghelp.h so I can +// tell whether it has an old-style (circa VC7.1) IMAGEHLP_MODULE64 +// struct, with only a few fields, or a new-style (circa VC8) +// IMAGEHLP_MODULE64, with lots of fields. These fields are just used +// for debugging, so it's fine to just assume the smaller struct, but +// for most people, using a modern MSVC, the full struct is available. +// If you are one of those people and would like this extra debugging +// info, you can uncomment the line below. +//#define VC8_OR_ABOVE + +#define SEARCH_CAP (1024*1024) +#define WEBSYM "SRV*c:\\websymbols*http://msdl.microsoft.com/download/symbols" + +typedef struct { + char *name; + ULONG64 addr; + ULONG flags; +} SYM; + +typedef struct { + ULONG64 module_base; + SYM *syms; + DWORD syms_len; + DWORD syms_cap; +} SYM_CONTEXT; + +static int sym_cmp(const void *_s1, const void *_s2) { + const SYM *s1 = (const SYM *)_s1; + const SYM *s2 = (const SYM *)_s2; + + if (s1->addr < s2->addr) + return -1; + if (s1->addr > s2->addr) + return 1; + return 0; +} + +static BOOL CALLBACK EnumSymProc(PSYMBOL_INFO symbol_info, + ULONG symbol_size, + PVOID user_context) { + SYM_CONTEXT *ctx = (SYM_CONTEXT*)user_context; + if (symbol_info->Address < ctx->module_base || + (symbol_info->Flags & SYMFLAG_TLSREL)) { + return TRUE; + } + if (ctx->syms_len == ctx->syms_cap) { + if (!ctx->syms_cap) + ctx->syms_cap++; + ctx->syms_cap *= 2; + ctx->syms = realloc(ctx->syms, sizeof(ctx->syms[0]) * ctx->syms_cap); + } + ctx->syms[ctx->syms_len].name = _strdup(symbol_info->Name); + ctx->syms[ctx->syms_len].addr = symbol_info->Address; + ctx->syms[ctx->syms_len].flags = symbol_info->Flags; + ctx->syms_len++; + return TRUE; +} + +static void MaybePrint(const char* var, const char* description) { + if (var[0]) + printf("%s: %s\n", description, var); +} + +static void PrintAvailability(BOOL var, const char *description) { + printf("s: %s\n", description, (var ? "Available" : "Not available")); +} + +static void ShowSymbolInfo(HANDLE process, ULONG64 module_base) { + /* Get module information. */ + IMAGEHLP_MODULE64 module_info; + BOOL getmoduleinfo_rv; + printf("Load Address: %I64x\n", module_base); + memset(&module_info, 0, sizeof(module_info)); + module_info.SizeOfStruct = sizeof(module_info); + getmoduleinfo_rv = SymGetModuleInfo64(process, module_base, &module_info); + if (!getmoduleinfo_rv) { + printf("Error: SymGetModuleInfo64() failed. Error code: %u\n", + GetLastError()); + return; + } + /* Display information about symbols, based on kind of symbol. */ + switch (module_info.SymType) { + case SymNone: + printf(("No symbols available for the module.\n")); + break; + case SymExport: + printf(("Loaded symbols: Exports\n")); + break; + case SymCoff: + printf(("Loaded symbols: COFF\n")); + break; + case SymCv: + printf(("Loaded symbols: CodeView\n")); + break; + case SymSym: + printf(("Loaded symbols: SYM\n")); + break; + case SymVirtual: + printf(("Loaded symbols: Virtual\n")); + break; + case SymPdb: + printf(("Loaded symbols: PDB\n")); + break; + case SymDia: + printf(("Loaded symbols: DIA\n")); + break; + case SymDeferred: + printf(("Loaded symbols: Deferred\n")); /* not actually loaded */ + break; + default: + printf(("Loaded symbols: Unknown format.\n")); + break; + } + + MaybePrint("Image name", module_info.ImageName); + MaybePrint("Loaded image name", module_info.LoadedImageName); +#ifdef VC8_OR_ABOVE /* TODO(csilvers): figure out how to tell */ + MaybePrint("PDB file name", module_info.LoadedPdbName); + if (module_info.PdbUnmatched || module_info.DbgUnmatched) { + /* This can only happen if the debug information is contained in a + * separate file (.DBG or .PDB) + */ + printf(("Warning: Unmatched symbols.\n")); + } +#endif + + /* Contents */ +#ifdef VC8_OR_ABOVE /* TODO(csilvers): figure out how to tell */ + PrintAvailability("Line numbers", module_info.LineNumbers); + PrintAvailability("Global symbols", module_info.GlobalSymbols); + PrintAvailability("Type information", module_info.TypeInfo); +#endif +} + +void usage() { + fprintf(stderr, "usage: nm-pdb [-C|--demangle] \n"); +} + +int main(int argc, char *argv[]) { + DWORD error; + HANDLE process; + ULONG64 module_base; + SYM_CONTEXT ctx; + int i; + char* search; + char* filename = NULL; + int rv = 0; + /* We may add SYMOPT_UNDNAME if --demangle is specified: */ + DWORD symopts = SYMOPT_DEFERRED_LOADS | SYMOPT_DEBUG; + + for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "--demangle") == 0 || strcmp(argv[i], "-C") == 0) { + symopts |= SYMOPT_UNDNAME; + } else if (strcmp(argv[i], "--help") == 0) { + usage(); + exit(0); + } else { + break; + } + } + if (i != argc - 1) { + usage(); + exit(1); + } + filename = argv[i]; + + process = GetCurrentProcess(); + + if (!SymInitialize(process, NULL, FALSE)) { + error = GetLastError(); + fprintf(stderr, "SymInitialize returned error : %d\n", error); + return 1; + } + + search = malloc(SEARCH_CAP); + if (SymGetSearchPath(process, search, SEARCH_CAP)) { + if (strlen(search) + sizeof(";" WEBSYM) > SEARCH_CAP) { + fprintf(stderr, "Search path too long\n"); + SymCleanup(process); + return 1; + } + strcat(search, ";" WEBSYM); + } else { + error = GetLastError(); + fprintf(stderr, "SymGetSearchPath returned error : %d\n", error); + rv = 1; /* An error, but not a fatal one */ + strcpy(search, WEBSYM); /* Use a default value */ + } + if (!SymSetSearchPath(process, search)) { + error = GetLastError(); + fprintf(stderr, "SymSetSearchPath returned error : %d\n", error); + rv = 1; /* An error, but not a fatal one */ + } + + SymSetOptions(symopts); + module_base = SymLoadModuleEx(process, NULL, filename, NULL, 0, 0, NULL, 0); + if (!module_base) { + /* SymLoadModuleEx failed */ + error = GetLastError(); + fprintf(stderr, "SymLoadModuleEx returned error : %d for %s\n", + error, filename); + SymCleanup(process); + return 1; + } + + ShowSymbolInfo(process, module_base); + + memset(&ctx, 0, sizeof(ctx)); + ctx.module_base = module_base; + if (!SymEnumSymbols(process, module_base, NULL, EnumSymProc, &ctx)) { + error = GetLastError(); + fprintf(stderr, "SymEnumSymbols returned error: %d\n", error); + rv = 1; + } else { + DWORD j; + qsort(ctx.syms, ctx.syms_len, sizeof(ctx.syms[0]), sym_cmp); + for (j = 0; j < ctx.syms_len; j++) { + printf("%016I64x X %s\n", ctx.syms[j].addr, ctx.syms[j].name); + } + /* In a perfect world, maybe we'd clean up ctx's memory? */ + } + SymUnloadModule64(process, module_base); + SymCleanup(process); + return rv; +} diff --git a/src/thirdparty/gperftools-2.0/src/windows/override_functions.cc b/src/thirdparty/gperftools-2.0/src/windows/override_functions.cc new file mode 100644 index 000000000..e634fe272 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/override_functions.cc @@ -0,0 +1,122 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// --- +// Author: Mike Belshe +// +// To link tcmalloc into a EXE or DLL statically without using the patching +// facility, we can take a stock libcmt and remove all the allocator functions. +// When we relink the EXE/DLL with the modified libcmt and tcmalloc, a few +// functions are missing. This file contains the additional overrides which +// are required in the VS2005 libcmt in order to link the modified libcmt. +// +// See also +// http://groups.google.com/group/google-perftools/browse_thread/thread/41cd3710af85e57b + +#include + +#ifndef _WIN32 +# error You should only be including this file in a windows environment! +#endif + +#ifndef WIN32_OVERRIDE_ALLOCATORS +# error This file is intended for use when overriding allocators +#endif + +#include "tcmalloc.cc" + +extern "C" void* _recalloc(void* p, size_t n, size_t size) { + void* result = realloc(p, n * size); + memset(result, 0, n * size); + return result; +} + +extern "C" void* _calloc_impl(size_t n, size_t size) { + return calloc(n, size); +} + +extern "C" size_t _msize(void* p) { + return MallocExtension::instance()->GetAllocatedSize(p); +} + +extern "C" intptr_t _get_heap_handle() { + return 0; +} + +// The CRT heap initialization stub. +extern "C" int _heap_init() { + // We intentionally leak this object. It lasts for the process + // lifetime. Trying to teardown at _heap_term() is so late that + // you can't do anything useful anyway. + new TCMallocGuard(); + return 1; +} + +// The CRT heap cleanup stub. +extern "C" void _heap_term() { +} + +extern "C" int _set_new_mode(int flag) { + return tc_set_new_mode(flag); +} + +#ifndef NDEBUG +#undef malloc +#undef free +#undef calloc +int _CrtDbgReport(int, const char*, int, const char*, const char*, ...) { + return 0; +} + +int _CrtDbgReportW(int, const wchar_t*, int, const wchar_t*, const wchar_t*, ...) { + return 0; +} + +int _CrtSetReportMode(int, int) { + return 0; +} + +extern "C" void* _malloc_dbg(size_t size, int , const char*, int) { + return malloc(size); +} + +extern "C" void _free_dbg(void* ptr, int) { + free(ptr); +} + +extern "C" void* _calloc_dbg(size_t n, size_t size, int, const char*, int) { + return calloc(n, size); +} +#endif // NDEBUG + +// We set this to 1 because part of the CRT uses a check of _crtheap != 0 +// to test whether the CRT has been initialized. Once we've ripped out +// the allocators from libcmt, we need to provide this definition so that +// the rest of the CRT is still usable. +extern "C" void* _crtheap = reinterpret_cast(1); diff --git a/src/thirdparty/gperftools-2.0/src/windows/patch_functions.cc b/src/thirdparty/gperftools-2.0/src/windows/patch_functions.cc new file mode 100644 index 000000000..7a7e6adf0 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/patch_functions.cc @@ -0,0 +1,1080 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// --- +// Author: Craig Silverstein +// +// The main purpose of this file is to patch the libc allocation +// routines (malloc and friends, but also _msize and other +// windows-specific libc-style routines). However, we also patch +// windows routines to do accounting. We do better at the former than +// the latter. Here are some comments from Paul Pluzhnikov about what +// it might take to do a really good job patching windows routines to +// keep track of memory usage: +// +// "You should intercept at least the following: +// HeapCreate HeapDestroy HeapAlloc HeapReAlloc HeapFree +// RtlCreateHeap RtlDestroyHeap RtlAllocateHeap RtlFreeHeap +// malloc calloc realloc free +// malloc_dbg calloc_dbg realloc_dbg free_dbg +// Some of these call the other ones (but not always), sometimes +// recursively (i.e. HeapCreate may call HeapAlloc on a different +// heap, IIRC)." +// +// Since Paul didn't mention VirtualAllocEx, he may not have even been +// considering all the mmap-like functions that windows has (or he may +// just be ignoring it because he's seen we already patch it). Of the +// above, we do not patch the *_dbg functions, and of the windows +// functions, we only patch HeapAlloc and HeapFree. +// +// The *_dbg functions come into play with /MDd, /MTd, and /MLd, +// probably. It may be ok to just turn off tcmalloc in those cases -- +// if the user wants the windows debug malloc, they probably don't +// want tcmalloc! We should also test with all of /MD, /MT, and /ML, +// which we're not currently doing. + +// TODO(csilvers): try to do better here? Paul does conclude: +// "Keeping track of all of this was a nightmare." + +#ifndef _WIN32 +# error You should only be including windows/patch_functions.cc in a windows environment! +#endif + +#include + +#ifdef WIN32_OVERRIDE_ALLOCATORS +#error This file is intended for patching allocators - use override_functions.cc instead. +#endif + +// We use psapi. Non-MSVC systems will have to link this in themselves. +#ifdef _MSC_VER +#pragma comment(lib, "Psapi.lib") +#endif + +// Make sure we always use the 'old' names of the psapi functions. +#ifndef PSAPI_VERSION +#define PSAPI_VERSION 1 +#endif + +#include +#include +#include // for _msize and _expand +#include // for EnumProcessModules, GetModuleInformation, etc. +#include +#include +#include +#include +#include "base/spinlock.h" +#include "gperftools/malloc_hook.h" +#include "malloc_hook-inl.h" +#include "preamble_patcher.h" + +// The maximum number of modules we allow to be in one executable +const int kMaxModules = 8182; + +// These are hard-coded, unfortunately. :-( They are also probably +// compiler specific. See get_mangled_names.cc, in this directory, +// for instructions on how to update these names for your compiler. +const char kMangledNew[] = "??2@YAPAXI@Z"; +const char kMangledNewArray[] = "??_U@YAPAXI@Z"; +const char kMangledDelete[] = "??3@YAXPAX@Z"; +const char kMangledDeleteArray[] = "??_V@YAXPAX@Z"; +const char kMangledNewNothrow[] = "??2@YAPAXIABUnothrow_t@std@@@Z"; +const char kMangledNewArrayNothrow[] = "??_U@YAPAXIABUnothrow_t@std@@@Z"; +const char kMangledDeleteNothrow[] = "??3@YAXPAXABUnothrow_t@std@@@Z"; +const char kMangledDeleteArrayNothrow[] = "??_V@YAXPAXABUnothrow_t@std@@@Z"; + +// This is an unused but exported symbol that we can use to tell the +// MSVC linker to bring in libtcmalloc, via the /INCLUDE linker flag. +// Without this, the linker will likely decide that libtcmalloc.dll +// doesn't add anything to the executable (since it does all its work +// through patching, which the linker can't see), and ignore it +// entirely. (The name 'tcmalloc' is already reserved for a +// namespace. I'd rather export a variable named "_tcmalloc", but I +// couldn't figure out how to get that to work. This function exports +// the symbol "__tcmalloc".) +extern "C" PERFTOOLS_DLL_DECL void _tcmalloc(); +void _tcmalloc() { } + +// This is the version needed for windows x64, which has a different +// decoration scheme which doesn't auto-add a leading underscore. +extern "C" PERFTOOLS_DLL_DECL void __tcmalloc(); +void __tcmalloc() { } + +namespace { // most everything here is in an unnamed namespace + +typedef void (*GenericFnPtr)(); + +using sidestep::PreamblePatcher; + +struct ModuleEntryCopy; // defined below + +// These functions are how we override the memory allocation +// functions, just like tcmalloc.cc and malloc_hook.cc do. + +// This is information about the routines we're patching, for a given +// module that implements libc memory routines. A single executable +// can have several libc implementations running about (in different +// .dll's), and we need to patch/unpatch them all. This defines +// everything except the new functions we're patching in, which +// are defined in LibcFunctions, below. +class LibcInfo { + public: + LibcInfo() { + memset(this, 0, sizeof(*this)); // easiest way to initialize the array + } + + bool patched() const { return is_valid(); } + void set_is_valid(bool b) { is_valid_ = b; } + // According to http://msdn.microsoft.com/en-us/library/ms684229(VS.85).aspx: + // "The load address of a module (lpBaseOfDll) is the same as the HMODULE + // value." + HMODULE hmodule() const { + return reinterpret_cast(const_cast(module_base_address_)); + } + + // Populates all the windows_fn_[] vars based on our module info. + // Returns false if windows_fn_ is all NULL's, because there's + // nothing to patch. Also populates the rest of the module_entry + // info, such as the module's name. + bool PopulateWindowsFn(const ModuleEntryCopy& module_entry); + + protected: + void CopyFrom(const LibcInfo& that) { + if (this == &that) + return; + this->is_valid_ = that.is_valid_; + memcpy(this->windows_fn_, that.windows_fn_, sizeof(windows_fn_)); + this->module_base_address_ = that.module_base_address_; + this->module_base_size_ = that.module_base_size_; + } + + enum { + kMalloc, kFree, kRealloc, kCalloc, + kNew, kNewArray, kDelete, kDeleteArray, + kNewNothrow, kNewArrayNothrow, kDeleteNothrow, kDeleteArrayNothrow, + // These are windows-only functions from malloc.h + k_Msize, k_Expand, + // A MS CRT "internal" function, implemented using _calloc_impl + k_CallocCrt, + kNumFunctions + }; + + // I'd like to put these together in a struct (perhaps in the + // subclass, so we can put in perftools_fn_ as well), but vc8 seems + // to have a bug where it doesn't initialize the struct properly if + // we try to take the address of a function that's not yet loaded + // from a dll, as is the common case for static_fn_. So we need + // each to be in its own array. :-( + static const char* const function_name_[kNumFunctions]; + + // This function is only used when statically linking the binary. + // In that case, loading malloc/etc from the dll (via + // PatchOneModule) won't work, since there are no dlls. Instead, + // you just want to be taking the address of malloc/etc directly. + // In the common, non-static-link case, these pointers will all be + // NULL, since this initializer runs before msvcrt.dll is loaded. + static const GenericFnPtr static_fn_[kNumFunctions]; + + // This is the address of the function we are going to patch + // (malloc, etc). Other info about the function is in the + // patch-specific subclasses, below. + GenericFnPtr windows_fn_[kNumFunctions]; + + // This is set to true when this structure is initialized (because + // we're patching a new library) and set to false when it's + // uninitialized (because we've freed that library). + bool is_valid_; + + const void *module_base_address_; + size_t module_base_size_; + + public: + // These shouldn't have to be public, since only subclasses of + // LibcInfo need it, but they do. Maybe something to do with + // templates. Shrug. I hide them down here so users won't see + // them. :-) (OK, I also need to define ctrgProcAddress late.) + bool is_valid() const { return is_valid_; } + GenericFnPtr windows_fn(int ifunction) const { + return windows_fn_[ifunction]; + } + // These three are needed by ModuleEntryCopy. + static const int ctrgProcAddress = kNumFunctions; + static GenericFnPtr static_fn(int ifunction) { + return static_fn_[ifunction]; + } + static const char* const function_name(int ifunction) { + return function_name_[ifunction]; + } +}; + +// Template trickiness: logically, a LibcInfo would include +// Windows_malloc_, origstub_malloc_, and Perftools_malloc_: for a +// given module, these three go together. And in fact, +// Perftools_malloc_ may need to call origstub_malloc_, which means we +// either need to change Perftools_malloc_ to take origstub_malloc_ as +// an arugment -- unfortunately impossible since it needs to keep the +// same API as normal malloc -- or we need to write a different +// version of Perftools_malloc_ for each LibcInfo instance we create. +// We choose the second route, and use templates to implement it (we +// could have also used macros). So to get multiple versions +// of the struct, we say "struct<1> var1; struct<2> var2;". The price +// we pay is some code duplication, and more annoying, each instance +// of this var is a separate type. +template class LibcInfoWithPatchFunctions : public LibcInfo { + public: + // me_info should have had PopulateWindowsFn() called on it, so the + // module_* vars and windows_fn_ are set up. + bool Patch(const LibcInfo& me_info); + void Unpatch(); + + private: + // This holds the original function contents after we patch the function. + // This has to be defined static in the subclass, because the perftools_fns + // reference origstub_fn_. + static GenericFnPtr origstub_fn_[kNumFunctions]; + + // This is the function we want to patch in + static const GenericFnPtr perftools_fn_[kNumFunctions]; + + static void* Perftools_malloc(size_t size) __THROW; + static void Perftools_free(void* ptr) __THROW; + static void* Perftools_realloc(void* ptr, size_t size) __THROW; + static void* Perftools_calloc(size_t nmemb, size_t size) __THROW; + static void* Perftools_new(size_t size); + static void* Perftools_newarray(size_t size); + static void Perftools_delete(void *ptr); + static void Perftools_deletearray(void *ptr); + static void* Perftools_new_nothrow(size_t size, + const std::nothrow_t&) __THROW; + static void* Perftools_newarray_nothrow(size_t size, + const std::nothrow_t&) __THROW; + static void Perftools_delete_nothrow(void *ptr, + const std::nothrow_t&) __THROW; + static void Perftools_deletearray_nothrow(void *ptr, + const std::nothrow_t&) __THROW; + static size_t Perftools__msize(void *ptr) __THROW; + static void* Perftools__expand(void *ptr, size_t size) __THROW; + // malloc.h also defines these functions: + // _aligned_malloc, _aligned_free, + // _recalloc, _aligned_offset_malloc, _aligned_realloc, _aligned_recalloc + // _aligned_offset_realloc, _aligned_offset_recalloc, _malloca, _freea + // But they seem pretty obscure, and I'm fine not overriding them for now. + // It may be they all call into malloc/free anyway. +}; + +// This is a subset of MODDULEENTRY32, that we need for patching. +struct ModuleEntryCopy { + LPVOID modBaseAddr; // the same as hmodule + DWORD modBaseSize; + // This is not part of MODDULEENTRY32, but is needed to avoid making + // windows syscalls while we're holding patch_all_modules_lock (see + // lock-inversion comments at patch_all_modules_lock definition, below). + GenericFnPtr rgProcAddresses[LibcInfo::ctrgProcAddress]; + + ModuleEntryCopy() { + modBaseAddr = NULL; + modBaseSize = 0; + for (int i = 0; i < sizeof(rgProcAddresses)/sizeof(*rgProcAddresses); i++) + rgProcAddresses[i] = LibcInfo::static_fn(i); + } + ModuleEntryCopy(const MODULEINFO& mi) { + this->modBaseAddr = mi.lpBaseOfDll; + this->modBaseSize = mi.SizeOfImage; + LPVOID modEndAddr = (char*)mi.lpBaseOfDll + mi.SizeOfImage; + for (int i = 0; i < sizeof(rgProcAddresses)/sizeof(*rgProcAddresses); i++) { + FARPROC target = ::GetProcAddress( + reinterpret_cast(mi.lpBaseOfDll), + LibcInfo::function_name(i)); + // Sometimes a DLL forwards a function to a function in another + // DLL. We don't want to patch those forwarded functions -- + // they'll get patched when the other DLL is processed. + if (target >= modBaseAddr && target < modEndAddr) + rgProcAddresses[i] = (GenericFnPtr)target; + else + rgProcAddresses[i] = (GenericFnPtr)NULL; + } + } +}; + +// This class is easier because there's only one of them. +class WindowsInfo { + public: + void Patch(); + void Unpatch(); + + private: + // TODO(csilvers): should we be patching GlobalAlloc/LocalAlloc instead, + // for pre-XP systems? + enum { + kHeapAlloc, kHeapFree, kVirtualAllocEx, kVirtualFreeEx, + kMapViewOfFileEx, kUnmapViewOfFile, kLoadLibraryExW, kFreeLibrary, + kNumFunctions + }; + + struct FunctionInfo { + const char* const name; // name of fn in a module (eg "malloc") + GenericFnPtr windows_fn; // the fn whose name we call (&malloc) + GenericFnPtr origstub_fn; // original fn contents after we patch + const GenericFnPtr perftools_fn; // fn we want to patch in + }; + + static FunctionInfo function_info_[kNumFunctions]; + + // A Windows-API equivalent of malloc and free + static LPVOID WINAPI Perftools_HeapAlloc(HANDLE hHeap, DWORD dwFlags, + DWORD_PTR dwBytes); + static BOOL WINAPI Perftools_HeapFree(HANDLE hHeap, DWORD dwFlags, + LPVOID lpMem); + // A Windows-API equivalent of mmap and munmap, for "anonymous regions" + static LPVOID WINAPI Perftools_VirtualAllocEx(HANDLE process, LPVOID address, + SIZE_T size, DWORD type, + DWORD protect); + static BOOL WINAPI Perftools_VirtualFreeEx(HANDLE process, LPVOID address, + SIZE_T size, DWORD type); + // A Windows-API equivalent of mmap and munmap, for actual files + static LPVOID WINAPI Perftools_MapViewOfFileEx(HANDLE hFileMappingObject, + DWORD dwDesiredAccess, + DWORD dwFileOffsetHigh, + DWORD dwFileOffsetLow, + SIZE_T dwNumberOfBytesToMap, + LPVOID lpBaseAddress); + static BOOL WINAPI Perftools_UnmapViewOfFile(LPCVOID lpBaseAddress); + // We don't need the other 3 variants because they all call this one. */ + static HMODULE WINAPI Perftools_LoadLibraryExW(LPCWSTR lpFileName, + HANDLE hFile, + DWORD dwFlags); + static BOOL WINAPI Perftools_FreeLibrary(HMODULE hLibModule); +}; + +// If you run out, just add a few more to the array. You'll also need +// to update the switch statement in PatchOneModule(), and the list in +// UnpatchWindowsFunctions(). +// main_executable and main_executable_windows are two windows into +// the same executable. One is responsible for patching the libc +// routines that live in the main executable (if any) to use tcmalloc; +// the other is responsible for patching the windows routines like +// HeapAlloc/etc to use tcmalloc. +static LibcInfoWithPatchFunctions<0> main_executable; +static LibcInfoWithPatchFunctions<1> libc1; +static LibcInfoWithPatchFunctions<2> libc2; +static LibcInfoWithPatchFunctions<3> libc3; +static LibcInfoWithPatchFunctions<4> libc4; +static LibcInfoWithPatchFunctions<5> libc5; +static LibcInfoWithPatchFunctions<6> libc6; +static LibcInfoWithPatchFunctions<7> libc7; +static LibcInfoWithPatchFunctions<8> libc8; +static LibcInfo* g_module_libcs[] = { + &libc1, &libc2, &libc3, &libc4, &libc5, &libc6, &libc7, &libc8 +}; +static WindowsInfo main_executable_windows; + +const char* const LibcInfo::function_name_[] = { + "malloc", "free", "realloc", "calloc", + kMangledNew, kMangledNewArray, kMangledDelete, kMangledDeleteArray, + // Ideally we should patch the nothrow versions of new/delete, but + // at least in msvcrt, nothrow-new machine-code is of a type we + // can't patch. Since these are relatively rare, I'm hoping it's ok + // not to patch them. (NULL name turns off patching.) + NULL, // kMangledNewNothrow, + NULL, // kMangledNewArrayNothrow, + NULL, // kMangledDeleteNothrow, + NULL, // kMangledDeleteArrayNothrow, + "_msize", "_expand", "_calloc_crt", +}; + +// For mingw, I can't patch the new/delete here, because the +// instructions are too small to patch. Luckily, they're so small +// because all they do is call into malloc/free, so they still end up +// calling tcmalloc routines, and we don't actually lose anything +// (except maybe some stacktrace goodness) by not patching. +const GenericFnPtr LibcInfo::static_fn_[] = { + (GenericFnPtr)&::malloc, + (GenericFnPtr)&::free, + (GenericFnPtr)&::realloc, + (GenericFnPtr)&::calloc, +#ifdef __MINGW32__ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +#else + (GenericFnPtr)(void*(*)(size_t))&::operator new, + (GenericFnPtr)(void*(*)(size_t))&::operator new[], + (GenericFnPtr)(void(*)(void*))&::operator delete, + (GenericFnPtr)(void(*)(void*))&::operator delete[], + (GenericFnPtr) + (void*(*)(size_t, struct std::nothrow_t const &))&::operator new, + (GenericFnPtr) + (void*(*)(size_t, struct std::nothrow_t const &))&::operator new[], + (GenericFnPtr) + (void(*)(void*, struct std::nothrow_t const &))&::operator delete, + (GenericFnPtr) + (void(*)(void*, struct std::nothrow_t const &))&::operator delete[], +#endif + (GenericFnPtr)&::_msize, + (GenericFnPtr)&::_expand, + (GenericFnPtr)&::calloc, +}; + +template GenericFnPtr LibcInfoWithPatchFunctions::origstub_fn_[] = { + // This will get filled in at run-time, as patching is done. +}; + +template +const GenericFnPtr LibcInfoWithPatchFunctions::perftools_fn_[] = { + (GenericFnPtr)&Perftools_malloc, + (GenericFnPtr)&Perftools_free, + (GenericFnPtr)&Perftools_realloc, + (GenericFnPtr)&Perftools_calloc, + (GenericFnPtr)&Perftools_new, + (GenericFnPtr)&Perftools_newarray, + (GenericFnPtr)&Perftools_delete, + (GenericFnPtr)&Perftools_deletearray, + (GenericFnPtr)&Perftools_new_nothrow, + (GenericFnPtr)&Perftools_newarray_nothrow, + (GenericFnPtr)&Perftools_delete_nothrow, + (GenericFnPtr)&Perftools_deletearray_nothrow, + (GenericFnPtr)&Perftools__msize, + (GenericFnPtr)&Perftools__expand, + (GenericFnPtr)&Perftools_calloc, +}; + +/*static*/ WindowsInfo::FunctionInfo WindowsInfo::function_info_[] = { + { "HeapAlloc", NULL, NULL, (GenericFnPtr)&Perftools_HeapAlloc }, + { "HeapFree", NULL, NULL, (GenericFnPtr)&Perftools_HeapFree }, + { "VirtualAllocEx", NULL, NULL, (GenericFnPtr)&Perftools_VirtualAllocEx }, + { "VirtualFreeEx", NULL, NULL, (GenericFnPtr)&Perftools_VirtualFreeEx }, + { "MapViewOfFileEx", NULL, NULL, (GenericFnPtr)&Perftools_MapViewOfFileEx }, + { "UnmapViewOfFile", NULL, NULL, (GenericFnPtr)&Perftools_UnmapViewOfFile }, + { "LoadLibraryExW", NULL, NULL, (GenericFnPtr)&Perftools_LoadLibraryExW }, + { "FreeLibrary", NULL, NULL, (GenericFnPtr)&Perftools_FreeLibrary }, +}; + +bool LibcInfo::PopulateWindowsFn(const ModuleEntryCopy& module_entry) { + // First, store the location of the function to patch before + // patching it. If none of these functions are found in the module, + // then this module has no libc in it, and we just return false. + for (int i = 0; i < kNumFunctions; i++) { + if (!function_name_[i]) // we can turn off patching by unsetting name + continue; + // The ::GetProcAddress calls were done in the ModuleEntryCopy + // constructor, so we don't have to make any windows calls here. + const GenericFnPtr fn = module_entry.rgProcAddresses[i]; + if (fn) { + windows_fn_[i] = PreamblePatcher::ResolveTarget(fn); + } + } + + // Some modules use the same function pointer for new and new[]. If + // we find that, set one of the pointers to NULL so we don't double- + // patch. Same may happen with new and nothrow-new, or even new[] + // and nothrow-new. It's easiest just to check each fn-ptr against + // every other. + for (int i = 0; i < kNumFunctions; i++) { + for (int j = i+1; j < kNumFunctions; j++) { + if (windows_fn_[i] == windows_fn_[j]) { + // We NULL the later one (j), so as to minimize the chances we + // NULL kFree and kRealloc. See comments below. This is fragile! + windows_fn_[j] = NULL; + } + } + } + + // There's always a chance that our module uses the same function + // as another module that we've already loaded. In that case, we + // need to set our windows_fn to NULL, to avoid double-patching. + for (int ifn = 0; ifn < kNumFunctions; ifn++) { + for (int imod = 0; + imod < sizeof(g_module_libcs)/sizeof(*g_module_libcs); imod++) { + if (g_module_libcs[imod]->is_valid() && + this->windows_fn(ifn) == g_module_libcs[imod]->windows_fn(ifn)) { + windows_fn_[ifn] = NULL; + } + } + } + + bool found_non_null = false; + for (int i = 0; i < kNumFunctions; i++) { + if (windows_fn_[i]) + found_non_null = true; + } + if (!found_non_null) + return false; + + // It's important we didn't NULL out windows_fn_[kFree] or [kRealloc]. + // The reason is, if those are NULL-ed out, we'll never patch them + // and thus never get an origstub_fn_ value for them, and when we + // try to call origstub_fn_[kFree/kRealloc] in Perftools_free and + // Perftools_realloc, below, it will fail. We could work around + // that by adding a pointer from one patch-unit to the other, but we + // haven't needed to yet. + CHECK(windows_fn_[kFree]); + CHECK(windows_fn_[kRealloc]); + + // OK, we successfully populated. Let's store our member information. + module_base_address_ = module_entry.modBaseAddr; + module_base_size_ = module_entry.modBaseSize; + return true; +} + +template +bool LibcInfoWithPatchFunctions::Patch(const LibcInfo& me_info) { + CopyFrom(me_info); // copies the module_entry and the windows_fn_ array + for (int i = 0; i < kNumFunctions; i++) { + if (windows_fn_[i] && windows_fn_[i] != perftools_fn_[i]) { + // if origstub_fn_ is not NULL, it's left around from a previous + // patch. We need to set it to NULL for the new Patch call. + // Since we've patched Unpatch() not to delete origstub_fn_ (it + // causes problems in some contexts, though obviously not this + // one), we should delete it now, before setting it to NULL. + // NOTE: casting from a function to a pointer is contra the C++ + // spec. It's not safe on IA64, but is on i386. We use + // a C-style cast here to emphasize this is not legal C++. + delete[] (char*)(origstub_fn_[i]); + origstub_fn_[i] = NULL; // Patch() will fill this in + CHECK_EQ(sidestep::SIDESTEP_SUCCESS, + PreamblePatcher::Patch(windows_fn_[i], perftools_fn_[i], + &origstub_fn_[i])); + } + } + set_is_valid(true); + return true; +} + +template +void LibcInfoWithPatchFunctions::Unpatch() { + // We have to cast our GenericFnPtrs to void* for unpatch. This is + // contra the C++ spec; we use C-style casts to empahsize that. + for (int i = 0; i < kNumFunctions; i++) { + if (windows_fn_[i]) + CHECK_EQ(sidestep::SIDESTEP_SUCCESS, + PreamblePatcher::Unpatch((void*)windows_fn_[i], + (void*)perftools_fn_[i], + (void*)origstub_fn_[i])); + } + set_is_valid(false); +} + +void WindowsInfo::Patch() { + HMODULE hkernel32 = ::GetModuleHandleA("kernel32"); + CHECK_NE(hkernel32, NULL); + + // Unlike for libc, we know these exist in our module, so we can get + // and patch at the same time. + for (int i = 0; i < kNumFunctions; i++) { + function_info_[i].windows_fn = (GenericFnPtr) + ::GetProcAddress(hkernel32, function_info_[i].name); + // If origstub_fn is not NULL, it's left around from a previous + // patch. We need to set it to NULL for the new Patch call. + // Since we've patched Unpatch() not to delete origstub_fn_ (it + // causes problems in some contexts, though obviously not this + // one), we should delete it now, before setting it to NULL. + // NOTE: casting from a function to a pointer is contra the C++ + // spec. It's not safe on IA64, but is on i386. We use + // a C-style cast here to emphasize this is not legal C++. + delete[] (char*)(function_info_[i].origstub_fn); + function_info_[i].origstub_fn = NULL; // Patch() will fill this in + CHECK_EQ(sidestep::SIDESTEP_SUCCESS, + PreamblePatcher::Patch(function_info_[i].windows_fn, + function_info_[i].perftools_fn, + &function_info_[i].origstub_fn)); + } +} + +void WindowsInfo::Unpatch() { + // We have to cast our GenericFnPtrs to void* for unpatch. This is + // contra the C++ spec; we use C-style casts to empahsize that. + for (int i = 0; i < kNumFunctions; i++) { + CHECK_EQ(sidestep::SIDESTEP_SUCCESS, + PreamblePatcher::Unpatch((void*)function_info_[i].windows_fn, + (void*)function_info_[i].perftools_fn, + (void*)function_info_[i].origstub_fn)); + } +} + +// You should hold the patch_all_modules_lock when calling this. +void PatchOneModuleLocked(const LibcInfo& me_info) { + // If we don't already have info on this module, let's add it. This + // is where we're sad that each libcX has a different type, so we + // can't use an array; instead, we have to use a switch statement. + // Patch() returns false if there were no libc functions in the module. + for (int i = 0; i < sizeof(g_module_libcs)/sizeof(*g_module_libcs); i++) { + if (!g_module_libcs[i]->is_valid()) { // found an empty spot to add! + switch (i) { + case 0: libc1.Patch(me_info); return; + case 1: libc2.Patch(me_info); return; + case 2: libc3.Patch(me_info); return; + case 3: libc4.Patch(me_info); return; + case 4: libc5.Patch(me_info); return; + case 5: libc6.Patch(me_info); return; + case 6: libc7.Patch(me_info); return; + case 7: libc8.Patch(me_info); return; + } + } + } + printf("PERFTOOLS ERROR: Too many modules containing libc in this executable\n"); +} + +void PatchMainExecutableLocked() { + if (main_executable.patched()) + return; // main executable has already been patched + ModuleEntryCopy fake_module_entry; // make a fake one to pass into Patch() + // No need to call PopulateModuleEntryProcAddresses on the main executable. + main_executable.PopulateWindowsFn(fake_module_entry); + main_executable.Patch(main_executable); +} + +// This lock is subject to a subtle and annoying lock inversion +// problem: it may interact badly with unknown internal windows locks. +// In particular, windows may be holding a lock when it calls +// LoadLibraryExW and FreeLibrary, which we've patched. We have those +// routines call PatchAllModules, which acquires this lock. If we +// make windows system calls while holding this lock, those system +// calls may need the internal windows locks that are being held in +// the call to LoadLibraryExW, resulting in deadlock. The solution is +// to be very careful not to call *any* windows routines while holding +// patch_all_modules_lock, inside PatchAllModules(). +static SpinLock patch_all_modules_lock(SpinLock::LINKER_INITIALIZED); + +// last_loaded: The set of modules that were loaded the last time +// PatchAllModules was called. This is an optimization for only +// looking at modules that were added or removed from the last call. +static std::set *g_last_loaded; + +// Iterates over all the modules currently loaded by the executable, +// according to windows, and makes sure they're all patched. Most +// modules will already be in loaded_modules, meaning we have already +// loaded and either patched them or determined they did not need to +// be patched. Others will not, which means we need to patch them +// (if necessary). Finally, we have to go through the existing +// g_module_libcs and see if any of those are *not* in the modules +// currently loaded by the executable. If so, we need to invalidate +// them. Returns true if we did any work (patching or invalidating), +// false if we were a noop. May update loaded_modules as well. +// NOTE: you must hold the patch_all_modules_lock to access loaded_modules. +bool PatchAllModules() { + std::vector modules; + bool made_changes = false; + + const HANDLE hCurrentProcess = GetCurrentProcess(); + DWORD num_modules = 0; + HMODULE hModules[kMaxModules]; // max # of modules we support in one process + if (!::EnumProcessModules(hCurrentProcess, hModules, sizeof(hModules), + &num_modules)) { + num_modules = 0; + } + // EnumProcessModules actually set the bytes written into hModules, + // so we need to divide to make num_modules actually be a module-count. + num_modules /= sizeof(*hModules); + if (num_modules >= kMaxModules) { + printf("PERFTOOLS ERROR: Too many modules in this executable to try" + " to patch them all (if you need to, raise kMaxModules in" + " patch_functions.cc).\n"); + num_modules = kMaxModules; + } + + // Now we handle the unpatching of modules we have in g_module_libcs + // but that were not found in EnumProcessModules. We need to + // invalidate them. To speed that up, we store the EnumProcessModules + // output in a set. + // At the same time, we prepare for the adding of new modules, by + // removing from hModules all the modules we know we've already + // patched (or decided don't need to be patched). At the end, + // hModules will hold only the modules that we need to consider patching. + std::set currently_loaded_modules; + { + SpinLockHolder h(&patch_all_modules_lock); + if (!g_last_loaded) g_last_loaded = new std::set; + // At the end of this loop, currently_loaded_modules contains the + // full list of EnumProcessModules, and hModules just the ones we + // haven't handled yet. + for (int i = 0; i < num_modules; ) { + currently_loaded_modules.insert(hModules[i]); + if (g_last_loaded->count(hModules[i]) > 0) { + hModules[i] = hModules[--num_modules]; // replace element i with tail + } else { + i++; // keep element i + } + } + // Now we do the unpatching/invalidation. + for (int i = 0; i < sizeof(g_module_libcs)/sizeof(*g_module_libcs); i++) { + if (g_module_libcs[i]->patched() && + currently_loaded_modules.count(g_module_libcs[i]->hmodule()) == 0) { + // Means g_module_libcs[i] is no longer loaded (no me32 matched). + // We could call Unpatch() here, but why bother? The module + // has gone away, so nobody is going to call into it anyway. + g_module_libcs[i]->set_is_valid(false); + made_changes = true; + } + } + // Update the loaded module cache. + g_last_loaded->swap(currently_loaded_modules); + } + + // Now that we know what modules are new, let's get the info we'll + // need to patch them. Note this *cannot* be done while holding the + // lock, since it needs to make windows calls (see the lock-inversion + // comments before the definition of patch_all_modules_lock). + MODULEINFO mi; + for (int i = 0; i < num_modules; i++) { + if (::GetModuleInformation(hCurrentProcess, hModules[i], &mi, sizeof(mi))) + modules.push_back(ModuleEntryCopy(mi)); + } + + // Now we can do the patching of new modules. + { + SpinLockHolder h(&patch_all_modules_lock); + for (std::vector::iterator it = modules.begin(); + it != modules.end(); ++it) { + LibcInfo libc_info; + if (libc_info.PopulateWindowsFn(*it)) { // true==module has libc routines + PatchOneModuleLocked(libc_info); + made_changes = true; + } + } + + // Now that we've dealt with the modules (dlls), update the main + // executable. We do this last because PatchMainExecutableLocked + // wants to look at how other modules were patched. + if (!main_executable.patched()) { + PatchMainExecutableLocked(); + made_changes = true; + } + } + // TODO(csilvers): for this to be reliable, we need to also take + // into account if we *would* have patched any modules had they not + // already been loaded. (That is, made_changes should ignore + // g_last_loaded.) + return made_changes; +} + + +} // end unnamed namespace + +// --------------------------------------------------------------------- +// Now that we've done all the patching machinery, let's actually +// define the functions we're patching in. Mostly these are +// simple wrappers around the do_* routines in tcmalloc.cc. +// +// In fact, we #include tcmalloc.cc to get at the tcmalloc internal +// do_* functions, the better to write our own hook functions. +// U-G-L-Y, I know. But the alternatives are, perhaps, worse. This +// also lets us define _msize(), _expand(), and other windows-specific +// functions here, using tcmalloc internals, without polluting +// tcmalloc.cc. +// ------------------------------------------------------------------- + +// TODO(csilvers): refactor tcmalloc.cc into two files, so I can link +// against the file with do_malloc, and ignore the one with malloc. +#include "tcmalloc.cc" + +template +void* LibcInfoWithPatchFunctions::Perftools_malloc(size_t size) __THROW { + void* result = do_malloc_or_cpp_alloc(size); + MallocHook::InvokeNewHook(result, size); + return result; +} + +template +void LibcInfoWithPatchFunctions::Perftools_free(void* ptr) __THROW { + MallocHook::InvokeDeleteHook(ptr); + // This calls the windows free if do_free decides ptr was not + // allocated by tcmalloc. Note it calls the origstub_free from + // *this* templatized instance of LibcInfo. See "template + // trickiness" above. + do_free_with_callback(ptr, (void (*)(void*))origstub_fn_[kFree]); +} + +template +void* LibcInfoWithPatchFunctions::Perftools_realloc( + void* old_ptr, size_t new_size) __THROW { + if (old_ptr == NULL) { + void* result = do_malloc_or_cpp_alloc(new_size); + MallocHook::InvokeNewHook(result, new_size); + return result; + } + if (new_size == 0) { + MallocHook::InvokeDeleteHook(old_ptr); + do_free_with_callback(old_ptr, + (void (*)(void*))origstub_fn_[kFree]); + return NULL; + } + return do_realloc_with_callback( + old_ptr, new_size, + (void (*)(void*))origstub_fn_[kFree], + (size_t (*)(const void*))origstub_fn_[k_Msize]); +} + +template +void* LibcInfoWithPatchFunctions::Perftools_calloc( + size_t n, size_t elem_size) __THROW { + void* result = do_calloc(n, elem_size); + MallocHook::InvokeNewHook(result, n * elem_size); + return result; +} + +template +void* LibcInfoWithPatchFunctions::Perftools_new(size_t size) { + void* p = cpp_alloc(size, false); + MallocHook::InvokeNewHook(p, size); + return p; +} + +template +void* LibcInfoWithPatchFunctions::Perftools_newarray(size_t size) { + void* p = cpp_alloc(size, false); + MallocHook::InvokeNewHook(p, size); + return p; +} + +template +void LibcInfoWithPatchFunctions::Perftools_delete(void *p) { + MallocHook::InvokeDeleteHook(p); + do_free_with_callback(p, (void (*)(void*))origstub_fn_[kFree]); +} + +template +void LibcInfoWithPatchFunctions::Perftools_deletearray(void *p) { + MallocHook::InvokeDeleteHook(p); + do_free_with_callback(p, (void (*)(void*))origstub_fn_[kFree]); +} + +template +void* LibcInfoWithPatchFunctions::Perftools_new_nothrow( + size_t size, const std::nothrow_t&) __THROW { + void* p = cpp_alloc(size, true); + MallocHook::InvokeNewHook(p, size); + return p; +} + +template +void* LibcInfoWithPatchFunctions::Perftools_newarray_nothrow( + size_t size, const std::nothrow_t&) __THROW { + void* p = cpp_alloc(size, true); + MallocHook::InvokeNewHook(p, size); + return p; +} + +template +void LibcInfoWithPatchFunctions::Perftools_delete_nothrow( + void *p, const std::nothrow_t&) __THROW { + MallocHook::InvokeDeleteHook(p); + do_free_with_callback(p, (void (*)(void*))origstub_fn_[kFree]); +} + +template +void LibcInfoWithPatchFunctions::Perftools_deletearray_nothrow( + void *p, const std::nothrow_t&) __THROW { + MallocHook::InvokeDeleteHook(p); + do_free_with_callback(p, (void (*)(void*))origstub_fn_[kFree]); +} + + +// _msize() lets you figure out how much space is reserved for a +// pointer, in Windows. Even if applications don't call it, any DLL +// with global constructors will call (transitively) something called +// __dllonexit_lk in order to make sure the destructors get called +// when the dll unloads. And that will call msize -- horrible things +// can ensue if this is not hooked. Other parts of libc may also call +// this internally. + +template +size_t LibcInfoWithPatchFunctions::Perftools__msize(void* ptr) __THROW { + return GetSizeWithCallback(ptr, (size_t (*)(const void*))origstub_fn_[k_Msize]); +} + +// We need to define this because internal windows functions like to +// call into it(?). _expand() is like realloc but doesn't move the +// pointer. We punt, which will cause callers to fall back on realloc. +template +void* LibcInfoWithPatchFunctions::Perftools__expand(void *ptr, + size_t size) __THROW { + return NULL; +} + +LPVOID WINAPI WindowsInfo::Perftools_HeapAlloc(HANDLE hHeap, DWORD dwFlags, + DWORD_PTR dwBytes) { + LPVOID result = ((LPVOID (WINAPI *)(HANDLE, DWORD, DWORD_PTR)) + function_info_[kHeapAlloc].origstub_fn)( + hHeap, dwFlags, dwBytes); + MallocHook::InvokeNewHook(result, dwBytes); + return result; +} + +BOOL WINAPI WindowsInfo::Perftools_HeapFree(HANDLE hHeap, DWORD dwFlags, + LPVOID lpMem) { + MallocHook::InvokeDeleteHook(lpMem); + return ((BOOL (WINAPI *)(HANDLE, DWORD, LPVOID)) + function_info_[kHeapFree].origstub_fn)( + hHeap, dwFlags, lpMem); +} + +LPVOID WINAPI WindowsInfo::Perftools_VirtualAllocEx(HANDLE process, + LPVOID address, + SIZE_T size, DWORD type, + DWORD protect) { + LPVOID result = ((LPVOID (WINAPI *)(HANDLE, LPVOID, SIZE_T, DWORD, DWORD)) + function_info_[kVirtualAllocEx].origstub_fn)( + process, address, size, type, protect); + // VirtualAllocEx() seems to be the Windows equivalent of mmap() + MallocHook::InvokeMmapHook(result, address, size, protect, type, -1, 0); + return result; +} + +BOOL WINAPI WindowsInfo::Perftools_VirtualFreeEx(HANDLE process, LPVOID address, + SIZE_T size, DWORD type) { + MallocHook::InvokeMunmapHook(address, size); + return ((BOOL (WINAPI *)(HANDLE, LPVOID, SIZE_T, DWORD)) + function_info_[kVirtualFreeEx].origstub_fn)( + process, address, size, type); +} + +LPVOID WINAPI WindowsInfo::Perftools_MapViewOfFileEx( + HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, + DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap, LPVOID lpBaseAddress) { + // For this function pair, you always deallocate the full block of + // data that you allocate, so NewHook/DeleteHook is the right API. + LPVOID result = ((LPVOID (WINAPI *)(HANDLE, DWORD, DWORD, DWORD, + SIZE_T, LPVOID)) + function_info_[kMapViewOfFileEx].origstub_fn)( + hFileMappingObject, dwDesiredAccess, dwFileOffsetHigh, + dwFileOffsetLow, dwNumberOfBytesToMap, lpBaseAddress); + MallocHook::InvokeNewHook(result, dwNumberOfBytesToMap); + return result; +} + +BOOL WINAPI WindowsInfo::Perftools_UnmapViewOfFile(LPCVOID lpBaseAddress) { + MallocHook::InvokeDeleteHook(lpBaseAddress); + return ((BOOL (WINAPI *)(LPCVOID)) + function_info_[kUnmapViewOfFile].origstub_fn)( + lpBaseAddress); +} + +// g_load_map holds a copy of windows' refcount for how many times +// each currently loaded module has been loaded and unloaded. We use +// it as an optimization when the same module is loaded more than +// once: as long as the refcount stays above 1, we don't need to worry +// about patching because it's already patched. Likewise, we don't +// need to unpatch until the refcount drops to 0. load_map is +// maintained in LoadLibraryExW and FreeLibrary, and only covers +// modules explicitly loaded/freed via those interfaces. +static std::map* g_load_map = NULL; + +HMODULE WINAPI WindowsInfo::Perftools_LoadLibraryExW(LPCWSTR lpFileName, + HANDLE hFile, + DWORD dwFlags) { + HMODULE rv; + // Check to see if the modules is already loaded, flag 0 gets a + // reference if it was loaded. If it was loaded no need to call + // PatchAllModules, just increase the reference count to match + // what GetModuleHandleExW does internally inside windows. + if (::GetModuleHandleExW(0, lpFileName, &rv)) { + return rv; + } else { + // Not already loaded, so load it. + rv = ((HMODULE (WINAPI *)(LPCWSTR, HANDLE, DWORD)) + function_info_[kLoadLibraryExW].origstub_fn)( + lpFileName, hFile, dwFlags); + // This will patch any newly loaded libraries, if patching needs + // to be done. + PatchAllModules(); + + return rv; + } +} + +BOOL WINAPI WindowsInfo::Perftools_FreeLibrary(HMODULE hLibModule) { + BOOL rv = ((BOOL (WINAPI *)(HMODULE)) + function_info_[kFreeLibrary].origstub_fn)(hLibModule); + + // Check to see if the module is still loaded by passing the base + // address and seeing if it comes back with the same address. If it + // is the same address it's still loaded, so the FreeLibrary() call + // was a noop, and there's no need to redo the patching. + HMODULE owner = NULL; + BOOL result = ::GetModuleHandleExW( + (GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | + GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT), + (LPCWSTR)hLibModule, + &owner); + if (result && owner == hLibModule) + return rv; + + PatchAllModules(); // this will fix up the list of patched libraries + return rv; +} + + +// --------------------------------------------------------------------- +// PatchWindowsFunctions() +// This is the function that is exposed to the outside world. +// It should be called before the program becomes multi-threaded, +// since main_executable_windows.Patch() is not thread-safe. +// --------------------------------------------------------------------- + +void PatchWindowsFunctions() { + // This does the libc patching in every module, and the main executable. + PatchAllModules(); + main_executable_windows.Patch(); +} + +#if 0 +// It's possible to unpatch all the functions when we are exiting. + +// The idea is to handle properly windows-internal data that is +// allocated before PatchWindowsFunctions is called. If all +// destruction happened in reverse order from construction, then we +// could call UnpatchWindowsFunctions at just the right time, so that +// that early-allocated data would be freed using the windows +// allocation functions rather than tcmalloc. The problem is that +// windows allocates some structures lazily, so it would allocate them +// late (using tcmalloc) and then try to deallocate them late as well. +// So instead of unpatching, we just modify all the tcmalloc routines +// so they call through to the libc rountines if the memory in +// question doesn't seem to have been allocated with tcmalloc. I keep +// this unpatch code around for reference. + +void UnpatchWindowsFunctions() { + // We need to go back to the system malloc/etc at global destruct time, + // so objects that were constructed before tcmalloc, using the system + // malloc, can destroy themselves using the system free. This depends + // on DLLs unloading in the reverse order in which they load! + // + // We also go back to the default HeapAlloc/etc, just for consistency. + // Who knows, it may help avoid weird bugs in some situations. + main_executable_windows.Unpatch(); + main_executable.Unpatch(); + if (libc1.is_valid()) libc1.Unpatch(); + if (libc2.is_valid()) libc2.Unpatch(); + if (libc3.is_valid()) libc3.Unpatch(); + if (libc4.is_valid()) libc4.Unpatch(); + if (libc5.is_valid()) libc5.Unpatch(); + if (libc6.is_valid()) libc6.Unpatch(); + if (libc7.is_valid()) libc7.Unpatch(); + if (libc8.is_valid()) libc8.Unpatch(); +} +#endif diff --git a/src/thirdparty/gperftools-2.0/src/windows/port.cc b/src/thirdparty/gperftools-2.0/src/windows/port.cc new file mode 100644 index 000000000..e68de163d --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/port.cc @@ -0,0 +1,294 @@ +/* Copyright (c) 2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Craig Silverstein + */ + +#ifndef _WIN32 +# error You should only be including windows/port.cc in a windows environment! +#endif + +#define NOMINMAX // so std::max, below, compiles correctly +#include +#include // for strlen(), memset(), memcmp() +#include +#include // for va_list, va_start, va_end +#include +#include "port.h" +#include "base/logging.h" +#include "base/spinlock.h" +#include "internal_logging.h" +#include "system-alloc.h" + +// ----------------------------------------------------------------------- +// Basic libraries + +int getpagesize() { + static int pagesize = 0; + if (pagesize == 0) { + SYSTEM_INFO system_info; + GetSystemInfo(&system_info); + pagesize = std::max(system_info.dwPageSize, + system_info.dwAllocationGranularity); + } + return pagesize; +} + +extern "C" PERFTOOLS_DLL_DECL void* __sbrk(ptrdiff_t increment) { + LOG(FATAL, "Windows doesn't implement sbrk!\n"); + return NULL; +} + +// We need to write to 'stderr' without having windows allocate memory. +// The safest way is via a low-level call like WriteConsoleA(). But +// even then we need to be sure to print in small bursts so as to not +// require memory allocation. +extern "C" PERFTOOLS_DLL_DECL void WriteToStderr(const char* buf, int len) { + // Looks like windows allocates for writes of >80 bytes + for (int i = 0; i < len; i += 80) { + write(STDERR_FILENO, buf + i, std::min(80, len - i)); + } +} + + +// ----------------------------------------------------------------------- +// Threads code + +// Declared (not extern "C") in thread_cache.h +bool CheckIfKernelSupportsTLS() { + // TODO(csilvers): return true (all win's since win95, at least, support this) + return false; +} + +// Windows doesn't support pthread_key_create's destr_function, and in +// fact it's a bit tricky to get code to run when a thread exits. This +// is cargo-cult magic from http://www.codeproject.com/threads/tls.asp. +// This code is for VC++ 7.1 and later; VC++ 6.0 support is possible +// but more busy-work -- see the webpage for how to do it. If all +// this fails, we could use DllMain instead. The big problem with +// DllMain is it doesn't run if this code is statically linked into a +// binary (it also doesn't run if the thread is terminated via +// TerminateThread, which if we're lucky this routine does). + +// Force a reference to _tls_used to make the linker create the TLS directory +// if it's not already there (that is, even if __declspec(thread) is not used). +// Force a reference to p_thread_callback_tcmalloc and p_process_term_tcmalloc +// to prevent whole program optimization from discarding the variables. +#ifdef _MSC_VER +#if defined(_M_IX86) +#pragma comment(linker, "/INCLUDE:__tls_used") +#pragma comment(linker, "/INCLUDE:_p_thread_callback_tcmalloc") +#pragma comment(linker, "/INCLUDE:_p_process_term_tcmalloc") +#elif defined(_M_X64) +#pragma comment(linker, "/INCLUDE:_tls_used") +#pragma comment(linker, "/INCLUDE:p_thread_callback_tcmalloc") +#pragma comment(linker, "/INCLUDE:p_process_term_tcmalloc") +#endif +#endif + +// When destr_fn eventually runs, it's supposed to take as its +// argument the tls-value associated with key that pthread_key_create +// creates. (Yeah, it sounds confusing but it's really not.) We +// store the destr_fn/key pair in this data structure. Because we +// store this in a single var, this implies we can only have one +// destr_fn in a program! That's enough in practice. If asserts +// trigger because we end up needing more, we'll have to turn this +// into an array. +struct DestrFnClosure { + void (*destr_fn)(void*); + pthread_key_t key_for_destr_fn_arg; +}; + +static DestrFnClosure destr_fn_info; // initted to all NULL/0. + +static int on_process_term(void) { + if (destr_fn_info.destr_fn) { + void *ptr = TlsGetValue(destr_fn_info.key_for_destr_fn_arg); + // This shouldn't be necessary, but in Release mode, Windows + // sometimes trashes the pointer in the TLS slot, so we need to + // remove the pointer from the TLS slot before the thread dies. + TlsSetValue(destr_fn_info.key_for_destr_fn_arg, NULL); + if (ptr) // pthread semantics say not to call if ptr is NULL + (*destr_fn_info.destr_fn)(ptr); + } + return 0; +} + +static void NTAPI on_tls_callback(HINSTANCE h, DWORD dwReason, PVOID pv) { + if (dwReason == DLL_THREAD_DETACH) { // thread is being destroyed! + on_process_term(); + } +} + +#ifdef _MSC_VER + +// extern "C" suppresses C++ name mangling so we know the symbol names +// for the linker /INCLUDE:symbol pragmas above. +extern "C" { +// This tells the linker to run these functions. +#pragma data_seg(push, old_seg) +#pragma data_seg(".CRT$XLB") +void (NTAPI *p_thread_callback_tcmalloc)( + HINSTANCE h, DWORD dwReason, PVOID pv) = on_tls_callback; +#pragma data_seg(".CRT$XTU") +int (*p_process_term_tcmalloc)(void) = on_process_term; +#pragma data_seg(pop, old_seg) +} // extern "C" + +#else // #ifdef _MSC_VER [probably msys/mingw] + +// We have to try the DllMain solution here, because we can't use the +// msvc-specific pragmas. +BOOL WINAPI DllMain(HINSTANCE h, DWORD dwReason, PVOID pv) { + if (dwReason == DLL_THREAD_DETACH) + on_tls_callback(h, dwReason, pv); + else if (dwReason == DLL_PROCESS_DETACH) + on_process_term(); + return TRUE; +} + +#endif // #ifdef _MSC_VER + +extern "C" pthread_key_t PthreadKeyCreate(void (*destr_fn)(void*)) { + // Semantics are: we create a new key, and then promise to call + // destr_fn with TlsGetValue(key) when the thread is destroyed + // (as long as TlsGetValue(key) is not NULL). + pthread_key_t key = TlsAlloc(); + if (destr_fn) { // register it + // If this assert fails, we'll need to support an array of destr_fn_infos + assert(destr_fn_info.destr_fn == NULL); + destr_fn_info.destr_fn = destr_fn; + destr_fn_info.key_for_destr_fn_arg = key; + } + return key; +} + +// NOTE: this is Win2K and later. For Win98 we could use a CRITICAL_SECTION... +extern "C" int perftools_pthread_once(pthread_once_t *once_control, + void (*init_routine)(void)) { + // Try for a fast path first. Note: this should be an acquire semantics read. + // It is on x86 and x64, where Windows runs. + if (*once_control != 1) { + while (true) { + switch (InterlockedCompareExchange(once_control, 2, 0)) { + case 0: + init_routine(); + InterlockedExchange(once_control, 1); + return 0; + case 1: + // The initializer has already been executed + return 0; + default: + // The initializer is being processed by another thread + SwitchToThread(); + } + } + } + return 0; +} + + +// ----------------------------------------------------------------------- +// These functions replace system-alloc.cc + +// This is mostly like MmapSysAllocator::Alloc, except it does these weird +// munmap's in the middle of the page, which is forbidden in windows. +extern void* TCMalloc_SystemAlloc(size_t size, size_t *actual_size, + size_t alignment) { + // Align on the pagesize boundary + const int pagesize = getpagesize(); + if (alignment < pagesize) alignment = pagesize; + size = ((size + alignment - 1) / alignment) * alignment; + + // Safest is to make actual_size same as input-size. + if (actual_size) { + *actual_size = size; + } + + // Ask for extra memory if alignment > pagesize + size_t extra = 0; + if (alignment > pagesize) { + extra = alignment - pagesize; + } + + void* result = VirtualAlloc(0, size + extra, + MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE); + if (result == NULL) + return NULL; + + // Adjust the return memory so it is aligned + uintptr_t ptr = reinterpret_cast(result); + size_t adjust = 0; + if ((ptr & (alignment - 1)) != 0) { + adjust = alignment - (ptr & (alignment - 1)); + } + + ptr += adjust; + return reinterpret_cast(ptr); +} + +void TCMalloc_SystemRelease(void* start, size_t length) { + // TODO(csilvers): should I be calling VirtualFree here? +} + +bool RegisterSystemAllocator(SysAllocator *allocator, int priority) { + return false; // we don't allow registration on windows, right now +} + +void DumpSystemAllocatorStats(TCMalloc_Printer* printer) { + // We don't dump stats on windows, right now +} + +// The current system allocator +SysAllocator* sys_alloc = NULL; + + +// ----------------------------------------------------------------------- +// These functions rework existing functions of the same name in the +// Google codebase. + +// A replacement for HeapProfiler::CleanupOldProfiles. +void DeleteMatchingFiles(const char* prefix, const char* full_glob) { + WIN32_FIND_DATAA found; // that final A is for Ansi (as opposed to Unicode) + HANDLE hFind = FindFirstFileA(full_glob, &found); // A is for Ansi + if (hFind != INVALID_HANDLE_VALUE) { + const int prefix_length = strlen(prefix); + do { + const char *fname = found.cFileName; + if ((strlen(fname) >= prefix_length) && + (memcmp(fname, prefix, prefix_length) == 0)) { + RAW_VLOG(0, "Removing old heap profile %s\n", fname); + // TODO(csilvers): we really need to unlink dirname + fname + _unlink(fname); + } + } while (FindNextFileA(hFind, &found) != FALSE); // A is for Ansi + FindClose(hFind); + } +} diff --git a/src/thirdparty/gperftools-2.0/src/windows/port.h b/src/thirdparty/gperftools-2.0/src/windows/port.h new file mode 100644 index 000000000..e9a020656 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/port.h @@ -0,0 +1,474 @@ +/* Copyright (c) 2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Craig Silverstein + * + * These are some portability typedefs and defines to make it a bit + * easier to compile this code under VC++. + * + * Several of these are taken from glib: + * http://developer.gnome.org/doc/API/glib/glib-windows-compatability-functions.html + */ + +#ifndef GOOGLE_BASE_WINDOWS_H_ +#define GOOGLE_BASE_WINDOWS_H_ + +/* You should never include this file directly, but always include it + from either config.h (MSVC) or mingw.h (MinGW/msys). */ +#if !defined(GOOGLE_PERFTOOLS_WINDOWS_CONFIG_H_) && \ + !defined(GOOGLE_PERFTOOLS_WINDOWS_MINGW_H_) +# error "port.h should only be included from config.h or mingw.h" +#endif + +#ifdef _WIN32 + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN /* We always want minimal includes */ +#endif +#include +#include /* because we so often use open/close/etc */ +#include /* for _getcwd */ +#include /* for _getpid */ +#include /* for PATH_MAX */ +#include /* for va_list */ +#include /* need this to override stdio's (v)snprintf */ +#include /* for _off_t */ +#include +#include /* for rand, srand, _strtoxxx */ + +/* + * 4018: signed/unsigned mismatch is common (and ok for signed_i < unsigned_i) + * 4244: otherwise we get problems when subtracting two size_t's to an int + * 4288: VC++7 gets confused when a var is defined in a loop and then after it + * 4267: too many false positives for "conversion gives possible data loss" + * 4290: it's ok windows ignores the "throw" directive + * 4996: Yes, we're ok using "unsafe" functions like vsnprintf and getenv() + * 4146: internal_logging.cc intentionally negates an unsigned value + */ +#ifdef _MSC_VER +#pragma warning(disable:4018 4244 4288 4267 4290 4996 4146) +#endif + +#ifndef __cplusplus +/* MSVC does not support C99 */ +# if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L +# ifdef _MSC_VER +# define inline __inline +# else +# define inline static +# endif +# endif +#endif + +#ifdef __cplusplus +# define EXTERN_C extern "C" +#else +# define EXTERN_C extern +#endif + +/* ----------------------------------- BASIC TYPES */ + +#ifndef HAVE_STDINT_H +#ifndef HAVE___INT64 /* we need to have all the __intX names */ +# error Do not know how to set up type aliases. Edit port.h for your system. +#endif + +typedef __int8 int8_t; +typedef __int16 int16_t; +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int8 uint8_t; +typedef unsigned __int16 uint16_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int64 uint64_t; +#endif /* #ifndef HAVE_STDINT_H */ + +/* I guess MSVC's doesn't include ssize_t by default? */ +#ifdef _MSC_VER +typedef intptr_t ssize_t; +#endif + +/* ----------------------------------- THREADS */ + +#ifndef HAVE_PTHREAD /* not true for MSVC, but may be true for MSYS */ +typedef DWORD pthread_t; +typedef DWORD pthread_key_t; +typedef LONG pthread_once_t; +enum { PTHREAD_ONCE_INIT = 0 }; /* important that this be 0! for SpinLock */ + +inline pthread_t pthread_self(void) { + return GetCurrentThreadId(); +} + +#ifdef __cplusplus +inline bool pthread_equal(pthread_t left, pthread_t right) { + return left == right; +} + +/* This replaces maybe_threads.{h,cc} */ +EXTERN_C pthread_key_t PthreadKeyCreate(void (*destr_fn)(void*)); /* port.cc */ + +inline int perftools_pthread_key_create(pthread_key_t *pkey, + void (*destructor)(void*)) { + pthread_key_t key = PthreadKeyCreate(destructor); + if (key != TLS_OUT_OF_INDEXES) { + *(pkey) = key; + return 0; + } else { + return GetLastError(); + } +} + +inline void* perftools_pthread_getspecific(DWORD key) { + DWORD err = GetLastError(); + void* rv = TlsGetValue(key); + if (err) SetLastError(err); + return rv; +} + +inline int perftools_pthread_setspecific(pthread_key_t key, const void *value) { + if (TlsSetValue(key, (LPVOID)value)) + return 0; + else + return GetLastError(); +} + +EXTERN_C int perftools_pthread_once(pthread_once_t *once_control, + void (*init_routine)(void)); + +#endif /* __cplusplus */ +#endif /* HAVE_PTHREAD */ + +inline void sched_yield(void) { + Sleep(0); +} + +/* + * __declspec(thread) isn't usable in a dll opened via LoadLibrary(). + * But it doesn't work to LoadLibrary() us anyway, because of all the + * things we need to do before main()! So this kind of TLS is safe for us. + */ +#define __thread __declspec(thread) + +/* + * This code is obsolete, but I keep it around in case we are ever in + * an environment where we can't or don't want to use google spinlocks + * (from base/spinlock.{h,cc}). In that case, uncommenting this out, + * and removing spinlock.cc from the build, should be enough to revert + * back to using native spinlocks. + */ +#if 0 +// Windows uses a spinlock internally for its mutexes, making our life easy! +// However, the Windows spinlock must always be initialized, making life hard, +// since we want LINKER_INITIALIZED. We work around this by having the +// linker initialize a bool to 0, and check that before accessing the mutex. +// This replaces spinlock.{h,cc}, and all the stuff it depends on (atomicops) +#ifdef __cplusplus +class SpinLock { + public: + SpinLock() : initialize_token_(PTHREAD_ONCE_INIT) {} + // Used for global SpinLock vars (see base/spinlock.h for more details). + enum StaticInitializer { LINKER_INITIALIZED }; + explicit SpinLock(StaticInitializer) : initialize_token_(PTHREAD_ONCE_INIT) { + perftools_pthread_once(&initialize_token_, InitializeMutex); + } + + // It's important SpinLock not have a destructor: otherwise we run + // into problems when the main thread has exited, but other threads + // are still running and try to access a main-thread spinlock. This + // means we leak mutex_ (we should call DeleteCriticalSection() + // here). However, I've verified that all SpinLocks used in + // perftools have program-long scope anyway, so the leak is + // perfectly fine. But be aware of this for the future! + + void Lock() { + // You'd thionk this would be unnecessary, since we call + // InitializeMutex() in our constructor. But sometimes Lock() can + // be called before our constructor is! This can only happen in + // global constructors, when this is a global. If we live in + // bar.cc, and some global constructor in foo.cc calls a routine + // in bar.cc that calls this->Lock(), then Lock() may well run + // before our global constructor does. To protect against that, + // we do this check. For SpinLock objects created after main() + // has started, this pthread_once call will always be a noop. + perftools_pthread_once(&initialize_token_, InitializeMutex); + EnterCriticalSection(&mutex_); + } + void Unlock() { + LeaveCriticalSection(&mutex_); + } + + // Used in assertion checks: assert(lock.IsHeld()) (see base/spinlock.h). + inline bool IsHeld() const { + // This works, but probes undocumented internals, so I've commented it out. + // c.f. http://msdn.microsoft.com/msdnmag/issues/03/12/CriticalSections/ + //return mutex_.LockCount>=0 && mutex_.OwningThread==GetCurrentThreadId(); + return true; + } + private: + void InitializeMutex() { InitializeCriticalSection(&mutex_); } + + pthread_once_t initialize_token_; + CRITICAL_SECTION mutex_; +}; + +class SpinLockHolder { // Acquires a spinlock for as long as the scope lasts + private: + SpinLock* lock_; + public: + inline explicit SpinLockHolder(SpinLock* l) : lock_(l) { l->Lock(); } + inline ~SpinLockHolder() { lock_->Unlock(); } +}; +#endif // #ifdef __cplusplus + +// This keeps us from using base/spinlock.h's implementation of SpinLock. +#define BASE_SPINLOCK_H_ 1 + +#endif /* #if 0 */ + +/* ----------------------------------- MMAP and other memory allocation */ + +#ifndef HAVE_MMAP /* not true for MSVC, but may be true for msys */ +#define MAP_FAILED 0 +#define MREMAP_FIXED 2 /* the value in linux, though it doesn't really matter */ +/* These, when combined with the mmap invariants below, yield the proper action */ +#define PROT_READ PAGE_READWRITE +#define PROT_WRITE PAGE_READWRITE +#define MAP_ANONYMOUS MEM_RESERVE +#define MAP_PRIVATE MEM_COMMIT +#define MAP_SHARED MEM_RESERVE /* value of this #define is 100% arbitrary */ + +#if __STDC__ && !defined(__MINGW32__) +typedef _off_t off_t; +#endif + +/* VirtualAlloc only replaces for mmap when certain invariants are kept. */ +inline void *mmap(void *addr, size_t length, int prot, int flags, + int fd, off_t offset) { + if (addr == NULL && fd == -1 && offset == 0 && + prot == (PROT_READ|PROT_WRITE) && flags == (MAP_PRIVATE|MAP_ANONYMOUS)) { + return VirtualAlloc(0, length, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); + } else { + return NULL; + } +} + +inline int munmap(void *addr, size_t length) { + return VirtualFree(addr, 0, MEM_RELEASE) ? 0 : -1; +} +#endif /* HAVE_MMAP */ + +/* We could maybe use VirtualAlloc for sbrk as well, but no need */ +inline void *sbrk(intptr_t increment) { + // sbrk returns -1 on failure + return (void*)-1; +} + + +/* ----------------------------------- STRING ROUTINES */ + +/* + * We can't just use _vsnprintf and _snprintf as drop-in-replacements, + * because they don't always NUL-terminate. :-( We also can't use the + * name vsnprintf, since windows defines that (but not snprintf (!)). + */ +#if defined(_MSC_VER) && _MSC_VER >= 1400 +/* We can use safe CRT functions, which the required functionality */ +inline int perftools_vsnprintf(char *str, size_t size, const char *format, + va_list ap) { + return vsnprintf_s(str, size, _TRUNCATE, format, ap); +} +#else +inline int perftools_vsnprintf(char *str, size_t size, const char *format, + va_list ap) { + if (size == 0) /* not even room for a \0? */ + return -1; /* not what C99 says to do, but what windows does */ + str[size-1] = '\0'; + return _vsnprintf(str, size-1, format, ap); +} +#endif + +#ifndef HAVE_SNPRINTF +inline int snprintf(char *str, size_t size, const char *format, ...) { + va_list ap; + int r; + va_start(ap, format); + r = perftools_vsnprintf(str, size, format, ap); + va_end(ap); + return r; +} +#endif + +#define PRIx64 "I64x" +#define SCNx64 "I64x" +#define PRId64 "I64d" +#define SCNd64 "I64d" +#define PRIu64 "I64u" +#ifdef _WIN64 +# define PRIuPTR "llu" +# define PRIxPTR "llx" +#else +# define PRIuPTR "lu" +# define PRIxPTR "lx" +#endif + +/* ----------------------------------- FILE IO */ + +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif +#ifndef __MINGW32__ +enum { STDIN_FILENO = 0, STDOUT_FILENO = 1, STDERR_FILENO = 2 }; +#endif +#ifndef O_RDONLY +#define O_RDONLY _O_RDONLY +#endif + +#if __STDC__ && !defined(__MINGW32__) +/* These functions are considered non-standard */ +inline int access(const char *pathname, int mode) { + return _access(pathname, mode); +} +inline int open(const char *pathname, int flags, int mode = 0) { + return _open(pathname, flags, mode); +} +inline int close(int fd) { + return _close(fd); +} +inline ssize_t read(int fd, void *buf, size_t count) { + return _read(fd, buf, count); +} +inline ssize_t write(int fd, const void *buf, size_t count) { + return _write(fd, buf, count); +} +inline off_t lseek(int fd, off_t offset, int whence) { + return _lseek(fd, offset, whence); +} +inline char *getcwd(char *buf, size_t size) { + return _getcwd(buf, size); +} +inline int mkdir(const char *pathname, int) { + return _mkdir(pathname); +} + +inline FILE *popen(const char *command, const char *type) { + return _popen(command, type); +} +inline int pclose(FILE *stream) { + return _pclose(stream); +} +#endif + +EXTERN_C PERFTOOLS_DLL_DECL void WriteToStderr(const char* buf, int len); + +/* ----------------------------------- SYSTEM/PROCESS */ + +typedef int pid_t; +#if __STDC__ && !defined(__MINGW32__) +inline pid_t getpid(void) { return _getpid(); } +#endif +inline pid_t getppid(void) { return 0; } + +/* Handle case when poll is used to simulate sleep. */ +inline int poll(struct pollfd* fds, int nfds, int timeout) { + assert(fds == NULL); + assert(nfds == 0); + Sleep(timeout); + return 0; +} + +EXTERN_C int getpagesize(); /* in port.cc */ + +/* ----------------------------------- OTHER */ + +inline void srandom(unsigned int seed) { srand(seed); } +inline long random(void) { return rand(); } +inline unsigned int sleep(unsigned int seconds) { + Sleep(seconds * 1000); + return 0; +} + +// mingw64 seems to define timespec (though mingw.org mingw doesn't), +// protected by the _TIMESPEC_DEFINED macro. +#ifndef _TIMESPEC_DEFINED +struct timespec { + int tv_sec; + int tv_nsec; +}; +#endif + +inline int nanosleep(const struct timespec *req, struct timespec *rem) { + Sleep(req->tv_sec * 1000 + req->tv_nsec / 1000000); + return 0; +} + +#ifndef __MINGW32__ +inline long long int strtoll(const char *nptr, char **endptr, int base) { + return _strtoi64(nptr, endptr, base); +} +inline unsigned long long int strtoull(const char *nptr, char **endptr, + int base) { + return _strtoui64(nptr, endptr, base); +} +inline long long int strtoq(const char *nptr, char **endptr, int base) { + return _strtoi64(nptr, endptr, base); +} +inline unsigned long long int strtouq(const char *nptr, char **endptr, + int base) { + return _strtoui64(nptr, endptr, base); +} +inline long long atoll(const char *nptr) { + return _atoi64(nptr); +} +#endif + +#define __THROW throw() + +/* ----------------------------------- TCMALLOC-SPECIFIC */ + +/* tcmalloc.cc calls this so we can patch VirtualAlloc() et al. */ +extern void PatchWindowsFunctions(); + +// ----------------------------------- BUILD-SPECIFIC + +/* + * windows/port.h defines compatibility APIs for several .h files, which + * we therefore shouldn't be #including directly. This hack keeps us from + * doing so. TODO(csilvers): do something more principled. + */ +#define GOOGLE_MAYBE_THREADS_H_ 1 + + +#endif /* _WIN32 */ + +#undef inline +#undef EXTERN_C + +#endif /* GOOGLE_BASE_WINDOWS_H_ */ diff --git a/src/thirdparty/gperftools-2.0/src/windows/preamble_patcher.cc b/src/thirdparty/gperftools-2.0/src/windows/preamble_patcher.cc new file mode 100644 index 000000000..b27a95bcb --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/preamble_patcher.cc @@ -0,0 +1,684 @@ +/* Copyright (c) 2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Joi Sigurdsson + * Author: Scott Francis + * + * Implementation of PreamblePatcher + */ + +#include "preamble_patcher.h" + +#include "mini_disassembler.h" + +// compatibility shims +#include "base/logging.h" + +// Definitions of assembly statements we need +#define ASM_JMP32REL 0xE9 +#define ASM_INT3 0xCC +#define ASM_JMP32ABS_0 0xFF +#define ASM_JMP32ABS_1 0x25 +#define ASM_JMP8REL 0xEB +#define ASM_JCC32REL_0 0x0F +#define ASM_JCC32REL_1_MASK 0x80 +#define ASM_NOP 0x90 +// X64 opcodes +#define ASM_REXW 0x48 +#define ASM_MOVRAX_IMM 0xB8 +#define ASM_JMP 0xFF +#define ASM_JMP_RAX 0xE0 + +namespace sidestep { + +PreamblePatcher::PreamblePage* PreamblePatcher::preamble_pages_ = NULL; +long PreamblePatcher::granularity_ = 0; +long PreamblePatcher::pagesize_ = 0; +bool PreamblePatcher::initialized_ = false; + +static const unsigned int kPreamblePageMagic = 0x4347414D; // "MAGC" + +// Handle a special case that we see with functions that point into an +// IAT table (including functions linked statically into the +// application): these function already starts with ASM_JMP32*. For +// instance, malloc() might be implemented as a JMP to __malloc(). +// This function follows the initial JMPs for us, until we get to the +// place where the actual code is defined. If we get to STOP_BEFORE, +// we return the address before stop_before. The stop_before_trampoline +// flag is used in 64-bit mode. If true, we will return the address +// before a trampoline is detected. Trampolines are defined as: +// +// nop +// mov rax, +// jmp rax +// +// See PreamblePatcher::RawPatchWithStub for more information. +void* PreamblePatcher::ResolveTargetImpl(unsigned char* target, + unsigned char* stop_before, + bool stop_before_trampoline) { + if (target == NULL) + return NULL; + while (1) { + unsigned char* new_target; + if (target[0] == ASM_JMP32REL) { + // target[1-4] holds the place the jmp goes to, but it's + // relative to the next instruction. + int relative_offset; // Windows guarantees int is 4 bytes + SIDESTEP_ASSERT(sizeof(relative_offset) == 4); + memcpy(reinterpret_cast(&relative_offset), + reinterpret_cast(target + 1), 4); + new_target = target + 5 + relative_offset; + } else if (target[0] == ASM_JMP8REL) { + // Visual Studio 7.1 implements new[] as an 8 bit jump to new + signed char relative_offset; + memcpy(reinterpret_cast(&relative_offset), + reinterpret_cast(target + 1), 1); + new_target = target + 2 + relative_offset; + } else if (target[0] == ASM_JMP32ABS_0 && + target[1] == ASM_JMP32ABS_1) { + // Visual studio seems to sometimes do it this way instead of the + // previous way. Not sure what the rules are, but it was happening + // with operator new in some binaries. + void** new_target_v; + if (kIs64BitBinary) { + // In 64-bit mode JMPs are RIP-relative, not absolute + int target_offset; + memcpy(reinterpret_cast(&target_offset), + reinterpret_cast(target + 2), 4); + new_target_v = reinterpret_cast(target + target_offset + 6); + } else { + SIDESTEP_ASSERT(sizeof(new_target) == 4); + memcpy(&new_target_v, reinterpret_cast(target + 2), 4); + } + new_target = reinterpret_cast(*new_target_v); + } else { + break; + } + if (new_target == stop_before) + break; + if (stop_before_trampoline && *new_target == ASM_NOP + && new_target[1] == ASM_REXW && new_target[2] == ASM_MOVRAX_IMM) + break; + target = new_target; + } + return target; +} + +// Special case scoped_ptr to avoid dependency on scoped_ptr below. +class DeleteUnsignedCharArray { + public: + DeleteUnsignedCharArray(unsigned char* array) : array_(array) { + } + + ~DeleteUnsignedCharArray() { + if (array_) { + PreamblePatcher::FreePreambleBlock(array_); + } + } + + unsigned char* Release() { + unsigned char* temp = array_; + array_ = NULL; + return temp; + } + + private: + unsigned char* array_; +}; + +SideStepError PreamblePatcher::RawPatchWithStubAndProtections( + void* target_function, void *replacement_function, + unsigned char* preamble_stub, unsigned long stub_size, + unsigned long* bytes_needed) { + // We need to be able to write to a process-local copy of the first + // MAX_PREAMBLE_STUB_SIZE bytes of target_function + DWORD old_target_function_protect = 0; + BOOL succeeded = ::VirtualProtect(reinterpret_cast(target_function), + MAX_PREAMBLE_STUB_SIZE, + PAGE_EXECUTE_READWRITE, + &old_target_function_protect); + if (!succeeded) { + SIDESTEP_ASSERT(false && "Failed to make page containing target function " + "copy-on-write."); + return SIDESTEP_ACCESS_DENIED; + } + + SideStepError error_code = RawPatchWithStub(target_function, + replacement_function, + preamble_stub, + stub_size, + bytes_needed); + + // Restore the protection of the first MAX_PREAMBLE_STUB_SIZE bytes of + // pTargetFunction to what they were before we started goofing around. + // We do this regardless of whether the patch succeeded or not. + succeeded = ::VirtualProtect(reinterpret_cast(target_function), + MAX_PREAMBLE_STUB_SIZE, + old_target_function_protect, + &old_target_function_protect); + if (!succeeded) { + SIDESTEP_ASSERT(false && + "Failed to restore protection to target function."); + // We must not return an error here because the function has + // likely actually been patched, and returning an error might + // cause our client code not to unpatch it. So we just keep + // going. + } + + if (SIDESTEP_SUCCESS != error_code) { // Testing RawPatchWithStub, above + SIDESTEP_ASSERT(false); + return error_code; + } + + // Flush the instruction cache to make sure the processor doesn't execute the + // old version of the instructions (before our patch). + // + // FlushInstructionCache is actually a no-op at least on + // single-processor XP machines. I'm not sure why this is so, but + // it is, yet I want to keep the call to the API here for + // correctness in case there is a difference in some variants of + // Windows/hardware. + succeeded = ::FlushInstructionCache(::GetCurrentProcess(), + target_function, + MAX_PREAMBLE_STUB_SIZE); + if (!succeeded) { + SIDESTEP_ASSERT(false && "Failed to flush instruction cache."); + // We must not return an error here because the function has actually + // been patched, and returning an error would likely cause our client + // code not to unpatch it. So we just keep going. + } + + return SIDESTEP_SUCCESS; +} + +SideStepError PreamblePatcher::RawPatch(void* target_function, + void* replacement_function, + void** original_function_stub) { + if (!target_function || !replacement_function || !original_function_stub || + (*original_function_stub) || target_function == replacement_function) { + SIDESTEP_ASSERT(false && "Preconditions not met"); + return SIDESTEP_INVALID_PARAMETER; + } + + BOOL succeeded = FALSE; + + // First, deal with a special case that we see with functions that + // point into an IAT table (including functions linked statically + // into the application): these function already starts with + // ASM_JMP32REL. For instance, malloc() might be implemented as a + // JMP to __malloc(). In that case, we replace the destination of + // the JMP (__malloc), rather than the JMP itself (malloc). This + // way we get the correct behavior no matter how malloc gets called. + void* new_target = ResolveTarget(target_function); + if (new_target != target_function) { + target_function = new_target; + } + + // In 64-bit mode, preamble_stub must be within 2GB of target function + // so that if target contains a jump, we can translate it. + unsigned char* preamble_stub = AllocPreambleBlockNear(target_function); + if (!preamble_stub) { + SIDESTEP_ASSERT(false && "Unable to allocate preamble-stub."); + return SIDESTEP_INSUFFICIENT_BUFFER; + } + + // Frees the array at end of scope. + DeleteUnsignedCharArray guard_preamble_stub(preamble_stub); + + SideStepError error_code = RawPatchWithStubAndProtections( + target_function, replacement_function, preamble_stub, + MAX_PREAMBLE_STUB_SIZE, NULL); + + if (SIDESTEP_SUCCESS != error_code) { + SIDESTEP_ASSERT(false); + return error_code; + } + + // Flush the instruction cache to make sure the processor doesn't execute the + // old version of the instructions (before our patch). + // + // FlushInstructionCache is actually a no-op at least on + // single-processor XP machines. I'm not sure why this is so, but + // it is, yet I want to keep the call to the API here for + // correctness in case there is a difference in some variants of + // Windows/hardware. + succeeded = ::FlushInstructionCache(::GetCurrentProcess(), + target_function, + MAX_PREAMBLE_STUB_SIZE); + if (!succeeded) { + SIDESTEP_ASSERT(false && "Failed to flush instruction cache."); + // We must not return an error here because the function has actually + // been patched, and returning an error would likely cause our client + // code not to unpatch it. So we just keep going. + } + + SIDESTEP_LOG("PreamblePatcher::RawPatch successfully patched."); + + // detach the scoped pointer so the memory is not freed + *original_function_stub = + reinterpret_cast(guard_preamble_stub.Release()); + return SIDESTEP_SUCCESS; +} + +SideStepError PreamblePatcher::Unpatch(void* target_function, + void* replacement_function, + void* original_function_stub) { + SIDESTEP_ASSERT(target_function && replacement_function && + original_function_stub); + if (!target_function || !replacement_function || + !original_function_stub) { + return SIDESTEP_INVALID_PARAMETER; + } + + // Before unpatching, target_function should be a JMP to + // replacement_function. If it's not, then either it's an error, or + // we're falling into the case where the original instruction was a + // JMP, and we patched the jumped_to address rather than the JMP + // itself. (For instance, if malloc() is just a JMP to __malloc(), + // we patched __malloc() and not malloc().) + unsigned char* target = reinterpret_cast(target_function); + target = reinterpret_cast( + ResolveTargetImpl( + target, reinterpret_cast(replacement_function), + true)); + // We should end at the function we patched. When we patch, we insert + // a ASM_JMP32REL instruction, so look for that as a sanity check. + if (target[0] != ASM_JMP32REL) { + SIDESTEP_ASSERT(false && + "target_function does not look like it was patched."); + return SIDESTEP_INVALID_PARAMETER; + } + + const unsigned int kRequiredTargetPatchBytes = 5; + + // We need to be able to write to a process-local copy of the first + // kRequiredTargetPatchBytes bytes of target_function + DWORD old_target_function_protect = 0; + BOOL succeeded = ::VirtualProtect(reinterpret_cast(target), + kRequiredTargetPatchBytes, + PAGE_EXECUTE_READWRITE, + &old_target_function_protect); + if (!succeeded) { + SIDESTEP_ASSERT(false && "Failed to make page containing target function " + "copy-on-write."); + return SIDESTEP_ACCESS_DENIED; + } + + unsigned char* preamble_stub = reinterpret_cast( + original_function_stub); + + // Disassemble the preamble of stub and copy the bytes back to target. + // If we've done any conditional jumps in the preamble we need to convert + // them back to the orignal REL8 jumps in the target. + MiniDisassembler disassembler; + unsigned int preamble_bytes = 0; + unsigned int target_bytes = 0; + while (target_bytes < kRequiredTargetPatchBytes) { + unsigned int cur_bytes = 0; + InstructionType instruction_type = + disassembler.Disassemble(preamble_stub + preamble_bytes, cur_bytes); + if (IT_JUMP == instruction_type) { + unsigned int jump_bytes = 0; + SideStepError jump_ret = SIDESTEP_JUMP_INSTRUCTION; + if (IsNearConditionalJump(preamble_stub + preamble_bytes, cur_bytes) || + IsNearRelativeJump(preamble_stub + preamble_bytes, cur_bytes) || + IsNearAbsoluteCall(preamble_stub + preamble_bytes, cur_bytes) || + IsNearRelativeCall(preamble_stub + preamble_bytes, cur_bytes)) { + jump_ret = PatchNearJumpOrCall(preamble_stub + preamble_bytes, + cur_bytes, target + target_bytes, + &jump_bytes, MAX_PREAMBLE_STUB_SIZE); + } + if (jump_ret == SIDESTEP_JUMP_INSTRUCTION) { + SIDESTEP_ASSERT(false && + "Found unsupported jump instruction in stub!!"); + return SIDESTEP_UNSUPPORTED_INSTRUCTION; + } + target_bytes += jump_bytes; + } else if (IT_GENERIC == instruction_type) { + if (IsMovWithDisplacement(preamble_stub + preamble_bytes, cur_bytes)) { + unsigned int mov_bytes = 0; + if (PatchMovWithDisplacement(preamble_stub + preamble_bytes, cur_bytes, + target + target_bytes, &mov_bytes, + MAX_PREAMBLE_STUB_SIZE) + != SIDESTEP_SUCCESS) { + SIDESTEP_ASSERT(false && + "Found unsupported generic instruction in stub!!"); + return SIDESTEP_UNSUPPORTED_INSTRUCTION; + } + } else { + memcpy(reinterpret_cast(target + target_bytes), + reinterpret_cast(reinterpret_cast( + original_function_stub) + preamble_bytes), cur_bytes); + target_bytes += cur_bytes; + } + } else { + SIDESTEP_ASSERT(false && + "Found unsupported instruction in stub!!"); + return SIDESTEP_UNSUPPORTED_INSTRUCTION; + } + preamble_bytes += cur_bytes; + } + + FreePreambleBlock(reinterpret_cast(original_function_stub)); + + // Restore the protection of the first kRequiredTargetPatchBytes bytes of + // target to what they were before we started goofing around. + succeeded = ::VirtualProtect(reinterpret_cast(target), + kRequiredTargetPatchBytes, + old_target_function_protect, + &old_target_function_protect); + + // Flush the instruction cache to make sure the processor doesn't execute the + // old version of the instructions (before our patch). + // + // See comment on FlushInstructionCache elsewhere in this file. + succeeded = ::FlushInstructionCache(::GetCurrentProcess(), + target, + MAX_PREAMBLE_STUB_SIZE); + if (!succeeded) { + SIDESTEP_ASSERT(false && "Failed to flush instruction cache."); + return SIDESTEP_UNEXPECTED; + } + + SIDESTEP_LOG("PreamblePatcher::Unpatch successfully unpatched."); + return SIDESTEP_SUCCESS; +} + +void PreamblePatcher::Initialize() { + if (!initialized_) { + SYSTEM_INFO si = { 0 }; + ::GetSystemInfo(&si); + granularity_ = si.dwAllocationGranularity; + pagesize_ = si.dwPageSize; + initialized_ = true; + } +} + +unsigned char* PreamblePatcher::AllocPreambleBlockNear(void* target) { + PreamblePage* preamble_page = preamble_pages_; + while (preamble_page != NULL) { + if (preamble_page->free_ != NULL) { + __int64 val = reinterpret_cast<__int64>(preamble_page) - + reinterpret_cast<__int64>(target); + if ((val > 0 && val + pagesize_ <= INT_MAX) || + (val < 0 && val >= INT_MIN)) { + break; + } + } + preamble_page = preamble_page->next_; + } + + // The free_ member of the page is used to store the next available block + // of memory to use or NULL if there are no chunks available, in which case + // we'll allocate a new page. + if (preamble_page == NULL || preamble_page->free_ == NULL) { + // Create a new preamble page and initialize the free list + preamble_page = reinterpret_cast(AllocPageNear(target)); + SIDESTEP_ASSERT(preamble_page != NULL && "Could not allocate page!"); + void** pp = &preamble_page->free_; + unsigned char* ptr = reinterpret_cast(preamble_page) + + MAX_PREAMBLE_STUB_SIZE; + unsigned char* limit = reinterpret_cast(preamble_page) + + pagesize_; + while (ptr < limit) { + *pp = ptr; + pp = reinterpret_cast(ptr); + ptr += MAX_PREAMBLE_STUB_SIZE; + } + *pp = NULL; + // Insert the new page into the list + preamble_page->magic_ = kPreamblePageMagic; + preamble_page->next_ = preamble_pages_; + preamble_pages_ = preamble_page; + } + unsigned char* ret = reinterpret_cast(preamble_page->free_); + preamble_page->free_ = *(reinterpret_cast(preamble_page->free_)); + return ret; +} + +void PreamblePatcher::FreePreambleBlock(unsigned char* block) { + SIDESTEP_ASSERT(block != NULL); + SIDESTEP_ASSERT(granularity_ != 0); + uintptr_t ptr = reinterpret_cast(block); + ptr -= ptr & (granularity_ - 1); + PreamblePage* preamble_page = reinterpret_cast(ptr); + SIDESTEP_ASSERT(preamble_page->magic_ == kPreamblePageMagic); + *(reinterpret_cast(block)) = preamble_page->free_; + preamble_page->free_ = block; +} + +void* PreamblePatcher::AllocPageNear(void* target) { + MEMORY_BASIC_INFORMATION mbi = { 0 }; + if (!::VirtualQuery(target, &mbi, sizeof(mbi))) { + SIDESTEP_ASSERT(false && "VirtualQuery failed on target address"); + return 0; + } + if (initialized_ == false) { + PreamblePatcher::Initialize(); + SIDESTEP_ASSERT(initialized_); + } + void* pv = NULL; + unsigned char* allocation_base = reinterpret_cast( + mbi.AllocationBase); + __int64 i = 1; + bool high_target = reinterpret_cast<__int64>(target) > UINT_MAX; + while (pv == NULL) { + __int64 val = reinterpret_cast<__int64>(allocation_base) - + (i * granularity_); + if (high_target && + reinterpret_cast<__int64>(target) - val > INT_MAX) { + // We're further than 2GB from the target + break; + } else if (val <= NULL) { + // Less than 0 + break; + } + pv = ::VirtualAlloc(reinterpret_cast(allocation_base - + (i++ * granularity_)), + pagesize_, MEM_COMMIT | MEM_RESERVE, + PAGE_EXECUTE_READWRITE); + } + + // We couldn't allocate low, try to allocate high + if (pv == NULL) { + i = 1; + // Round up to the next multiple of page granularity + allocation_base = reinterpret_cast( + (reinterpret_cast<__int64>(target) & + (~(granularity_ - 1))) + granularity_); + while (pv == NULL) { + __int64 val = reinterpret_cast<__int64>(allocation_base) + + (i * granularity_) - reinterpret_cast<__int64>(target); + if (val > INT_MAX || val < 0) { + // We're too far or we overflowed + break; + } + pv = ::VirtualAlloc(reinterpret_cast(allocation_base + + (i++ * granularity_)), + pagesize_, MEM_COMMIT | MEM_RESERVE, + PAGE_EXECUTE_READWRITE); + } + } + return pv; +} + +bool PreamblePatcher::IsShortConditionalJump( + unsigned char* target, + unsigned int instruction_size) { + return (*(target) & 0x70) == 0x70 && instruction_size == 2; +} + +bool PreamblePatcher::IsNearConditionalJump( + unsigned char* target, + unsigned int instruction_size) { + return *(target) == 0xf && (*(target + 1) & 0x80) == 0x80 && + instruction_size == 6; +} + +bool PreamblePatcher::IsNearRelativeJump( + unsigned char* target, + unsigned int instruction_size) { + return *(target) == 0xe9 && instruction_size == 5; +} + +bool PreamblePatcher::IsNearAbsoluteCall( + unsigned char* target, + unsigned int instruction_size) { + return *(target) == 0xff && (*(target + 1) & 0x10) == 0x10 && + instruction_size == 6; +} + +bool PreamblePatcher::IsNearRelativeCall( + unsigned char* target, + unsigned int instruction_size) { + return *(target) == 0xe8 && instruction_size == 5; +} + +bool PreamblePatcher::IsMovWithDisplacement( + unsigned char* target, + unsigned int instruction_size) { + // In this case, the ModRM byte's mod field will be 0 and r/m will be 101b (5) + return instruction_size == 7 && *target == 0x48 && *(target + 1) == 0x8b && + (*(target + 2) >> 6) == 0 && (*(target + 2) & 0x7) == 5; +} + +SideStepError PreamblePatcher::PatchShortConditionalJump( + unsigned char* source, + unsigned int instruction_size, + unsigned char* target, + unsigned int* target_bytes, + unsigned int target_size) { + unsigned char* original_jump_dest = (source + 2) + source[1]; + unsigned char* stub_jump_from = target + 6; + __int64 fixup_jump_offset = original_jump_dest - stub_jump_from; + if (fixup_jump_offset > INT_MAX || fixup_jump_offset < INT_MIN) { + SIDESTEP_ASSERT(false && + "Unable to fix up short jump because target" + " is too far away."); + return SIDESTEP_JUMP_INSTRUCTION; + } + + *target_bytes = 6; + if (target_size > *target_bytes) { + // Convert the short jump to a near jump. + // + // 0f 8x xx xx xx xx = Jcc rel32off + unsigned short jmpcode = ((0x80 | (source[0] & 0xf)) << 8) | 0x0f; + memcpy(reinterpret_cast(target), + reinterpret_cast(&jmpcode), 2); + memcpy(reinterpret_cast(target + 2), + reinterpret_cast(&fixup_jump_offset), 4); + } + + return SIDESTEP_SUCCESS; +} + +SideStepError PreamblePatcher::PatchNearJumpOrCall( + unsigned char* source, + unsigned int instruction_size, + unsigned char* target, + unsigned int* target_bytes, + unsigned int target_size) { + SIDESTEP_ASSERT(instruction_size == 5 || instruction_size == 6); + unsigned int jmp_offset_in_instruction = instruction_size == 5 ? 1 : 2; + unsigned char* original_jump_dest = reinterpret_cast( + reinterpret_cast<__int64>(source + instruction_size) + + *(reinterpret_cast(source + jmp_offset_in_instruction))); + unsigned char* stub_jump_from = target + instruction_size; + __int64 fixup_jump_offset = original_jump_dest - stub_jump_from; + if (fixup_jump_offset > INT_MAX || fixup_jump_offset < INT_MIN) { + SIDESTEP_ASSERT(false && + "Unable to fix up near jump because target" + " is too far away."); + return SIDESTEP_JUMP_INSTRUCTION; + } + + if ((fixup_jump_offset < SCHAR_MAX && fixup_jump_offset > SCHAR_MIN)) { + *target_bytes = 2; + if (target_size > *target_bytes) { + // If the new offset is in range, use a short jump instead of a near jump. + if (source[0] == ASM_JCC32REL_0 && + (source[1] & ASM_JCC32REL_1_MASK) == ASM_JCC32REL_1_MASK) { + unsigned short jmpcode = (static_cast( + fixup_jump_offset) << 8) | (0x70 | (source[1] & 0xf)); + memcpy(reinterpret_cast(target), + reinterpret_cast(&jmpcode), + 2); + } else { + target[0] = ASM_JMP8REL; + target[1] = static_cast(fixup_jump_offset); + } + } + } else { + *target_bytes = instruction_size; + if (target_size > *target_bytes) { + memcpy(reinterpret_cast(target), + reinterpret_cast(source), + jmp_offset_in_instruction); + memcpy(reinterpret_cast(target + jmp_offset_in_instruction), + reinterpret_cast(&fixup_jump_offset), + 4); + } + } + + return SIDESTEP_SUCCESS; +} + +SideStepError PreamblePatcher::PatchMovWithDisplacement( + unsigned char* source, + unsigned int instruction_size, + unsigned char* target, + unsigned int* target_bytes, + unsigned int target_size) { + SIDESTEP_ASSERT(instruction_size == 7); + const int mov_offset_in_instruction = 3; // 0x48 0x8b 0x0d + unsigned char* original_mov_dest = reinterpret_cast( + reinterpret_cast<__int64>(source + instruction_size) + + *(reinterpret_cast(source + mov_offset_in_instruction))); + unsigned char* stub_mov_from = target + instruction_size; + __int64 fixup_mov_offset = original_mov_dest - stub_mov_from; + if (fixup_mov_offset > INT_MAX || fixup_mov_offset < INT_MIN) { + SIDESTEP_ASSERT(false && + "Unable to fix up near MOV because target is too far away."); + return SIDESTEP_UNEXPECTED; + } + *target_bytes = instruction_size; + if (target_size > *target_bytes) { + memcpy(reinterpret_cast(target), + reinterpret_cast(source), + mov_offset_in_instruction); + memcpy(reinterpret_cast(target + mov_offset_in_instruction), + reinterpret_cast(&fixup_mov_offset), + 4); + } + return SIDESTEP_SUCCESS; +} + +}; // namespace sidestep diff --git a/src/thirdparty/gperftools-2.0/src/windows/preamble_patcher.h b/src/thirdparty/gperftools-2.0/src/windows/preamble_patcher.h new file mode 100644 index 000000000..4fdb7d001 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/preamble_patcher.h @@ -0,0 +1,611 @@ +/* Copyright (c) 2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Joi Sigurdsson + * Author: Scott Francis + * + * Definition of PreamblePatcher + */ + +#ifndef GOOGLE_PERFTOOLS_PREAMBLE_PATCHER_H_ +#define GOOGLE_PERFTOOLS_PREAMBLE_PATCHER_H_ + +#include "config.h" +#include + +// compatibility shim +#include "base/logging.h" +#define SIDESTEP_ASSERT(cond) RAW_DCHECK(cond, #cond) +#define SIDESTEP_LOG(msg) RAW_VLOG(1, msg) + +// Maximum size of the preamble stub. We overwrite at least the first 5 +// bytes of the function. Considering the worst case scenario, we need 4 +// bytes + the max instruction size + 5 more bytes for our jump back to +// the original code. With that in mind, 32 is a good number :) +#ifdef _M_X64 +// In 64-bit mode we may need more room. In 64-bit mode all jumps must be +// within +/-2GB of RIP. Because of this limitation we may need to use a +// trampoline to jump to the replacement function if it is further than 2GB +// away from the target. The trampoline is 14 bytes. +// +// So 4 bytes + max instruction size (17 bytes) + 5 bytes to jump back to the +// original code + trampoline size. 64 bytes is a nice number :-) +#define MAX_PREAMBLE_STUB_SIZE (64) +#else +#define MAX_PREAMBLE_STUB_SIZE (32) +#endif + +// Determines if this is a 64-bit binary. +#ifdef _M_X64 +static const bool kIs64BitBinary = true; +#else +static const bool kIs64BitBinary = false; +#endif + +namespace sidestep { + +// Possible results of patching/unpatching +enum SideStepError { + SIDESTEP_SUCCESS = 0, + SIDESTEP_INVALID_PARAMETER, + SIDESTEP_INSUFFICIENT_BUFFER, + SIDESTEP_JUMP_INSTRUCTION, + SIDESTEP_FUNCTION_TOO_SMALL, + SIDESTEP_UNSUPPORTED_INSTRUCTION, + SIDESTEP_NO_SUCH_MODULE, + SIDESTEP_NO_SUCH_FUNCTION, + SIDESTEP_ACCESS_DENIED, + SIDESTEP_UNEXPECTED, +}; + +#define SIDESTEP_TO_HRESULT(error) \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_NULL, error) + +class DeleteUnsignedCharArray; + +// Implements a patching mechanism that overwrites the first few bytes of +// a function preamble with a jump to our hook function, which is then +// able to call the original function via a specially-made preamble-stub +// that imitates the action of the original preamble. +// +// NOTE: This patching mechanism should currently only be used for +// non-production code, e.g. unit tests, because it is not threadsafe. +// See the TODO in preamble_patcher_with_stub.cc for instructions on what +// we need to do before using it in production code; it's fairly simple +// but unnecessary for now since we only intend to use it in unit tests. +// +// To patch a function, use either of the typesafe Patch() methods. You +// can unpatch a function using Unpatch(). +// +// Typical usage goes something like this: +// @code +// typedef int (*MyTypesafeFuncPtr)(int x); +// MyTypesafeFuncPtr original_func_stub; +// int MyTypesafeFunc(int x) { return x + 1; } +// int HookMyTypesafeFunc(int x) { return 1 + original_func_stub(x); } +// +// void MyPatchInitializingFunction() { +// original_func_stub = PreamblePatcher::Patch( +// MyTypesafeFunc, HookMyTypesafeFunc); +// if (!original_func_stub) { +// // ... error handling ... +// } +// +// // ... continue - you have patched the function successfully ... +// } +// @endcode +// +// Note that there are a number of ways that this method of patching can +// fail. The most common are: +// - If there is a jump (jxx) instruction in the first 5 bytes of +// the function being patched, we cannot patch it because in the +// current implementation we do not know how to rewrite relative +// jumps after relocating them to the preamble-stub. Note that +// if you really really need to patch a function like this, it +// would be possible to add this functionality (but at some cost). +// - If there is a return (ret) instruction in the first 5 bytes +// we cannot patch the function because it may not be long enough +// for the jmp instruction we use to inject our patch. +// - If there is another thread currently executing within the bytes +// that are copied to the preamble stub, it will crash in an undefined +// way. +// +// If you get any other error than the above, you're either pointing the +// patcher at an invalid instruction (e.g. into the middle of a multi- +// byte instruction, or not at memory containing executable instructions) +// or, there may be a bug in the disassembler we use to find +// instruction boundaries. +// +// NOTE: In optimized builds, when you have very trivial functions that +// the compiler can reason do not have side effects, the compiler may +// reuse the result of calling the function with a given parameter, which +// may mean if you patch the function in between your patch will never get +// invoked. See preamble_patcher_test.cc for an example. +class PERFTOOLS_DLL_DECL PreamblePatcher { + public: + + // This is a typesafe version of RawPatch(), identical in all other + // ways than it takes a template parameter indicating the type of the + // function being patched. + // + // @param T The type of the function you are patching. Usually + // you will establish this type using a typedef, as in the following + // example: + // @code + // typedef BOOL (WINAPI *MessageBoxPtr)(HWND, LPCTSTR, LPCTSTR, UINT); + // MessageBoxPtr original = NULL; + // PreamblePatcher::Patch(MessageBox, Hook_MessageBox, &original); + // @endcode + template + static SideStepError Patch(T target_function, + T replacement_function, + T* original_function_stub) { + // NOTE: casting from a function to a pointer is contra the C++ + // spec. It's not safe on IA64, but is on i386. We use + // a C-style cast here to emphasize this is not legal C++. + return RawPatch((void*)(target_function), + (void*)(replacement_function), + (void**)(original_function_stub)); + } + + // Patches a named function imported from the named module using + // preamble patching. Uses RawPatch() to do the actual patching + // work. + // + // @param T The type of the function you are patching. Must + // exactly match the function you specify using module_name and + // function_name. + // + // @param module_name The name of the module from which the function + // is being imported. Note that the patch will fail if this module + // has not already been loaded into the current process. + // + // @param function_name The name of the function you wish to patch. + // + // @param replacement_function Your replacement function which + // will be called whenever code tries to call the original function. + // + // @param original_function_stub Pointer to memory that should receive a + // pointer that can be used (e.g. in the replacement function) to call the + // original function, or NULL to indicate failure. + // + // @return One of the EnSideStepError error codes; only SIDESTEP_SUCCESS + // indicates success. + template + static SideStepError Patch(LPCTSTR module_name, + LPCSTR function_name, + T replacement_function, + T* original_function_stub) { + SIDESTEP_ASSERT(module_name && function_name); + if (!module_name || !function_name) { + SIDESTEP_ASSERT(false && + "You must specify a module name and function name."); + return SIDESTEP_INVALID_PARAMETER; + } + HMODULE module = ::GetModuleHandle(module_name); + SIDESTEP_ASSERT(module != NULL); + if (!module) { + SIDESTEP_ASSERT(false && "Invalid module name."); + return SIDESTEP_NO_SUCH_MODULE; + } + FARPROC existing_function = ::GetProcAddress(module, function_name); + if (!existing_function) { + SIDESTEP_ASSERT( + false && "Did not find any function with that name in the module."); + return SIDESTEP_NO_SUCH_FUNCTION; + } + // NOTE: casting from a function to a pointer is contra the C++ + // spec. It's not safe on IA64, but is on i386. We use + // a C-style cast here to emphasize this is not legal C++. + return RawPatch((void*)existing_function, (void*)replacement_function, + (void**)(original_function_stub)); + } + + // Patches a function by overwriting its first few bytes with + // a jump to a different function. This is the "worker" function + // for each of the typesafe Patch() functions. In most cases, + // it is preferable to use the Patch() functions rather than + // this one as they do more checking at compile time. + // + // @param target_function A pointer to the function that should be + // patched. + // + // @param replacement_function A pointer to the function that should + // replace the target function. The replacement function must have + // exactly the same calling convention and parameters as the original + // function. + // + // @param original_function_stub Pointer to memory that should receive a + // pointer that can be used (e.g. in the replacement function) to call the + // original function, or NULL to indicate failure. + // + // @param original_function_stub Pointer to memory that should receive a + // pointer that can be used (e.g. in the replacement function) to call the + // original function, or NULL to indicate failure. + // + // @return One of the EnSideStepError error codes; only SIDESTEP_SUCCESS + // indicates success. + // + // @note The preamble-stub (the memory pointed to by + // *original_function_stub) is allocated on the heap, and (in + // production binaries) never destroyed, resulting in a memory leak. This + // will be the case until we implement safe unpatching of a method. + // However, it is quite difficult to unpatch a method (because other + // threads in the process may be using it) so we are leaving it for now. + // See however UnsafeUnpatch, which can be used for binaries where you + // know only one thread is running, e.g. unit tests. + static SideStepError RawPatch(void* target_function, + void* replacement_function, + void** original_function_stub); + + // Unpatches target_function and deletes the stub that previously could be + // used to call the original version of the function. + // + // DELETES the stub that is passed to the function. + // + // @param target_function Pointer to the target function which was + // previously patched, i.e. a pointer which value should match the value + // of the symbol prior to patching it. + // + // @param replacement_function Pointer to the function target_function + // was patched to. + // + // @param original_function_stub Pointer to the stub returned when + // patching, that could be used to call the original version of the + // patched function. This function will also delete the stub, which after + // unpatching is useless. + // + // If your original call was + // Patch(VirtualAlloc, MyVirtualAlloc, &origptr) + // then to undo it you would call + // Unpatch(VirtualAlloc, MyVirtualAlloc, origptr); + // + // @return One of the EnSideStepError error codes; only SIDESTEP_SUCCESS + // indicates success. + static SideStepError Unpatch(void* target_function, + void* replacement_function, + void* original_function_stub); + + // A helper routine when patching, which follows jmp instructions at + // function addresses, to get to the "actual" function contents. + // This allows us to identify two functions that are at different + // addresses but actually resolve to the same code. + // + // @param target_function Pointer to a function. + // + // @return Either target_function (the input parameter), or if + // target_function's body consists entirely of a JMP instruction, + // the address it JMPs to (or more precisely, the address at the end + // of a chain of JMPs). + template + static T ResolveTarget(T target_function) { + return (T)ResolveTargetImpl((unsigned char*)target_function, NULL); + } + + // Allocates a block of memory of size MAX_PREAMBLE_STUB_SIZE that is as + // close (within 2GB) as possible to target. This is done to ensure that + // we can perform a relative jump from target to a trampoline if the + // replacement function is > +-2GB from target. This means that we only need + // to patch 5 bytes in the target function. + // + // @param target Pointer to target function. + // + // @return Returns a block of memory of size MAX_PREAMBLE_STUB_SIZE that can + // be used to store a function preamble block. + static unsigned char* AllocPreambleBlockNear(void* target); + + // Frees a block allocated by AllocPreambleBlockNear. + // + // @param block Block that was returned by AllocPreambleBlockNear. + static void FreePreambleBlock(unsigned char* block); + + private: + friend class DeleteUnsignedCharArray; + + // Used to store data allocated for preamble stubs + struct PreamblePage { + unsigned int magic_; + PreamblePage* next_; + // This member points to a linked list of free blocks within the page + // or NULL if at the end + void* free_; + }; + + // In 64-bit mode, the replacement function must be within 2GB of the original + // target in order to only require 5 bytes for the function patch. To meet + // this requirement we're creating an allocator within this class to + // allocate blocks that are within 2GB of a given target. This member is the + // head of a linked list of pages used to allocate blocks that are within + // 2GB of the target. + static PreamblePage* preamble_pages_; + + // Page granularity + static long granularity_; + + // Page size + static long pagesize_; + + // Determines if the patcher has been initialized. + static bool initialized_; + + // Used to initialize static members. + static void Initialize(); + + // Patches a function by overwriting its first few bytes with + // a jump to a different function. This is similar to the RawPatch + // function except that it uses the stub allocated by the caller + // instead of allocating it. + // + // We call VirtualProtect to make the + // target function writable at least for the duration of the call. + // + // @param target_function A pointer to the function that should be + // patched. + // + // @param replacement_function A pointer to the function that should + // replace the target function. The replacement function must have + // exactly the same calling convention and parameters as the original + // function. + // + // @param preamble_stub A pointer to a buffer where the preamble stub + // should be copied. The size of the buffer should be sufficient to + // hold the preamble bytes. + // + // @param stub_size Size in bytes of the buffer allocated for the + // preamble_stub + // + // @param bytes_needed Pointer to a variable that receives the minimum + // number of bytes required for the stub. Can be set to NULL if you're + // not interested. + // + // @return An error code indicating the result of patching. + static SideStepError RawPatchWithStubAndProtections( + void* target_function, + void* replacement_function, + unsigned char* preamble_stub, + unsigned long stub_size, + unsigned long* bytes_needed); + + // A helper function used by RawPatchWithStubAndProtections -- it + // does everything but the VirtualProtect work. Defined in + // preamble_patcher_with_stub.cc. + // + // @param target_function A pointer to the function that should be + // patched. + // + // @param replacement_function A pointer to the function that should + // replace the target function. The replacement function must have + // exactly the same calling convention and parameters as the original + // function. + // + // @param preamble_stub A pointer to a buffer where the preamble stub + // should be copied. The size of the buffer should be sufficient to + // hold the preamble bytes. + // + // @param stub_size Size in bytes of the buffer allocated for the + // preamble_stub + // + // @param bytes_needed Pointer to a variable that receives the minimum + // number of bytes required for the stub. Can be set to NULL if you're + // not interested. + // + // @return An error code indicating the result of patching. + static SideStepError RawPatchWithStub(void* target_function, + void* replacement_function, + unsigned char* preamble_stub, + unsigned long stub_size, + unsigned long* bytes_needed); + + + // A helper routine when patching, which follows jmp instructions at + // function addresses, to get to the "actual" function contents. + // This allows us to identify two functions that are at different + // addresses but actually resolve to the same code. + // + // @param target_function Pointer to a function. + // + // @param stop_before If, when following JMP instructions from + // target_function, we get to the address stop, we return + // immediately, the address that jumps to stop_before. + // + // @param stop_before_trampoline When following JMP instructions from + // target_function, stop before a trampoline is detected. See comment in + // PreamblePatcher::RawPatchWithStub for more information. This parameter + // has no effect in 32-bit mode. + // + // @return Either target_function (the input parameter), or if + // target_function's body consists entirely of a JMP instruction, + // the address it JMPs to (or more precisely, the address at the end + // of a chain of JMPs). + static void* ResolveTargetImpl(unsigned char* target_function, + unsigned char* stop_before, + bool stop_before_trampoline = false); + + // Helper routine that attempts to allocate a page as close (within 2GB) + // as possible to target. + // + // @param target Pointer to target function. + // + // @return Returns an address that is within 2GB of target. + static void* AllocPageNear(void* target); + + // Helper routine that determines if a target instruction is a short + // conditional jump. + // + // @param target Pointer to instruction. + // + // @param instruction_size Size of the instruction in bytes. + // + // @return Returns true if the instruction is a short conditional jump. + static bool IsShortConditionalJump(unsigned char* target, + unsigned int instruction_size); + + // Helper routine that determines if a target instruction is a near + // conditional jump. + // + // @param target Pointer to instruction. + // + // @param instruction_size Size of the instruction in bytes. + // + // @return Returns true if the instruction is a near conditional jump. + static bool IsNearConditionalJump(unsigned char* target, + unsigned int instruction_size); + + // Helper routine that determines if a target instruction is a near + // relative jump. + // + // @param target Pointer to instruction. + // + // @param instruction_size Size of the instruction in bytes. + // + // @return Returns true if the instruction is a near absolute jump. + static bool IsNearRelativeJump(unsigned char* target, + unsigned int instruction_size); + + // Helper routine that determines if a target instruction is a near + // absolute call. + // + // @param target Pointer to instruction. + // + // @param instruction_size Size of the instruction in bytes. + // + // @return Returns true if the instruction is a near absolute call. + static bool IsNearAbsoluteCall(unsigned char* target, + unsigned int instruction_size); + + // Helper routine that determines if a target instruction is a near + // absolute call. + // + // @param target Pointer to instruction. + // + // @param instruction_size Size of the instruction in bytes. + // + // @return Returns true if the instruction is a near absolute call. + static bool IsNearRelativeCall(unsigned char* target, + unsigned int instruction_size); + + // Helper routine that determines if a target instruction is a 64-bit MOV + // that uses a RIP-relative displacement. + // + // @param target Pointer to instruction. + // + // @param instruction_size Size of the instruction in bytes. + // + // @return Returns true if the instruction is a MOV with displacement. + static bool IsMovWithDisplacement(unsigned char* target, + unsigned int instruction_size); + + // Helper routine that converts a short conditional jump instruction + // to a near conditional jump in a target buffer. Note that the target + // buffer must be within 2GB of the source for the near jump to work. + // + // A short conditional jump instruction is in the format: + // 7x xx = Jcc rel8off + // + // @param source Pointer to instruction. + // + // @param instruction_size Size of the instruction. + // + // @param target Target buffer to write the new instruction. + // + // @param target_bytes Pointer to a buffer that contains the size + // of the target instruction, in bytes. + // + // @param target_size Size of the target buffer. + // + // @return Returns SIDESTEP_SUCCESS if successful, otherwise an error. + static SideStepError PatchShortConditionalJump(unsigned char* source, + unsigned int instruction_size, + unsigned char* target, + unsigned int* target_bytes, + unsigned int target_size); + + // Helper routine that converts an instruction that will convert various + // jump-like instructions to corresponding instructions in the target buffer. + // What this routine does is fix up the relative offsets contained in jump + // instructions to point back to the original target routine. Like with + // PatchShortConditionalJump, the target buffer must be within 2GB of the + // source. + // + // We currently handle the following instructions: + // + // E9 xx xx xx xx = JMP rel32off + // 0F 8x xx xx xx xx = Jcc rel32off + // FF /2 xx xx xx xx = CALL reg/mem32/mem64 + // E8 xx xx xx xx = CALL rel32off + // + // It should not be hard to update this function to support other + // instructions that jump to relative targets. + // + // @param source Pointer to instruction. + // + // @param instruction_size Size of the instruction. + // + // @param target Target buffer to write the new instruction. + // + // @param target_bytes Pointer to a buffer that contains the size + // of the target instruction, in bytes. + // + // @param target_size Size of the target buffer. + // + // @return Returns SIDESTEP_SUCCESS if successful, otherwise an error. + static SideStepError PatchNearJumpOrCall(unsigned char* source, + unsigned int instruction_size, + unsigned char* target, + unsigned int* target_bytes, + unsigned int target_size); + + // Helper routine that patches a 64-bit MOV instruction with a RIP-relative + // displacement. The target buffer must be within 2GB of the source. + // + // 48 8B 0D XX XX XX XX = MOV rel32off + // + // @param source Pointer to instruction. + // + // @param instruction_size Size of the instruction. + // + // @param target Target buffer to write the new instruction. + // + // @param target_bytes Pointer to a buffer that contains the size + // of the target instruction, in bytes. + // + // @param target_size Size of the target buffer. + // + // @return Returns SIDESTEP_SUCCESS if successful, otherwise an error. + static SideStepError PatchMovWithDisplacement(unsigned char* source, + unsigned int instruction_size, + unsigned char* target, + unsigned int* target_bytes, + unsigned int target_size); +}; + +}; // namespace sidestep + +#endif // GOOGLE_PERFTOOLS_PREAMBLE_PATCHER_H_ diff --git a/src/thirdparty/gperftools-2.0/src/windows/preamble_patcher_test.cc b/src/thirdparty/gperftools-2.0/src/windows/preamble_patcher_test.cc new file mode 100644 index 000000000..41ab551cc --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/preamble_patcher_test.cc @@ -0,0 +1,367 @@ +/* Copyright (c) 2011, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Joi Sigurdsson + * Author: Scott Francis + * + * Unit tests for PreamblePatcher + */ + +#include "config_for_unittests.h" +#include "preamble_patcher.h" +#include "mini_disassembler.h" +#pragma warning(push) +#pragma warning(disable:4553) +#include "auto_testing_hook.h" +#pragma warning(pop) + +#define WIN32_LEAN_AND_MEAN +#include +#include + +// Turning off all optimizations for this file, since the official build's +// "Whole program optimization" seems to cause the TestPatchUsingDynamicStub +// test to crash with an access violation. We debugged this and found +// that the optimized access a register that is changed by a call to the hook +// function. +#pragma optimize("", off) + +// A convenience macro to avoid a lot of casting in the tests. +// I tried to make this a templated function, but windows complained: +// error C2782: 'sidestep::SideStepError `anonymous-namespace'::Unpatch(T,T,T *)' : template parameter 'T' is ambiguous +// could be 'int (int)' +// or 'int (__cdecl *)(int)' +// My life isn't long enough to try to figure out how to fix this. +#define UNPATCH(target_function, replacement_function, original_function_stub) \ + sidestep::PreamblePatcher::Unpatch((void*)(target_function), \ + (void*)(replacement_function), \ + (void*)(original_function)) + +namespace { + +// Function for testing - this is what we patch +// +// NOTE: Because of the way the compiler optimizes this function in +// release builds, we need to use a different input value every time we +// call it within a function, otherwise the compiler will just reuse the +// last calculated incremented value. +int __declspec(noinline) IncrementNumber(int i) { +#ifdef _M_X64 + __int64 i2 = i + 1; + return (int) i2; +#else + return i + 1; +#endif +} + +extern "C" int TooShortFunction(int); + +extern "C" int JumpShortCondFunction(int); + +extern "C" int JumpNearCondFunction(int); + +extern "C" int JumpAbsoluteFunction(int); + +extern "C" int CallNearRelativeFunction(int); + +typedef int (*IncrementingFunc)(int); +IncrementingFunc original_function = NULL; + +int HookIncrementNumber(int i) { + SIDESTEP_ASSERT(original_function != NULL); + int incremented_once = original_function(i); + return incremented_once + 1; +} + +// For the AutoTestingHook test, we can't use original_function, because +// all that is encapsulated. +// This function "increments" by 10, just to set it apart from the other +// functions. +int __declspec(noinline) AutoHookIncrementNumber(int i) { + return i + 10; +} + +}; // namespace + +namespace sidestep { + +bool TestDisassembler() { + unsigned int instruction_size = 0; + sidestep::MiniDisassembler disassembler; + void * target = reinterpret_cast(IncrementNumber); + void * new_target = PreamblePatcher::ResolveTarget(target); + if (target != new_target) + target = new_target; + + while (1) { + sidestep::InstructionType instructionType = disassembler.Disassemble( + reinterpret_cast(target) + instruction_size, + instruction_size); + if (sidestep::IT_RETURN == instructionType) { + return true; + } + } +} + +bool TestPatchWithLongJump() { + original_function = NULL; + void *p = ::VirtualAlloc(reinterpret_cast(0x0000020000000000), 4096, + MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); + SIDESTEP_EXPECT_TRUE(p != NULL); + memset(p, 0xcc, 4096); + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + sidestep::PreamblePatcher::Patch(IncrementNumber, + (IncrementingFunc) p, + &original_function)); + SIDESTEP_ASSERT((*original_function)(1) == 2); + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + UNPATCH(IncrementNumber, + (IncrementingFunc)p, + original_function)); + ::VirtualFree(p, 0, MEM_RELEASE); + return true; +} + +bool TestPatchWithPreambleShortCondJump() { + original_function = NULL; + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + sidestep::PreamblePatcher::Patch(JumpShortCondFunction, + HookIncrementNumber, + &original_function)); + (*original_function)(1); + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + UNPATCH(JumpShortCondFunction, + (void*)HookIncrementNumber, + original_function)); + return true; +} + +bool TestPatchWithPreambleNearRelativeCondJump() { + original_function = NULL; + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + sidestep::PreamblePatcher::Patch(JumpNearCondFunction, + HookIncrementNumber, + &original_function)); + (*original_function)(0); + (*original_function)(1); + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + UNPATCH(JumpNearCondFunction, + HookIncrementNumber, + original_function)); + return true; +} + +bool TestPatchWithPreambleAbsoluteJump() { + original_function = NULL; + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + sidestep::PreamblePatcher::Patch(JumpAbsoluteFunction, + HookIncrementNumber, + &original_function)); + (*original_function)(0); + (*original_function)(1); + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + UNPATCH(JumpAbsoluteFunction, + HookIncrementNumber, + original_function)); + return true; +} + +bool TestPatchWithPreambleNearRelativeCall() { + original_function = NULL; + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + sidestep::PreamblePatcher::Patch( + CallNearRelativeFunction, + HookIncrementNumber, + &original_function)); + (*original_function)(0); + (*original_function)(1); + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + UNPATCH(CallNearRelativeFunction, + HookIncrementNumber, + original_function)); + return true; +} + +bool TestPatchUsingDynamicStub() { + original_function = NULL; + SIDESTEP_EXPECT_TRUE(IncrementNumber(1) == 2); + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + sidestep::PreamblePatcher::Patch(IncrementNumber, + HookIncrementNumber, + &original_function)); + SIDESTEP_EXPECT_TRUE(original_function); + SIDESTEP_EXPECT_TRUE(IncrementNumber(2) == 4); + SIDESTEP_EXPECT_TRUE(original_function(3) == 4); + + // Clearbox test to see that the function has been patched. + sidestep::MiniDisassembler disassembler; + unsigned int instruction_size = 0; + SIDESTEP_EXPECT_TRUE(sidestep::IT_JUMP == disassembler.Disassemble( + reinterpret_cast(IncrementNumber), + instruction_size)); + + // Since we patched IncrementNumber, its first statement is a + // jmp to the hook function. So verify that we now can not patch + // IncrementNumber because it starts with a jump. +#if 0 + IncrementingFunc dummy = NULL; + // TODO(joi@chromium.org): restore this test once flag is added to + // disable JMP following + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_JUMP_INSTRUCTION == + sidestep::PreamblePatcher::Patch(IncrementNumber, + HookIncrementNumber, + &dummy)); + + // This test disabled because code in preamble_patcher_with_stub.cc + // asserts before returning the error code -- so there is no way + // to get an error code here, in debug build. + dummy = NULL; + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_FUNCTION_TOO_SMALL == + sidestep::PreamblePatcher::Patch(TooShortFunction, + HookIncrementNumber, + &dummy)); +#endif + + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + UNPATCH(IncrementNumber, + HookIncrementNumber, + original_function)); + return true; +} + +bool PatchThenUnpatch() { + original_function = NULL; + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + sidestep::PreamblePatcher::Patch(IncrementNumber, + HookIncrementNumber, + &original_function)); + SIDESTEP_EXPECT_TRUE(original_function); + SIDESTEP_EXPECT_TRUE(IncrementNumber(1) == 3); + SIDESTEP_EXPECT_TRUE(original_function(2) == 3); + + SIDESTEP_EXPECT_TRUE(sidestep::SIDESTEP_SUCCESS == + UNPATCH(IncrementNumber, + HookIncrementNumber, + original_function)); + original_function = NULL; + SIDESTEP_EXPECT_TRUE(IncrementNumber(3) == 4); + + return true; +} + +bool AutoTestingHookTest() { + SIDESTEP_EXPECT_TRUE(IncrementNumber(1) == 2); + + // Inner scope, so we can test what happens when the AutoTestingHook + // goes out of scope + { + AutoTestingHook hook = MakeTestingHook(IncrementNumber, + AutoHookIncrementNumber); + (void) hook; + SIDESTEP_EXPECT_TRUE(IncrementNumber(2) == 12); + } + SIDESTEP_EXPECT_TRUE(IncrementNumber(3) == 4); + + return true; +} + +bool AutoTestingHookInContainerTest() { + SIDESTEP_EXPECT_TRUE(IncrementNumber(1) == 2); + + // Inner scope, so we can test what happens when the AutoTestingHook + // goes out of scope + { + AutoTestingHookHolder hook(MakeTestingHookHolder(IncrementNumber, + AutoHookIncrementNumber)); + (void) hook; + SIDESTEP_EXPECT_TRUE(IncrementNumber(2) == 12); + } + SIDESTEP_EXPECT_TRUE(IncrementNumber(3) == 4); + + return true; +} + +bool TestPreambleAllocation() { + __int64 diff = 0; + void* p1 = reinterpret_cast(0x110000000); + void* p2 = reinterpret_cast(0x810000000); + unsigned char* b1 = PreamblePatcher::AllocPreambleBlockNear(p1); + SIDESTEP_EXPECT_TRUE(b1 != NULL); + diff = reinterpret_cast<__int64>(p1) - reinterpret_cast<__int64>(b1); + // Ensure blocks are within 2GB + SIDESTEP_EXPECT_TRUE(diff <= INT_MAX && diff >= INT_MIN); + unsigned char* b2 = PreamblePatcher::AllocPreambleBlockNear(p2); + SIDESTEP_EXPECT_TRUE(b2 != NULL); + diff = reinterpret_cast<__int64>(p2) - reinterpret_cast<__int64>(b2); + SIDESTEP_EXPECT_TRUE(diff <= INT_MAX && diff >= INT_MIN); + + // Ensure we're reusing free blocks + unsigned char* b3 = b1; + unsigned char* b4 = b2; + PreamblePatcher::FreePreambleBlock(b1); + PreamblePatcher::FreePreambleBlock(b2); + b1 = PreamblePatcher::AllocPreambleBlockNear(p1); + SIDESTEP_EXPECT_TRUE(b1 == b3); + b2 = PreamblePatcher::AllocPreambleBlockNear(p2); + SIDESTEP_EXPECT_TRUE(b2 == b4); + PreamblePatcher::FreePreambleBlock(b1); + PreamblePatcher::FreePreambleBlock(b2); + + return true; +} + +bool UnitTests() { + return TestPatchWithPreambleNearRelativeCall() && + TestPatchWithPreambleAbsoluteJump() && + TestPatchWithPreambleNearRelativeCondJump() && + TestPatchWithPreambleShortCondJump() && + TestDisassembler() && TestPatchWithLongJump() && + TestPatchUsingDynamicStub() && PatchThenUnpatch() && + AutoTestingHookTest() && AutoTestingHookInContainerTest() && + TestPreambleAllocation(); +} + +}; // namespace sidestep + +int safe_vsnprintf(char *str, size_t size, const char *format, va_list ap) { + if (size == 0) // not even room for a \0? + return -1; // not what C99 says to do, but what windows does + str[size-1] = '\0'; + return _vsnprintf(str, size-1, format, ap); +} + +int _tmain(int argc, _TCHAR* argv[]) +{ + bool ret = sidestep::UnitTests(); + printf("%s\n", ret ? "PASS" : "FAIL"); + return ret ? 0 : -1; +} + +#pragma optimize("", on) diff --git a/src/thirdparty/gperftools-2.0/src/windows/preamble_patcher_with_stub.cc b/src/thirdparty/gperftools-2.0/src/windows/preamble_patcher_with_stub.cc new file mode 100644 index 000000000..b0dc393d9 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/preamble_patcher_with_stub.cc @@ -0,0 +1,296 @@ +/* Copyright (c) 2007, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Joi Sigurdsson + * Author: Scott Francis + * + * Implementation of PreamblePatcher + */ + +#include "preamble_patcher.h" + +#include "mini_disassembler.h" + +// Definitions of assembly statements we need +#define ASM_JMP32REL 0xE9 +#define ASM_INT3 0xCC +#define ASM_NOP 0x90 +// X64 opcodes +#define ASM_MOVRAX_IMM 0xB8 +#define ASM_REXW 0x48 +#define ASM_JMP 0xFF +#define ASM_JMP_RAX 0xE0 +#define ASM_PUSH 0x68 +#define ASM_RET 0xC3 + +namespace sidestep { + +SideStepError PreamblePatcher::RawPatchWithStub( + void* target_function, + void* replacement_function, + unsigned char* preamble_stub, + unsigned long stub_size, + unsigned long* bytes_needed) { + if ((NULL == target_function) || + (NULL == replacement_function) || + (NULL == preamble_stub)) { + SIDESTEP_ASSERT(false && + "Invalid parameters - either pTargetFunction or " + "pReplacementFunction or pPreambleStub were NULL."); + return SIDESTEP_INVALID_PARAMETER; + } + + // TODO(V7:joi) Siggi and I just had a discussion and decided that both + // patching and unpatching are actually unsafe. We also discussed a + // method of making it safe, which is to freeze all other threads in the + // process, check their thread context to see if their eip is currently + // inside the block of instructions we need to copy to the stub, and if so + // wait a bit and try again, then unfreeze all threads once we've patched. + // Not implementing this for now since we're only using SideStep for unit + // testing, but if we ever use it for production code this is what we + // should do. + // + // NOTE: Stoyan suggests we can write 8 or even 10 bytes atomically using + // FPU instructions, and on newer processors we could use cmpxchg8b or + // cmpxchg16b. So it might be possible to do the patching/unpatching + // atomically and avoid having to freeze other threads. Note though, that + // doing it atomically does not help if one of the other threads happens + // to have its eip in the middle of the bytes you change while you change + // them. + unsigned char* target = reinterpret_cast(target_function); + unsigned int required_trampoline_bytes = 0; + const unsigned int kRequiredStubJumpBytes = 5; + const unsigned int kRequiredTargetPatchBytes = 5; + + // Initialize the stub with INT3's just in case. + if (stub_size) { + memset(preamble_stub, 0xcc, stub_size); + } + if (kIs64BitBinary) { + // In 64-bit mode JMP instructions are always relative to RIP. If the + // replacement - target offset is > 2GB, we can't JMP to the replacement + // function. In this case, we're going to use a trampoline - that is, + // we're going to do a relative jump to a small chunk of code in the stub + // that will then do the absolute jump to the replacement function. By + // doing this, we only need to patch 5 bytes in the target function, as + // opposed to patching 12 bytes if we were to do an absolute jump. + // + // Note that the first byte of the trampoline is a NOP instruction. This + // is used as a trampoline signature that will be detected when unpatching + // the function. + // + // jmp + // + // trampoline: + // nop + // mov rax, + // jmp rax + // + __int64 replacement_target_offset = reinterpret_cast<__int64>( + replacement_function) - reinterpret_cast<__int64>(target) - 5; + if (replacement_target_offset > INT_MAX + || replacement_target_offset < INT_MIN) { + // The stub needs to be within 2GB of the target for the trampoline to + // work! + __int64 trampoline_offset = reinterpret_cast<__int64>(preamble_stub) + - reinterpret_cast<__int64>(target) - 5; + if (trampoline_offset > INT_MAX || trampoline_offset < INT_MIN) { + // We're screwed. + SIDESTEP_ASSERT(false + && "Preamble stub is too far from target to patch."); + return SIDESTEP_UNEXPECTED; + } + required_trampoline_bytes = 13; + } + } + + // Let's disassemble the preamble of the target function to see if we can + // patch, and to see how much of the preamble we need to take. We need 5 + // bytes for our jmp instruction, so let's find the minimum number of + // instructions to get 5 bytes. + MiniDisassembler disassembler; + unsigned int preamble_bytes = 0; + unsigned int stub_bytes = 0; + while (preamble_bytes < kRequiredTargetPatchBytes) { + unsigned int cur_bytes = 0; + InstructionType instruction_type = + disassembler.Disassemble(target + preamble_bytes, cur_bytes); + if (IT_JUMP == instruction_type) { + unsigned int jump_bytes = 0; + SideStepError jump_ret = SIDESTEP_JUMP_INSTRUCTION; + if (IsShortConditionalJump(target + preamble_bytes, cur_bytes)) { + jump_ret = PatchShortConditionalJump(target + preamble_bytes, cur_bytes, + preamble_stub + stub_bytes, + &jump_bytes, + stub_size - stub_bytes); + } else if (IsNearConditionalJump(target + preamble_bytes, cur_bytes) || + IsNearRelativeJump(target + preamble_bytes, cur_bytes) || + IsNearAbsoluteCall(target + preamble_bytes, cur_bytes) || + IsNearRelativeCall(target + preamble_bytes, cur_bytes)) { + jump_ret = PatchNearJumpOrCall(target + preamble_bytes, cur_bytes, + preamble_stub + stub_bytes, &jump_bytes, + stub_size - stub_bytes); + } + if (jump_ret != SIDESTEP_SUCCESS) { + SIDESTEP_ASSERT(false && + "Unable to patch because there is an unhandled branch " + "instruction in the initial preamble bytes."); + return SIDESTEP_JUMP_INSTRUCTION; + } + stub_bytes += jump_bytes; + } else if (IT_RETURN == instruction_type) { + SIDESTEP_ASSERT(false && + "Unable to patch because function is too short"); + return SIDESTEP_FUNCTION_TOO_SMALL; + } else if (IT_GENERIC == instruction_type) { + if (IsMovWithDisplacement(target + preamble_bytes, cur_bytes)) { + unsigned int mov_bytes = 0; + if (PatchMovWithDisplacement(target + preamble_bytes, cur_bytes, + preamble_stub + stub_bytes, &mov_bytes, + stub_size - stub_bytes) + != SIDESTEP_SUCCESS) { + return SIDESTEP_UNSUPPORTED_INSTRUCTION; + } + stub_bytes += mov_bytes; + } else { + memcpy(reinterpret_cast(preamble_stub + stub_bytes), + reinterpret_cast(target + preamble_bytes), cur_bytes); + stub_bytes += cur_bytes; + } + } else { + SIDESTEP_ASSERT(false && + "Disassembler encountered unsupported instruction " + "(either unused or unknown"); + return SIDESTEP_UNSUPPORTED_INSTRUCTION; + } + preamble_bytes += cur_bytes; + } + + if (NULL != bytes_needed) + *bytes_needed = stub_bytes + kRequiredStubJumpBytes + + required_trampoline_bytes; + + // Inv: cbPreamble is the number of bytes (at least 5) that we need to take + // from the preamble to have whole instructions that are 5 bytes or more + // in size total. The size of the stub required is cbPreamble + + // kRequiredStubJumpBytes (5) + required_trampoline_bytes (0 or 13) + if (stub_bytes + kRequiredStubJumpBytes + required_trampoline_bytes + > stub_size) { + SIDESTEP_ASSERT(false); + return SIDESTEP_INSUFFICIENT_BUFFER; + } + + // Now, make a jmp instruction to the rest of the target function (minus the + // preamble bytes we moved into the stub) and copy it into our preamble-stub. + // find address to jump to, relative to next address after jmp instruction +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4244) +#endif + int relative_offset_to_target_rest + = ((reinterpret_cast(target) + preamble_bytes) - + (preamble_stub + stub_bytes + kRequiredStubJumpBytes)); +#ifdef _MSC_VER +#pragma warning(pop) +#endif + // jmp (Jump near, relative, displacement relative to next instruction) + preamble_stub[stub_bytes] = ASM_JMP32REL; + // copy the address + memcpy(reinterpret_cast(preamble_stub + stub_bytes + 1), + reinterpret_cast(&relative_offset_to_target_rest), 4); + + if (kIs64BitBinary && required_trampoline_bytes != 0) { + // Construct the trampoline + unsigned int trampoline_pos = stub_bytes + kRequiredStubJumpBytes; + preamble_stub[trampoline_pos] = ASM_NOP; + preamble_stub[trampoline_pos + 1] = ASM_REXW; + preamble_stub[trampoline_pos + 2] = ASM_MOVRAX_IMM; + memcpy(reinterpret_cast(preamble_stub + trampoline_pos + 3), + reinterpret_cast(&replacement_function), + sizeof(void *)); + preamble_stub[trampoline_pos + 11] = ASM_JMP; + preamble_stub[trampoline_pos + 12] = ASM_JMP_RAX; + + // Now update replacement_function to point to the trampoline + replacement_function = preamble_stub + trampoline_pos; + } + + // Inv: preamble_stub points to assembly code that will execute the + // original function by first executing the first cbPreamble bytes of the + // preamble, then jumping to the rest of the function. + + // Overwrite the first 5 bytes of the target function with a jump to our + // replacement function. + // (Jump near, relative, displacement relative to next instruction) + target[0] = ASM_JMP32REL; + + // Find offset from instruction after jmp, to the replacement function. +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4244) +#endif + int offset_to_replacement_function = + reinterpret_cast(replacement_function) - + reinterpret_cast(target) - 5; +#ifdef _MSC_VER +#pragma warning(pop) +#endif + // complete the jmp instruction + memcpy(reinterpret_cast(target + 1), + reinterpret_cast(&offset_to_replacement_function), 4); + + // Set any remaining bytes that were moved to the preamble-stub to INT3 so + // as not to cause confusion (otherwise you might see some strange + // instructions if you look at the disassembly, or even invalid + // instructions). Also, by doing this, we will break into the debugger if + // some code calls into this portion of the code. If this happens, it + // means that this function cannot be patched using this patcher without + // further thought. + if (preamble_bytes > kRequiredTargetPatchBytes) { + memset(reinterpret_cast(target + kRequiredTargetPatchBytes), + ASM_INT3, preamble_bytes - kRequiredTargetPatchBytes); + } + + // Inv: The memory pointed to by target_function now points to a relative + // jump instruction that jumps over to the preamble_stub. The preamble + // stub contains the first stub_size bytes of the original target + // function's preamble code, followed by a relative jump back to the next + // instruction after the first cbPreamble bytes. + // + // In 64-bit mode the memory pointed to by target_function *may* point to a + // relative jump instruction that jumps to a trampoline which will then + // perform an absolute jump to the replacement function. The preamble stub + // still contains the original target function's preamble code, followed by a + // jump back to the instructions after the first preamble bytes. + // + return SIDESTEP_SUCCESS; +} + +}; // namespace sidestep diff --git a/src/thirdparty/gperftools-2.0/src/windows/shortproc.asm b/src/thirdparty/gperftools-2.0/src/windows/shortproc.asm new file mode 100644 index 000000000..7e8e3d783 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/src/windows/shortproc.asm @@ -0,0 +1,169 @@ +; Copyright (c) 2011, Google Inc. +; All rights reserved. +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are +; met: +; +; * Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above +; copyright notice, this list of conditions and the following disclaimer +; in the documentation and/or other materials provided with the +; distribution. +; * Neither the name of Google Inc. nor the names of its +; contributors may be used to endorse or promote products derived from +; this software without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +; +; --- +; Author: Scott Francis +; +; Unit tests for PreamblePatcher + +.MODEL small + +.CODE + +TooShortFunction PROC + ret +TooShortFunction ENDP + +JumpShortCondFunction PROC + test cl, 1 + jnz jumpspot + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 + int 3 +jumpspot: + nop + nop + nop + nop + mov rax, 1 + ret +JumpShortCondFunction ENDP + +JumpNearCondFunction PROC + test cl, 1 + jnz jumpspot + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H +jumpspot: + nop + nop + mov rax, 1 + ret +JumpNearCondFunction ENDP + +JumpAbsoluteFunction PROC + test cl, 1 + jmp jumpspot + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H +jumpspot: + nop + nop + mov rax, 1 + ret +JumpAbsoluteFunction ENDP + +CallNearRelativeFunction PROC + test cl, 1 + call TooShortFunction + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + mov rdx, 0ffff1111H + nop + nop + nop + ret +CallNearRelativeFunction ENDP + +END diff --git a/src/thirdparty/gperftools-2.0/vsprojects/addr2line-pdb/addr2line-pdb.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/addr2line-pdb/addr2line-pdb.vcproj new file mode 100755 index 000000000..a4ffae47d --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/addr2line-pdb/addr2line-pdb.vcproj @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/addressmap_unittest/addressmap_unittest.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/addressmap_unittest/addressmap_unittest.vcproj new file mode 100755 index 000000000..d31836ffb --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/addressmap_unittest/addressmap_unittest.vcproj @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/current_allocated_bytes_test/current_allocated_bytes_test.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/current_allocated_bytes_test/current_allocated_bytes_test.vcproj new file mode 100755 index 000000000..00e008cea --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/current_allocated_bytes_test/current_allocated_bytes_test.vcproj @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/frag_unittest/frag_unittest.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/frag_unittest/frag_unittest.vcproj new file mode 100755 index 000000000..8e8525333 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/frag_unittest/frag_unittest.vcproj @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/libtcmalloc_minimal/libtcmalloc_minimal.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/libtcmalloc_minimal/libtcmalloc_minimal.vcproj new file mode 100755 index 000000000..f71a68915 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/libtcmalloc_minimal/libtcmalloc_minimal.vcproj @@ -0,0 +1,785 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/low_level_alloc_unittest/low_level_alloc_unittest.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/low_level_alloc_unittest/low_level_alloc_unittest.vcproj new file mode 100755 index 000000000..bee8133e3 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/low_level_alloc_unittest/low_level_alloc_unittest.vcproj @@ -0,0 +1,373 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/malloc_extension_test/malloc_extension_test.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/malloc_extension_test/malloc_extension_test.vcproj new file mode 100755 index 000000000..f56323619 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/malloc_extension_test/malloc_extension_test.vcproj @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/malloc_hook_test/malloc_hook_test.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/malloc_hook_test/malloc_hook_test.vcproj new file mode 100755 index 000000000..28d6aa5e9 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/malloc_hook_test/malloc_hook_test.vcproj @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/markidle_unittest/markidle_unittest.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/markidle_unittest/markidle_unittest.vcproj new file mode 100755 index 000000000..701a8cbc0 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/markidle_unittest/markidle_unittest.vcproj @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/nm-pdb/nm-pdb.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/nm-pdb/nm-pdb.vcproj new file mode 100755 index 000000000..5982e3c6d --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/nm-pdb/nm-pdb.vcproj @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/packed-cache_test/packed-cache_test.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/packed-cache_test/packed-cache_test.vcproj new file mode 100755 index 000000000..387746c7f --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/packed-cache_test/packed-cache_test.vcproj @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/page_heap_test/page_heap_test.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/page_heap_test/page_heap_test.vcproj new file mode 100755 index 000000000..6159ca6e1 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/page_heap_test/page_heap_test.vcproj @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/pagemap_unittest/pagemap_unittest.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/pagemap_unittest/pagemap_unittest.vcproj new file mode 100755 index 000000000..f3d89ffb9 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/pagemap_unittest/pagemap_unittest.vcproj @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/preamble_patcher_test/preamble_patcher_test.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/preamble_patcher_test/preamble_patcher_test.vcproj new file mode 100755 index 000000000..3c84f8f7c --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/preamble_patcher_test/preamble_patcher_test.vcproj @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/realloc_unittest/realloc_unittest.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/realloc_unittest/realloc_unittest.vcproj new file mode 100755 index 000000000..7b19efcfd --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/realloc_unittest/realloc_unittest.vcproj @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/sampler_test/sampler_test.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/sampler_test/sampler_test.vcproj new file mode 100755 index 000000000..9447f01e6 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/sampler_test/sampler_test.vcproj @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/stack_trace_table_test/stack_trace_table_test.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/stack_trace_table_test/stack_trace_table_test.vcproj new file mode 100755 index 000000000..bfac5766a --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/stack_trace_table_test/stack_trace_table_test.vcproj @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/tcmalloc_minimal_large/tcmalloc_minimal_large_unittest.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/tcmalloc_minimal_large/tcmalloc_minimal_large_unittest.vcproj new file mode 100755 index 000000000..cd9f00745 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/tcmalloc_minimal_large/tcmalloc_minimal_large_unittest.vcproj @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/tcmalloc_minimal_unittest/tcmalloc_minimal_unittest.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/tcmalloc_minimal_unittest/tcmalloc_minimal_unittest.vcproj new file mode 100755 index 000000000..47f6f74a3 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/tcmalloc_minimal_unittest/tcmalloc_minimal_unittest.vcproj @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/thread_dealloc_unittest/thread_dealloc_unittest.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/thread_dealloc_unittest/thread_dealloc_unittest.vcproj new file mode 100755 index 000000000..62c076603 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/thread_dealloc_unittest/thread_dealloc_unittest.vcproj @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/thirdparty/gperftools-2.0/vsprojects/tmu-static/tmu-static.vcproj b/src/thirdparty/gperftools-2.0/vsprojects/tmu-static/tmu-static.vcproj new file mode 100755 index 000000000..3b1db3248 --- /dev/null +++ b/src/thirdparty/gperftools-2.0/vsprojects/tmu-static/tmu-static.vcproj @@ -0,0 +1,884 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 65f87537cc2b025ef23b2078756a3bd779a6c30b Mon Sep 17 00:00:00 2001 From: ReplayCoding Date: Sat, 18 Feb 2023 19:13:50 -0800 Subject: [PATCH 16/24] add precompiled libraries these are taken from the leaked source code --- src/lib/common/linux32/libcurl.a | Bin 0 -> 376238 bytes src/lib/common/linux32/libjpeg.a | Bin 0 -> 314670 bytes src/lib/common/ubuntu12_32/libcrypto.a | Bin 0 -> 2948400 bytes src/lib/common/ubuntu12_32/libcryptopp.a | Bin 0 -> 44567128 bytes src/lib/public/linux32/libSDL2.so | 0 src/lib/public/linux32/libpng.a | Bin 0 -> 202564 bytes src/lib/public/linux32/libz.a | Bin 0 -> 110018 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/lib/common/linux32/libcurl.a create mode 100644 src/lib/common/linux32/libjpeg.a create mode 100644 src/lib/common/ubuntu12_32/libcrypto.a create mode 100644 src/lib/common/ubuntu12_32/libcryptopp.a mode change 100644 => 120000 src/lib/public/linux32/libSDL2.so create mode 100644 src/lib/public/linux32/libpng.a create mode 100644 src/lib/public/linux32/libz.a diff --git a/src/lib/common/linux32/libcurl.a b/src/lib/common/linux32/libcurl.a new file mode 100644 index 0000000000000000000000000000000000000000..be6615d962dd9047ae98002d17f8ee24bd083522 GIT binary patch literal 376238 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

M)>(i&@1sc6bFR71BzR0l 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%0DuK%BSN)}wU7*^MtUBZ=H={n}DmtY>^s#40KL`Dy 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 literal 0 HcmV?d00001 diff --git a/src/lib/common/linux32/libjpeg.a b/src/lib/common/linux32/libjpeg.a new file mode 100644 index 0000000000000000000000000000000000000000..4d5890ceb1a36a8bb4fbf4546a62fb99eeceb877 GIT binary patch literal 314670 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 veRRBv4*sE# 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 literal 0 HcmV?d00001 diff --git a/src/lib/common/ubuntu12_32/libcrypto.a b/src/lib/common/ubuntu12_32/libcrypto.a new file mode 100644 index 0000000000000000000000000000000000000000..45278677ddab689cb4e2d763da61ee1bc53fbfd2 GIT binary patch literal 2948400 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 z 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

&3z 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 z%0D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%0A9$bVmJOQUn$_u@I97>OJq_OD}vjD05vv8m8F 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%0AX&qQD!)En>Z2H~^n-31i=B78orh7m( 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 z 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 }-bw}|p&zW~5ViN=z$LHy&3%3 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∨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�VlcmIXu&|>Kf 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

Rb-(5?ErE%9ohKE;52Q_iQ85+?b6> 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 literal 0 HcmV?d00001 diff --git a/src/lib/common/ubuntu12_32/libcryptopp.a b/src/lib/common/ubuntu12_32/libcryptopp.a new file mode 100644 index 0000000000000000000000000000000000000000..37442a77ba3740f18d648df6a6e14d53bba544d2 GIT binary patch literal 44567128 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 &{_tvGODUf!3&uhCkNcxiHh;*?ETa3XRU5V050o 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 z%0A1;(YS;DIQarzrGHHROm@z0&*P%XdO64i$iC$2=!dPCcO&=5;q=qV^KmKt267Df zDBe+98S_DvxBFjJUayonM0vejRhj2k+Za<`mFwzYYwX5+m@4;;CeOuKwViw%SLOZ( z_yHYr+PR0?-k8#=Tvr{NVJ94*%5^K%4#w=JKZaNE3G>9ct zd{Sk<)E?FxSQIO%vTqYr_HC!ieSOIxzRk^MRxgxg4@wgsu<9oG>F$wdEa=tW}Qd^V@WTv%L{{j008zn?1i2a>yy zhvO{z`Q){@4_{!a{B|8r^j3q7sjbSnnqy}isLDAes&bB5s$9Q@ypenuZ>aJ*+$XT*>SgC%7@+nsW{@h^&&HLwo%uCPRYFHt9|kk;tqzd?F2QI#!TgLmQ2u)a6Bn^LCstJDyj9gf@_vZJ zaUO2PcvY^yqK3%lF_^lj%>}R;2B>mZ{@`;c&CsxFEI06@{ za^F%lR6gIroA?>i7Pr@BP=^`ggRO87&cR)HNtN}lsUwW}j_xIFE{)AG1ZS&q-#m4c zF?;Y9{y?{qc3uXXsd8T{b+mka1ZU$$Jfq5W7t}HG`!>3I+guDAV^3AC@2ie8W)^P1 zQ_Rn)$E;O2q)rdJb_PC+4qGy(U@dD);y~8`PE6r)WJX;hI26n zFXLx*iZMw_+jY{T2bNZ+8dHxPpiYxt&*U*U3s+;bI$b_a-~&~j_c__IjAS{tvpPdQ zA3%LRx8k4%5HIMpBe*Y&|BG(~zAa^4VC66UXkR!=^RM}_0 zI?tH9_)(R8ev?y_w>g6<*X1P_BiA4|BKwnr$-~GK$jemOH%gsv%yGP>%Dzv?U&#&? z>~(2WnY)uqsIrcay1)aradJ6weR2zO7jj?nXmU7tIe8uVh${QWsmtZ-V)#du=Sf`6_8C>l zxyU8R<;e}mEy;aUS$BZCLcR`+(W|Dd%@2bkW9%L_abyfDQtwtHs4M(W5??mzv z@*46U@)7c7@?G*f@*i@lns&Vms_aulm3>R7tBh%iT~*n)A9)OU8hI&sEjfmKlzc~( zbswm!jY&|;>ZZ!NImxBSmB@|AZOFmo!Q@HgndE3y_SvMakw2%yC#vl8j_gp|=47f| zmznHAF0aZumDRPz_~Rf|))_^PAV-q7koS_$kZ+J*l0TD^*0Jlks;MRd66pXY$nHG zEd6u*jb07x^=(u+e+PAo{Qiv7RC%7+ZQv4#mSAa6Ncba zRqhX0x5?Mb@uDjCUnhUZL!>#Za7~%5}5V9mZ_I<9Gw#sB+y0 zb*KDyMk8x3ERXfEBlcJ2z7Tbn{JA^sQRO)fk}u*T{EA5%+xt9KS*L)y+nD}1PL*|L z;11l&{26*RvG*5M_ZZU%o2h>sOea;==|w-9JdM1Zyq>C4hrqi;zLAP*vsB1e#yk++ifkE8csyx?sRh}zBOFMT{CFdj;Cs!a>QRO~A`c@dg zJc#*l`U&)l$g6M*{W*Mu-!Vli*+-rywR%Xt{Da=A>|a@xbJnHzqwhf9m3}yR0(m|; zio8~p^>)(7;wk3mm_MO^NAJ|y?w=Afs&YJ8J}y>e|Fx<-&o=s9 z^l|j@^iRp}$&PL8eJNF0H;pRmWuwoB#hI64UZ1`NeRuKz97(?zw_+ULR^@r_t4HMf zSK3;gRoOp{`pdy&rq51aguV=Y19D4pSMmVzU{%%|M?V7>Fkixa2mL|%OXNHFoZh*e zJ*PVs!D^~JPc8MRF*(O>3zx7u_1jA48ys&UX|zBtR6Ea9)cU5J54{}j*Nmcf#OkWq9F>l4ZH~kR$ zY2PxOE2(*)XcWkyd`&R-Q^JK6i)Raw6v*@x__%09K|8)IAM9hncJA4NZhycE~b$Kh@KfQdWH zKJuK&)l>3$78X@y|4OPnXC3+m^zG@p&<`VzC(k3VB(G6ry&d!i@g(!J%pcRgrB4uK z_fLUts+_YV*2ebO6UV9YT$9w(#zf;LRnBoxmFGH1f0q6R{UiEk^xx1xlDLzUZLi9fL^~lZ1LF9hqL8|OC zhJG5(W4?&_Hv0Ya@#I_hl-?=Wo+l#~!V1`2mFI1(o-<}Bj!@+s(^Yw{`SgqF*V1pJ z-$frsA5Z_3{GROC!>*T7mHpDFvQIYpd{~@$DdzR*ThMnW55ST1i*YN);dOkk%JY6! z&&&6<_q1kG(e))|Bt>q{Ydg8@l;nE*ErH<@`Qa5C6lyI7yY~ou*zeW)p5xZ*paFbyfChOy3qeGw;TH6#ZoSrR24^ojx9);xA0m$DYSSmFLZ;#>@AyV0~52 z(N2}~2GMt?A4ETjek^@B{X+Vs^qc7S(4Qk;C%+(nA^%Wi|3rQ5{;APjm2+lOW$sO1 zk-iDJ9d@A~iwkfQ9>N={ybgENi}L3(n4q8C$5oZrA*(9$ob-k1OVgL5uSMUOzBzqo z`rhOMFxcLoQRrEhFz#04u8^`88ByDI0Lg{$fJsdB#Kc!vHHCK+z$sZ?3V6Dwmg z?2ciooG+ZbUX}ChQssOH=&#^M^@036%m`7==Zbk%>C35dz8YAMz8_AYpGIDVhwuu% z!UQ8_Jvm<*Ro3@X<$OM>oUa0XGwh*0GG>%2=bMI0a4YjTRn8fY*XaME>nJ;ocRU3O8*DbjJEf?sd9f2tc~rkH;%)_syydRoXidS_vkuCdU?Jq zm&OT2Hr`idpAV|6^9!BFNtW{@Rb`%Dm3el|k403ut`2s<09EemugZPH>1UA_lQ)uM z$Olxp?=<}tyvO_z^H21DF!6YMj?Aj;mj{c|*GGRGiZfKXK7zas58(~w98lHP*@0Qx`dzCiLBKiu%f! zNL9|e0r%rsyn}Dhagx0+gDTIFgItVUp4^z+lH407<5IkZA28))yM8{bs>*XTP~|zA z(Ffy1^^N@8p(@X@4rA~X-o&@6T<O@m*EyXrpk3URXO)#@)xq>G&|3r$~+6XB>G_hPQ?{? z5O3laRnF}&U6gYtR%QQeSVNWbHbj5ytbQs@(U0{uO><{)2haS@xW+m{pZ?79;y&4f^Kfj@X&LKY18= zDXviE9NU>6pua@ELw-yCN&c(KeaUCr^QFh^s+=#kD)SQb<*_F7Hsns&n|>-T$Gvz# zmG_UU5Z2Ta|MRRplIE^bxoLFQ{^!oA?Ufso&)1w&z(3sj{yRmZuNI5c=Wd2wX?M9b@Pp z;1~K|WY_t2zr3pKSDajfT#p=xA@sw^GjS2F!p(Rb@2K*A@tT}?f#i!$CapT#$z)RH z`Ez3#Y^ch89mqpexo@m0_f4UXzzujwmDl+pK2?9n&ljokc2BfW>?+@Xr%LZhE=I0K z_9OpC4knKvk0Y~pNm?>$#{^*aq1{^@9Z$qiLmr!@v*PYhAze-p{Ga51jNEx1dS|DD3`_*?xW|DCl|l>OXP z`JWfL6uBn33Au$T_XX1T#1Q78%%{*tU?lVHvX6fPHZ) z&c#itqkJ9zUzVTi!pHPKR9V+)nKdQ4VOG^q{yZ4#sq)v2&`NoqM;zm4#ckmgS6>^`G{9L*! zzy3VPe&~+_afm9+I2IlPV)0gg-^;k_X~Aj8NrywyMq!=7K8w-o(fB zU&v;az0O6I>oSoGkc*NVV{=v34`SYjejIrQc^P>Fd5bFd9iTsf7nxsW{*?Yb{$!qN zwLM=(%&j^*m`d0Td*K*Wo@WwyDelLI_!<+gk?RvXn2f5t-g(d)tE+N;KXQO7*N3RG zPZ&5w*c5x=U<_B2%Fk`7^7h_}hw-8+&vTpnUX|;e*Nd{R3ueOH zs?1B0E07zITavqydy&I&75!$6!J~LemG%E(f(?@8e6FgTC#x#+;^cDV`s7yRcBsHx@kQRTdk@jHFWt z#A2%4-w^{ePlTtAl_jR!CupP<8byH7IArONB&sit)>?XeGzWj;}Lm7iz8XXv!U_UTnQM`m&( z>_Fd%JRjHNL42;Jlb=ggB8m?f%tOIah5pgM8kEF{+&FEcqjTRb^eL zJ$9ZB^I{=Y*6F0W$@g=svi>-Xz*QKd%5~>e+3z8~#;@oQW3S7t%5{aX5`80bAb9|J z1bGH|0Y=gv#3QOa*9GPe@D+Z+U#gt9)Lv^@Rqm^+%DI}+cO&;Fk0pnb=csbua{BeS zlX(pDQ}mbdF7uD%-?ggk~k zL6!UF&@aWc%r`LKPalWz%%70o;ZJ(EgZ5lrSRGrda=wn_{x}_1tC=0lUR7S_6L=k; zt8(6yvG%%}Y8D66MwRQkUo4ImHLLu2pDOn!Ib_X<`Ba%V!X9ci z`MFu<({KrHWPS}lsoCZGRSw&AlVdu}hWS-FUlDReRnA?D+!X)AU{$UkM4qC`KG7J< z{1o{a`4c(G5qrOjD);5VGT0D9a5ipH<#pPj=5#O@RXN9XRnGgK-ubBQT`-d>*B2&x zlN(_W4#nBHUd`=bVpZ8Up8Qmmec$6(`mD$7^~F`0mnJvFPW0W$qj4Vn67o(wO&?Ew zg1<1;al2nGtf9)+8S9g~sPg>-{Z#q>fg$waxK_<0->;_1^WDHV^a?a4*=S%WmRh}>5NjuMoUaIt^upE5=4x%4Mo`Y-YH<9D;7X1VA4@`N=?&GS;`SN0U zY>0t4L6tvOn@(P*{&F%q)M-v;AN?hKrRH~#zc5;q=gy`|F0RV+mBT9ZU2z!wX!1hb zM8AW479Y?*BbzgJA6HfO$wV%Mm9YhO$Kkk4mACI2@)1>@^PDQrd4>KpCOj*BLHRm_ zD$kh*OJY@QuF7@YRXNuH97?|&chT=BU%{93@5xEd+4ZujvR-boFE*raPVR=oa5?VA z%lKWD=Qro=`tGW{f9Fx<{o9MaDz;Gz$>*o4Jbyn7#c>#ct5o@TxtV-OmHV&ZD@=UB z_8wS6Eh1mnR%M?c9E9U>p(@vHR^@ex!C3ki_?JFOyuB`!D);%IuPW!P$GkbVWj+=c z&_|MY<5~JkmHo0|3HmbRM%bA?m^=pO(=R3O!ZY+2$uH4dvimx#vTs%_ zPG6eb5IfO#Cy&N?^h?M)@icur`33%^Pk7nxn+1!h^7io|`(Yq`H*y%xrC&_mfv4y% zke}lpdZ#OP-^^H4m3>Q*8(;u^SMn%~pkGAZj7RVWzQz<+?S5WZ5gX$GRX&b}lB4hh z{dw|tOn%L-mlI23Q|yo9aRKgEWuK$uH<6A+e(;5ygf+>9`PA<2F2mXYoD$LASeh-ICZ2|5HoI-$#P;)Iaib@~WJB8}4U* zi1`)zd-wuB;U87jb-ZWSOQ*_u*)Sg#$8xG%-<;eLyU`CPPr#YQrHed z)sph}#gbRxHjHC_T9xN}s>=C)pm}Kfq^k6;s;uWmpO3ycmcts@P?hUDk$d4_9L;<- zc?qtg->AyD4$_~*OU$n^e?{tTD{JykiMH<9Jm*jz*BTsPb`opDG`xkI>)1 z518nQUMHVFsj{Ct*^^vAmDjf2RoVYD+4-r>X;e9n zC%GuOGPyRnErwvED!*RV;Z8h^m()@Y<{8=PnY}&-mQZEhK$UZ~M1KrsJ`>l{Z^Qj~ zlKELxUcWo^&**=X6F;~6WmIK94{~X86>?*8TXGNbARL90nJ*=;#clLQ$>;Dg{X_CA z@^4K2!k)`rmDi;Jxg@zd*$-P`0P{iQQ8<}?5qTA^r;i~YAz#K%nBt{9M_yIl-^-JG z;e1uz{wr`Z?#G8}Y5BNDPWsATp9u@8GOwb_+oL@O()T5YlEcXhF$y=~9#z&mMZS!8 z@g;Nf+U}PW)2VV_esT#cOWzoS==+ev$kWKtcoeVUM|623`;?W>3srgDDq;g{smkl% zugY};$s@_(ft4>s8rzCpnIMiToauzO(Ci zsIpI4vOkVdE6DGAs_e4}qi_=*#Ph2Bdc975j2|$;d%I3bRnC`1mGz5}eaS7!f#kvD zk>m(mhllVPI(@L~=1?oi=Rc~PzltjR)*?3{w^HTY0rcH)IP)>&>Et=&wW_Rtfc^ye z3HgmG>wZ&Z{{$aJ**}FU_vIuP#A5V~u$e0NcV^z3ek^%9Ig-4dyjhj|_S45IfTMed8^>8FyH;UPSx$~mv9^19ro|3WsO?Y^m1 zeSab6Q02Zt^gdXbd3EN^=sRFn=EKP2aVGt8@_O7#A4@(-eu&@b|B#b>vFFWo&v{Fgb)Ks7I=rU;t;+RjzS=%B=2WFGt;&5h$*q`o zAos&?oTJKqQL5~-33t#RQ)S(o^pEi+z2i5#UuspZ%caUX`N-w44R%mvzh0_bHyB4V zAJ2Ri{bF2=8&uinG(Ny5s;v7(m37T`dtEwJayD`ivM;%!D)-f+Z;l3Vj4dGGEDj zJN*GX!TdJ)DSn_&C9k2LFE>`eDyr<)Se5^`rSC%?N}fWVM_#1LeQW8r;eO_an8(xK z!Y9mskez-BqMdJbbi>j=1o%|k?{k8XH!?M^A18^WNz#Xc4LKCabb24%Cck!!Q z!@(qzv*>v|(HpC&G7rEAwWfT(Df3-;n*P2j=YNUs>D?UceO{`}i<9eM2l`IrVK|e1 z9(gk!qd!f4gx~4^k~28keG96xZ!vOhY)>CZ4#jZ#x#UfFl>QX?A%3I(Lr$N-?pr{W zeT$N7VLSQ&@*tdqk$4hs<4<&Rl6B?JKRi`=d(>6s_o>F@emIYQDLF=!&&!Xg@_G3g z`bYRntu5b&m{63rT^97ha;m&f)*v@h<@wsEa$g7Lz3D?$`B*oe`DEq`=+~=q|5oOw z@jm@a@-MQpv%TI0GpVv~A+irvrf*Dci~jVz$%Dx=ajh!n-A;}pKO`qgWcPDZ<=lD5 zCCKH-jj%V)!rd6J)|KyrRpoX5q{@0f$O#kMoJ^J1JDn=mWyT`Ry~&lxHOQ@1S-%(k zU~&X`i7M-^QDxn2^!ru0?;`m&KBWJNe^t5PC5b5K&ZNqHg~_GKwaLxMtyH=RZF)#Ci%zf#rqaX7Cat{olpM&c#1`nvR-+5K`yFve! z{GFUMxt*t1>cex0lG{(lHB(?3^b{g3#aK4(gMUmjInA8%Ez ztBBQ^_rx&z3FJuJP9H6RDe@=$gE?H~K6(EvfTgge>L4V7w$YB_Pk+=zusPf!r@fzM??wG-zBRiJCrmEc69=p(olE>i;`eo#3 z+(Lhle1d!hU!#+o-QOJxVPyN45z?RJ0 zG7qL7h$ETLCNIIY^vCfQzE@?Rzp9)siMur|W>MvQ#mK%`gT4*96LzPciL2>1kdNU_ z`p5W|-ek7>Cq-Axq{=ypV<}b6U6XkuY{R?*^I-acI1(q}Y+Rzs`pZ>WcO(67Jd9`X zD&AJ*`lsZts;u*qK6Mt!^18ZX4pru5unB!T45A-O9*fiIBgyM z2{@DaD)MHGp+8N&g16{jkUx@BWam7pyq)rreX%ii!4ax_-Z_oDR+Zl$x2y8|<6io6 z_!ZrA$XuSgIM!5Uzxw1(ID~!-PQ!V)M3r^U;eGm-_!$%CwCg8V<$6yHz#$lpYgHqE z50TnZ{<{yqs`CDwIF~5rO{2=(lU$TsnOvXTNR|8A(|5tX%m*?bM?V7>FyBbtjYsGo z;de}#+wPNDmGkAnB3MS1^EM#2!~psbau`ma--Ji$Pmv$uH+n}8yKiz;_Q^u_#G+V= zc|&Zf%InjKc`qEyd>Hdd^s{jZuEDLiPnG>+Ray58{Z+h=FYz<}ROR}Fc|>{r(y6je zMpgR4^rf)^^Oo3`J`~5%FCeePjr0e}C-FS}9r9DMgQq=5235}GiACvak{e+Q`bgYC ze~^5Ed=nqzTjmM!+I>=B231~%yyRl&LtmZTfZP>_(@(&e^vlWXaVz~zd`JIyG5PxPg)Om2vs=)03g zU<9tmBdUD-yhwhd%E!;|s(k!31?+yVSRM!9WL%0zRQd0>Q{*RVv4rNmy1>bNqfb@P zuIq`us=Th1$*r&_eF%o(6r8Eb>v0%g(|;nT^0M=iSQq_qf+``ksgZbA+q_aKLnr;?YD*O2#+Pmu4BACbRdvLbf>tXL8osq*${ zgWa&F+D`udcU-B;+hZg7Ao(O-!aK}Akbj|bQM+CSRo2OYp7bTj<;nH2kt%Nwf9ApT zz3D^g$I&k!N0IlCkC3mEACW(k|B_vb+4E&l<@vqHrO0*3&B;OJKIAZRIC&L$JvkOH z;ZyvBZpCF^d3zK_U#x|JYDf9|A;@zu3imMIugdH8QI*&GH+`BCHoK{^PI0VB-w4~% z_aP4@Pa#KOB(7tAfP4Zk(mx`_D!Qg*#;s$7>3OVHOMHz9W+_a%=e zPsO>ojQI}oK|D!+ll&N8(tjsA`q*=&K~GiA=S8lBt#JrW!ezJ{Z>sXT-cikpa-I*&f6<#Vwok6g zIn%519Qny5$+gIh$wB142@?P>W@=fv+@>jA$S-XE4RnC)x>`nG1`=LMf z#fcb+n^bxGY*RbS&nM$`RbG!5s_gTLK8df*X;ryCH@Oh{U}fgb$Q`gN{SfjPoJ2p5 zyo|gBcc^lnWc_euTc>#G7Ifi_i ze1-g!{DqvXyxl*wDzBRd`e03Lj{|U|DsP{i>aK+5u)0QmZcojd(706)%Y7o525_iUH|$s zcpLAd{1vqS=JHon{_`jP#gq=VPlGwo152O}%C}bhTc-}nmu&y#X4pw>VN6%-g9C6B zj>Ty>6BpuAjK)nEi%0PsUc?)C2cM#R`|`hYeL(p(x_>#5qcs_(!;F|6<;w^Eu9yF; z|EK)t*FWXAm4C`F_kY&IhS)-tKc8<)?ubG3{mCIX635_doQF$s1#ZQicpOjRCA@~u z@il(JZl0#fRo2O$D z-;ax(u^SFiXBsmc$Kphsug;Rcryf`08r-eQZ=U<`2*%+xb&fH&@F70MuWE!bKhZI< z&CZw}Ghr_D#Ijfct7C0!rOq{`9R^|-48c$wixY7%F2gmr9`~v89}Te>ho|ut-oxkk z8Xc0@`x9bvbiwTEeEEBiu>cmv3hDxR|Hs-`AKR%5jrk9|U@(TNi;NkG<8d-BR2Lhw z6j$Loj8T^ua{!OwNxY#hHRcXJ#^?B5jWp&rIwiF^F}kVCjLD3-&=X5xS*(gRu?=>> z&e#oysLSR3AIIWEoUg8s_kUc8Yj8L2!((_7@8AP`j<4~zx>Ek1%$gXJV`j{b`Oph1 zVKuCae%L{cGA01KVNV>6VK^D5;|g4j8*wWhR#zEw9M57rK2TR1^8{bxdvr){=Ls<- zrolXzAB$p1tfsCprWX2P6AVz-8WV&)u`h<;> z;W@m65AX%P!QbeR(yo&PQ=lulVQ$QeC9yPC#H#3rO|T;dVm};&!!ZoQaSkrRNZgFu zaW5XkI6RFP@hU#Wm-qp{pmQqwx+KMnm<7F5`DC;x`k*h?Rks@Bht07yc2l<*(-Q~a zV4SG#lK(Eo**Fi^sJrFgm%?qh3*+!K-o(531Yh6}b&oNBFrkahNia30!`zq`i(*Nv zgw?Paw!)4Wi2X4HN8wnUkBf07uEE{vKKbt-Jc4m}9xvfTe2VYz6B_vfh_2^^=`bT^ z$J|%~eXtT%!z;}4e#PZ{D@!Cq_O95 zLO0BexzH0!sj>3&vse{tViRnET`(92;9wkyV{i`6$4Fd>(YOf@;9)$C=kY#1#xM8- zlckmCIb=*KOplo`C+5MDSQ;y1b!>#qurqeUemDq+V;IiDxwr(E<67K+`!E(y;#s_l z5AhRz!z8Zq{DS8F$ND{ z9G=G8cppFD7fh5+p8tq3$uJG3$E=tWi(*MEkCm}LHbQ^wjJ>cQ4#D9#9cSSJT!K-! z7I))5JccLnCf>z&_z4rHm*+ofOcHcKSImsru`m`#U#y6A(GNRfAojpM7=ocV6~l2J zF2WVK8h2t09>F-gj<@j*e!v77pM36C-djF2l{Z9rxoQyoguv8NR~b>IwOOCTn6$j;`p2o>%}&pbu8X zn%ENCVkhj1y|F)z#fdlrXX8R#iW_k&?!|+60Waede1SjJlk)GbqqDosNihwkM-R-0 z#n2loV|8qftuX+DuqXD#(KsHb;Y^&5i*Y?}#yz+n&*4RUgwOE1dP=??gie`lPK++- zin-7ei(m! zW@k)^X)p(RU?D7q<*_n0#^%@o1F#$R#1S|eC*d@lgY$6>uE!m?2T$QSyoZnQvwBAU z+6XjRZFa)s=z`fW7Z$`K=!+GxAvVQ!_#bw`U>t^{Z~{)jSvVJ0;X2%gyYK{_!8`Z> zKdNWt-=V`l=$Os+Niij6!5o+$3t<^7j}5Rfw!seA8N1<79D(C-5{Ba(T#0LN3+}+< zcnWXfJ$$d8Gv+h?LX+M0i7`34V>Zl-1$u?r5yVK@dS;B=gY%W)NM z!fkjIPv8x_gKyRI#(cyd_y?VH*m+XSh*>ZX=0|TVgLSY0w!k*%kDYN44#hAWhf^^e zBXK2ez%6(fkK;AGg|F2M#=OUG_zRtK+IeEkfbN(Z^I{3~!CF`kn_(;Lh=Di&2jfT_ zgOhPOF2Us(jhiqQkKz@)fiKl~W8UHy{DF?S?A#gCVMfe}d9WCIV-2i>O|S*FM}O>x zgK#*8;Y6H@i!c(`;s!i`hw&0#!{_Qn`FB9^6MjRJ+s>UZEoQ*%m>Y{=39N>-un{)H zw%8H--~bH8kvJYF;{sfQt1%k)VJybu6@02*GUg?Iz%Td*9X;%IsWBa9#hh3Oi(wV4 zfqvKoTVs3dh5c{{4#%-L5$E9|jKZ}Tg9q?DUc$%fWn-S>d;E-l&@qp_E-9wO4Csyp zurT_dFIK@C=!Z=(5W8S6?1w{eI8McIT!2e(6K=zO7>n_E1)t(e{Dtxt?)-b5T+|!J zxS~5|!#tQD%VGtrjoM9|Da=DyH09Mhq={zMt&a2S{RFC87z+turap6b{LGkafJH7n9(>1r{Nr&kLz$F z?!Y~G0?*(r^^r06@F~8;5BLQW<+Il(!!(#4Jun~os88hQ^sx%oz-HJAJ7OSq$6h!R z$KYg~j!SSkZc(2Zvjg{GES|)(cp0zb1AKz7@jd>)KbSDT-7g7d!mQ|pMbQU+u^QGw zKWu_+u_FdyckGWLI08rGY@CNnaRo->CftcJcoNUz6}*8j@C|;(@90>-zCO;F0#joq z%!(eE56fVAtbuj#f5z?yzNh;C|Nrwf!`N!WFia+sVKiFIpK59{EEbEE#qxLMzlO!i z{L6&M-w`#XTBuf``IpI`mXsBhP_0_EqO9_+CGovKUawnydjEdk@AvXe+x2zM^Za`} zAJ21M&vVY}bv6J8;V>M5nV5yMa4tTEkK+d1h@0_c+=mD7D3;=v_znJs7cnr}S0BL` zVg8`c<6tz#U_2(^K=Yh)gK-#+zz1aR^cVA*4|fNH8BK3u?aTA_Sg}-m@nyh&tKBh#|UhNZLurfj6Jb84!}WpFW!e4I1XpxEL?z#a0RZx7jO%{j&Ii4FdtoxB;JtVsPQhvTFwVw>xCB>X z9_HgF+=fNC9}nTjcnZJ8AMi5zb@0_oJ#2_=@p_EM1Wd&=9E%fi8qUDExBwr=<+v6% z;8rZeH*hx|#1cG)$MFowyed;}JZKUtlF(!0NHS_-kPphGRSIfVY|#oVy+S<3JpPV=>$O z&AA+0fQxViuEFPVGro>*;JbJX%gie0%JD3o$KUWG2HxnKJ{TKdV{DD>usggpW|2fGyVrJ zqhD8Fz0|{o7=e*^BX+?)*bj%{2z=1=*WX9M9Gr)%a4kNA&*LljI_|Gx`n22|qHT1nt9Elm2h1obC7veHpi5qYu7UDMCi~I3I z{20ry9M9r;`~&~O;O@TduZNBC8f=NJF%G+9Pwb8N;7}ZcV=)_Z@CjUn&*Ns?Z3gJ? zu;5`lg2(X_`~ttmU-5UmjD9!ymRlRI#s=6J+hBX_jNR~7ydC@FKup7QoQzX38*}h6 zd>mKdTHJ!K;2tc-V|X0D#BcCVyn+EY`|2SG>tiEqgYEG~?1DY8CnjMsrsGJ=#4KEf zEAdHu8ehbha2pok5quv%!cVaR&*885JJz^`c7XM;Ax2>|-iTeW5B9@hI07><3m2HR z_4g}r1+Kvta0|YMJMc|>3y#NL>UDVT=oI0nb!415IV<3fA_SK)fh$3onO2k>otA3wye%{qE+ zEdGSQ;GcK}Yux6WzBV?&W_TU8!H(DoZ^u4(H{OdQF#{)ICeFiLT#74jJ?7&JxCQrM zF}{QE;R!s6U*b3T8(u_Dg0DWRVjY3gvmG9+umAO2kT=vMqm_1 z;|7tw2ly#|hUHj+m3RUF#48w_=&PT4 z7>*Ix3fp2V#$f^`;+=RG-iM=b0#3n4@iBY?SK(9m48Djj;SSt|`|%KdjHmER{04u- zpRo!rp?_~*{RChz*25Oq3fp5x?1s1C?brtg;$R$#!|_3!jyX6F7vWOO!}a(QzKTV- z2M^%e_%WWsukkyq!b@1a5BnE3#%u6;ya5w15eJ)%J#GjN$I&<*Cu0_7<04#&t8pDZ zi!b2I_!{oUeRvp;;A#8iN?Zrq0@codK0Cs>B%Scw<#FZ3k&>gOt~gN^YT?1-K4ChUQI zupi!qcjIszjpK1L&cR1<2|j^qaRY9`0xZOBxEuH3F+7f^@N@hQ&*Crm8(zU`clhe7 zHeQX*umwhA40gtDn1G3RH{OdQF#{*!gE$8t#ih6cH(>$3ireup9>LT21ytVGzStj!;&7aT)9_)OjmvR0zF=Ob zzXOS{;SSu3`|(5k7(c@=u@Wy}wPfG&Yhpueg4g18*crQFk{PAv`{H06f+KJYPQWQR z10TWpxDcPfRrnmfh=sTfcjG=R#S?fMzrdgH7xdiei>Er)$3_@|k$59^!9Hdi{k;vm z3-88s9Enr$AUv^>*ICU z25-R5cr)IL1932p#s_dF&cbE55}(5taTmUc$M86oV+H2A=isBb2A{;OScv=a5PpoO@GPE3cb9Mb{V@=OF~aPq=P6@bydLAQJ0_bq zcw7n&!C{zz<1ok6!(`{-B3z1V@JW0IpU0Q+HQbMf@FpM38|ULMD(E& ze;kOzaWqcFhcFix7fG>*r~n1l0h2|j`A@F{!+U&meeCccLs;3@nZ&*QIn(bRK`Yu?L#fOW9} zw!*g99pmv%ybDL0ojvXWoPyKvQG5)S<7#{!H{_Ce87#x|W*2=<6ffdsyei#S zUI)W499v>*jKl8O6MN$j9EKBc3eLetaW$^P7x5+BjytggkK$+eC061EtbU&_zFHW9 zq1X~zV^_1A$K8y#V;>xVgK!v*zz1@_#1cG-XYgzM4$tGSco8q-)gyfI)Wybl4YtRQ*bQ&N+p!N0#KAZehvQhBh|_Qe z&cy||8rR{A_!4fzBHWLM@FF<_f9juQ{u{n0Y z8?n3jlAc4(a8FEP{M`)Siz6`uC*xFn1n1yFT!O1{9X^XM;LG?L?#6w17?0p_`~*M8 zukcs=9Ro6a^%aEmOvN9@a5%PLd=$gccmw0(819a@F+P#uBpk^2bcRRbSe%Gin2qys zAuh+&_%uF?+pq}tnTqQm!zFl(@h2EQiC-|joZ$*Q&-hCWyZe3hR}%v<6vMC?w!mnN z!OqwX6EG3`<3PLzhvF!_AE)3nd>Cira$Jqi;fq*^+i)-L#}Yh>AK|B1hUNGp{)|<4 z39CIoJ>u0^7n@)+ybjx7H@pRVVP718gK#Jg#|Ll%PQ{0CHqOUYxE43!bNCXziaT*H zzK0*+Nj!t!;P+UG7w|9ijP=!900v=wY=jXQiEZ(E?1WvhFZRb&Ov4d41}9-AK8&+* zIj+VHxDg9*EAGa9Sb|6KGyD>Nz@P96RvYK5pHK|L*4Pej##?b94#uH494F&cd<5s< zB3z1jxE^1^SFs59;30emKg5smGyD>Nz@P9x_y@Z2zIyP-`q&5~FcRD1^>{PhihZ#^ zrsGH)kCSl@K8kDbN!*HsxE~MU$9M|A#BcBdR-tEtFW%~SHP*!z*a~AX7H`5HH~iY0hlzH>P45j>7wK3QogWI2Tu99&W_v@MU}rcjG=R#S{1$eu+Qe zPxw3ji9u6+^$~)Nuqj4j6n4NH@n*agd*dBA2=BoWI0h$SCeFlJn2U>X1+Kw-+=N^3 z6)eI%cmUtVlXwQd#_#Ya`~^MJeDzfwug1FA0$X7W#$r$GjrZVCoQMzNJj}(lxB<6f zA@0XRcoa+V6FiOOSb^v9SGMB*fvvF}cEYaM7yIKNya(^YQ8)po;6wN@ zK90-rNqia$a4YV`{aAuW@i=~h-{KGWEB=lFS-yG+!ur?<+hBXV1#iO?OvU?f6i&b? zI2RY-GF*upa3dDrR@{y|@d&<;AK|B1hUNGx{*LY;U;O@99~j z4$i|>xE43#%eW5@;1PTuzre5Y0#;$InZ9_g!fWtaya797A|~OzX0pfKhxg-n%)~65 zg>!KQuEBiVgj?_xEW$nb9)5tQ@N@hIzsFzjH>{cM+x|eTiw*D^ycSzyJG=>dU?1#< z!*B$S!$~+B=i_Qzhg;wJ7Xdy;Xv~x z{oPE4N8*Dx9T(stT!&BL%lI1ZHwSy%Av}tu_$hvd#NIuXqtJWA$0S`ly8= z7>X^h6}HEY*cETaemDS!;Ru|9({KqsfqACRmo_lG5epcOBr5)>lptu!_VSo#=pVv zZajc*<0p6;zsB$IC;SC3;$^HpoA!Z?uqj@TH{fm93;W|hya$KkXnX)C<5ZlF3vn5) z#3%7-d>LQEowyed;}QH2KgKWcYdnkR(arJIhd(yJ#@HNNVl>8JJSJcgCSy8|#Bn$Y zr{hdqgiCQXuEQ7cCESbq@dNw_&tMr=;syK@uVC<8UwzcW#-`eLD~8)*SG*Z}VsA{w z6dZ{eI2~u=WB53(GPT}k7=9kN<4$}B-@`LlhLv~$tIzYrR|~^193wFbV=xvIFcFh6 z1=BDcCt)ULV-DuxVqA~;_yTUh*Kh~!!vlB>kK-x)9KXY}cmb<0Xuhw0LNEd&F&5)6 z5tDEr4#qL&-5xg&&Sd>q%{leiTNaVPG@!*~Qgz>n~A{0e`?-|;f~J?h); zT6h)K$3_@|kr<0{*aLgwAiM`h;{*5z&cPM92DjiVxC3|LTX-1X!w>LN{0zUr@9}5+ z4_045JzxliVpD96ZLmFd#%`E|$v6~;T;I-^4?vjvGf9ejh(#{8tQr zi@)G+=$Gq@w+1%BW_TU8!47yM-j03nPP_|8Vg^pfnK&00;8I+HPvX<~3cilJOvS&C z;RASt@t-h!8oy%vcMPA!Ul@Od;c5$g^%97|*bG}>G{#_O?1l-Li2ZROreQkXkK=I~ z&cH>u6xZSgd;z!M8@L4Ld-yS)!msf=ti%iW7kU=?>Z>+hjSaC0 zMq(6p!JDub_QkvKZXAX8<5YYI=i@?LfopIJzJfb&7w*SH_%WWsukc&^4KHG~#lCu| ziC1G?Y=Nz?J$A$%*b@igJvbI8;xwFri*PBf#&x&_U%?%wjwc5gej7i*(|8Um(Jk@C z>5uiX5k_Dnw#Dl)9uu%H_Q#<(94F&coR14}nW;E7FuV~rQ!owFF$2e8CT3v{&cl_Mhxxb(w_+g{;T}AQC3q6g;Me#a z{)E5apLhiWm-^}{7#mP(z zF+7Q9uo5repLhj>pYX+B53j}RurqeUKG+ZMHHYdtG>*lII1^{#6SxYW#%J*rd>s$r zJ9r8|#~<-$^jq%Ro*Gym8({=SVl>9!EqEIyVKSy+I!?x^n2kBO3|Ha?+=$z8Cl=#D zJb@?iJ3Nb*(5>*r9gOwxTJt`SyAIo72aLn+cpLV@L3j@i$I&rBo@J>v{G#rZ)aXQY#MYt5#;s$&H zx8PpfkMH6!{1iXK^Y|-PU*(IZ7B<0V7=y8R8}`CfOvAA_5g#!}dE6Xah)Zx4uEhe} ziaT%@9>ybh2FvgV{0T4OWei#E+n!KtiLEgXyW<^rC#K^_9E%fiI?lw$@Nry&PvQ%> z1@~YvzK!qVY5W2!@Ep1|zWDqx5QDK9w!n_q3438*ya$Kkcyo-$O~x$D#(9{FYw$^Y z4qwFWxD(&SWB4h4hTr3lcm=EF`L-(*!>|>$#qJo7{c#}PgF|sNK7bG5!}usZhO2QM zZoyY@2kycn_&$Dur|~@giWl)RUcJ^AcU^3bEwK}J#ol-a)^M6%{p1j{y1vh0YGj02 zQ-3$q3~(;StmRysS=+gIGtjw2GswAQ^D5_3&8u}E(F}Gj!_>kjnRT4YGV3~*W7cyn z*9>*mZE~La&gGd6oXa;GI#*zZIag>la<0g1>|C+g#JLhP+__S-sdFdIYxMU*&1TM3 zm=XGWe`a&%s?2Ncm;P_zoF3h;=Y=^JVzyNL=5>nSY^C_kD8+BKR{Ulg#c#G%{ARS` zH`^(Gv%TUsuUGtLjN&&tD1Nh};x}(l{AR4;H*Zw@W+%mOc2@jmoZ>gTD1Ni6;y1e~ zezUvcH*Zq>=FN)VyhZVw@rvK>P6~CXnP4Sxvir?(1_|4m$i!ggBelt<=n|&0& z*;nzKNs8aRL-Cva6u;SD@tett-@H@tn*$WTIZ*MNDT?2`OYxh76u&uG@tdiN-@Hfh zn?n@8nWp&7dlkPqRPmd`6u+6S_|5wizd2m-nda;y0%#e)B=+;>}FOZ%$SG<}}4`PFMV9mf|-bQvBu&#c$43{ARY|H+64&nfZv~ zH)kn+Ge_~8vlYKNNAa6;6~C!#_$B6i#cw{U_{{~1-^^9~rmkUCVwI_DG|pcxQv9aQ z;X}+Nir>_^TZFk(@teyOzxjmXHmzDgWl{ zir?JkT)w$o@tZpozxjsZH;WX%xl{3*yA;2^ulfAgr~H{VnI=KIROc}($}rHbGDK=GR& zDt`00;x|tye)A*6Z+@cq%~OisJfrx{&z&na%M`!)mEt$c6~Fnd;x{XlfAa^$Z=Tcs zZ~mnCYsyN+Z~mhA%?pa({7vzjRf^xdsQAsxir>_~c+=105>5U6pk%X#$EBJ99+z&` z_P7i)$m1rNAs&}y>iPXSW<8I~HA6janOWcC@=QJdJ>P8TaRp|W#}%55J+8q4-UG-!{v%??;%u z6u+6M_)UEeAkWn2-t$d;zOTScR{Z7w#cvK){HE?RmYBMpQ)=F;_)T3uC^OR)zp3-p zN>k@;Ri@5ITrHmgruwrXsFvY<|IuN>t0wmvgkff?bKw|)kr;!q7>C_45tA?(Q!w4U z$GMT1f#WdC9N}Cx=HNVBW{z@pI_otL*JFV>#<{Inh}*E(ykFmc#S%P3~(W$JhzjWHOD@tA;#n1rdAhUqvGCt)ULVK(NPYFvwP8Lq^9+=KUUj2XZ<-1`(p@(Vi<;F6h>nV#$r4sU?L`ADyCsNj>Ji(`h%I6 zh1r;ki*XsQ#C+U@1-KQ9a1R#aK`b@(W_1Ej;u);Kb6ANN&{_Xb^ZR1}24NV6V+2NG z48~#{cE?0h{o^D|#uQA)k(hzwFblIW2j}53T#0$O9t&_Q7UDK6Hq~!Gh$VOwPvRLY z!*Z;|3s{AhFu?ksT7D3QU?@glBt~I0#+f>w=#KH2fXSGGshEZtI1VRaCg$Kg%*Dl+ zhwCvPH({Y!>fAOg!aZ1mN3j%7U>TNU1)jqyyo4^mw?2Oi!B7mtaEvl_{uPZe7>n_k zfQgudshEc8I1(peCT3wa=Hg;phAT1O)Oq11EWoW;gnO_U4`L~vz>|0eEASjv;sx}c z7ij(dc0M4z=La%~;V=xx2#mxSQ|Gg>7>C_45tA?(Q!pJzVg`=GEX>9noQKPBCFbFJ zEWoW;h}*E(JfZy`OYkV3#4}iiKyBahgD?a`F#;no3ZpR&yJI{iV6v&} z2Pv3}X_$^9aS~=?7G`4(&ckK667z697MS0ve}#p(4U5eR)i0LdQ9Oxfunfzw5-(sC zUc!Jt-|~Yn1Vb?l!!Zh@F$QBX4!dI_CSfwBV7mE>&R;PD$6*#`V-C*4TwIKKxE}Ly z6BgiBEW$llj0dq4PvA*BgJoEbm3RTG@DjQpU%dVpf}t3O;TVO{7=y7Ghutv|lQ0=m zFcs4<1IOVc%)}g1*SF?jE-uDAQ`fuJV?J)e0^Ev4rmlJiriCLJ9xwsgY;Y!Rm z{XK3I7T{Ja#BErN2eAZ?Vkw@$GAzdmJcm`Lu3KJ0ceQWW9|JH5!!R5pFcPCM8so4# z#$y5|ViKle8m8k&oMZ-gTqb5=Hs<1DT!t$#A2(qEZp9+pgT;6dOYsDr#4}i7>bmba zti%iGf_>%w7=S?-hT#~2kr;!q7>C_4(G2pqBuvH>OvNi;FSO z)b;H3n2(#V5Vv6w?!gi~ilul0%S>GlFUJZzhgGJolV3u+k!{2N7-EL$_<&&;j!_tm zF&K++*c}rw36n7eQ!x!Qa2!s;Ow2KLU4I_t;$qCh^_Y*FumHDW5$?faJcuQD6i?zA zEW>iFG{g1xg|G@QVL%;~>pnyfhF~a0m=XGWE*OQ;7-#A}MR$zH1WYz{Um^ulF%2`! z7`0!VgqfIQ#;SfX7Z>9)T#5O(2@7y57UDK6#)DXbNAaYo`z2?v49l?s&tVl_LRZ%} zzdr_G5QbqmMqngHVKl~JcZ|mbOvEHi#WYOEkvIu6F$=RX2j}53T#0$O9t%v}SK5k& zxDAU<-B&t@C3qB1n!4X~2FtJ9noQJu%81ryF=Hn(T#BErFd$1S} zVkw@$lXwQpupBG#0#@NA3}~qO*XIa=Fa$#}!c12G1fwt-V=xxuF#!`X2~$mdJ|PX$ zaU^EoILyLq%)xn>i;FQ2*JD0z!b04JMYsn`@F=4(FcWid9_Hd=%)|AVkDIU%w_y?P!4f=* zrFa6%upBG!99Eh7Jj*3?jeNuY7=ob~hT#}x>hmwr7=y7Gj|rHFNtkNt^D=3ejw5lB zsn5}5Vism&uBp%0EXHNH67z8r7T{Ja!aZ1w2eH)D=XFltNj!rUcn&M^0=mY&`Ta2f zgD}k0y})pcFm>-L5~EDrdx^#vQ}+&HG0xPr?(P_G>e_4qCYri-n1souu5G1Ys;O%+ zX_#*6+QCT7Fmvbe%CW+1rq6F+ zr5T~m8)22%T=&P(Xp zW^3gi-lk$%RW@qIe3(Yv?AB)T`%0CvHU6p? zIY9Zx9CM)ZkGW=w@{h~RyOe*-GY2XEm~ReN{;|MJRsONiyhr)RB6EoHkHu!1@{c9v zy~;n9nnRU;JZTP7{;|wVSN^fWyifVZN^`jKk5%Rf#+g%;e~dRDRQ@s1%vAm{*_^8UW2!k#`Nwo~y7G@1 zW|s1glgx*df6OvxDF2va&Q$&}*UVP_ahdtB@{f7uBg#MKo3oUEEHHDFe=Ia-EB{zz z&Qboc*qp2UV~IIW`NvXozVeSJ%}14gEHf7<|5#z>D*sq%E>!-p3NNA4dxw4B!5;(6 zMan;hn2VKv3^SJ~{}^FDuKZ(^xm5Yb7;~BOk8$P`%0I@N%awmjG*>A9m~5_8{xQ{D zrTk;Mxmx+h40Db0kCQMHv&=l@A9HXX=9+7je_VzuG0$A5{A0fPr1Fmi=6dBH3(XD6 zKNgu!DgRh(KCS#?iJ7nbW2w1O`NxyyGs-`fVL4Wq&no{|X>L;fu?jDtYo_w&lz$As zAPg~|SN<^!!!g2qLHWlhvq1UB7>va@^F`$!2AOgFbG|CoW} zaFY45_J7PWUs3)s$1K$TkGbZn%0DhMU(^1NdFJcNKjxd;lz%KRw=4fxXzoz{vB-Qw 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Ν9U%0v1u__g!?dfPm-I+ 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 z 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 z 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

  • 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

    f{_3QFA+B}WsR(lRvV@2<}T8v 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

    bzk=R)|2sVlQjQh@b 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 z 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

    5tKw@x14TB{3x12&?K?g7gie* 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 rvGpM__e;bQvWi#EX9CYLL} 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

    $1p{EU8UUeR-$?rPD%P(t_CdeC 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�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 WvQw z6(={nTx7$TPFq`{u=fCSty+uJQy*z?7#0(Yb??AGmNrHf{UkGT0hH0NtBJ)-w_5}wbxSI{bW>m}rI|1!curNsV zdRWbjdF;i?E=DDA80ZN_!S{<A1i`_EsKjQ>nD0a(tP_gkUYH&TX3#A zz#C~Au3Yh$4=7axBpSh&;6y-XL_h}PT@_U&K8W!85?u*Y9Fd4A~q`U()^M%5iKI-z*{I;u}2wm@FRXtEh6U70e(+=lrdj@kJ1)Z9yHTzhW0i0Px=H zmBK`MCem7cy_JjLIt&A?u?6s(ip0;^6KFjv=1XH&GrSJ=Ij|!d*P4ih_Ly>}E6!lA zLLb9Z9ox{jL{|Aae9WchyI3jOMQ~L>H3`0kG~^5IF}2MX*GcYVKpixI|hn15r0-$(FDK#yA7v<@HB)qE4nV4Qm^pw}&K z4qs)Sp6L_Z`vHAzanm|{%#CLBmnI`?7-s;vVpYcCXrVpkR`b^qhJY&os-j`Oh90xc ze0Ds1jfRL$A&4r6pPQCSRxG5)d}Mkrlrjc@XsDLKSHolWoBQJBYWOTbH)^;!t+Ur_ zJsAF)u?(@R2+=7pz7QT`y5`k4*=o}NCEz>4(G+*>Z0=&u63s#2M~H?Bk88>jnqU

    au2EpE%Faj=7!xLypJLX2$krvo3sf_5_ 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

    ?XmO}zR4C3!;(czb>&l5ic%+@7e-zk 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⁣8jh7N%;YIh6#WS=M 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%0AV4BV7;#dZJ%CUsy_Z8f-^%>q{-jcHz>&2N#zNg zF*SC=F!Mhl&F}ivzPev$f&=|8+5Ce ziUa&saGAm8k%*ntO_7L!7gY%V+6h-Kqf~s_B|CV{P?aD*dU43+(WVmI4#>k!>m}}p zQ>8s!^sA^e7ZgT_@+8Ne4v>FoOe2K3py0?63=mqG#N7X+(QGDbJpSTAZMW;#c3WTz ztVCC-TmQ{`;%dl~>Ak+KR^0Yqi_OUa*=)8%;zL2)l6?_XXdB(PmaBc6XpcuX>HWOb zlUiIkG@3qZHu4s9VcPSXj#OWxnm!(t53XsK2Ut5y_51IGV9Sg$MIhAFCrLh+hB!#@ z8&m||c(C>l5hKg(_5)C+9w&2?ar&j$NW=Qbx#^USwZEj4UfMg;5XTlM(VyQDXc^2CUxqoXRkT1u9lTXAF-XlSAqqN%Tow$qDv^-uI#aroO}LfFa692!5~^ zMEZ%skG`V0LE2WZ`zieWpL+?nZ>k$&5CKG0DWjxKV!4>@$iX-yltHpRWpF-LZ zy+v$e5imbirpsR4VBo>j&z;HB&mVj?dL{T>6!ejbHHWOB09qjeOrl;Q5%jYTn4o!MS?IUo7Yl-Y8m_)xq4IY7* zakVfE(m(&%o&vy#w-pky>Ggt>JDu%jaqN|l1z(#1DX80v#Hx6UOXCPW5~B{(TlVQm z&+!5+o5k7Oe~C;ZkuT}%-Vt|#tdM@LHA)f3_`8po*fF&8u$d<&zkxu6icwAlzmD}R!BwJ5n0&9+70M?o_`oDKUr89fy%qb8T1L} zGmhhz)$k$9a!eg?|0}21MxDEq44-p#>a8@Ly_Sy}f32)RM{?5PuF=S%O%wO7&q#<90;3eC``vH*!-w?$D-X@5Z{0(JU_(R{veZ-Pg1 zSm_SG9DKGtA&7?sP!MXk=`M_MUY}BL`-V|@zD6O9s3vX20XVhuJ30#LX5Fq-Iz(}%Gr&jxZkHgdTyoVT zoIh#_Kfz5#k)l8M=?crb=7%6MR89YsToVG=)UJ;5=&5NYwQ?v%YDa4vyBopw@If(S%UJIjM${BFdMPkdE)+yUNnLS@n zC|NyO3ITc&8wK{94D(H3pLx;4Eu{7)Usmgp?H{jYlT|6NAh>j7G zT}T(83Cc*Q%cB71N63!dWZ(1o=W6lsCO7da6Gxz6s7i_$w3c)%a^E!=!Aa z%Ngjui8qkd8nJ@3iHHf_%hRMVtiAC^4HQ;y!b~N^uNe!w)t}ZHq~I}~kqVu|-$AR( zsKud_+~7nRV_^8i%=khyODS@Hgy0En<|e80+x)k5ugsys?KBR$c7a>xG}Uhc4-5V2 zPxOMY{{mdajY*-78ilLO&|L?SaPt?gI4Uu&Y!h4mI-)VM(w4L)a+C|n_LFm<8>m=W zSye2_B8^;~vsa?kbcHkvZ_Z_SfBIhjC!aX~KL5d4^g-x)Q7YTy>$!b3vz2^>b~Ds% z6yDh5qWbIjp)yCa5$Onw*@mUf$ik83OTiA-T#=umC;%VxyO}Lm=e-+aR9YNd(Sf7~ zFiEp($k^Q^8Pt=XtAT-=WGinV7mjmmaE&$3MS}^ZV=M^gX%aKE!xH%p@=z3TF;!sx zxU}SzXP!>RRl4(Fec7JqOT$}5EMiT3b)kfEhh3P&FC*t2!pYLsp|sD(1`Z3h1sxz{ zck_{(Yp2P1pyi#Emp_!3P^9PNq~?%K_k2!#P9)+!dG{fed0YNf@10zpW%=%4wj7sV zj?06*#7TOpmgU1@%sR)53c>~;LyQ615t*aCVnjJiSZTOcLcXmaNUgqOp%GRN3-ZD^ zw{HqN5tiLnM2$gg=9k*SWpu#~JJ#&(WFJNDNGItg2ZS&Uzj)L8swHp3uqH!PUYd07 z@)=_krWmd zp<~G~Rpw<7etb67XX4jK{*(^f=1O)!Fu3Iz18cL4HS_FhNeIsQH=Qo< zTelcka?fD&v~?qVenw?sY~HxoD7!?*``%8iArb^8yy(Y)I*jhy7qHpYS-8LY_j z%g2WY4E$S$6A|$h*GmL=C|=_RFIRaULx_fE+-KS+XpUC8!{BhUzACh;Ge+%TMe)P~ z4laJih=a(9?VdcY=InAO>mf95J@KDEU(6o{x6Dqa&xDZs^JoxZ-7ZJi|1ic-Dnbtl?bYSN zx*CD|8-kw_nrYTmnnwyI-Z9bMy=d~?Y7s(EDe%3~ueh#nBM*InuoFpJuEfEwucH0~ z^d`OO-2p>EjL}F=bM`Q}SO3Gv^Fx1sa&uKJSMSgchMdt+3dI|66d-4mDLX#q0YFCe zT>EQR1&+`0?k<8jA8{swdlJpVR=*xxk0%h884u%Yh!t-qx$qnVUx{!q#s9;FXdL$) zcc9Ir&=H4f_OS1|-v2_$7~s@#|> z%gt7nwFCcQ7v>ntX?@el;uccFXoLt(lPqtCF#~!`gxV-6Caq5Qi=5^&8kaV*2av1y zQDF)r-K{Rug|(J)vJVWGoD2f2EDn(DOhQ@cp}hNWf3^32s>R&wC;z)dY^&_KVI)2f zAf5I2zjES&(arY0dU#B5F~<3P*Yh>P`hIFVxEtbru3+d#1~||X&A4T+-v{{J@8hl0 z7+|b|$!#DL4MrMtmljMWCyN%o#;oBT=x5{JMx=nzX-(a5y6H(C!#x9ezo2Q{L6|{^ zqQFO+Zn@Y*!BkovKUi%}*6V*)tquHjDb|KjuF-}Z|l+Pd1EGm^4o z!E>$+#r#q^z+ZC^CGdAPyM_eRKSGp=kjhy9Ot;HmHGL|rHYGRFv1@GYhtd?u5cjZp zW%>gqK=8e3>eYrFW44ZD{RS72s_A&?`fkCfBE75N=%>Kv6x8Lnau=ZMH_vB7ak~yE za$<^A)IoCqEjJ9dFYY6HNQ2#wBU=D^tb7Z(w6+>U+*Ksm#$e9$s8=qVU3RXVa6?e) zf>1q}A@CD!{UpBTvX|tNCT!=cl<9#jcqL z?HX~%t~NF*=Zo9HZ2X@b`S%#<1pr9u&1%sMYw%6)uTbQP96?QWNx#bOql)dJgQyHq z@KODtdG6Ri0vmcGyPN5Rn3~+oq&TmIvcYWK_xCxk*dFQKW8ChJZNsB0QcVNzgBriU zuYO$O{BHuurfsd=YArTWHe+OIUw*;bx4!(6zIW5bv^w4`H`JcAj~+dD?VQ#gqxK25 z_&TAHE7w08oVc~6rF`G)HV^F6kUHf4H>d~k;jNX_Tq&0NOE9+%8w-)ud_j#QQP1D2 zPl)C^-&fAJsYl_%cnP5(2T5!dWb% zg5op$#eaHO%vWsBX)o0_fP`<7GbCd-7v>s5NKm;)>20qJx69TjG}m8!#uu*0Tq$Ms~L%S++xF$(}27>O+N=Sk8Y2(OeIJ6pCEf;A#^_Y?+Xq zTR4J@JWAZplqBLNbO9V8WS1qo9CzxqubUtFmG-fv>Xd5lFW|7lfnh4jNaDicRhq)Hjc)h(+H6%X4A0=qoRXYzU;ui5nsl^2O4QF;r47Zz-u|qDpEq^l^-V4W6NxQ z>ZPEqHqY5My)byotpk0q6ta_wz4!Bh<=r)|E}(SGU29#!7peUd$)TCwAoc`B$WGc! zf)%xbkrH5Sx9E-e?sk`JIT+hr(C7F>d2;HNbSbo|hE=`r1ax(ZTuM_;vDUfTeA_l? zOvRB==uH|DRu_pbhj{Fm^(nb9#POK&EbCFqET=;Dd_3ah8V%z^B(baG6|!tl#BS#2 zq))a9TtvyO+X&aM#ohBhiWQQsjO%I$*WG3h;&1;$DcmP}vlC?#_owW=Rkf_^uHaDV z=oEc}v$N{639pfQMk6S8AsA>v7WMi9g0bsmSxZ8J`W9a17+F6ge91^PpGD;M?EmOX|{91vT(Kq=k==_k%;u09@64!#ry}lAIY^{9%M3>Cr`#` zoN6EEy!O1&3F4vbDx`x71>p9O1*6X;Y)3aS0+$GW7iQOWE|ZLIhY#Dd)Ty%D{YQ&no19xs~vvTb3TP(6XEbNsL@(8w&oR$vta)<7R zUDfIx=?%?uBTSy`%|ugZgPs}Q!PO{C`Ec?aHyo+V!{hSqAL=&bEniLD<`MD?kSqE; zTrEHqhqPM|#!8e}{YQ$rLNVF4yU(KHF{=_ZSv1#Oa91bwP=*d_I4yYPCJ{lGA&Te7i3pga z@0V|X3X%i(hipf*Tj+QB(dqmKL%!wD@w7=Roa2LorlX}mfc6=> zD#&UH#x0af%m_--SCt7`T0?TH_8M-Df}Ry1J4VV+Xe`INLKSt&6)4JJ=k%&C4~XeLNUc-Nr~@5Y!}Dy2;gX<(pi7wL4RrP(n4Y($E~3shoug(o zKTYK~)ZdPX(bif99^d^e4qsnyJ%VnM^4)wvLwtPcZN5Thn0H-Nb!hr3Ahx1i}WW27PWgrjVL)miDFxSHN;{));;+?r46+daS!MMX zMqA5Idb0w&cf*%Z7QhBIA!~S5@&nS>&YtEUuAxkfUTt;_q-Gh(Hkq(WocbZ>hhk$W0SaiF$2c;#mEkA8f?7J+|W=-75lJWvj&9I zHYqzkSvs9!ADTFBOlr-xwATBsRu!JOhR2f^Q)K&yS4}m~c;Lbem|*FeR$>E#tpr7X z8I&ue!=K5xi48H+X7))Q+-dN9i|75ZI4dq7jQW3yx8+s;LqQSvS{*UvgFIGFfdTmh zAUum_#-e*}LZff53C#CvrVw1k^}Nf`_!hY?o8>6W_jem54T9|B@r_pr)$;M4>hQt3 z#seKV`E*c|0`&*Do}+(&Th#wV-EQznG7N~V{S-qGM|5XaxbF zQsbNJRe({Oja`Su-xC-7cv*%pJXdSO9n==hJJN>a^A`WxmVNE&76yVG&sG5b>76dA z_{*JP5<(<{r|y+{I{DiwOe7e=xl~7~v|B)I!pTkmB|0p7$&61rGv&Ejmd70X4#iiN zM4vv`QJPgG@UvrjeI{5}vR8YA4S3yM(a4v?nupmTKn+Y{UYz*xE?({suTK7u%>l4=l9sGS%vxZo>2(h^SMyV<8+qVX zhE;{;sKFt7YeR+d@zBRTR073WaC$U<3J~ouZmj``JshUnNwu2K)a%AQHW6afr))t^ zvmAsRqdwQhkon_xI~-~Y-N%O}>I%R0{ScXJhvUXn*yz(~7sBd^EW#8(K5{ddEWr{; z3u(awHT)tfLcDyy>~!#@T-N)1+=EOm4bxT~>l13KtwwLrUCRV&l!lEvQ!#NgCMva5 zlA60PUvL9FZ12+O*U`~*@CHt+O`QEP3(x4` zuNd}3>|SqM`#k8^{vVKB-rpbLKYOe&fZ+w^&?2K{h{FF>y!4#}`DI;MTjWJ0C35@} z?Qd05Dq5uf)mBLnCsg=Vi|LX{6zhlMb;&kOgxC4r>0mO1v0hbI3-ov6zejHwfj|Q; zl1j{Y)0c?+Nn^()w<{c+Ah5fgfhB>lWn}o*JfRvhUvK?RJ|YSMJTQkgrT>73@OPf}pg!$kDvKq^{)<-Oz)YJ!roK~}q5=LJbEFZZ{>Nj*?d=U>={43y+B47% zuvwZv0BK$#yj+zByE1TDp?x18m`4ROL-dQmv`4)rylMUI9~WPS6=Q>YpYH~Yg}aF` z>923}SnRO;b)8$;TYg5pj20vO-YnHfob5uRuUbrPQy#*Z7%pi~iQ}qpvja(lE%ryv zGFMw&t@cv8xVM(O6Kduqa*LZG&7$uO@v6uRmB=I1o~;F}%_vx`KWO_UP@Ic9q$1`` zwj=tpcwfci5YRh1cg*avk2n0*#f$|&VBH?tuXS;PlmMt~P8wXIivBvtkc92|q4)99 zeCyFS_(n_~BE4X0;pPIh{}f=$%s2(+$s}9CU~D9q@I*^9P1uOfN5`X6VbL8j;B$0? z9052a$)pvAf^ITqa7S{JI+NrP|H*$Tv1}H9^l6oUn*t zUI}$A0LC;B2999Pgo{Cc$UIqZu~TI_%?!b6`KR|7zpPPkvg^*=9qD7H*z;f+)YHi? zs&~_P#3bmtyN8x%ibT^9`?03A5&H3_m+gx$KihqNI~Hleqw6Hng~^Pck1?9CS9tR5AF_Z_dc?S zVmft%j;+9~IOC-HSITKn$TxvV|%Fj>F(kzyyNzBR&K)ESQQ5i~b@_y(!30dU0V@4EH_#(l{p zstRIp0Kv*fbWjNWi7Vca_raWMOsP@F%$Y^9h00vD&U471qCSh06!OFIs#8y5BJ7K zu!|R5-?(ey)jfX5I-%Il$kx~lpUSs9w<(=JHvzsaqZ69`B=l;Iu3D4uNqNxwi~I9? z(}WL!CKv9zLDlkr%##c}M3cXR;1!mec>b{lG~zW;Dxs z-XI-yvrUCx1O6SP$k2EH%7gLF{5;5!whI^y?cD0oajyRAf~w><>Ayk0Gq={JZfkoYhWL%n=#PH zX1MihN1)LLf9=cHj>l_%fyuJ~uDHYem%mVt7{X_`bx>|YYLHT$^NESG`)KV*s1xyy z*~n|~U#uNIYZ?pT8Uz_>3#tx?_=kq;dqfi9_KR}3)O?wj;MImT1yOQ@sK`ptMSwdw zxk2C>@(;z9>3JD2P{YB)U|g$HhTQzl7_9^MG>;E~e@%6f>}@sp=>K7?Tv9WmO!si8HST=F%p;kX%&(;1+~ zD&BEp>f-0fHt+GCxTx-F$^oRH5J5F*zS-z#G=8$O zW8%$%;~J-(Uf@nq~-!m$eJ4;W#h;N5=P#Uno{1?r92_KWc`Lf_b%6C-!0}-(o4_c`|s{B|Y6W-r($EKA)WL9_?X};`DmCSj_>L(pPnX!^FB3*$y~H zo|Ftg4EKxCG1YDFt33iR=@DwNK?LOaAkMnKA!S`Rx-HyWtqsL^(dw@EE(cGjrI9gG zIcumxZ$M@Kgp1}P<<;=bZ17a0+K7j+abx}XKhD?y{t(HAaz%BZUr|K{4{yCXW!+9o zCLT)kN-}XOvZK`yEeG$YHLm4;s9q}F;~M7GiwgaR>eQE z1nzGAzgVFLyh}N8oW=gK&r=0gR>>tGV-OOf3@E-nt_;@M8peM6yNCepG(Y>!s#f`C zDC|!Ca%;>)wqp^{QWOVo=a4j~Q%a!B*T3!W9Q)x-&^ zS3yu^_nV!7M0r^$JbJIt)SQ8M8}gz7&9!(@NhSum&3t~IkEDP)a}fbK{Z0agofI~&`-3p zq)p~hGYTf@>d5yYQ>J?6D2XQ3&9%*Q*eYp~#UHR?zEX#`X0^Q=j3;sF;LyJ+sniBE zhGx>Yfv-EOwwdHFYQ5CrlYVLadI@UiQvJYMuEk%n6mv16+{U$Q8+rK%IP{{CyPVzH z_lFqXW~GJ;t@}uQv9snJ<>>p*NXh4){#n^u7-e`*kt8c2!WM?%gtfsW(|+@o4a7!l z(tzM5Ze%4wSqW7im7@7n4u!9QlPel#FQ*WO5>H{s2GGgY|vWUODoM?$DXeQHl^{x z=Zoj_XQQ`A2125az(9FJRzrqUIzPBjb8I{;4qflUd8}z!4>9`?%h@}BT;-%?eGlxx zhEtbNLa&w}6a}v+JF+S5VD-4DOy3L}ckRd!y@khUU3{ft*@lwHK6rxQ1nH+vMznh+ z>vCM4ghk@8ktJ^_=xAf!yu|Vn<AliD7`j`)6Zn`}@CbV-ES*{jb{FBp$AbfGZdRndvI6Y9rJnWV=P zHikydxdzZf*v;~W>@o=WtfmjEXH?l9+vQbGVUPI%6;BS;mDrNl-kFHj06tqL3l}QWm)%Pcg%6Fsm>%&I>P}K52>kK7u)KerRGv)+1kQL{tp>wL+HoHNifNZK z;YoWr{KA+eDC-Vnem~2BK?0KEsejb0foobmFbqyRR7eSRfHKdLdm$qn-Np)@y&hpm(E(eJQ>~lq^Dv=D zNB(}JDQntLWjjArUu-C!(=FNnhkpeA;Cogr=5!l3>(#c*#5MqUprG<9hda2T!d{PA z1v%mb{3Ri)RUIZbkWy51ap9JY^l^RtH;Gtb3Ap-1c()trNn2(^w6NYDDtAeZIqb9g2JL)gzBnk)d7MzU2Z^Mc0@cfkA1LWM|(gMI#cGJ z`Gi;GXX#Ed)T?|KAA=eM3wa+%A90?P5}JI678jPD5IQXGiYxt*`^t1LM7Gc4$Jf8c zn?(io-K>2;VLcm9Z(l`UR3FfsO!Z^4o$aod*Kq9N0Ny*t_3tJET@4A~Mci&+GzOs( zDXShpngy0yYkQ-|p0CGuQm373U)%gb`)60h#k-T!B29uy*#B=6 zY7^-kQUENz;P}FXDC;7-xF7ivSpY{ma-xN(YzDi(#vzJ}b`h10@LE25TiQl!4eo{Ed{uUqgr2X|TP}V)CE}&GksT!& z)!Vz+VUm>rV`Wrn;dF|$6L zuu7>;M8c5rI#W#|lF1)X|JIe^H$96`IJ#f0D{%8TFWh~|4pHCvWPozFgz-3e_BQHs zMPVdCc^h)}*6pw!bY%wG$-_>dPv_vW%{wvy)@4{25M?qfRA(?Hd^YTzoS(n%pPsnV zglxE1|8AAL`s1?T@rFp5N>o?j^|7I57hZF^#S!**Fz90^20moCg0$ElGA9RQ~4RY`j3Kw z!>Rd5SV~>js337&rVDEw+7-T)5H`aUtY9en*ybd=KMpN?!)hq?%r|K=(`3OW5@CxX z6W-9*K(#*F!}Tajt!~He&Lrp0U&e(hj=0;EOk(NLe7|B}H_OGDR~V9nIgHD5w{1;^ zHnL>EK2M^`_T6vYkJZ>JiNWrjyIf5@$*ehtk=>P~HThn+Hgh$4Z9=q8)P43<7um~}>YwQqq74UAi zL{01Va%#<|dPO|!hox>A$=@;w$ilvEws$&qG1Zbhzno8=s(-^kP}12SQX4Btd75>v zVHLFg-l%RIfgJ3ZTr%KX_GNOs$o0ZCd_`3IFq+R7?+^yjE&Tvx+R+k&deKb_l3s8t zEkIZY*|@mfzedylp}HG9jpvJ=!LNH1=my`P9jJ)(-FP;b^xxCoHlgg>@uJ{I_oHWb z5yHE&i(;@3e0#&|@imc4{_(rcmurtNOj_zU00j4fF`HP}PLAl7XGz1`3e=^Pe>!tzTHBP_@E90{T15LvE4qPb4xv92RJls_fCK^oSex;F9N;vKi{pB;E zyyZ&cyxz6Rn|e92!vq#nqcPm~_QetNAfc8Dl3nHoUY;M#hKSqX7UFrE!fkITUq0_# zd+C_eooA+;dGf5xUjspjA{>TVbKVXqW55eb} z27G!-+S=xH_@`~guDcPMV$Y8KtWi$xQ=A;^ZDH-GG3AU5y&uC2?_N|lv;`A~PstXf z;XXG2AkZ#o_^3ICDMOyx)g5H;y25k~JzvVllfjyzQ=7AVT1s&UX6r*Gnu9Z-5;xVN zLbnj*M{z)*_6`Ds2-d-_P``(9!rDo2R{wnXVI~4nsQlAlasvl?oJAmb zPz$bAY(w#}mJBHTAWmmv?iGG=lS>+_DJCB>?xs24w(w=UfvgUtC+h|M=u^8NAwqTmVzdV=_m3x<`!1{*K$39}?-80k*aMnDPF z{tN!cWw|618oV^Hf}d#2TwOJP{exzE?y?@&(srT+A>EWJSc6CP_auv+IqPXWyIHzF z-(m3(6rE#y{ebi?N9^tSUOAAI`gLvp$`JT?xQZ^qRmZgX9ef!{Y};108n zVouq+yL4QO$?X8B$NTXo2*%#dxKG^QJo#RIgb&ObS>Qb-poQ~X*k6anKz<>+^KE(g z)>L4`3|hEJ#$zIbQ=xc!&ra$%s6HhQvgE6XA_Hw8;_esFbEUqbV3&kPnYoUb7=UmC zEp`7{`QkT6qma*9T|YL?R!rSk2b0cVbqywL1croXz>UQ%rE?Kj& zuW?bYrH|Jp+q%UJnb4b!tl=k}EXnM0E~YlwhWVbvEVXpc_e=43vbg^8mw%Gw_u&3N z?*!T(7vp=(0jVZ`{xk0QO>Z&2y$j1qvG%JDvcyoO=UPa2f=Aj|5WpFN+Mv~!$pw(K z6S+D9`Mj}dlmnxWvXIRFK`~}cC^OX$Vi7p7t}=x;-$Jq!TVq9oo5+>4gD#gogi@QK z-Qvg>NIa`rJg0qQR&?OVJHHHZp~kV<>Ex}Qz7d>;e>75m9xp4j8!pGo6*9%=D-g6e zJ?Gwh-y48@(C9^C*CiUM_YpZGHFyh^l_yS1y^l23L%fQL<8!UtEBxNt6f@HW7zEO; zBIk)>Q6!J;PtA&WAOI+%-iWysf%|GPgBD#o&DMk@vG~aHZoXJWd`pxoZLca43lr7R zZ76e0aezs_Yk9p`&f*xa2xR+JpUV2273lSdsWEwjfNY^t6Ns7<*2KLz-V)}AY=u8U zEe8P7NKh!s;=tpqmd~@{-C{nYHVjDYL@~k6a*Rk{W-NC!WqwM6+{ZU-Z;hD(cB@?S zC=`A-vRMOil#2A?yLe}!lSDHr*R->*ic zIPu^2eF8D1#SBhoJddz(Y^grd8HE9y3XH1-otrpM$PO)qK?t$M`5jL&pe7va^7SZQ z%0nH+2m*NJU{&(8huYnaQ9xS|YRu;~hx`i6vd<=CgaQ0>GsK#*TpF6#Gxap1xK983 zO)u_|Jw=DHp8kqw^-V$n3TVsFF>u)aVZ4A29oG5&0q=TxNcEj-Z^gV`F*3;!Q942t zI~{`8IT^NOgHHMOrvQ?LzXZ_lbwKEM`B9q$NWm~S0yun9Bj6+^6(Hc+0eBW2dlLE* zcfWPh1&Fv*5EDz7G=^@pXF3x`3AZuu8C5+|Xca3(5|F$gm zkOC$LxCfQD)@4AXTB$5|%Rsn}Nz@yG_e9FhmKb6M(~3rxBB-iw(2j;0gUdB4irwZT zszkx2{^|AkgTB0$6V^Y+*RH7x;G3gE6^hfDl+vh0+R5pcOA_rJL$ZH7!!9w^U>Zq^ zDsu_Gk~+}I0(2uVoN&-yC=OOVx&6~IsPpHDYA>o4VxcD#YYEZo&u-?u{;v#h;F5kH zMg_q&m=stc>jrT`c%mB2>eLXm8$H#-C8y|28HT-~WC*05w&7tQ1C*p77&VZ5&$Ob` z77xGG9DUUvBI~pz(8J?|sxJ>FVIZgHS3a@;6!lYwDK%+Vzw^L|0uIbE{Y34v^{MKV zldWh_6-zDnkGuhU_DeOQ9q3e5;l(j*<$7>Eo*;=Evq+}O&|AqnK0yb#P9XRaS;25s z&Sy+%rCcM@cx}m>%uZXIHtDw~=jN3-I?!RgxBJg;5k52CAik*UnP-TRy0j4+0Uo`e zZ>u+<=pdaWsr5r=$KICv*SZ|C#G!f}7x2SqwL&8VW5E7tUb&>=e5PEVi7`W(txHF{ zzY^`Lb3kkT`LevMs!te+(!-SC*?fwME*-S>j-uyiKBjiRtcfo-H0&#fK!s?mW*n2M zPvA~c5vD6E8fT?WMq=R?HHW@h%Dsp z5<6-*hioQ~#2h%ie7&bE<1K9OH2X|F+>5|Dj5)KI{|26uxiiM4vlg{x5vJ}2K@^uA z45+agmM@8A6vL|RpbGx-aktD-Vl5xo@_IEC|HW7I5I(jw-IRJV+UOphQ$KePhn@b_ zj^9EU!>7~Ck~WJxhHL|8k7~O_X91Q}IOZ|tB$m4a1&&=9cE#~A=%C^|z1&F};1s~WaOBiGW=myRChq*siwGZapV^OJ!fzOPD*s;(bk zM>PC`ks|nPN|V&S3y3KCkJraCAsG%OQkdFn9wa(PFC*rNQaqH3Lga0RYh|nYjwwpk zg*$irtpue3^S9wV95)G;iYG2wAtgG~Ss;K&zH58}ak*TPfXBXMI}H5)+hg@u9inPM z2?pK;?MSAPejcvo(@@e~p+AMG;o5PfGU0Pganc$AxEGx^gx{8DNxlDcnePStU*7EL z(`5Z;GYhdfFlfErR?fWjisH_}fyj1m#xs&PKnrs@zoALc+#4W{PhnGWRoVqcf}Wc| za-%;EnZ9D$Rr7~K1lOo%{=I_GoQTFAkkNH6Qv*xFzC0w!ThvDN2c0_LZ9%0I(FBmR z#Uo%XOh+p7;vS$1-oy}BjI>tLtScYs@vr4zNxb3qGIMJ6d9$0bM%vxvk_NKSEWapE zQyZ>1Z_&deYoK0(@>PS87pEaCBmZKuxL@i;tWUTv+29-E*RM2lmqIz8XU8!D%_h^g zn4%M-*ldElKm2G`Yncs}-cV(3EupxXt+z#t|xuFJm2#g`3s?i=_+>kmF69{F8 z#G^|6K(_%!Tp%~Fyu_?N>w(KuA9f}TYl4qZ z0BHD8FrH%+9Pbvl^z$UGCUF(t)2M#u<9PPV+n;DD{-{N5KhR+uuxECH6K+1jLFd6; zCTnZxtPh)v<9_TMkyU~lMlVEq^2LrcC3n!%)+|md`yl;O?cR$|ltS9x*|blAxl&N0MgjaOL%4W#i^S7j6v)^>{)Y}U{0 zPB-rH<=3di)d0=sK~dUTXm~43CtvdUI-QTOBRC?LW9zV0OVNFY`6!o<*SCxLtheRns z*PaQ=WtoCXjt*#SXNZesObGWy8R8i859ep<+ zk$97~qK2Odw`KC7%cbTuip!6yY`etkMKn)hHBl5F8q;I8gk16oV~{rL)LOkAWknE$ zy2`WM?(VJu`cP>a#Y&NOh!DoQF6Be8S7F8b$vVT7X3!|+4Od=&GC4{Jh46LN{0TbXAxs58PAe^ z+;&JhOjQYw$?lG|2p1K3A9P`%YV=h3?lI@L8zm1yMsuWYU?|uv@rSw@+WXY5jzY84 zlq03O*LFi_Hm?&Bx99y}jEWX8X-&RbW(p~cp?&Yj3HKWpXPp+3lqQOY72X~^Xp@$6 zNKkO7-J4#me9(5RnvuC$HYB!Ty9>HwD)>-BE`)X zt1=XgX2yR84$_by#oz~ltvcLMTq`9x(A2<@sBG}qz)7{OrQ9GNIM=|9Dos z)!ArAoZ7Fh%fDazjwsVdMXus3Pj*iSv6v=i1XVd$BF4qzVxDD{IXzn6n~`4SJB#9y zL8M5jKch@)i4)x(E*qHZAHlL18(6^KGFbMeSj7-ch50>4K?Az7rM#t|bIM`oR#<$F zp^4?J`V8a2E!s;8I<1=gUl(A}Q&M7xW?!-S%*tNkN7Xd2MZceBAybt%^91~P&l^>X zTny0J@y3}?q3pkMz|(2L4eRo5Ejpw{fUrFcpOMZiIYyBD!Nqq>L=}E(!zkNZehNAm z`g-VY)SSaWZn$qRPgNm(XBXK*9hCyok;G;FrKA)#k# zUj%ZsqKV25BmMx|%WS;7>wO-A+0>}!BTa0c@?!~ zl4Wy(4^fv1S>KNsuB4^)_~t&Ddt`-EV(lC-Ylns-16gL`4)Wq9C%dv4l!0g=Qn+v~ zBSN$zTh1+@rqaRAfrsma4EISh$sZr>f;&!VH0AhbBj#^84*f}rD~e(q9boj%*ovPfAY z1b2CotIJTGHSRQK$SXpiaB1<`KjN3_8tZPQE5ud15its77obPo5^h)hF@|%7zl*F0 z!ENCpBo@gfJK|Z?ZVQucmpLDFoiS6JPba6SvF@;SR?L09^{R!WM#xm-nnhfW3*1N3 zczO+!s|mMDuz9lM-GwngYdqu6_p;vBR~OSUKuzbzBY9`}w7i`N)1XwG-Vh1fHR@fZ zDM#B2V?qfRO`|iY_M&z0{Tx*)H%}eK*vCnvSw`aucaxC>fHrAiqfXD?sN z#~i$!Kcap~NI&SrU)9w0plI44qK4iT3^2a~&^Tsz=JFX6vr$?f8to^#NjX$OOtW?! zOw>;U6UwL63ZozwoS(?$U@U-I|De6e8xFwNnHz&hqWa)k*pB?ESxoralo?1%xE^j!tvhk&%2rNG)}1yFLs= z59j;&0LhNlK5u^rPTPX+2jEwloDHPViuIaJ9=Q_rBGT?%K0n4D!M{F~%g+#JqSm|O z!V2TaX5Z}W@W$4iGs=LxTqsjVjgf>V&b!|>t$LOsEW#=w5*`+(h^GwXP0>3Ub6=xt zj0Gtw5jjg#;i>L1^cOutB8}tr07Ey9L{5SYx^^cSn`G)BD)wm1w&b`e9R%Rk!ME1) z12I+l3&l3&-%Q``^y)&5Btt9*WpPp?f{HQk8{62YUvs_&6K&T}Mn)KBnCJ-&uAahd z5t1{=gT3(&KEa;}G71wAoo?}YQpZ2_>GcOpA9>FwfbU;AfA7y4y*=5fzajZVeU&}$ z;XcBMXJ!JM$i$6AA?Ms8jovMM|D4YlX7JXwqMG4*8kz2EjQY8qiKJxDR|yQd`$LV+?*rsIH>d8=YSBKDXNzi4;sA~U zqbjwSIM$bFdRJT=$BsbLdRh$b$9Eu|a>Wq*r;4~Z#X4Mlc)2Xl<;TUGt{9;>{D%1Y zXgI*k_wnjEe$;g@U9MbU-qVs~%Iq{8b0yiKM^r>M6$Qs2H+Doot<)jkxh-cm+@R$!9%rq`?a=U9U;N-rcSlw8ZL4P%ppA_eVBI3Gx+&Fo2UC)(%7W_w|+ z7*Py|FnEZpG_nWRRD!dxY7-Rt_2c6TuqAx@muE1M7E2TcLvKu2vY?f0s6-FRRr&N* zr+}@!<@H60=OGpkU$Ir#rIr(d%p`2F>>N4T7Eg-<3OPI~Y^8?yutp-?Ns9G$zi!Kg) z#maIJ5QX8^Rp1iuMyVjSw;`|`jDtvn+j2+XpbuJ2MdGlp?YjNA)ri8Gbw=F(v5(sZ zK{V-Os=;s(0*5#3?OC?R6_SgJMi2utCsQKL;k)XWU=fnitN!C0(&?v{rC}Em(rFF@ zU&G|PMR8zM&N*U8+4B2~dx+i{mPk!Ef;XdzGg4I0RJrP5f}_LbD(_XC$;E`F^7`=x zLmJWC%6dz|dFZ|?-N}L1z?!WwuK(rhK$#s!LWLHkK+yWe!_D+N5iR0P?r|C6JvivY zXc)n7jE4{uWky(QKP0nb?d$>MuS?h3E1JT-VnhXZ)}VfT2r%?Nes>T~U?RPD|5w3B zHOW(Aw|w7Xz^dwmkOIAXRhAReXL377Aa*y6BVq9`FK5d#i$%4<;d_%!7a9m71C!{# z1RB%Z-!wd@xOJLxxy-46${Nu9D-FN&K_x( z#-ksOi8IVHteE9MfzbQ=gFVLZ63lsH%w18$H%7?zk`wVt%x0hXmnHQ0d+`S4BnM{3 ziKo?g;I^{e(rDmn-)xCIXl+UWgd)vn?~p`cWYZ0(dS?|R(<=B~Sngf49F6XwsP^{} zQ5ch$0)!Nl6myS;d%i&-|*#tmlRQ9oq zCVp3x;GmRhT75!H1_>v)vmouly1a9fH+`_yP%fu@@8FjQ)IfPYl(9ShkGe-R$^dnV zX<8FTo70$chGf;d7}Kih2b=xhlrd(zcq@VDL9YozWxgkcc&~@ddo^lxHR7whmIi!E z!pe+DxUO&B7%+~QE?4=EQ&Drc649mm+;~Q(7Nb8A{j;R&y3xFC+9s6Lfyy@$a~x7QQjBW}o+J?G1+3Y5oWI9al`K;{1KYet4!QG}a`WICtG3Um{#LP2 z?LjF)+kCzJ9(U|5DrX~f!Uzmva{xw#m<~bH$kfIYq@|eeT+*P8DEow6iD{*nnTQy` zTAy|EQsgjp!qfb1cd?HD|jk@067iT|S{nR_1S2s7~AIytne994<@r3PTF4GIHPEEGcNErSw4?pGdK;O~c=}#FsD6xD4uNPn5y2 zQ-(yjeY!0&AqQKtsFg8@0C=@9A-5~eKz!kc;3x+ttm*iB385uHJlDk)7#XVS#`+LJ zO!Ljy`OJWy!Y-EK|;_d*Imb|ACtx&Q*a-u|dtNYQ6-ryt*)oL-?1_~ZFi|KpkcaI*4)2<}69 zi(V$4Ea`NX2!5I0+@N-7hEG0BAmv#u2RBu3g}y|z?;;l)IIxCm4sR>uzZmhsQ>c7$ zm!$luR5AvHQNy01hiz!ZCH$Bi*6s>7S#~T1aUaxY8A4T8HjhE17iu*quUlmM(cCTi zuFX_BT#LUx;x0qhKO^^}W;6y|u;zY$=yYrX4caa8YCMU(6r}AI5G5X(Jc=c&$4$ZG zxv3U(cWD6k=lgST!wclkF_;e0V`UmS*8eq$Twt%G(FJMq`T2b>WKl%>j->cZ)!ek* zW=EixpHDzZSXE!_oM$BP?)}=Z|FQb1nmkks9#gLyrBjRn| zj3<)-1dccaO8Jq(AoZ%T54_1}Y+l1>x(z!1d+;e)^ERe&vb*lW;Pm$ETk1#AySL+8 zc&uRb)|>b%Es<)(0*_K4%6|m2#uhXTmrn2c_Z$lKeg#>CT1zC4527Chv-t@gF6?hB z3NUYhWH4GJV&XL=m^p>tm@}VKO(jv=h#g}qrDi9j)bQo5R1=Gd=an%_U=?D^l%0w) zZ78goOQ~3i*yE95;B1T@n<_Fc+GcdGHX23c6WD#b$1u~j{zY%kz(4O6^Qr#^iwIe! zOi04OGy!UXpG**wIPM-SYDi9%q^Tn)zit$)Z?{8;0O+- zAdIXqL$=RP-oEXh{YXZ@$KSu7oqK94{Aw@ka(G2GlyE4jUn1;vc2uEXkswk1+{-ku zs9yOA>3{ht57y%N?N6oQ`O%r%J;qLq>>ITvmX?uoiO?9|ggzD8np@5MW*Ebck}~C7 zumd6+o$Ibby001z*1!wQcaY42IW(A6^T(y9_nbSL;5qSo{Mo$krP=ms1>KE+3pgG= z|1_VV5~+V3u=T?a>zx`h$gRYoy!5PVQyppxU<(pG&AU?OK!RAwosrhGNN6ORJ_|tr zk33+~Jxb)oJ^wwwhvZ);VzVwY)O~=g=bZ(?6SF5}DPA#oq4_D0Kt7w#s0;*JADKfC z3`n8utKas)X~6org7q&mT9<0nzb~*j*fx2dRuCz!O2)#JYiN&i{r;1MrXrL@s0=m7 z0uC5$B<8MB2{u|nvCc1tw3tL-AP(|c!^Z_)kex!f!f8e=r)H#&< zh~nt!)^enudZ+JxC{6QCXjH=8+CfZg{d^m2ZKFQ&(kV8tcmSRZTgNx^1&_V1O046d zLo|?3DAlbpOhob^P)I{_D=z%SJPsOn94oqaR-g0H4eS5aNCz&`X<;3>kHEP&84q}n;3x4`12 zsJsOHhiKRC29(bJU2v9R8<9ghViEnNydinZg88^u+KO!5V49C1ZOEV5(#3&9+njy- zRi;?gazcdyOODIcS>#f32Wdf(2HWVHD>|41`3kw1mzWG9t2TzidsK7!j{7i-8SC|(w7WQVAX87b$9(J)z{X`7(u_+hdLw=Q}{#@AV2b)H${ zm#*=qcV#&M>eV!`+Z=}HNttyy82@&o)45(_Vco1UZX~c-tcoY2(l+{~LpcV#$nZSL zjkP!GaDH=OW-MdRMGf!)T?if>d|;-b-x%PcKg7=>M`_0tk+P}ea2O7J`yKxu9r+m8 z%CBV|o$QKwI2)m8OPdL?Si==L_PV#ALnihbj``RbNoHTVif%&wuY=K1!{%xaF4j+5 zpAm~qms28?@niwD^@F+TQG)!M7{j5BwL&TTH0N$-Nr78cKCBkBl1vo!wyz{kLu4KO zKncG|His@1F|^BYQT=*7nKW|Yw$#SpW#Hx2`iIT4Z+e$J$%>{ydppIUnK@B7Poy74 zF{cgLRQSn1M$L&oFNcb2pE zzHLctrVS8t%Ivw|NXzUh4R{TPpFR&3qjIpx04iG~*YTUHn+GU3MG5J`dD|7jrseDq zY>h`~c%E=uN(EUW#%Zx2gGu|eH2wHycu^E}>klBf{Ns0>Q_3!vGt**}t4Ne(#Ck|v zB97Z-kLb+st&_+M4`L|5G?{{7a|vk#TjkDsnkO$qS-v5M^Zf(9Vw+ z+faKUN?y{H092`69X%Zxkuwi}6`kd}E~tvD)L*)-hxJC=1hP!JQ}z2~-w6C6151t>8eopG8|dK{=%$($&`JUSt1825?QI z;qQr*Uk{3nW+WfwVBv%CptknzM3{66xUUgkgxa=>9-|0rP3U*`{(fBz5Myee@WQW9 zU0U`&{_wwx)2p)owm7@$zv~wl!FP9WvGC9K56BsibGEP5eQ+GH-gA(32FMZKd{0YE zbiNX?3@iNs(417r-bVP?w0t0mPyg}%_x}rzvg78t7Jj;xIOT{wXqzBWUm=+hbrXM5 z7Nyy*d2pk_H*%m*!%(-pUM=nrm}$!^T7cH*&{qo-sjlWZSSx0X4_x_&!Sa)R83|E$ z1T?1A(Jyaw6w?^Vo#m6dWJkcyls#^!7V@^>)-CJ|6b%UutZ}pbeE|b>OiRsd#hs+| z^x)J?m9=N4p&2mqY`%I&15A7U<$OY;bpmXYMgV*sgCNeG3L89#9!!WqtjN|F!(bzs z@0WPGFBoleyBIv&LHTI{C&W#rrsW4A#$?#XP;Ew?uhFlw$4zrFuOrL|2Lrlr71~XH1|9Hbcu0hKPMnX{+zo>C;wEJ;p(xBm&L3#T~VdetdRd}-$BTt<# z3KRT@$MtbS1QecgC?{tjxSIMF2gO=gG3N4mH?KU)ZVIijPMwb2C_6w^Cv4OTyZZR> z_!Uz*Q`ip(?=Jo!+dr$S5y%%P6jOnnrrz*&cr~(UIDQ-gOjFdOq3;AD@Xa%hJyfz+ zs7}+j`g_ls=xRwi6dp+8S|hgo5g&#>W!))>64ZZ zGz>1r8L)VJPWUZNzNvJtJdu&?n*nR>xiy&I( zYW8nlbV-w)$@XX=Svv4`AJq;sM%=Uy*d6s|44j%vb9si%*9RKSG|JlQTb{>(^ zT!O+qfp!cv?-5%rFc;0^h7N73m(ls81vT`7x8sHB!WQQlBnPp(;Z{p(S#n9j!G=Xw zA{xbl*&Ar$)J;wYOW1WZeK)yNWfkBqFt-}RrqlGWV*0Rp)12 z%p+Jgt&n6J*gJ?g(${0Y=D-*qi=Po1O9@4T7XKd&5MD#WG5Wd*CbyR88(u&C%?u!j z@u~y#&f9@{&|m%nzARA+Hr7p8>(%nX$|@x^98!ND4n1*)liM9JAn|=*B{s!@x2S9h zJSrig^)zrZH-iZSL(yiMf}~fDZ&27b?W@2`<*%EQE$`#x!_KJ%xX`v&h;V25maQ)6 z5NoxsQq1-+l*^7T2Tx$$ZZH`@4}!pe-7&JuFvM`1Cfh-e*L=yU({VW0jn}7qa~GK9 z_XL^!Cd!AcOg}`b>$iel;jYfifyC+zQIf{f1pxhQmGMzLcUg|-%kpNrx|s}amozAx z5>3^L9&WP^A>Xbkcw4>(m0_dK)top+mR^O#!&Q(db$(5r(eBRae0q(OVlf8fWS4j2 zo7DwWr7?JNf!K*eC2W;gy|tz!O=X_GMTY3~ge$Mjato2lMRlqs8*aol9^RX2kCHHE z#Rqg18Es!$AS&bU9_@jbGaeNY;XU;Iz}kWM86({8!~cNNHL{ZaucppP&9jj7q@f_; zyHAWgbXEsoEM=|xUr%kJx@HV zTumG^`O{#gRy;4lln7i<=Kd|BNcDXjIe zKRc04SW(`l=xNwHEX20}0pSNZXNV%7*Zu+yg)Xb=)79K$r?BlX+i0LYHg8c!v?$zoZh5l}*J`9t(o{hk>Ot2K z%__=olm7si1g3&=?2WAIJ5P(2^+I8_}@Z7hg4NGae(-Oy@K=3J@;O zi>I$p>84y$j-|_LoOp|RjTrnc%N(QV?(bYS)N!H$?iSm_3{{Ye(>oLea0>kyx&Loc zLeAV=5MMEXLs{O<7pnj>431EQu{9QhSmxxIg;+sO_>2vYc=8My13{@LxO9i0G9-Z_ zl89l%uw(#1^za)Ry1jNm^I)PNho~wB+(=6)sl1uWh6&vLFN&_zOj830gPa30zIJ}7 zEO^)5#SBlB$PDaAMMiM2xfPlRXJ0N41`iKNVu&bqk1-O%Rld7Row7k*R*!rnkj*nI zMVT6d3{z+R|LB5IMLgdz*kgZbil3%Vzg;>mch-Tw@?TyyEw@71Z&7A@V)a!|xuoUo ze=H#}{0Rl*uRb;I)rz#r)ka|wJ7?NX)q;FN^p<~v=9rvBGVSm?GMc_;&TJlWU>g~z zy{iRj$)VoPgTLHd4LN>plVuq~c^0w7bR_!9ay2#M9sD<^vS30V*nb`r(WpcEsSBkj zP41u+5oCS%n`A|RU3$S|Qt3tc0E@Q-ZXE92Zw%(*s(0>-*x~El`*>2E^Zg>n&X_H` zBa>;7;kLK49R8$sRhYQNoY8}dQ0&wBc0)9iqHL1ZFS@)=M$ZgQY zC1K}^f>`gj?TIMaV$u8BpFL3tGLky#jV6~#Gq+KnXoR%g7NBYRjQjzXQLI8@h(~Ez%%8i=kox3iH z)<%ILo^F*A1G0HVjkn^QcrEXcf}Z;b5RkQv3iZFjxlW%AciFDrjEn~!2(2g~#U7W5 zD$-&YUrFi1DpW8&d^G|0=CO~hNMLaCkY zR*9d{+kQY{+3o?xsQ&mabA4`dHyu5iyD!S=8vZzrDQY~IB(*Gh0cnWC5Y505ux*B( z03)7LuG67i5k&c)?@V+LY5LsB&xd?4D^3q8s}-j=G_gRQK6bi>&uS(>p!qfu!^n<& zg5(2b7X$d$wb6q}prMR^qJKyBT#6Q0!x_Wg&WG zf_RNFudfZGSMd!rTBOT92-s3Vt&&xiV|D+c&wuA6`9%_t9oOj+1!&R zOJ!Vw>@F!)Nu}-0y^tnMc4=1&DVD~8iy3Gu10JKp%HRx~Xi_(mqHhN)iW=Y{KmiM% za=1?Xb0_U>Oou%Gs?d~hDWg5Lw2wO*zIZg8Dm{$HV^K(lt&JZ7hp)q>?5#eVBPa1pLi z-hG{=_6Eoo_DMp>7ro_B)@gsWSfN3U5MM#f1dKhynNHD|!8C5_qcX7oE4xq~<+GuM z>vS%1r7x!_i@Q}1M`bO4+Ia_`qCFN%1$LI?G!cE(KE?OJ&K% z@mWzzKy4+nTO(>GtL+$f-s0tl{)s&yVd+Ul*QV?KtoZTds{bq0HKJYs4U{w`Z>9W(@4TpASZB0x-J` zeF1_l=r=<|BX5KymF00+rNbq`f%{N`TfPJ^f(bWNvcvHSZ<|amfwy!P-pv$PusfPMm(s|~c9(1MD%)L0!R<$7DbfR-zoH$XX_sw*_f2&6bY;W=0% z3h|p4)k7SBC}LEWOj!le`v6I_ND_Js&jJ{9(|j78?oz(IxLYQMn?&$IY7me<2F*4u zx{%v$(I3Z(CiY`=x<>rMCGy~6k5ubvk>tf@0MKt|(uix^T|=P6iqPq4$tae`mJT?~Y)J=P{bbuQ=w*3B1Ldt7sV=%qI&e$w^1#d7bc^D_DYFC9RQpuYY#_ z%T;;uzW?J{@sBQmZILZs+(2&& z_Q@&L1dLM)y3*68-im^b(857DMLivD)>t^eE&HN}Hzyq^;0)0c3NL?+rw$*{j0p;k zTcqrn9owpao=HVKMO2Vh$16;v!jP7mISL%Tucq8d%itG$H#4kyGpn5xSPZypglCW( z^~rX}Q#{h++uz^kJM>U{%yfExzf-V!LcT}j0;sTz2eZ@p0>%n70!{#NoA(qN_ysU; zC^SNHuU)F^*&*^jbd_M#_XJrxjq)>XvHpo;Y1FJf((BaBM~qf57JF+T{{r|6+!N8_ zFlEuO@pWue3t;sx35*SFWS%8QaAG{`5&)qZq--8nTwoH7!&_1@4Y32+N&11-GJl!) zeGnaf{!6WvKD?mz1K>#H+I#F&UNT2vM*^XfB7|HpF z^DtWxzy#yPJsh4qPqrlZ@^(ma?9FMj-a2qQfRo=`p^VA7XyJo^T6H&1xyb$AqK7q<$dZZo|lfjv^rU?1CWy(pZg8 zm5w`<)#ct~fA8+vk|{?;Q8g4bth@QBp;z)g5?IT2ewlrm%|FjzPT)XjOa|J7M-7@g zzJ5{j0)m|Q&oDAXM=D&4+$l7nE^e4Yecm?|-_P3m8uklPe??@DmqvUo{q<{) z3;9_x(+!@qyA`pWpAE7=a<03o0+k|7(F%%bkG;0CUwhN~uPyk8X~JF%mBbmiJ2;t7 zv4xd0CYC*YIMn-ZAf0f`OCHFZRx^E+!tvm>^871{E?Syzw&PC@=|FZh{`R#U!1#ws zZIF@_{a8kAuLDu_RuO1Z$}?ob8RS9qG6MwG{|x^XMO-iAFyPdv|$>jR8jY?nO}-6gSr(wgYW0Pk0+Hy>2Bl5 zB|E~!#6Q6H;eVJV!sxG)%!yh=)gFi}g5llS9t^%g7TBgS%Ov{Gn|%ORXEUN^zHu5~ z&Kmf{boM%$a#wosZz>de&-at)l!HT$u0GExj$AUXn=t}no|Zw--HY-4Y&57QWgk!_ zfMGaNk7kH<5ZlM~q;?|xenq;9kwMEM#)_3$0bJ+?b+m^2H3;m~y5Pp}&0C2U@8Cbf zjsb4kCXV99Y3UTMiq83&@m`_TZc7k( zFqA0*VH+b$G@cw65I2*cqPv~*YIQkypbo?oSHx6kOFMTjJaEm-y-N%6gsBuIK=mR> z7cYo)f!e|N0TZVYn>|(h-mZ?2My(cuq1Biq(4Wuva({6HETVvTLGb2W$aVZz6s@@B zh7OF4dZ?4YbXjp?B!;4EWV{DxlhVPL@yl1j6+*+HhiXI zq#i3U=EUd;e-|6`S~{OtB!iylLTT6I?xHLw-W*BQSQTImzhFDJ{1a9OX?oPm)Fr_8 z2e;UiF(H;fjzuD`4MqB+7C86qpj&aG^277_{4)*Q1=xu^+jzj8XcS?dhl0y4tEG6U zh0Svm{*{Y6ap=awXAZ6QFP~AOLr1~T##@N4@*UdxTPnev7s+yal8{;6R&0GqR*@^a4?&+B<$w!asjR4t2hV%*#LUa~8KqfqPcsQIiRMr=^uUf^>()MIJrJ18xVhk`4R_lC<^ELXTc z$hzM!Oq1PyNaqM!6e$3yt5Jg9 zp!I=SL&)klgPdS+AmlVL)#ReGC|DK3LE3wy#?6GEMu^+{da_syo~c=$-kyZ2hn%~l z#Sl1nl#YRZB;9yKcv@Inc5O50)m>ZP4DLfxp^h-ny3qu>b6Mqt!G=#*LPxvbBOyTS z)2RUwLH3~MX@pM9Bzq1k{nDvn!0Hs464v+YJD zbSg3`Wm}J~4zS)tAraSSI*BaE5OEy{PO$#}&)&CowUH%T>ZjCvnKg5#XBH_yhF;ZP z3uD=(F$P_Pt9s^(mXHz<7Lu+cu$d41_Sq5V5phnQd=E-y7v17*$ zn7kyGhU=?`O5`lJl$*f7VQ@TlID?QnF*1#p!0l0kB!L!~Oj_2{<*n=V3Y941#?gLmgAwWyIF6t5uWAvz&M z)>8u`*%A0{BuBUbn&D&tK$yBM;sbGzeV(r$=VLUB&$)3aKv<(@vkt%hg{=XkY6#`; zz%I8ouI>%Q?4^`00G~^@yKpWcu{Ofc5)4-&ttBTvVm8vM1=Z~($`2@T<*UuFwoY30 zWSEJApvG`-Ex!htE!2rTx5@12QrT>5-`I7xU4-Rkb-DdcK~*XtZ)4ws01Nk&FYed& z6OYWFU>u|mH^+j4)Y*)Zi|uhHuO2>|+2n4u5JN2f{eC+BIv4@FdOW_#c@E~~{rGE+ z@a^;P?j9}LoM{Vu)`aS?-(M}pu;E1QdI0hdacY;=updtNFh1j?oj@OuP2E7F0!rhq zL>d86nv*ELc^Y=cbm#YX7Ym|2s;q~~7|deBY#bzf9U6%v2BPSJgQU(6@f7>KOQg#Yn!E3b< z&P)l1cp{KBaqeg{p@?C)v4-|i!5&Jb1r69a2;fE42uL>*pv=0vlB^ioP{zt5G%gH* zpJS|cbw9>&U|lx^Udzd1vHAeXLVB2Yq&3d)khjQLs;5V}b_Whp3EG;HOCYmaUARde zLmi4POil1pw~5-p%RPQK#BjeqMvtH{?!aJiGvRpkxJ0mHD2SmcsUyLOMcXQQMxu^r z=iPJ@E~(gqYA46?zIM24Z77rSyvbyY{cjl0ozrjzHo8kpbG)8IF>yU_eY-JJ37&bx z^`OWm3=CJYQg+KZPHn9S-KqF!>|Hy{*{K5JP!cRpwb#KB!0WQ69)beU-NbMa#E%ATgn}M1cLH0 z;L#or!^SUn>F)e@xEP3{$)G+>w?o5IP?+vc0a_dkp%IQT0fS?N{`lQb86A`zm?k}< zda70!1NhMvp%A|1Lf5D$9h~lVC7|g1pMQlF1W&upX3T-lI_b;GO@f@tR0vTe-`G9$ z?jEr<`occpzgl{*t}?aJ0-Rl`-$j`enOH8MQj{64R4t|bP!vwLAh||HJYC~9!;!mP zU*m@Guc@lgJ&N(6@?!oUHn+oX{ELgerJhAp2Oo*+_TQ0ZXZIU~j>ss!KT_eHl!wt8 zGgwlm);Wwp5(RLjGHu1miPz%+d6H}ZMrV{nmBD}#RP9W^_ z>%roFWt1`DYl`8%nZ^VM6DbuZ#^zRNY-va$*$Hqfp355dE>D07wnmv{S5MjA1tg3l zaAP@m7{Fq35a%g|%hhxN-||RUAB;~v32d=CR&0^Oe;2c?evbVbBxFScUH##DgRSE$ zW4BpxA^z6VyMskIy`RlIh%6xp(GK6zR0=Pz1Itn}t{}35sn;lnHEj$f6rm_rUO6&x z3S~f`L0`@iTkUQ*$@As0odPR+p0hl^V8Zogk87JEFwTq|Wl={?Cym#rfm*zOztY|c6U#6ngbGS>#B#!s1x5o()?VM=lTenpWAbBuzFo0 zf6W%(P8V}ZgDo5a=Bd>_QjY8gzQBhTV65|;gjUfg##|3%S$1TWGoj(BU^ZHSfjXKH zivM&JsTV0Ow7ZX#+13X6TQHtQyPGWgGQXOkbVqm+t#ij@rqTiIcM0?r*of)^D7MNh zA0VI25#t{8)(bS0=Myo&2DK>iOE-&eW3XW$aLingaHkYWHvUAFV0l5S3&IP(k`Z`i zf6fg>|NI6~8&o`b6iFQyZY z@``QK{TKmGj-s%AEL1`ze~GxqY)NsZl(}LuLcSVPC?1@Rh?1D?TXiaj^)f%~dbPM; zBEks&lv~ezI|nitmEmL(e+s{(y4~tBGNxHuN6>Wb>`ftf<{w8z1u~vEO;`(~YiMfp z{){Vp(YFn|Dj1CZPo4GQ=CJ9gDk}7dC)QrCz#)rBxi<7FbWR%hRQ6~v#)7w_KSB}o zQsvufg|+zgAE=%vjh#VglX*o zrm#_if713IjgB?xvdfYUs*)X=p9TdrE_k$`@V%$`(7 zwh8HA`(fNnkaL_-wS>=nEkOYI+-tBymE=N9VJazUP~MAu7|*l(HS}I;(}hDx4JUdr(0uFFq&Z}en(^m>|lmn_d7<)^jHRQ z=bY(d&tW=khenb{#*tEYAzX8?ma1~<$c8QEKMussRa?JTCIUY;%s{)Eg7TzKdguFMg`q!C?@7#ZFL40!R?x!g$X}!)MkdUp1m3!Y@97n7 zR-LTBVIbzKiv^QRp1lRtmMQGPr_#RBV2$IVErcMt=Z5fev_6AO)CPh)6cknh=wVr@ zfo^mfSh}&m603?ahL=y61R8~;wFCW1#v_a^0}|@cw~&cY$!jY|WrHX9sln(Wo|aho&cdf>7wONX7nt{FtE5t1LC!U6^>Inr z(JQQ2MT@v(R^@oAg+LGVxF=r*dNNoO$jFnJhG$X2&=Q02J~+)x*!nDWKyjxHVWT>g zj1HVOY4nwxEYCYsHTG{>|y`_pY7Z2s=VQltIOumv4H%LPZI$5B>z3H>o@ z!Ewo?AuSE^F~~lDOqV$aWr@109W4>exAx7~oEx{)enH$zu?xSu8F6m-a;&Y>_Q`EcUb|0YxA!G?O=q#~O9&Yjg1pLwc^$n);d>`iw$#9X? zbFb}4sQoMSFU4b~@CK%946)zjCyQ%{R($vzW}I82@Zmbmhllp`V0)}u=^c| z`W)k6c+RsrAvD54X7A#?empsQcXTowuJ130y`dUtFZUQ%T(;C+ma}4NE-nM8sKKHw zGbp$Y@1`t3B&S9dm5Hq*O)EHhDq-jz+9G|A#tG1h1)eB=&m!XJkKmf(hps3D!~DDw z_YM4o$gT+{k{m}Gefl|cif!0$EdCR1*A#cL1ICiC3Aolfu+a12dUU5cv#0Y-gfx&{ z!K3$lT>+70r0n;vCsy~t~=ZXmAtTa$BsndQbtsqd1&dfxr=A&@5#tPopk(r_LBQ!l5F5Ewwh+l3SRSq70+y(W zKeRft$@GEb-?>vM#U8iGHxtO8idSwuc@4g!>s6l9gwOYjyOA-cHFa6fA`3RZDh~;Sa?_szfxPI^Lv06G;PH&wp^LhVc--;&yxbbt%gL;^mcf@0YDS<$T zD=V}@7Ul}y8{D8EVK1*_oTJ}Y>TxuDv9KBc9J z@+7q;-tx9WLa^^+!XARikwH}Gk-Zyr%sZL{Q_u?n`qn!`*X`=7srO0%xveV40Z!Bu zvL}eV5n`6j%7yZ=J*npV{9Vc>Z8FwIYik)crMhvd+xczft7mHO^UOL^e@^y&APnxB zU;C09VHt<$PJcs?1_x!&mB=(1I|9AeNIac7na@R{{asx+eM9O1{f!lYQA0*_fSC%4 z#)CDA73kE*)-^*8lFg)PQk1MIaZDUSb1)vE5em&Sp!n5{8%xFuE@ea`8%3lB`k@*kl1A)X!bo7ITlP$ei0X z>QH+O`sXi4m(v*(fTv?@U6KgfJ=lX-7(8jh+q@FvL58LI?PR7Iq&+mzjjM4- z9*!&`jh8d}tE42^x>~HhLC@1mwGB6;>()gFB)*ID-s#8CMZIXfz2k(1&PeizS`LI0 z99!$H)wK?7oE*es4P>_XBmU;hACR~CF#V3{sjxmF@@%xZkg}B;6MroqAt;MshQ9i6 zlqOc;`d8CPeYwmfsa!MLfi}Vf&=aLL#R>~W6V3r;l{hb5ptDq_D;6b|So0A89)`A1)G(3qUxh8_ ztE)x6aBH4_bFyfQRgef$QD}KZ{MY!cYnLVD6>FC(O4(w$BV6L;7c6}1%P(mf>{`fW zVfSe*P)Y-V{OtGwT}LT{*q|QYeq-2a)=7r~1Dt3j*=2*x-V)(3T=mUu_Y#wh$=uXz zDK(l@`D@uPdOxvZ1u`D!#u%sowX^UWD)C-*eQ;o`N5S#iWsOB@!d`!!F298ub=xZe zG%TfU`QQ(&FQ@(U?)%>H#nHQy?(qER^!?fAVej|I+wGQcC_yD$3(*pe3zRud?}Edm zQ5E(j6!&{M6T)PUp;|t_Uq*kGbpl|eL7m=E7Vjzaz2aB+DH zsdGd5cx*uigGZKx%hNRN=2ol_5EQG=^UXOK1~4;!JSPGD{K1iRqNX}K*g))0;DPjd zH~Ixy>M+TA_~ zm>I`|qt!&LFjX0H_ESGxgDCmVsDtY}061B;c&HmR#F#1wB^Kf(8m= zhi#0Z_r6s7ns{Y=Zw@2$ud%j6VE~^MGcB0vn)o7-LuZO5cZ#ZndIaS!_BsCG`2eb6 zQ+c6M0SCF>8`~&LA!;N~Q4CAv&m3>BMv7f5iI}5T%FDFL@@Bhb@+*TVgoy#C+Ym3J ztyYQcDgzT7FjeVrm9;j~HI6wkE@a-lMc!_NtJ?=gxOxDUc=%d2j9>(>FivAUzz?8Y zz9hK3pkuU@{F<$~dY7q9#Axl^6z`6CCmt z-h;`8!%^R7X96R(k-d^_iv-HP3~@kp$rAMTKS>X8Mn!1jNh!=Jy#J_X%^znBh+fYc zAOCVX=zToxzNcL&Y1pgp5f@O(i&Jz)$NgPX2U-KcB0RG7mHsb@kD-&onBo{!6Pf!j)?AiV1@8``D4n!sc$>0ZTLRu$M+}bd zQqr$@YqMS5Q|#!Xs4s;f8=1)FAgz};);Xnqd4OsQuP-n$?W*}TZOB@FFu)s9jQJWM z+?~;!06Tb}XGX?4HVkw7@ zr0uD!Cu!@gTihY9uLYzZE`ZR$@>!!PeVAhu(UKn-2rSvJ)T`g7&=L-RL!lxhvxS}_ zEN{z12e^F|mL97=LuXxgqQosa`%2TE8R@;>2oMCG3>`Z}X#jN#j$G|taaHNcql>5{2R5} z$%sBJ~RyK;lKIRd4Q4plDD?sfFX@NgE-&Lhn{fSP8!hsc1{lOt=Q07Q-w9dVNW%=&r*O!l>ycz~mlUc_7K^X@U`SHcrBS8fz~DLqK-;K<~nzsSSIH1dt& z9jeuE!M-{`ljy~wVx<9){e4CJ<8U>L_y-%4MG9r$Lq>Fxa}4eTY_?)*4>lA3$WU(m zOHy`K^7=3ewZNf{D&?s{_f~Q9;RmTpFpNd*pBCD~!@t|+3lObv&kMt1-X1%Yg68b# zqB2CXQ>^-1yn7J8fCE9e?daqq=23q*YjKGhihw3!*ivr6n`|zUkvX8alLwfhcaiFP zYjod(P#$@LI_;urQEUPjc5r!UR+Ibh_HS=*IcSwMiGfYXDd)3^&4&T1vr0d0or|04 z+H}XLJyQnj`d|w$+WOuO(4gzhjm@&vVM}@3gi5_2I&#O^9w(3hOc76@!`zQE_%>c& zZL9(dcqO_!&_p|K)PQL&=35lQ6m^Gndh0JZ?{w#A4+IYZbE8UBb=(=M*r)CzoQ7=#3VXH&l}%= zInB7Bv0E-3e1>`>o~7p4$g`%yEQwyDC`)1%7&|gajGs$%=gp`3hOEI<<^xz+_8%13 zPtg(qm@R>+@2rW~o|6^(o51$^E1KCIIQ zlL2fwT~)YD_Mau&Le1}}-M{#E^fd)8ica5YCGh6%Z3J)5DC#JZ|MBege$L%TRvGv+uO#RtSJswzcLz%JOPj<2P=9;Iq|$iQ+0 z)e1a0W;RY~&RNUQ8cbE(uSJD6hsobbJEBbm%T3nVb+E$zgbE}*>mfSRIgJ@kW(-DC z<^0oQ6jGMpX=0VS?Y5O~0jF0>R3PlUqaob)7-tVoG$L_6b81tU2jNx^hayC<%Yl`Q zX3LvVbZb$QYNRz}r#1FY`(G}Gr(aG^=&!}zC}Y#s1Qu^L`^GWaG0{o@!>HFT% z>G13vJw2`AJKURVLrYy;xiV+IwE|31kL(d|LG;M(hUi#WtmI1~Pto98U4tIML-9P? z;AE(|t5u`A{HDy_-~bpoh?%K~tq%HVM5Cq~n=kp#)~XDd90;t1RnGh!MkV>nzfMm;I7-OgG@>!WQixNaK6xE`&>H3X7SmI#;J(9tz)cH z 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�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%0A{_!V#{Yt&^n>aS8p75~5$U{Vm{ED38C; z-tnIQaA=jsE|mXE#zE<~SmU7NFVZ+Ddt1B`a&A@lZHcV|u{+}ww0TqU@HDr-&0Dhn zbWgYEnWArV+Tue@|Jry|Jsp&fejWt=P-6RS;+)M>igU;z&OHDs&OJpw#krS-^#9w? zlK%;)a^J#Nxu1oUW4}r{+h3|&Q{tiG<61)6(+WC9KZ`FKcNSlSte?og8}-EGXB-#& zQWAd8Pv1lDN4{T6!tV|J=JSTuvDx)PbUbF1KdJvkv+<&J^2X5DrR@EY!kyrQYoLjn-@NQ1@cUuvzs~5X z_HPUS##A`}iyj88{g2IevagLFwa3Pd(8i1KVe-{0oqs;|CGup4-$3n)?0%N=t&aZ+ zqy5MHo@`JWe$Oyj8qUA!pS{IT)GrP1*B+wv9r>0k4Zm|CyPt!6)nn@$*}uN!kE}l% zmIfK}>AWU7FWSADe)@y**aLYM=T$yBp2(N{Un<K-kJ+~~OdT#xP)pOh5w>=xkPZAx9!~b<^RT{ph zqI1?OoIe9U68)}YXZ%U=Y=AI%dn)|jNBQM(qM2__hQC2+a5?$pr*}Bs2Y;g8+W=da z2D6M`60Dg}zBZ*nXHff&ogMdaPdCeZy%xzt(qa zS@*DRS;ui7Yj3mQP{*S|={e2QFLe4!r*CxnE~jTW9gP>U`fn7`f8)Qd{#(m#$vac_ zok7-HgQ4$Ah2Le9{m;U#!Ykq5oeJ$O`c>zD0RNs;_`Zwye?n`Xx91s}=SyTao-eh- ze(JYwj{O|RIv(SAp5w*BL>flj24XVcheL66H(Y zo3j7KN#2(V|EGDI((paz-lg-~F@=2MPZcJXDG1JozCRW2j~+$tr9k$&P_oBB7wKh-b$LiZ{S&UK91JJvosx_x$v*hl;-?Xz>l zKC0jBBaF3=^mCkpypgV!`kM8g#7e9k4 z*9!5EJA~AaAK@QAI={gEraic8X)wq!Iv=qgE$Clr`w!;TZA25_27!vt>_mYd-w~6m9=kr1_Nn7V~LG$HUQ2m>5uE}A&^0_np_ z?Y(O9CFmF0@BI_CLq_@8-(>42?k8ua!tV#k-UCEaev;#HpzIr!^Z&hH>&Y&hLpKz% z?=QkmniuOkKjr-9@HKBn;~e{UTc0~Jzf<1kcOm`G{2JX4vpywXXHe@Mo<}4fS^W2a zR;Rw0cCg-rZ~6<(U!~tn@zLMbm7?w3NBY`&Qu-2q@qdd$+UKyYXI*LgA^9Kc3+^%Q z0P5b-p5)hh&DQ;rb1;0#IRU=p{8z|+iS<4HYwLTh>z;s?|3>Y&HhN31tw71!QHVTi zhvXfI{*uS}JbIl?KFPfhT6)>~S$f@K{F3mzOZ8dYRekSx{(Sxr)n{GuOP_9_^x-@M zeTG6yA3L{}K9k@}pX_OsF3h4kwu zPBWjPFXwpZTMjLK+Y7PZrtqcjj__6g?$FYgbqM-~`vu)wBVBS%f-gDTH$cw+gvfac zTIFq@D?7gl9n-HZT`%St?kTa}M(z+Hau0x(+~bAFJq5n>BfcX4259MbCn)`98sE=v zRqrd%s@MEk`J?@~KIyXOCZO(JMaO+My$|WKC;o*!HT_#WAwThCJz-MkYq5Nt-$mLjPngg(vJ|0@51Xx>-- zjP$z7>lEI*LGJy?IkVLMrvZ6M`djar+PSdkR?w=igZFn-f7>rff7*}!{e|d%wA1H6 ztG-J?)%Ps?vrEHug8FGKu9h2ubA>h`?<07r@va! z4z+hz+I61q3u}>oIOS#c6G4?bLs)QOX?RYh_of*Kas3->Z`E((N_MsQBfFZNW!JBe zBbxO!_9ZT0->%TIFYh~JU$eXHdk}ot;|TJ}zGipXcbf6#H=yim>rvVDC1}<2wGjP( zb6gHPsvRr4UHKnJ?A-yB{BF*#k$o>+VBe_!#f~4nf4-O6om9Cov|o0{zS#3}A$nc! zbW~ofeI;+0@+0pE%E`_TfU@grpxV#=2Ac7LowpETXY*^>d2i9!c?5jf8NbF3W?$L) z4EVD1MaI{CXHa&w`Be8f*}o81K7=p3FN^(DFZQH8Tev;924&~LpycoG{Oat?JeRz> z)b6KXr<&%UK)YpMn-5iveNdvg?mxm8U7dYLdc8-HUv_;MlpWs!)xJNR-kf%eKM)k( z_DQm{oomU?%v1O?;~zUeDa6iZFWKQ!XxaHYPC zBACB<-(vvj`hSSwo<17B{vXZaq{?$I6M4^hzE?fphn_FmZ^LN+8>Qj*Uu0*SSKiEB zZ?g_dz7yULpr1FSoNx~z{XH0ZQTgGAx&C15UEOCpjCzFl0k{hF&&~DMwD`%#QaSUX zwO8koQ9s~ZfqS>ikNht&afo(Jh5kJBJI*s%C&ItW@eRlK$*1=7+?@0u9shKG)c?1D zFL}{(m385NncM!qn%)XKwtq_s*}wG^@_&6%{_f6?#wT0X{}7Hl>_wa^__5UPDIf>? zn_oNsY+>TN((pV&{(hC{IDf0D+#@Nk_;9Mrx40tttXHY`e=a{dUhqToJ)C^flktLH zmw5hY`?vLcQ8~@YuXwUH>ALN+Ik-$&75-?pYO+LhP3}zB);?ifflbMXESL1zu?wF?lboX zC5Q3F_hxK;CpxMJ^C@y|zEV3lPv$#BT|miaUCF&><~`)^@AMSMt3k=VMaXw=W`L?M zI{w!npWdH{*55?@WKo$tCq-|Ihr({;mmfs!ax(ItFA1N2$JnXT`at|3mzRb2yQEKB*Q=`|aTUKayGWl&(7FeD9O+f)x0aW~&gAdq`LQ?h1~|R3 z(^0#vPrBwc;#1+8W#M}(8utf!xoCbHm&(79=ik}O@9XqY!o(V7;eA)h$+xdHIaql?y$?b<6ty?AvnWryx#2>IjbY7z03)d~P^D)*btwkr-E3@;qg8!6-_cFCkxdQ&< zDSHn-v36Pbd|&N&7XA|{J8w$r9IZeDu&`yBojXxKaiC!RGW(xz#?=tftS{`GQu^>e z-^7tAG~v z2$Az9e90kDkgp#4DBmi=!q#QsxmcUB@H|B{`};!C6FvQWr>_Jh??z#PzFYR7)7*#W zf2=r1VV(OP=?RU7gz`7mxeeI1EZ6{)ANO-&ia^%y;DbW+e*;?U zxnCTc6@>IoLjIq95Olk;U|(qY(|AyJKMua+WZ!?8;pxu_`F`5#PS5px`oy~BFDMML zp^*C5fL8ro9fvrM5>n5hpz570B>!2Y(;mmW9g7sG$X6~T-@^LAjo$CK(%en^tuMXk-M8Dhf5YhX<$Df3W5B%IletSQB;Y=a_vpU!5c|!hA^;aSPr^-1F z`j>lubaJ%!@-`~7ek@7XE2c^eePET|C5>R^4Pw4d~w93;j zpg!epdL*%@^jHN{zZVJ7Zyo3BQ-`KsFKG4KNXPw!^w&|K`e8aKx%W9fB}@!04t{aE z1^uP;PTp_bz2EvfJp`1z1Du`)D*ug+_XyGJ2_gFaKp24&o@Myom4+|B3<2K@)`<>!_9=0kG7|u_{m;n z_8lDFYn((rts72sJkRlR$7_YGGwyTxamP16^$+&vy{~O)m-OjJe`vih3e@|JoUh_X z+y?<4aGd2B)o)wm>VDGzM_b2;HvNP*!B;;%=2+YQ>_s`P%WRz|JOWyJ9Sg?v=lbxq z{@TiMu;Y7gQk7%#TIk$s257e@0Jd43xY>W|UTLbIRnT&ExQ@-I6^z>5GvhX>w{Ga)dalpMS^lQjGCppcS4+k{0`_z<+ z+Gkzrl^z?Q$Hh&}ZxTa8{n%%oM!Mu#JQhD1_ev=D)Pnm_?E8~X`~9e8O6`5E-1)h7RQvntn$+j z_zV4D?bP#*O{h=L(R(6K^M%D{J?|hc@VvwHQu(8x^}J&$sOKG~pPqM2r`*^D&u3;r zD}S6_6Jvb-Qoj)Y=^w@$e3K`?cpO^ipRbcHIx2@a#QGNhWqr#&mG$j*d>DGpjXe^cjocZ}+X zUic6DNzOg2{|_j$eI4f?!%3GOv^%Nu58^fF9~Z*cIJ-fZ*uO0NZjR1FUWBjwoO6KN zqla*)kaH1xZl!X}N1S)ugI+oxnE|bR&6A+~HhZ7%ZP9!O><@54S&(8psGVyIDR0lK zbY9X`G~e~w5!5&z;Q6=@3q29kIcl{1>!ZKyyAArvz6XKo=PMkoeM*1K(?0_ByzFPk z|41+TV-xgKe{^$<`Y-c7&qYTHlh3B?{0RR&MKsUrroos0QXl?!E42Lgeo+4Vr14Aa zoE!gr3tIjDz43GXcT4yKi!3fC4k`=Yb2{4o9`Fw<3;z#AxB=}^e(u4*xBHd)P7D3O zcU_|8ZCxOH**NN76vk1NUz_r>r=9yt&uFY0wjPpR-+KC=LdJW2Q1Lw_B))U5k~pa>$OvgyY&*`XWjoHUV>`~N zrX5Ppwj=7-w4>kxKR=eei7VK97f|*Z^Fz{q~|X}>~7~)Le?MH(c-rBKB?)BGd9BE#A zjdJgMXse#h~=c`sWPM$axID%D)RruP@+BuOFaQ4!cs0^9}rA zCD%VA%sajopV)wbA^uylR-TX&( zM_=rYy|Fv{G4ipF$QLJ)H;2z(3U1N)A9Ce4>`(BU13}f#J^;kOsh>CnZT&5OvHn*5 zrPL$7-B%E@ZYKY5_|kJcwDKJW-dbkoDv3Y*eI@C8CHZ3FSqIgJe&~gMj5qX~;(D+@ zqh9k{)yFyynsX}rIqmgw?+ZS9fQQ3Ze$La;k99Qq*?LWSW!KN2lOCfN^HlP#vhX{< z(rXLqm0rEQ{#_mSB;VcP{)Bei?D^P_pvU8m&yr925a-c{^)dSJJ_zlw@uU3fp^p$d zC-2cZ1p1D$@V>qB_Z3b5_aj~OV9&Qd`P44frN}=EzUsRJTJj!sj9pjUxnNxpO>cyr zGt2BbPD1(UujJiLY<+}35`U7H`~UxmKLA?%5zgOVh`uIwv-&yfnnfyqi^VLz^J13Y zweIr!VrRt_8|UhW;ocAXc|S0&=J!K|b!AQM|NljP1KEjn_wvH*x_eQ^Q9F-NKk>YX zamoG<>>^~mj)m6v<$Vjr_c5U2>1psazU{pWjVFt1`Qp}FHH=$tFQ&NlP7ULh@-0-{ zdUHYCiuT)R{9WfLUxPYdVZMUi4%9ivE}+g$4g_^>!n_3^d&56pNW90+q~8we{N!;^ z{Wr_$IZn?5)h|&!THsHT!#b04*>ThlIwt>G(B@fjy83K=J@$*20L zKQXT?yqBW@}_Vjz4X5B;n*-roD^m6E_{H$+4&Ru9P^K#;gviVq7J#O@R zW_Z2tIGwE@d!g4lj^;no!=8HxcS9c`>mP86t6x?T(l2WWlZU0kb<8~ttbd?Kl7CK7_*_$b)_;j_%EI?c)b4EmJVJS; z&mzD4;&rD#aGdA(qvJAaANg$``CKY|{wBJ_`KyD^r^5FM#cu`ug1$%M>DZa_+Y4#m zUPAOD9?~DgLHLYM@=b@9UROJPizD_X{V~TE9Nz?AOxgQCq|b$(l?oWY(BFbDrGlTG z{u6vTW$yuy&T|Kl=ke&#N{D{jfYQ(20}y|t=d<@Kq~AeKALTgJ@odLS9C@yvd?gj! z;q-mrtEu1#r@1Gad@U8c>@@eRldr2iPS17xU5I`S3qt+Y2Blv|A^h$_+OZw9^y7X9 zH1`C+5sv#i9_Dx~_(m$2>hu}ln|i+C^hMxXso-*_uLa*u1vfc;hvPFs^x)nB_S0Y5 zn||rSkl$E{9{Q_S(~o;0(5)OdcI@KV+i@50om9}@>Ak^s^*sQm$AItYJwvAt0cWRz zBb`3h@j@Z`T`NSt$3fZeZRgJwqR*GmvfuYk|LK^l7pAY`SmM~yu`T$%zK`wn7T^bZ zuHKX9Dq_#-$c75wgW zffnq^kMtfeD0!=ab5lW))8*jDsbDRqTRL_TqTlvH^cxLIzoVQ#RfxQ4(9-XGr!RNB z(eW8rtcso+MZZv($b1@|~T1N>6oFLU}C#}9<)_q7oH zme&N0eya=Nw-lmZduZvmsncB@w{zUhac{>_;8&?&f2R)uzfJ{5IDHKGO)5Ci>C?b( zQ^DCzU+8#?5Iyb}qTidK^qc4WABE`mC$#jdmkj9@9Gg0>?%2|?1NdDk=;(A8@cUG- zwbR>yKj?c&PWJ5kVs-r+dI@dd}X9X|knO9h`e{U!K&D)`>%UmaI!80u3jM4yd8>C?;kI|NqL2b_My@l7Fi`bdag1$qF2 zUaJY=mkH5pEokZ0(&-M4og8~P?&P=^xJ)`2;`B%`kq#z0ttFB6U+Lf|r;i5<(}6yH zV)adPyjF-F`V^e$r=^4Gr_gD94Q2y79jFZW9uo5VFjlt#8L5b6=gALQcI!?E8>?%aRK0@>x1xmjooPWF!d8a{3zq6gb z#PM3k+Z-Qoe9rM@FqID8bb2oW~~{r-SRAwtZ8Rw7pMG{s)}@vJgE!5GKAZ(@&^JiKD&ur}V9Szp<^5^7dUz z>9q%R)3kj*3qJ1wCYz-Ldk;|bcxVN~gT34&us9t|arz{%BpsaY^f`_<2+_;lvzA`3 zi^e`bII`~{y~L6G(A00=#gty{p-a=jrq1sKmZigek@EG1&ZL9Bp1vDco(}g%N*@B< zJROYm^!*&!A5ky&tg+Y4p!DJ%Jourf|KJ#~Uy!^8zK>WQdi8X$s`HzHEz&{8=`}%3 z8vk*+4Y+1H&|kNk9Q_q~kX$PrY~^%M#{ok08ZAVx6G7>7mE(P${+#3MLiCyqEqmF1 zXYF(_&-vei>!gF9owj|?y6K=E`v;Y42(G7j!s*7~e>6`xy}Bd&AN1nBH+l^QrPq;; zXLb%BdJwv0I(XFiPlM~HgBP8C4Q!PT-f{XvaD#O4sncJ9t<%8|PXFe( zvi1$=l@X#>M^Jk0?l{KNk90gyh+bzvORsaG+oXewoNxP^w&~znr*8t=rGq=1z7NzQ z!1gEJm}f7y|J4to78M6X8d7o=BP#~!|q*xhlk5WV(=mR{qaJEVgHoqssE zQ93x<=@Y<>)4{1up9OA`4lZ!|Qc#POtDL^Uai$QxUKBFFe+f#jLf;>-pFxjCzCS32 z-Ygxg?fmt@j_IJC)0=>sr-Ln>?gnm=4z_W62XM=Du&dL1I*u2j$7CUTTm(vwTb6;xN7ox{2 zLiG3+lpYN<5yM}ZeSqXQgO(l{=$?uz&Tj+uQe1I*b8s8Q6{mZGT9o#2dS`Ikbg+lh zgB%YOQr{FIda$2Ck2{_JkPtndgq9x9LvNQ3UUB|gV4rmGzSAFr+oyvsoc<2nAszhU zG#8YUS|ry8B{${RT!DwKj7NWU_ecjjI=#E&SRwTvBBcIvK-I6mPBXqfRc`g)3oSe76+NSM zB~$N@rUM;~8m%Khy>F8abd+Yaj*5b$HX}L;F#Z3PXrM6r4_)mr@u z0am|U$M`at=@Y=gieFBj1rAaCa{5xoJB8Tc zVIg*S50o9gasF>Y`k_$!1njUJ`vobpA}D?%a9BDhcDgw@T=C55^}!K}XHIVd?xT3- zbT`L6gy=C$h#p6S(&H@WUo51)tDvRF4bUUg!L81}8EJb| z-vP&@gAbkl)G_dVOG6=gtPM(!O`N}#5IwemmL5Amk5&A2{+{4|>0q$a`+(}Ku})6_ z_g9>AdNMd(an9+J9WN7Nj~j*P@iZts-f{lNLiG3wT6+8dtnb_TUC+ylP$g`+`z40Zy1?F*+stDZZdmH!1$ z`@(lY?F+wkely>{b$1-^c&X!yjtSqtwQ(Hec)H_5j^8*o_kG?Dj^iB9alF&{X*-U`m^yj`p`tx)l?YIPfgG}%o*sm!3 zu4lG?8|ghz_-fbk^sCy%^G5oAL+@XEpGJK4*R+rOFp2t^`50~Q4#<-}V?gP1fDnDK zBl_F`Ka~l;f4qx-S5@_~?=O@-c5hPpl(|0K??RvMt`E;U(Q_D>)u*BBBaG^^7WFQ~ zeSuc!Ro~y=Qv4bWEyT`o{XH6f_FjeFPvm)R+`S4rmyq14r0f0!|5M8S3j02w?pORz zbYkU9_&r9YKSjFkSG*0X{*Rsh#pwk5{TTmiA$^cj)B6>cU+;hB%dc&V#Su;a7QY$` zlg%>W{ad|fx&i4;GQp;x?A{HOylu$WOZ!7;y;nK_TK9J*Kr7#opz<9HU-_m%D3Kcp&{&Pk+eMe-Osivj*uswO=A#_p!|ng=ayl9hZ_`nwkH9gttRWkLbAI zo=8&fX=T9jjJ>~w+&0k7GuA)IH-8qM0AKAtQ;1#{3z2&#wCbG+t$L&Nw1h9YBgrQ@ zhdDkB>V4Cf9lvl4@MrN`fO>y*BgdVD)Mw*f^-Y9UeMgWkeeC{MOgoDumv-XUw6mQM zeds6JnYADNkAAd+`d@MU(vf=`@a>+B^x6tqn7voKKeY7XoDscF6k@Mw@TDL3FVH{M zf2GG-s)zLUj@_wO@|dU5dpG!!yBDbIklI03OyJ{$QukT{l<`< zuU+jjK}+&!oOhy}#`$)j`k_ClalAL_?KAd07}}4&qxTe0@-G&WztXthFk|n#CR$~J zr#zqepY(VKTIusBCp}~By=e{g+N_p(b*x4&r7v#1PE)(-ud8Uk>}K&ycD@(8sDA8) z-DW|{zSxWY`^eM3Cq19ty1CtCzpcoxe%+P)>er#5>KhNLzJp1Z{Z58fzn%%Le!UP> zy;p#}n%exp{chqS_r6~cBIjLDa^}F7-rqq>@86(RzMkR(os9vdX67k`6#)HP$Tu|eTxWss2d@;@n89y3l zX;9;=5vXy-K7(<__+p&3hE_RyuVg94jepyve)zY)s`kT0upX&$e$~38%K264+4(iP zZX2y}$G*1#k>!8Lt&)Lb( z{bT0obV9W9uL>&PnxOKn4{AKO1yxT}zZS#=m1iG7e%85QKTzeO`PU-9;!7(~dUo~v zyEr}E>9Jr;dDe~CVGBn)C((NsmS62;Jx{sGLgd@JK1NPf5B6#3(}Qx-yT8+BchM8z ztNgO?weC*~S@$;K-GVpkbJBU2e>GA1{QdY?-;YZ!{hZt{GyglXgODTnhr?HUkAs$6)}yrNYG~Da8?@?;)`K0; zcW3fR&S1x5;IHN1!PLH%^6YP)1tpJlHS#`!R(;<iSdp01y>fKOCdv-;R z>L2Pjm2}l_{-b)aJN3URq@A;&Rqs6VslHzwQ^W)5SBxIgFV^2w-&&qOJ8n85PvyD` zld?DcPx;-TRUi96>cP(BI~u<7oeE$1&Vg3GOG%er_2EbN*W(xLuVeK($oI+0hkbJP z$p_bRpDa1!T#ngO>z8S+Uv2BJv`>~Ed(uA1!(X!Yq1~}^CuhQavc?;BX1rC}C(EuQ z;S2Xe-cgyr{7?Fy2(5jU?XP6t8$92=pvLJ#q#vCL_f>~w!uM^I??ds?=W|at|B$|` z;1{Z=A?4LSD+!5%Ym#5*8)kQ%4>1qWzZUo8rxy3*Hz$!#etNzm_2Z{MK+8YtOFr0= zdZd4EX!%QjX!*$yXz4Y^(>b?-J`!4baSsiQwc`o3wBw1jwBt$D*iq?GJJv~0_1oUE zS5o>-#D22VVbB%MMNY$>vfEXp%O1pW`kQ`FN{^?Y)!(zA)!)P;?D&zVe@}Y8_4+io zqwKjA`Q?|yAN+DCsQSi(s?YZM($nS{>1lo#-RF0xW}h!PbErppe}`P@{TsCOwtc?J zSGmtuxk~$dy|fW)_rH6)zWax^OE1^_Bm3)@rPnUvF7e@Y#*@bDTu|d|9^*>mh4IBW ztF+J8IID7>uX0uH^OwN*`nO$ST(onUfBP#wZY;v})I}O6j3b+0HI8QbIC_$Cq;-{z zFO8$w(3-DUPchFjkC9%$dPVbWk*`~#>;BQ?*Z$tt<=Wr!T^znIFd7tpGN}Fd3841z z7YG^0*FkF^e>=4FngOl-{47xV+H-H^|CV&k+xGu$%D;Rf%$EU`kMBC7Z%Z)WzF*~Q zyYJ8L8#=0e=*ND6`i4MD{|QdpenIu0;`yTXX-PiW!_EPOJ2=g{8oB#It32|Mo0S)p zb2s^9&sRX{k-$#+Zb2_c{y!d?a~1FoQ1)03xmpLWC}bVnT*&`?_d<@oFUfj{?@HRb z{9wKB1+DM0n%@Z7UncJf|EC=O3!?e{r0vu6{mC!LukTN?F9i9X7udpaT_NA4wC|?r zyOhLV{zuNf8!%S?2Mn$D@8kK+UsT@iMF?+pesq2cSWn;o1hqeTlzg(s(?aBZ4z2Iee+SCXRw@YT-G$g|Fety` zeGT&2`x?q;-^CaIO7W3n@2v}8@O*EBs)zSDxF7X}knfG!`y7%R_2Yc!5tHekyZzim z^<4|C{nRZ&^m_nW^*rMkmD@!8isvcp^Qt<3IGS|TcRJ-1_bw1p&sFeMPc~jY24DK% z@92{T(J#!K>0-M_|fb`Ild@`04a(d7Lpi=)ZI(!oPYPu!jf&r!ACeHS?zC-Xqb z;~bUo&v&Dfx-7hwkaYWQgWBB@{}Ap3%D;~xUH){QjTR}y?cKFPz+ z7+>|}59n2jUntJ33#~ZQ4O;Pp?<#;3;499YhW};Y`?u>EU;pPUq&-`M(v$BYB%~+bKcIj11J&<`fztOBA^KhkEq!l+mcI5L zko5cpzA*f*K`L0SUP!MiMBfdBe3!R3eCapHaiZf%j;9OJ_X1G*+WS0;H@v4qxp|Ha z>WB2|j_ZLMUne_#wc|`jz5_t{xuEhT6gX-BN{(wf?%+7kk@xe-_ln~?j!}OfgrCmL z`1iDm!h20W`S(#C@q2!|6@~Wayw`jO`Z^y7QN!f`s6!QT$l|7C!W>wHhhIMgevVLwAFKJh;=+@GBS zO75AC=GT&Iel59tUj(@?fbx$yp!{W?)6w`-Wn6oB3CA_nSKGMONd1~nxhzK8S46tz zPg@sg{(Krg(0%jRd3NZ6d6xYd${BLT>U>be9edU+(`4G`GMv^=2zyW=g9Z0zH{yLZ1QV<{KIMDUEy0L_I-Tv^FNIs zaSyrp4fE_^=Z}Dv{QXFmoHIbpvsZwcXL-*O|C}krkDe4F?;~ia7x{~{250Nf8&qAx7w;ZE#E6uaz;W;+<>o!z=?$-?#QXlIv@Kj+! z_5GK0&9hg*S3S4FS3T4V+B_(IK7y7$(YVu1{G54KaJ~0`|Yj{fca#l+ZkQC;XQ);dl3U^84gk4}HFpCDee1~u<>1toVcN4~>_ z+^L}C+I!@Zd%I}*`7uy(_|6t|G#*qLXI@&uaYpskHqO|5r*c`0w$J80&1aX;uNCG! zEsty;fM2i=C?{RxIJ+O+igej|8~8DHTN}RSo$kWq^5MN$%3nb_{r~X|q|5HNgDU^H zV^qK9@by21U4)6ZGxpq#|0mo@H2?QE$?+l~a-!z}?30p5r0skn@lM9RJ5O93Dn9ZK z_42eIdG`xzEJtxQE9VfEL+-IcpGJDQ1E94IJk05+9Qu`czmFsH82sehj1_m00iuHf}Gc0I~nkL*1^_8XKpy`}GVPP5*G&w7(~ zrjb`+f4{3};^8y$(`^#5#7`h4Q}qvM~BK*48?f*@%-$x~OZZf~$ zWuLpS-_)Y;y*1%SZqI1>Z9U%rM_XsA{WkAP&L83@-p|iItQQ@ys1 zQ-0QQ3GojW($45UhIyTK9Skb2Ort)ZN|-SGNA+$glKMU7!CteGRDmH#`49r=R!qPvJ`r`y9&GS3k$K2fHQal-T(-dRu&x zolikuA@e5vaSy0=KIixWsQk8nQ+pawkL*(F^|5||-q2}lpY+&8GID6gZ}q9K0>~lj>mbKa6EpI3Fk|VN83-RJwKqo#-qh&jmKq?D?izRdgLb) zq1E0~9Bo~t_P$EG{D<>1+BX-Je&0LIeiC{OP;xc_1^lGE=yek#Nszj%6m#+ULn0wu4x`a^{{RF3p*U;?u$j^R{e2hzIJ9kz3v(S?BJ}BD8r}9PHW9tCvHQx2K zaVXm2i|k?JQ1~qALgs7QL3{&OqkiEg)T4HF2BpWgj(daBW26v0u`~J{=`{XM{8i4iu2(P)USEa`deuI@lD3=uO`0rb0Lkt&&emf?YW@F-%8Y@@yEIX z{~7^Gf73^Jk<<4(65mMw*l}gXi~Ps_-%xt-+zwvP5ZL;QJ8|LSPx%(7#eaU?k{y;PjrL?0JOe<6N0? z(ecwpc1r5wB3py^h3n(w4}Kp>N)nfolhWb;(CFNMmgvOhrSsRDW>>X$1KEjk-M}Ap zk5EXyLxcs}mD>A>(43o*&*l-y$6u-U9bsXg(%?f+|H^4KA}HKm?;i=#qYF-LflfMV$p}z~G_FPx(XIyQJ9c0h$(1qpU z|7y#gBcSV*hwDn&^BVFAXTz7j&x2OEZ=t1MQvOLl6ydM+%ft7Pm47$*Le{n9W1WS+ zPXY_d!*Q?k(DO)_Jud_0@2`-q^#k8!2amviV__0Dp91HSy-o`Z;= zkRRgj4TSi6nfqmH$1aX`{w+QGkx%|U1eCw;XX(24AViNT(DI*)jo&P|)A4!7IgZ3< z&iD8(I_1jTuUY?Kk6w;_ogeL=jN7@Azc(ni`@r-4J*obsA0)4mzss(5_4lKwS8?wI zA^pU;b#k)4b0_3nnRPdD`ePyU*s}DO@-uG|A6wFIN@x8_Tp#50siZ3(^Eq-ahnD}{ zCL~_pAwpws0!|MQFe$oHxceLo<-))T}H?C>+`(yN8^U>>#oQ>r}tUu5~|F!WP>_&a_| ze5XF*I%s|_KfT-O7lrugYeM|=OZe*7Li}3T)Ny^sc0&Agb5MTT)A%|k7ordA4gA#p zCsyUBS-PGVJ3j094k$luioYt~`i>idDj&6HhIY%ImHcvrh+nRl$1i1{h4M?qr&{@? z@|#~Oj{C;}Twndhy1yr=`+s9V-TRvWcJ%jiG;X5nifc(%yqp6zEua5f-lz|;xFee z$-%yUDlWI@u#6Mtm4czA;d6SWpDmg=cpdpQ{-5-6?}0-~ZT(BR<YW2EeL3GC?*HoP%hFEKjX}*9JXb=$ zmd@YUacfVX0G5=8>t^AN(6S%@-%=BMZK?Jal$YCmOZ4m~8vVv%2i1F-u<)%SyMI7? zK82P&>Z7;%xv`M{7vB7n*JF?A&?;~HpyuUf59E98pC&#ZME$xo?UUc) zMOCFm zU86iW7Mk|C9;{n=E{Y%9eH`b{bK3k>`mkO>-b&Js=bceIcJO+)b{qz(T?e5D`z&a+ z{|so!F@4ouJ70dvfqYp<4$yYr)}IR-?pOB-_AjlZ!omdGH0ObD1AJ-PT*` zPvQvuY4=+t&(>3-vwCxmLqD(&r#|9vT)*CkUb6cP$H40`e;5B?(WKuB%FZ8vvVV&D zrFW_07G96d2eRkW@HIcY1j>FNdiuAZ^!fw7>{*|2t8`o6saz?v`oZp72)XY_zBZux zV_EE{=S$e1=f*9e*C-30zY2HtcI@Lg+3`&Bty>=Y<87Jnd579%^QtiF?@g7T`>30O z4`#yuZC6|yggli$4!-88i$KLQ_VLLbb#EMOS8DI!5$_nUiN2-5@9-7Zh_9p*U${@x zO;|7^6P~9_{sp43_sx!v3+ew4g_QdRY^n7cc2s`$7sTDoobD_{51wn0pZJO%{h*~M z`&HsC^EK&*IXx9re8o@Dll?3CZ2l2G;OTZxOM0`9CH+0}Yrpfk)AVPueQD50h<@~6 zV!d*^w}l;|cFxZCc8(|g{*S$D0kd-Y-e;zfh9ac7&zv*Os3?k%gh3@Ll8}U`=qBl+ zRG5^CLM2Lyq!NYPqfok1enKch2qE_nivRnr{eFMVZccM)x?tw%>3#Ov``eeb)?RDv z{q1ib&ZBt5>y%@Bt%#k6Vm$+y#(HO{@<#wUuKSrrf1eZmbt2;X_nD99_?|PaHvACy z#(pr)CVv|P$+woIqg-ns>u*a$`yEI}{XLmRzXkz0-kX(wr_!9KYBOeiCW(lfX|{4(%L8IlxX|2;_6U znXVgg@9BV3NJlx!nSK&R+4{--Y0|4IeT32$zo4AGFGv5+6a8YAgI&HwUVTKk%`#(ALT5-|p#-AenI~_GaqueUis1dq^*y@-xt_F;BV?*8} z&3v@`0}49hKjc`RL~$<=@OS z{G{!3p&b2c{Bh2&vOjMj9b4b6YdCJ7ulf2(>>rqaIN9?LaaaeCpUBVGKY(uj0s9SG z`-lJcljsNeOgZQ4CsDuoNz~JU`~=_f^^?dimY+OOeiB$HK49P3_|U-PLyY)<{CxQU zy73`CFCQoe^OKkl<|l!9{3PbXBN+EKeiH31qCTPC?fOaN|4#lw4~pa`@t(x&6VT^N zLGybS^nrG2k?>O@~Y2N8T3 zE9Co3=6@jkjCAy83laTIL)=SjL_~l2ew_K264CzUM2x2!Fn&-4`+h6#jEH?l8hiS- z`?2-e|BO_3?h^gD0BN>=De2hvxA>w-By^+bUyzP+-zi-I<6`-PIX?7*_LS+WO4nBU zIHmXDb696p1ah6#TJ?2Meda%K4q=k$PZH6OGO8z$^`QMDiQu!vAsAO@<@X>R{kTDC z+qXb^Z`Qxn`i^#w@;rig7VHl5n?>9?8SpWebUf$lK^EzVBN#ss2NBV~2Z*Te6(Z!m z8c06;#5DSw$$kOP77iD3K9kPQ$q*FfexHSME++&{$3UN zQ60#3k0uV!2;D+D$|aU{SeJ-$O@J(S4$~OtrAl8(#B;qxAFA~2O5aZee~#n$nr~|_ zg87xhaiblZH_+D!EdNrvi=&~R&oGVl=d&F2*!Y$YzimE(ucKM6g1CcNk{*=FG>0* zOoRRf5##ulh<^VtUM!Hg;P_7^8=+BKxk5svFO8ffm%kvKM zqh-Y6YSzPei}mhHI_B2_K+fySnEoQe;xp>gM5fP)*n891Ie0%zzMLCz_5%Gpg6X+w z&M$(`oX4@SJN<}g=W!tUKLq1tIex!IK5rEAcjcJoc?yzS0r}ia;e67e7Zt%D>c81X=zo~}Lc6ty$UmBhc25HG z`O}z2dyIG4{&`CK?Q@=+y%2U3nw^F`%rArQb4drjEo6Mp^d=z3eLCyMI2iBnob+u> zV?5J^+*f6}Hgc+QFAwS9fyRHRuSzr*5q z7pUADqOVq(^NIQ2DebQ-PvAIUf4SZub|qrmTvrg^6Vg91ZTtt4->jGM4sjy$+u*$m z@uG;^=Z78tis_3Zwm%+MAK#s@A9%iv(Ch)yqm^cS&-z{vE))JrY#j+5$oULBit_@` zS$qJr@410I&q2D~BLM#J{1WR6&YQoa^oK;$L%%~lZW7(jx1v118{>1Snh%F4&3Q+F8QSR$oFzA$MbzeTkiqKFpc_uB*L%oyeaWnBJwu~v$!5;hV$t}wA%<6dtf+pH`6GW z&G;VJkce`Z5mBx)5#zj3Y2I_e=k5}Hy3(_hewhe=&3P1i^|o=6%`ep7gnR;aAcD_* zSRVVSLzxDj88@>1=|u2*7BL@wTY1D6Pcgrz+kfGH>2FK}_Xq!2Z#MaeesyLV``42# z9SOZgM7h1hU)!exAF3nG=gc1?-{K3uHzB@Zk#}*Yn>ojrgts#>IMi5_@gCuFv7Pv93Rth&b#b zmcxAONW{6*fyCZ!p0J+1Iev^INtgvBy}7Uz>F8GnrD?C24&w70mG;*GUD(bg?%W~o z`JTo!)&Um(V;x}r6YBtr{}E?fe2VzKCEI~~STFl|3laU9FFN;2xDKd6exTo{2>E-{ z+^_F0974o%qlt*??UfmJohyb&;6=&8O|58pu&?po1@D}9I3Q;C>=KHut*Kh6Gr4|g%sh^K9z0`uGCjPJfC zkdApfP5gVAY1pyXiJ0e%@7N!|e$Hp|-~39yyz6X^!`4~o7xjkgy?7w)!2v|HA0Z;& z_CL^mEu{HeUDDAW=NH>QO=-V#w@ z>&G~*Wg7L|!8FG6i1207QSM!)(cfUbcLeno^c?CB#>4k&Oq=~hIex!KzFsAIAEq%b zdoPIcPce=0%@w^U>pAMn*6TT@6WKq=_h|MP_S4pL;Ac_RbFAkQ_6POk0-3h=HAp|f zH0qs4M7_4(gS4&Z253D8Y>0Ui+ac_}LxKKTyalv<8`SeO^TDSDL_Gh7kp6?|ILHxzhV$-jZH}^B4N> z+eur`_1AjtI<4ov3%m6ko?8OFifyO$95By%4*7n4?N}c5=KYoh8T_d(-w^**6$#Ln~ZJk&w#7wWCfenIcMGmUd;wqJtsZ_@t=orlTVilM-d0+-QQ(DeEH^}T-3M*-;WJsJvS<@LBB1o z!8k3h0h<2;y*c>_%oEojU8K0?QN=Y^go_r}K#msIpr01kpxycG59oJOeu!&ok#Fd4 zBcaVxoY%7NhJn0?hyAyCi1=g*)3d^%=ZNUfd?5M9`|(JBS82X4;B!A1;`cO^j^{i@ zT$4dW`Kp|+`S73d9Q&0kq@QAaPcx16>I=eONQZo5I4)qa_)R;?=gt2BuTgrqkorwN zEMpq)fz}HvlP}PZYSQmo)MxbX1f^|15a||7qrG-QJC_FfzU4#uq*kFayJMU30Da#m&J47PbLxlI-Gb#IK=leY`-Sr7UG#il(TyTQLYox^ksNk{(^s7Dx2P3kkAxBYLV8!2u2hH@5PV4PQq z-kZ;19JWqHdBzzW-}9muHZFRZyJpkIHL2?SP!6mKHrl4!1L@U({|1a=?9rceNPi1pAU&QV;wK7hWQiwRM_3uhw}EF zB5)Ar6>vQB@%(fmo_|JY_ctK@DbuKr>u8qSqWpb1ACaFVjBq}Je}^#*y*ZwU@~12R z649>`-k^MEk8$s+=${f%ukXh!?ir@I=N8318^bQ{L3>Nc_a_wh0Q1B>$oK1O$MUEz zmx%goz5w4~8ueP-gXcI;Sg*xBz&vpe^8NW3?1PiHPHJiO{#9MCg^pKl#iX zdv6PUH@|@WE}I{>YMuhCQ9n@M$wcV!P$J@5`olPs|AvTi!G4UrCr9}Up%0`7`!Ua0 zTIbr3&wUum&(3|L-zPE+dJ`hjeU%zu^)7H!9M(jN^{cJbV;pc<#e$R2D{9)Ad+am5g5crUc zc3IBi{998(S3;k-?s`bbeG5MKHjw)i9}_F%yetv@iQNnN7*|Cg>4{47K3qOmpL9HT zp3;{yjsEo`qWq1d@(=S zIo@a8y`jWq; zzw$ux??7Puosm!q@h+SrQu-)h+-JCdQgrjTpQqS8a`9idb2=>Fj`^LF-8rW9Sa0(= z%r~w}%8Yg2jk4S%mIGQGG^X%aSb5h({jn3%-2Uyo5qFO$@MiIu>wVrc@){BMD}G1Z z%gK}PJ?oP1NZb3)dWa*$e|Ij;eJ4XXm>6Oq*}4RB7z33hgdpzkw0Tb2rYb!tyVVo<1Nw1@0C-g}*IPJw<(cq@GTd zo&tA^o}yjTQ{X>RPp3;yfrZsm^NX;j{b*NVPlw5#^1DOYn|pY3U-*0wzhq*9 zv%NaPQ-m#rZG^pqSiYJ)Wn4f%n*of!se(K2iTCtHpicpv_T8^PiFDk5Q3V(~GZL!K=Lg|Fed43|-k15f7uo!H_cV8& z=s#3XvH1UFG5P{-}*kYK}=s(#Ct_hp6kWs}F{KfW}Lk8wZSJCoQU5^8Jo zy!Sh>eXduTKL*HtKEyQ6YjNF8I`=!`FUR_m`S^~e4EtGI{sZym2}~o-=6(_HHR!`M z=ywWdk)9l}bq(pCBhBwRejy$8ab3fH#KP{fy}fCV(T{_fM*p*EkHIgl2bq7Y(sn)& z{Axxz`g@V+wr)ZBYnev=G+-?Fv_kk1=~&l(L4@7$`IoPLboTTkw}AVQP~P<8r2_N= z<+iII$j?_l(7x>lV4OdZfBt<)FG@dv{`m6Mk1M4g^F94Q`=%er&sRS{H~r}Lw|?x4 z{!q?UiO>t%7lU40D*6pV>Id~=hSDpATn~}X?{=ss$&?%PBn*s4fA}6h9_`xx0QBTI zrlBXN1F0uxDc|-*knTb{^nmMF>d8QryHz+*`L6>DTzqZ~-ece>g&3bNBl=6uz_nPw)WuDA%?SGi=?tvNZ zerKKW#t_y69c4&$UOI z&ov<(>3qv)7ry+?mRlyr3H^`8pFtcq_;Wju{251t{HBnO@!38;#=Ds5eB@{SU*+Zr z`ClJ=iC^u`FH)|9nTA~NB)=fnNko*JA$%N2IjvKg-@8z*v^(riE#iCbei`k0Ogc8Sm5OT_b(H=j3oW4v#Yj&`?@j{Y1-dja(A1IHKpuCoi| zqaP=8{>OhBvG|+MAJ6oUW?$>G;`fBZNh|(_T*6y28+C_fQuCL!F?;kvQ|5(EE{>hU!(nXRt$`@AN z`SNv>$JgIHdHx=Sub^*Np2*)WU;py>8p^b|uf*n2Or|@J2z_cn{YSb;d`0=f@-^Ri z^ylC6$j`4#ecvZDRGa#aa>p_~B{7skygI?%_cS%Z&aIQ)R`gCp(0c+oZ>-)+%WboN z&iZ28;CpnII|A{9p5wfWJ1^DzFx!8Q^!+kze{> z_fK3hcSJ5#Lh+Wyg$EdA%3fJ{Cy_lbn8R|!RVrFPE=?m~4 zlCnu?nI_ht`U&>aS_w-5AB!_JA4&!PDW@T z>3^n&Ze{xU#L(SD=-t<(!(W8rfw1rU09o%*Orzf8fvmSZ5#zd9I9>RHZ~>6x*Z|}> z_QMNL_M;Mz{Rk5=zm6mw^Rph1^>$(!?e{05{hNR+H{mzH8R*y5MA)zX%-;e2|5xhAG|#gSnn3>5%*-2q9iHjpuOJROBGck_&a2KW zAH-jv4`+SR;vnP){yN`wixKzrMtjtQ!R!a(Li!)ZfA=treobRO^nl-mFyGc^=r_!e zje9>J_kVYF9Cil%9s1px{tod~Cm`+5)l8G0%tyaRkq)~yQS@msTe_KOjZ=V>2t_jbpR{Oz`X zUZ(Bu(9YO7C+KMl&QI8x%Q-K5h28H;U>vmL)boMN$Go_OSTo7mr@f!RH0=E&M3kQk zr2SdQG|F>-gXP~LqWnihl>ZXQ`Slaic#iutY{&fd&~5#aty|B}42Ag|<}Id~*$>*0 z|39bECez;Q#Gae!>KVRmJ?8&Wj{9LOcT7?0yRC%l8&&xFDrme1X}lKyAN6? z@mFQq?+h`Hr~P9*`~>s&kA#*ojd=J|rYlC=Id{a3wq5|9%Jl%saUYcTES^dGh7?Hq4)ME+c<9jzrlCh)5I5oXvWVqz4h!oG#_bij&KMDP=eDm4+qo0Yi`t|g zn-n^Mh$2C^SKZ_Iv_#e`w~yg!EVeh!f1>L$FN z`IuiLnUDE3j&#hsNuobNI_B&1qVu~@_Ty{P(T|@*PlY34y@vwXep4XZznp2*-_GkRI^_cxZIkP_~w_W?=*Eg|*>zh>g`tr3u#};6JAZN2b zBV>PW_3RJiZT2TD`vZN*V}EXw{kc7g{i*EPpM)s(2j$HE#9?2LcEz_pjbwjD%Kp@s z{XxIX{v0p+lagWgkMp}oySEtj=LFi5QJJBOh@-KeL^}h!^CZ*d@SQW$usgh`BR(GY z>A*g4Ueptw0c5%6#F&WfW3Yc+m=C*iHR*RC-T=m)h3~+bhF;8J8v0}BGRj2k_nc!7 z!te2r4!g67S%}9 z{=>{i`|mOz{g0)cK>d|yCt!E#(@ubXzVIUEquwFRN4@+Wo%KGZe6ur{cPp6>yR=66 z>wxi~|3W(E@t>k+!H}>YjezV&Tc%O22h*@S+*e`!fNkteVcuu)JPG59fk3|38p(Q4 z?_EIh?SAG*sXzYi%+R4MkGQE8%a6|toyzif-*r0E*#AG9h*}e74K>^BYh6eQGaT?M*76z55Gj5BVk4UK@@BeC)z;pdA^+T?Mu}7;<5hWdrJ8~LfgJZ! zOe22*^C92YmHv=v@F`z;7qniQRX~5R9IfA z?rIznzq|et>A$3fUS}Hd&$~=No9WIO;QZOoOr!n-Xx9-Zr2(1G_wT&_w=HpYru*&& z_4QVI91-o$0LCr|yWbx|J#$FM^D9V4dux^cg^2d}-2&U;cbP0_@h93jhH1#x&Nri- z#w-Ur+*;*!3m@U9^6>E^@ey`?r|@xQ6h5N8lHw!ODirfVW(e*r6!T&xlYgh@dFhwE z^g^W<>-i;_cF$$Z+)Uelido?0zoPtCmA}lZ?=_`gSA8ooZC@+q4Uhho=qtVF-|^C` zln(m$p4xw3?a%k}Kk)KjQhv~%57ll@o~{9(0{TZDeXaWcab~DI%i(>Dl@I8jh>rIi zdFY>t-UatWBO_+D>g|^5>KU2p_O(6O#2=*W?+K7_lmhOA(X@XK?!!>O3aOzcT5jXuysYuXPNeU z^D#F$yA{(Fzgx!qHR|UX>Swb(te;)f&qv)pX$;P(nq2NxKRYM5aXh1ZoTIe-iGSx~ zn19RrbB*^4Pe0ZN^78cKt0?rZqtG`*p?@Pfeh1F_6U^K1)Q=$jgV(R0^xXHN2lL@) z>H9C555Ic(zj^t;d+luY+S#IZzVzsSiTv-?^`YKn?qn{Xso)d+Bis(Kc8i)^p zpRDe+(@4*q=Fv|V{S1%ZMD)fUy_x7uJ^EQu=q*G)N96;(YN`I79Yt>E>$z6ma~J5j z^StMRdfO6`Hy+ez00y~f2iRAmKn5Vt+vsFH# zcsh{N^Io|*D)*e|LAe*bayVyX?Y!X8=jr+Rq6g!_`J{^M7vgq{$6xZEds)u~@qREK zoWshuokc3Y*lVYQ+G(eD7JBV0(R0CiBWULp(U*GVmy75skoKGAb)y>jcka$l(2XI{DWUixeA zxea>mE3e$QUb!Ds?mLg((wi@V{5Gomk6!sYD*uy5$M5l&UIp_msOMMJ^RrhTzsqCg ze-S<4=Wkv)yvMV0n>_j-s@I6X&!G68fzuBYz6{UXc^IQF8 zH6Q-;p2I5G>iaW{*3o{zhgi|^{vZ$iw^yuDs|$xr$!715|E*kA9%&@gBXB z==+Ku*u~0Ojz5UwP5y6t@qVK6le1j@yUGvxm7@BB^y%^kK|0NAFGKZ(RbQ&t&rJ0* z-J@rT9`Wdhh+f5`R}($kqaP}IRgYdn^y;Dq{XbmkfM2!L|Jv$*O|PD#RL>C}{baX0ehcB)rzW7XTx zqn{!AX&$|)=%;)1GevLW(VL6j%%isu{VdUgako@D=>K`1+|KdpX{CD3_2{idKi{Lb z5&Z&>ezE8mdi1uUU*yp*6a5m=gZ{TyI_Ur99{<~U^>kD{9Xxtx(Xa66T}AKY(YuM> z#iMr@{YsDCL-eae5BlFr>7f7Dc>M3_)zeq?^!DieMDOF#2Z(;HN55Y5{vJJ7^y@tO zjiTS+(FcoulSdya`XJGR{o-L+Za)&=Nt%5R=r@ZV#Jz!k8?Jil$sY#gN2q)dZwK^S zMaS>ETm3;jw@0aGq{`#>X{~%9mr-87N2?rupD$0jJG^pZR4(w-LBH-4J@C^3{Vvf1 zKN!%*iXQmEfId$2AbtwycZ(jxLjirf=!jda-vRv|(c$m&&?ktFI3y2!qUiAFdFc0w zjyOIJ88KMbTAXlovXk>2fA2e6KK2bQ|2pkUkN5JiKDGQClz)$xkM|Xp-&^@(z5EHv zzgGFo;H39kP=@cTR**L_)TeAsuk{2t2hrF^`{u<>Dk*79#v z{xyH+2k$wo9QG}(+__1votOS@$I78Si!*@sJ_HzMKYHqYNIQJjpnlo=kl1whKBSl4 zhxATx??cMCb2u@RvqCv6KSb|CP+wD~(U0cD^OEfSZOpu6``yGCjEC>d`Cg_i5#`$p zI}#trvU8v@*Cg0?x6JQFdLQ?`J7$Xbh5bMq=W_AmhFvtyq24&r4;$xedf$^9Wt@Ez z+&HgIuOtF zN`Bk{-*?OSAJ_OF)A)fle$cHySohobZ`JtM?!58a{41yR`6SJ++cm%Z_ten)z%JW! z`{=pZdTwl#=kCEdJL>TSz28PXSxisVd)xA=XR_)U8Ks_kRnL81J(E<=eyZm+)iWtd zJ@>1g$zDAVsGf?dXPWF*AJv0?S7N^(bl>OD-Ua*!lOBuP7cOsvkDLy8u{G%#=ZItoeCVAX0 zc|09)`Y}@HA7*DcyZv02v)k9mZnsEw^W@oxv(L}V-_MbKo}1;)KaAG-hdUCSeXgD1 z>~n02v(GPNIs5!#mb1?<$?wn0a`t(?{Qk@GhYRHQ%cMAexG>AU_m5d5f4Dfy`NJ^@ z&L7^HVE1vv+=cryq$gv9__x zV-xJ$T+FzH&}^2wJHgI*$MnJPmN306E3}jd{x2s!mSDdl71J*{w36xNS@yePF|SE4 zQzWOyC8z$oNlxb^yZEeS@_$QC;J?Y~3CU?d6gj0yPMamCfrXS4=B3%&g60#-nco?u z^F;rY`Sf&x-6Iq84DL6feh2euMOJ7M)Bb#VBdd7x3H&!XZIPUAj3TED$*F?u{Gbw+ zQ!ClMQaR;s_rQOX(|(E0?hTG2r-JKoFpD*e4DEeXRh7nqi zE{L*DLqFQ9KNi0hc0G!7KjznO(>NDuoX;e=aXy>m#yLC5jq|yr{MX&jCpkYnC#iVr zZuG;(dAr8BsD#Ivt#OXhI2Z5waW6?@D$`kVK zN;>4)orrygUPRFQ60y%PfEesERMmLLXuL~z-*}s{Uvni_^s5!qcP6>(w60ZP!lB*S=L(?LVM=4c2>;>aD49 z93ww*b0O>9QTwyiK9T7w`epJ1n!ci6Cck47o&0X`iB|rVSE8!jW6J<@#VNgw_X5W$FSbx6J30Bz5Bhs81Qux>EP=W;>qq_v6zO5 zF1|Uz-7^t$QleWYp#8ZlR}S|l6E8>&EhM7-r9`y9oY)(`k4PMr;MNPPv|d=9Wxp>J z^IleHE%W=kd);E*&$8dui&>-fL~Y6M3hjq~xQFO9`el0EQFi#FU98u2#Fs~9uixBB ze5run$)J3Ey>63|zg|DB{mMr89X&qRSbBYi^t!3^8uOtm^Dz#a?~f%py?!g%={5Ao z>^1Z#m*t?xrq`z>I=zM-n_izTy?!Rm={59t9LqzGClH(9du$@?gXwiM={4GqBmEfh z@hS1~oqre~FG+Fs^Gy8CuEt|_^XVkV$9Iz*AHmOD=7XQcNAT0^1Ndot1V2YIAN(}? z0Dc-D!B68O_&JIB;HU8s{G84-_&Jk!R-)r)UGejA@pI)rjGrxJZ<~vs7?1Ju3Gwso zUBu6`#m{~8zOBFZ(eC#4(ePfk9QnU*y7O=4)APP>J3;wr%1>8*PP&uVNy<-BezNjU zRsPA!udMvA@*683=hChHQ`Ns0)W4S%KP}My=0e3!i?lDdILdptSM*&{LGR%L|B89s znB!lfeYqieZ*srhm!N-bnBO4P`PCOwonOU#=tw%|gV`a>2b({LKTO`34}F=x)O$aL z`C#)0^I;hC(Z0a#$ugTL+&;~xS`ThzZ_F;gE6GCsmynLUQRGCqReW^cgnNh}Y3 zPa&dS(|7QDCeyH2vqXQ22!792ImAsu4NQNjxU{L{_><(Ay_4j)f0X$CV$Fwh6Ww}#C(3aE$NjA0({mD? zJkM90e}Upt$j9UezL*?;PIYpun&#vPd7B&|Z<8bBZE|d>bt~j;ay(D#*V*p({e^-`v&$3?XO|^jj3+kdPtg+BjmlFbjaJ}2zh_cG~~UJ2zhTJ zLf)H+kT(v6{4MV@CGRbg_hJ8Wd0&>|=I@2trvQH@kZ*sbI(gTWydig!H{@>ehTLu5 zLhdGS$lc~GF>PreXy4U_#DQWOPrhP?D~57Y0TRZq+{NWBx2r(#q`GF?#I z5y!4$J&0q?z9Wvc`Tj$eoA2*vz6Wvaxsq!I&F92o&gX*U`f!vucChxFFO%Qi33BaA ze&l92`QDh}|cK7&6d*NU3YDFw{uOFcW@PIi1yM*eoZlk9jG z`Rxv}<5y@tqy4q)|NffK$(qm52a_xG!R$En!R$En!R$EnVKbkDKA0VcKA0VcK9r+9 zhdz`iLLVv;p$~~fw3kZU59dgUNjOJJg#K3}LjP+Ju}@x$I1J~HiP$HvOT<2TeIoYB zbBF^o?00pzPu`g6V4wUv>D_m-CmF@myAOAgJ^4uMC#-MVkdJF*Pkz*U=#OPjKGizv zGwsKGq5YVj6!&kGUHLi7=^f_zVAcmTdjdX~J^8`?9#Bj~`wZZ>=^gkziREE$rVwFo z%$~sBm_32LF?)jg%$~sBm_6z5t#e^-7OGu~A5h-x3EE#t`uC|W?hmKA_+f2=)4NY( zPoQ6BPu3}3{9JmsUV8V7;s@xL>D{kcs1*M`klt<5I-#}XURU;}{!Wtn%qaHeX4#u= zQS8kwkoz$5`=$&h|DhR9{#~_?-CcI4N1~H|FTD@AM(+W@Ka>0MX-@7Z$&Wx^OzzN^ zxvU@hGLLvAeg}#OeKEOTC3`b0!^t1|V)BQ+tYW#|vO9eeo&2v(bpE7gqO&(>-|S7j zG-q#4Omp@I`eJg2zL?yhFJ^C`FJ^C`FJ^C`FJ^C`FO{et&=<2i&=<2i&=<2i&=<2e zXwU4;ak4ij;5{{;!+6c!V7z8;V2{k+z#cVVKJ1a%8`z_!Ov4^ECl0}TOd{-2D`H@e zE|gxLBE4+%AJNN;^?v0Ny?-sPUV?w7mkp(tr|)9DMEj8A*3~2|mu^b7x8~TgYC*j+niylJ4v!?55dE*iEyS zu$#;I9PH)_BJ8HwOV~}bm#~{_NQd2AON8BAM}*xpe+j#3dWrTolHN>ud3Kt!m#~{= zFJU*$Uczpgy@cH~dkMQ~_7Zl}>?Q1`*-O|>vzM@&W-nnkvuMv?H%%|mp2cTPrI*cR zFEL)Tmzn9#Uczpgy@cH~dkMQ~_7Zl}>?Q1`*-O|>vzM@&ZML?XZKa>@D~>B$ME!h7 z=YxJIAdcHv``|w+j{8mP!mM<+4~}v5rM%Xpx^=_e+V2DZ29utR->V{GUwj1dC+&kn zU&b)KRO`au^}Y!DGKqBPi|Hly#iuikxXkP(_Qg#j6dNYw*3`ZhXJc zk>mSAd_6>b#kh>GABnFAdVH-?b+gA;yl*HJUoRJ5(_~NIDCRy!N%M7j z;osXBU$=;_)x=kf%lMkEb0{ml^HtRg$=5%N$=6Qe>sQj(%DY%!EAHU?uwP{d0)72U z`$LDOJHBFk1E_~zi?0c?1F#2X2M$Yjb^!Lk^c8w*b^v-ij?cj!OdvvUClN#0PG2|4 z4!|Cm9e_PBI{U3&ZWKTL0b6MqA}jmdWJ9czfc7@zU?P}zfbwEq_H zw`L*v3;i|z#)`kc7m~kMiNDwCJnHa5o&)Na=+4#lPjuhC?Vak*xrS5RIq}RC_g!PT zRClhnxxUvrPv6g9t#)VX{Lvd~_xeP4-t&e;cRoE=_v8*t427u|LA!(0?v07A-D+yL zy4oF_=-RzW-%}3JIUU^7SB~|d_VUCPJAb@6YzO-e4TOz_O@+;g0}|ai-1t=Y{(7HO zxBqf>#J#^h-~B#m%yk+^Z;j&!*_|BC3$#;7^(G2ag<)dAzhcNONA;A{ILw}-zg<;t zcVd+kci!n5jjyHVeS6te%nKVI*1tBs+q~}xQC}A88Ck%0gco?<)0D|}-+BL)?Bo=e zy=Q($xL3BbuVu5HeO)5I<$w1yUhmud@1A0`PrG-v+cznf?bZQrX&r#?2p5un@!4)2 z5UYKYGFk_;PImD>?b)sqvsxaFSccy&mPesQ!}E`I>K+7jnKmQpoRiD`~zxCO;6&w|%nz zne%N{l<#&Q_rBZRf%&$Qa)Vq}5nE}0`U=fA%(Hb{&$H_!zXRmg9+W>QXr2`$zjKqF zA1|!@&eQk2=kFok^G36myFh*`D4+kOxP6laDNc@yQk>n4NpbRn+{|7csD0+?sczo{ z^4++#d~+q=%QQb9DwXd@@@G$%FXU$OZI|ZWBRm{MzH@Ys<*kb6CQH7-?;H%0{Cn#A zsNN~=++{)Y`{@Gg^OL$qsj&Adl=S!dPwBm3aIeC?*={|wNbe077jUmadBsB&ym+Vt z?^UpP=pe;Gkb}+ZUYgg}XkKH!T09iQJwqg~fs)stDDv7b+kJl<+=H=y_V(kRirLN{ zpY6r3&lmC@j2ie|c+Q){bq~e?*>0V2V76Ol9F*6LNho|knPqr3E6J_ z2`n#qMPWJO%~c$IQKFmQ-zVq4p2K}BVU|x$cKVX4_w{(bE$K`2{nn4(cehv{b!R@X z7qPF-J*Vhgr-2^X_<_MbgVj4y&n4@*A$l%F&!uXA z=jJr`T$=WG(zUOI`l_*iz#7C`bbs4$_4|E&uXC9CT_Z|76xmI`vxI&dAMpDGrWaY_ z!?3^in=JoMKUqjHq*V`+E4D1RL*_8c(wPUP?;T{#g6>>bY#S ze~9K!RkdGD`cgN=wO?KPV3YJ*E44RY{PW|YP8sgGNVeFwJ-Tk8_#r&r>n-Z zshHzA3+E%L$0aSF`HE8meOsQAzrHos@5Mc=@l4ftPLsVXs(kj8@yyhCF4A~5dh=(? zKWzRys_|T+@%*guOw;`Nr;TTp#&em*(^2|X)bZS`dzMOi{=DSPpI4*IpEKp}c6D4| zcGul|3iA|-S*P#et1DiwrnnwxaTDkkH=&%ZJ8b9; z!+NSY%lr2M->&;L+KK<86yM*Wdkhedcja?;>OO``RKc%?-n*!FwCu?1Ns^UyM-Wz!?##zL>_rUrHBQmGxPjKin1?oRFb{3sU>@4M!928igLycH&to2rBVr!f zyum!2#5Cq%k>(BN;aon4c{q=Vel8R)6)qR95Uv!i60Q-h71kk^&O`Tp{y$)MOXp9? z&L86^ey6ZJ=h4r)C+GKcXU87OaCWSY>{zhRx|Kbu#^;XCcI%zAh+AJ@p?Kj?ojaRw+XJ>2b|luzcJ>J4Fnjb{ zx;t09S?9iw&vxhO>Sw$2beJb**I^gU9>FfoV?D5oW{+SOmog2zX!Zzp(d-fIqS>Pp zvfaKp?4sEt*u}Lh54*UI2)nqRh<>Ckt;9rO*LoUR!sqXwY+OzZDK>o$tn&I}{Zp(1{P)EsM9VvfR zTmGt+{1q^j&w(B$q8w|A!E+{OU=5~GUoD~8U$j$~X<#|x)ADa4GF%)vI^!RwPhB~V zZn~GVq3#blP2cNde6yH8D#Pj1m<*>+&@Sro|!&D&+K~w z=$Yvg^vv`LdS?0rJu`iRo|!&D&%)9((}9F{{nz>5Qa^}!{vYy#Fl(WhM%o{^OL5TH3>Q~7RJ_$d@z$w| zw@y*K1q}0f&@J9VxoS+~Ig7V|7H^?G^S3~Yx6n>~mILMx(S8G==^uU%u{_gvDh|7^ zm~mK&;`(+wDXyQOdv?#%xqjHij_fz$`mV$v4jZR^!121j72~rwY`o&I`xS>}L|h!! zQRldKbsTngqKoVAfj4BFR2qkEe?J)KYb-9<&hNvS-k0t_yLCnoHy_9C!zs7iHlYVc8i*u*wUb!j}x8Df)FJ(UB-sME>KiYmH_8(U=js3?}MC?DV zA!7e=EfM>Vw%>^T$MsBO|8WBm`;WHYi2cWnOk@9X6A}B5n~B(ev^W=WukAM??zR0! z#J#rPi2X;~Z^Zti?Kfio(e@j$|7iP-*nbQ&PR9PD?Kfio(e@j$&u#mS*nhPBM(lIf zVY!SHckk1g*=QZ1VZHK2`mFlA}-UpsFnqsi-I2*!SeXNWh4>bw~QfT{XLF|_4foKzHgaC#P==yi+Mu! z^&HvP7P7BrYhMdkiRC~yJq4P+pnRBgpy>(0@+J)ci#$N2P2hC4s@p6-D~xm@-SI9NE0SPVYZ;d7<);QzmiGWq_C=E1*BU!ktJ z*G%*J1I@=)n%C!RUZ1CV4YYX;y3K1~n9rlU&1+yarcsaCEnqFxZ}S4}nB4*zAG;}D zucPzMN9+6>{EoE)zhmvd?^rwVJJ!yz$*!HcI$!^u?Bl$Mi_f}7Tsz0%K2WybEycxW z$Lk)G6Ovtg_I`$bA40!li2k%;`HwT)`I65v-1!pNp^l`(UUwzJUYp&8y*7J-?+p8r z4m&h}2s@NZgdNIbPhel>k&bp264z$9_OqP*LeWgp*1WId%czj zd%ccWPruu6Rf>zx>nFST{6yKmQae;?ho~pf;)^}VZLhUntX^1A9*P z_j$dSyij(&we0)_vh%=HJ_mYOm_Nh(Ntk3em93t9pAZ#o& zxi3)sx4ZnnZ25tgGTgbtgHqi(eWKn+qJQn#-xo8SA9y*#`2qL^^8@e;<_9p(%n!gX zm>+;&$mMgGXM>6G3&V);3l@J@N_Fw~y*g)zc9t{$1>MIzU-!$xFRUURe!=_z{K8tM z;TP5s;TP5u;TJX#;TOIq!Y^zj!Y^zh!Y{-T+eKOL!9P`EKG5X2tIu=o!tdEl@BTsG zrCWa&Yo099cgS~UI(fC#e7)3LPj2-ceKpC|=IfD)myX_cJ!$jxGM&$Dm+kZ!?V3Kn z8gcqOHglV}#`GC_Gm`B_v2M=z3{Y9l)ZOk{b`Q;8@S7G@Fgyp0=Z<3_z^r+~)Kh2rOO@pEOQX#8BF zb?1>{SQZtM;;2K+{Li!+aj)%w7S_Ug3GOS3t8@sMqE(u&&yx zFU%1dzc1H%dVG@GH?F4jbaj0XT~+r)9F6Y;_}m=bQ_()++HI5W+C5bEtcL8_;kxgk zme$h)w4S~t#l>^)M%;S(!-$KU(2rKE|ASyX9dYYv_^I}!!%uZ2Vm@{yVm@{!;=Y$& zMA+57MA+2__>NF7jiY<;Ob7k9CwE1BUrL=vhRRt0pu*hUd+X0nLx0Uh`u> z^J8c)hvk6{gpG;lPg7xYq3Oj^#qGP=&wVdHcWkEfbLfZpxnJbx>SgX4KZkagk{>_I z&mEWP_Ki#ZoRiCdG$)rroF_JYD%}Tg^AhVMo0mYFm%DKvz~oZu=iL5AY25DiKT9BP zFZCbr8@tedz)gi>4%B;x?%L1$OL0Xg)2&nY*FNS|iYvM)uDDWh1<>LO(5taNl(V=3 zXmJIex3~gm_6zlz{Q~B&JleCk0@zq-i!0C{iz|RFNe7xgM}ONe4Qwkky?J#9plSLt5T)w*Z) zy+pS@2-;nvcHh_U6pd25qt)&Qx-aBIog@56<9%E0*3x*F?fmiPaQxt-*$-f#4`x4* zHv93mey8Y6-BU6y#o3P@+V>i%?-}3GINsGb%IhBVraHHY`gWGwN_rd}#h0$a?!>!w zE_JoW*IegPFVXnU)_u3*b&mC3?ML2$bKiVE(2t2Y_s#Sq>E->>k15ghGKb|K(thML z&6AnBPv&9WCo@L(ygyp7oNRngq`3XbSt)LRG8o_c8sB9aUq}5e%uJo{oS^YFNp<^U zjkMnyjPLAJH@>#|eXs{KzNrO_Z-&Mek1LQ=J}8)qCs0>fsuV<6`}OMmx#r zEXiqSjiW`$jl<-0VXBi;ZOyNbG_Fr%C#DwCPJAl6xK8%zjWp-4ZE8o zYh@Sv$S$r`yO_u2nGdWe-0r+aIg4+A=4U=tJ)f!nef56wbJ^ExbnkRM-8=o4?w!6~ z`}sGhKcA_dFI3M1lJ6AhDcbY>gSG#80nZ&N``%LX_dLz}FZJA4YHwO0`Tn)|zCnE7 zAif_ez8@yOexVvi zzXr7V1-i{Il&eE|{HXqYulV6}eTQ(4cR%Sn1>8?sMfWUr*8QXdlHB{N>yzC3tKfdp zKDr;OcanR5bx)FefAzh7e-(O}%YFd|3x^3u2uBi+(*2}$O7ACaMSc`w|E^TtPOoN5 zj{w+*4?90{o#x8`&6oa~FF>0wpqu?iIa?p#IpgO~nm--GZXMDk?AFn{YyMo5Ur&9gT$DUj*dvc@f$w1kYT-lQwWKV!* zPe3<&f^uQ%C7#P7q8{V#(djOJ?j`$jjqFPe?bE#!cI)gN_0PBI{_ukQb6{V7)IG>Q zCAxFE8+8wIn$GD4{`p|}=f_grxyH3A?p))~I@g$#;?6ZDr@C{E-{^O|f7b8J{*vgv zd;K-h@#EhfzYS6RHdy*INcsb;NWB2v{1M8Te*7%|^PA$g^@`t`c=6k+0^+v}#cy2| zzYSFUHpq+L`YC?vtN3k#;D+bFD6;`_GZnOVVW;P zHD7=>UqCl|i*jaf@tn<{Uo?M`WM5NdUw7C1xmNL8MDbf@l=!W5{uKHALaDvPe8Ie# z&3O~VZ>9SG|NJm}k|}#~o9xN0vL_>CPln5$0L`9&ZuSJ_!sIKSv-l15n7$pS_$^!Z zrK;@935ws|Q2e%|{&}S0w}Sk0U|;@F{I*%~+ZM%dnTp>6`;spI{85UF-#$?M_Mzgp zrxd@16~Dcy`0Y={Z+|I%3njUA_NHz3ALGckKlJ;>(91mglKpkB#!dRpIbHW^3@yD^ zBbR)`x^*xypWj(6NBY0$J^>5|?-4XVM{9nL()=8$`3W?C54z1ypv_N|5A%7T%}>-* zP4yX{e%E=0zF`+o7GNilG_))T;Bo3CAsqvWs}^#&A_mGFa1#1 zol`=8+E_c`P+Q{6aMAA7fE^mZ=U|6&iLgU?><-{tprVljQG*mHPW!%Im-8 z?+=q*xLf{yob19_*#)5ad(dsZ0&Tvce3<+K+I&SlW*2~N-pk(~Dt}+Ai2nY2`TN!K z_xnZh_kYUYA1;4?WU0SzOSvr3@9_Qj_wPM-B|V6ffEFhq{^?6P;vchXxVIsf>Hp9? z__ygR#21RGqj`O_=Hmp->w7e>$7@~#ZC- zq46oug?=OFUfX)e*t~*NC9n`bn{s`RfWAg|1``A3)gVxE;u9n9C zODV6N5dWiEyvNq}3Af134;R1hlbyd;c7CGlJkabf=wUt&H2pz&(;uMOdDLTe9%yzR z^_!gs*5`A;93t9pAZ#o&xyNXqad)lzZk8Vy8FuGUeoS-kGoI7?SM;wv`+IxXou9iS zT(o<%FwX|_d8`A65%&o@yR%di{V;#7Lh;`sv zBI2=iME@QwtOLI%9qYi2M63fh5wQ+5`IP#Ff45)2I;TA4eds@bJ!STxG){E(VJF0i zP!s%ag8ahq@(cCl7beRu+%LZ{NqzxnegX6_p9f|UQNEhc`~vDRzW_A5gZj-c0L?D| zb66hjHxM=!n%v9CFYK=MK|T3}ljRrQmtUAGzkvR=XMc0#7aA1NFJQeen9r}4U%+}{ z1k)eLFT5zffOgC;oFu<+s{8`h3+5NFUNFCa^}<>{AI&ddyjm=*STC4gz=e-CA1AvrPTzSy zSj77(f7X8FGTFcQZTBPduI^Ldmrdj&Lmh3Cy)0nJ{aUYo~2 zv(sqL>Yw-XANtgHCx~1RnhmpN9eo2{dB+LQMzBTa*}H|QR~R$ zB-d`L_F4OApYi&m@MZEt3cC{~`hg~&03A>uh^tHNQ zacGqL718cemU~3^KQz$&4@YXB^#H|D*#+FMn2_Y|sZLTHm6GJ*s5He<$E3SBs#0kj zWqMZ{N9~z$)P1r`lLEV>IO<{9rH5pffEGuAZgy#g>=MxI5}vQdc?C4PgnG>`0Zsm8 z6-V8xIBH4}AG;2tqWl` zLorY4d*ZLOKKxq#;`W`rU+|RnDPqE|Utj9J$m8Yb&=2!--|1Y|iAD5t z(e?|T(|Vwc-n(F5dj$E=PQS;1c9$~!t?sElVdw1^lUgqY|J$JV}1^3ehz4Qv9J8x&R)+wFFzM2Klh3Hb(H)Z`eA-rvx(={j$ht@B_eLNVR6k3CQEM@{WxAFlUfSL*%PONxtL zR9y6e;v!%c>jAwQ5#=l{0$N;z=gm(6EiOX678e0?SRU;)5H=QCT!j8uTm)=MI?&<~ z^tTPuz_voun}c?6f1r!@-wQfV;O`IA&^~xG#ZBmk_47#evw0EYrsD1opxve9M{Vtc zpS6?r2YN}KrROb6&uLNLcJ)4Z>HdH_|4{l~&z&b66hj zS=<3^thB`)=#Rx6K#Mzo=Fibzi#vdASsrM5bMOxC*9=$OQPBH$f4}Be_4{na9q5Pk zbBp$CS{5-Ulx>h~am-;D}>$Lh)q=bzgp zx&6CU`dyIKSx#Tx%X0d%Ncz%V=N{JRcSDlY&b?~qRsH@(6aAjc66xhq>E$cZ%MQ8^ z;9UJK%|Y7NN!@lID2{wf7k#RJr(%@aDXZTbe=xz>`@MC~O*!2=5U=m1?@DvynV#Ur zvyXmn9Q#W&Pmu6{QT2k|)xO#C=vYQ{} zlVx|)+&rm}?D(>Ovg6AE;s?fI{3xI4_>rCI_yIoI`~aVfAK=qq8^8FnU$Wy1_%w!e z)H9A)G1=X>d0=uVj_Io6Q>yrM$Zq1(7TqI0G2-mVzD48{#$kL)6Q8OUlTWB8Up`eA zpEAU!Y9+*{d8y9c7FM5jlusCk@hL1mRWBx=P*1*mI!t`Z6rT?Lhw=&IFg{fgpAIV~ zpHNS}e5xrv!Jd`3c`Lhhgy?f*$H&QzZ_@e9z_0(N`-Fa1obrd_hdVvLzFFrp(M}$} z{-)>G-;!Tn>G}1y71!eVz^}Jbf6c#x-kxdnyCZRKqO;?7%df*u^&%a9zAy0}+3^Vp z&Tip(vs)7roV`LlBUuh~vs*y3Q%8y~FN!bYOPDWD%FhRUnI=E)^X0*ai+2jk7xdfs z@{;&+Pciv|dh+E<9r0zp_%dP7=Sy44_pda^7xdraz?T!0^f{Jp=8G=@NEL?M?I5>vB~at zdg2rp)D_>Bif?c3A$;4c-w&OjbK_f*T>Mm6zF}O(w^zisw~EO()RQmY>WOd5#J80t z#J86eClpuTc9d@zm+@`6`1W=&`G$J(IKp)G^kS}~QIFY2^uz39;4e-SA8Lya50x+<9`*JUrWA8O z0sS;S94S6LTueToo_zUmy7*8>e3-H4@u3y<;L>!*2lUtc<ng~$;DY1M|X~= zmDV+_y>$)vl*@d7KjFtD$CqF~0riYyxs6FKj`&6Q?lcphE)t(E*-d=fr2T|@w4d-@ z5&4917@sZ{pV}6aPpBtfKAj~#T_!%YFCjiHQk+m&ecDkzVI0P%cH&cqV)6;~V)G69V|sI8Fwbd9dj2L$^G;G4yX{(i!`q`dnHsAm%E`8>((C#+Xo zaFO_Sm-zO;9>TX@wVyCv`w1Txk#886@olX5Hl>(+Lp}NO?Go|rZt-nu3Gr>A;)LSr z+m7-L<1)UD7vH88lW(XeU%p)`zD*F{9{iW^4dXJtO%&gz7n5(OCttq(uZZ8Nv$BynNpr36+uve#Qo%B>O*U_ja z-*xmA;zL96;pr0Q!(-ll!hOZuPe4D74~@i!XNt)O)RQkCI*AXB#fNA2JU+Cd9$cdR z1oYSZ<>~U5v%URDGyi)rK;D_xeysbFm zUFpYa#Sa*Vt!w&fUDMB7*MLvC*i*%ThAAB-Hduh(oTUd!TKnr_66VVj z-hRU9DEkR_6mdTR{WiWd7hmQUlP{b(w6e0nolLAH?L`3yjXDn_+##3It6^QIMLrvSnBO3pq@#r=T+?|ELU7`o%nW|_||d{;oFbePZ+2D zghfT<8^&dPYb?H4-%wA! zd>bgfH51=j{Y&_UaT(vv6yGi=Cf`s`zI=PL@b^-fJsc!HchVC@E ziZ7m1e9<$(eb>`2!+qEAynat{j^c}63GV!3?*#Wlwa!2O zk?h`A%uRCVkvHhOo^SMB&t#orM}N%@c1d-9bablo7gKbOeY5<0cLz8skD-gh08?(Sb{qDB*bFlfnhU<-*T|KMVg9 zCX{jQR~6P0o-VvVc$u)jaHw#k@L}Pz!ViRB34a&v7w6hb7FH2{zn7zL7VZs!Q@#fZ z6NSeJ&k=SJUM;*$c&Bi>@G;?X;akG*g}(|b?d{r45!Mx+Bs^buvG8hPU*TBcB;kX? zXN4~dUlqPBTrb=x2FOwR4a#LwK0* zSmCL{vxFB4uMqYW<_bp(Ckm$vpAu54;bvj%KCYh!3sZ!L3+o7*3R?&} z39k~46pj@>C464^rf{|J2jM2+{`2GvNl|UKQN)<%QY88p4Lcros-w zuEN2>;lf9RPYIU@|0jG`_^mL0Ki7Vi@N{8M;W*)J;RnLsgrWW2^J&5?;mN|r!Vbc& z!okAf!iR;g2tO9C7t)b&zV0o|5FR2tQP@y;k+8jRfN+rT9^qu+^TPSUkA$BK{}Psk zV`M+lh1tRrg$;!l2-^z#3U3fj5I!JWEc{Yf_CVK81>vE>+QKu1=L&lWuNB@UoG4r< zTqgWRxKVh(L9V?-VLjo=!q&pJ!s~>Cg)@Xt2v-W<7j6>%C5%*Z?Nt*t5w;Na680B9 zD121-ws4K`PvKq&SSX(w!lQ)e3fl;;7v3bCEPP0~O!%hoH({uFL*Fr4V>t13K4*jjj#aD?z#AwDHC z{=F~!Soo)KF9d?dU*S>#^|vr4zq-Z30nv+5aQ~5D}SSKig1STH6ebg z-pc(Uj7?Sj!o!5kge`^F2(J@P5zY|4CR{1}MYu(nk>=VtMA%H&Qh1H^gm9ejKH+pBKIJw2z*V4z zKL~LJg{Ak;ba=23S6>;uuCRp=M`VrOTR2dND>{shpE@+0DtuhHMEHqti?D1JSN;HD zL|9XJlCX*Jd|^9bU*TxsIN>beBH`P@wZaX;UxizQm9kual7+Q}#|qCBwiDhcoFJSd zd|UXw@K@m$VRE)>CoJqB>?Is3yhDheL^r<95aOy@OXI2(!`FrH3%?NlB>YRb?;);y zM0kquO5x4Islpk;rNY;R-v~Df%U5;v9wamXSa_zeyReUNyl|561>pkWXTlA_y$*Bjl^2GE zRfP?OO@y6<-Gz4u#|vi*UlM*STrZ5N;o7S#JVn@4c((9DVK-qv;Sk{j;j_Xwg&zsO z5^fZ35tggz+D{Z7COlc#M%YI`%77h@O5#A$wQuw^^E#Z5@Uxj}PQ){_) zs|f20PZeG&>?nL!__6RC;cvpdYP;)$)()Hz5JDzc$Y8uFQerNcO~OzY{PFjpG$dw$9RuV_+H+y z`vEgBJ1et2hj9!Sas~JC2ygH%BjodbnS$y08OyLa+j0m;aS2!RC{OYU&pPRXp*La)n6$;%Cn2QDZB^z-tM{+)waW8-3AAGp4VO+>V{GER?QmL>XgQ=L2#aWJx*@^@B4Zr6i?&1NS z=T$~19s1FknK@XQHQAm0IEAyhj$3$!m-sg$lnLE5%*^tv%CFgr6S;(^c$qhNpRX9H zZ0N;iGG<_Y7Gp(z$>!|E72L%mJi{A&$iMkPxo}5jmSGjvWgB+q2u|i)uH+tGx5 zQx;}9)?^!w=4PJcLq22NiaN~8BCN&w?86yc&#gScb9~H~j8iG}K4LcJVI|gNJ9go> zoW`~Mfxq%MKIC(LSUL1RW?mLyeGcF(F5q_V$-9hNHS}UJ8}qO-Yq2#uaU3UeJ-6}_Z}NZthob-c?|aO|9Q>S(IGW#a1{d-N z?&Gh#$lH9%cZ^v*+>wx}nVp4LjbC#%xAHe$M*hd0v)eOAg^E&gU}j;bC6mZN6jF z+M$z-X<3A&*nrL1ll?iDOL&CG`G8NE;0y1Ud03cL`31YN52tf3_wfkt@DbyF8G4DB zgJt+N`*J*IatSwZH;?i<|6#&9p_hW0S%_s>hb`Ed{Wy^;xt>ROm5=y0qt*@mxJ<}w z%*_g{#;@3qv$&bR@e!XhZoSY;$lNT*0UXD9T*a+Cz!SX8yL`?F^+WG{e$2Ei#QGf0 z1>DU8yurJS)*$T1W;$kNMYiP-j^cbS;~pO7HQwesMr|0n$(WW!Sc*;Anu9okbGewi zd5|}GkI@==US?%gwr5w4;Uuo$dLH2k-sNLPZyb7Yn4Z~KmX+C*UvU(_1{XEV~yu)Yw zkFlDCds49^J8%>ib0vS`aX#d8zTZ6T#%C^8XB&3rNKW8VuHhm6!aw+cQCfsvET&;* zmSv zoW=G0nRobv|1egY&`rcl%*zt2%x3JzA)Lvz{EdQxJ%@8K zf8;^l;2lP37xrVaDjV@@_U9;0;e4*#+-ab0Vj69k=i}&+-vpFm}h#OTb(#$m*=a&g{VnoXU;d&U3uVw@le7 zbc?by8?ZV1atLQ~KDTiX&+{5z@f{O&4&CI;#R9CyrX0r6T*}ov&a-^XmyG#!=zYjf znU^(LkNr7}3%H!ec#8KKp-bpwWj+>W8P;J7c4j}0``F?x^CNy{uO#R_c3HXO{6oX4g7k%xGdfAAfn_6+^ROu-T?&vyKpH7OxP=QKVc!3U<$mVT``vu5`@JlB~`q?8E^a$Jt!Ltvt-%c!w_-xnJlP;~H+^W&Xj(e9dJ2 z!_TK@4i;oxHv9j7J|KL)AWO13Td*_xaS~VaC!XPT{>f*2$2bE+Hx=`<20O4f$8#3f zawm`QEPv!~ICQcx4=b@I+p!Brb0U{>9gpw? zAM!cl4GG=E%*BHIl8yKa&+&IY=0A)+H0;J>a%N&47Gnk0W_`BcP)_F-?&5E}$iMiC zafXF^5-!8XL2#uaR(3a zB+v0W|6_vT;jY{)$ZGt89oUtl`7Kv*1CQ`H@AEIl9ud0n`6=_VI=^IB_U07M;!Ymq z1wP~(Mjz?-fT@_Bg;}1p*^F)2m7}?mXZe(IM(Hsp3-AjzWOw%CcbvuTyuiQsnsG;m zULtkHgf= z#7eBm?(E08T*3o9#z%a?I1@teBW7n_)?i)sV1G{K_xypoc$QcAl5d&z+tAO>+$_p! zY{kKx&1KxhqrA%de9fp6LoXgPvJ~sEEqn4CPU2jy;zl0hO}=B=NugVu4cMH0IfOGg zpWC>H=Xs5<`5!--9C~S3g5}witvQ_I_%EY<=Y26bGczAcurlkgIXkj9hjBC~a{~|a zHXktZlyFZBret~+WhpjhOZMXs&fy~N;UV7ST}GK2`Z1ZFSy`S{*onP3gyT7rOSpl% zc!a<48vo=AMwk}vipCF^ou$}}tvQh2a5fik8-L^_-r#G#W0L9Nj+89Il5E5l9K_*V zz-2tZqrA`Od~ZhReZox4$5O1uhHT589L9;9!^K?7L%hRyGebW+E3g_nup1|F2G?^d zPw*UH@}pUylZ|;;i8a}dT{xN(xt#0x6OZ!_AMyR!p&OrBn2S~U1-r5jXK*Jk@H$`f zKPLJ<^pZ0li?TKwusi#43TJa2x9}KG@)_SS*__Z%!{RK<*6hTQoWO-#!TmhSyL`;| z=7!z}%*an!iWS(1Ejf}CxSm^ii8mQxUg$+|76LN^0TvktrP8&2f+T+Yqh%X56n*b74^AyY9Y zi?S-~^DB1cNG{+q?%^5!!6*Ee(HDg~Vlyo>vjoer5xa5{SMeDC;C)74ti#OA!R{Q! zX<&1<~RSB$(QbU$EH=41`_=L~M<4xZ;VzGal9VgD1RVM#V+Zw}&g&gB;F z=2>3h3;xRl%R)CPbF&cZurYgb0H<;`H*+U1@H*cz%JR@n!?JA7wj9DyoX=(4!^6DB z+kD5UD?%?B)3PW_vkn_^5JzwY*YOvg<_rGIk5>9#nS=RRoAue7gSe0@_!E!wFTQ4y zRiT%bnV6f!Sb??Kgl*Y}LpYtwxtV)-h!=R14;f)~xa)m>%(TqGBCNp<9Lb5C%~jmW zqdd!-e8k9W{2nk33$q%VupN7H2uE@*7jq}~@d6()_S(?Tz_M(@Rvf~ST+Eex!v7d$ zUD%DoBuvK~EX=a3#wKjdz8t~HoXeHm!e4lok=OganTQ#fn`Ky?4cUeRIGuC&1CQ|% zZ}TbNGV+FSPZFkNeimgdw&6%F;9g$h4ZdaMjiHm0>Di8bIF2*8nCrQVM|g%e_>g}y z>ZZ{BkQrE>T{(d(xt_oB44?50<82Q6iCKVOvJ-o7Jg0CqH}Pkl=6yb8%pW`tGcgCN zur@oe8^>}IS8@Z7^DLk74HIt({UWT(ChWz5oW?o)fxCEym-(FkF#guiOTyeN#44=C z9_-I~T*Cc4!ux#6SldD`9@8@$E3!H}u?J^x9(VH~@9+^n+8%l-n3maDf|Xg9E%`P3 zb28WP2v6|}AM$U;+7a$Z#5DYrrP+ur*pCxApR2f)`+0=dd7Ez;d8hB2pRx*Da|Gve zDfjaTZ}S0j?h5`$kQ#hO3xQEvmX>aJH zV0wPWGHl2e?8l*;#Rc5Xy}ZEd{F@Q>g?<7iVG)*ME4Jq-PT+cO6B13u%2`$IPo z^RfsVvlWMN3|Dg#&+;3Yoc2ZusG6U(z1TXPskb17HzDI*>ZdkL75Sy_OkS&a?Y zn%y{vV>z8`c${yT@Tbtv#R9C&2JFMZoWXhgkyrVWZ~4)Y(D{UUSeP|gk6qZC6FHsh zxP@nUna}wT;~x$E#LUHl{DKYHhl4qf`+1#r_#dMk3!UUl$D%CF25ip09KxBL&+XjH zGrYvNjPi5nXJ9r~U^RAOZ%*P2uI475;(5O0Tc-R)mt|Oq9oe1JIG;mw1QI z_#Z#|HS}|^B5ScRJFzdvaRwK2JrD6ZZ}T1F9}nF$%+5kA!-{Oi)*Q%hIGgKvf`2l` z2|Z?F8CGO#cH~Cx<6)lU72f4DzGIA&p&OrRn1!FQ0>5B0c4QxZ%auIDa4@g z?8yn7$~D}~U-%mz@EJcm7rGxa2lKNkYqKM}a}sCp2kzo!{>M+whh7>MW=Ym#Q}*T{ zPUl>1;clMg6~5$Ket04D6R{wRvpL&vILC4gH}hAX;XOWKoQt8CfVo(Z4cMH6Ig%^5 zo~L<*H~E17G1eu|$u#_wg;|~LIfCDE7FTi$kMIm{@F62z4*gG*TTIqnUJZNmHAnMm05?)*^#|Co^!d18@Y!^c!y8I}&d_D?)#9RFc(X)DjV@D4&nq(=X&np5#Hoqe8c#E zhC327JwIi6R$+a%V1Ewfx17NZ+{%Oem3R1%Zy5Q0xa$+9=BF&c>im)|*nz`2mNU43 zJ9vnf`H+7z%7buEOeSM`=43h6VGDL*caG#l&gKU0=W$--bw1<2jQ%j(myFq2h-Fxj zjrbM2a3p7NG1u`29^olo;WI{g6z)mFEX>c6EYJFE!A|^!Q@Mbvxsiu>oEQ0o5g&(p z5-}t5uo%m*4x6$)hj22Nb30G)24C=lC!wE}#aWM?Iha$pmOt}4-!R%=VfRBOVG)*N zHFjZt4(Bp%dW54iTnTKUqpY1t_6S6vZTy8-`IPU!4xLOa z$}ic012~53d6?&Ui;ww&@BJM*A2Jp5vpj3DFhnskim-v9M8Tp@ZPYiy-bj-oB{E{6wfFn4Qi@Ao!d7d}>h?c49A13jPmbYKZsh^q=2Iq!81~aLH;b_;hjS5k^9Zl-E@MUtyBS%MmD!Z-Ii9O{h$s06 zpD^%Es)(SzO8OJj$0$9xd!=V?I`8W47i5&gC+$=W$-+UH-)nqK94*rePUYXFay( zXwKjQ?%*;0#($XYz0j-3mh8-7oWS)w&U<{$_hR@yn3px#fxS4E)3}Z2_!s|W+?ZiM zDT}f)8?ZG;a~b#X7vA6l#)%d7v$8C!vn4xo64&u4&+s0fGvWJTKRxrZ1e$4sEa5$Io z1TXOxqa_Oa@tBm^Sdm>hgk!jfo4AX&_?&MU?c>l(%RDT_nrz5c9LNcr!!_K>y}Zaj z`HUa^zkl%lfB$~;?5xK6Y{B82#93U;W4y#a_=wSygia!+VrG_NResGGT*mc0%8UG+ zF_VT)5~g8RR$x80VQ&uQST5#f9^h}h$~%nkN$AIAV&>xK{F?pv4VQ8wck)+0;J=KO z%zI@)e$JX~!0!Bp6F8mgxr^5rJ$dLPWC|8wc~)mHj^sqnP6~hC9--EIYD4hjT91ax1U#F<&!cs<5AepYk(S zVI4MQACBe>F6Tz>F6Tz>IgZWPP?|M~>h$&gTm5=L<&77&>v7fmKtD4+5zqh$)6jLgHLtjZ4T#j%{mZ9K(Ge9U;6Lnj$?vIrZo2M2O8S8+3s z@C;uudX~^h$kZ&&s{ES$If1LWi}(09-^&{IKW1q*WGnXJD(>VV9_L-YW~6LkKNiz6 z4~y~(c4SYE;Ucc)UjD+z{Eu<6hi(!UVL7&8caGp#_~IurFtDG1qVp z@A5Tc<_f*|EXqZ9a)%%McIPw*o`Ck9hY$%?|9!fn3WSJj~O)#`}E5*agFV8Ci;-vlZKO6en;!x9|)v@frVSqC%mU zjAdAz4fqwius=ueJ1*c_?&J|(=f8|xIP{Y;H4Cu>>#_;^a~NlHA@}ew@9_y^7YW@2 z%*g_*%?9kvL7dL{T*<9G#M8Xahm2A*^iwhei?J*lu_gO+80T{t_wX=p@jhdJ=DC@Z z1z4L6*qej+Jr{8&4>DS@u%DcnnU5t|h4t8q{Wy&qxRqykiLd#NDT{}GdX{DdHe+iJ z=U8sy9vQ9+NXO^RXnW zupT>e43}^fkMKAj@F^3N33nu60e;3W*noXFh|9Q%d-yZY^A?{lTG`M|#Ud=p#%#$U z9LW`2$6xsyAMh#TmJ7Xv{EQV?n@!k`Jvf*nIG2mLn+JHFSNRuTF=qL2Ph6&D4whjX zcI6<><alQq^g#O1&$0Dr5 z#_Y)foXYRHnLBxb*ZG?N@spaNpN3^viEY@K z;}>khP8`Y!T*RMvir4s%Zy5c{a7O~BVgc4-eRgFZPT~x%=T@HKWj^OW{J2i&r(g+| zXG^x{D1OV;+{BYS&nNtwk?V$DTqb807GN3HU>knJv0TKJ+|Q%D$$N}eFZ5$G9kcRt zR$~|T=2U*q?cB?&{DYC|hh7Y(VrJ%HaaLj-wqR%W<0P);PyChl`4{6f2zMl4J{Dm; zHeoLg;A}47QJ&=uKHw`xYUq74KC>_F&`rkl%)z3p z$U1DvE*!|I+`w%-$@6@|SNx!9xFaERvk+^rE_<*)=W+@6^C<7|5o0wAy?FeT`B;Tt zvMD>T7l(2@XK*3cayt+51TXOq{>6V8y}3J?j2W1l#aNMFvN=2P8_wen?&Ve9V#F4q zADx-_DJ!!k+wp5o;1urS5uV`kPjK#t)wF63J7;7LAU z^w!~?*v!lvtjwD1&c2+%x!l5Cyu=%f(I)ghVoGLVK9*o5)?iz9<|t0!LN4b{?&BF= z;$!~9xNXCIdH5MCvMyV(D+h5L7jX{{^BQmS9iz4j-DFJ55-iUq{EEXkhO4=WCwZPP z_%9Q;58ae3%F=AWmh8md{Du?xJ(qJc_wpQ{GIod1kIx*;$C|9mz8uWCT+ChE&l|kM z4?2ckQl@847GXKoU>$a54^H3|F6UbA<4?TA8+^ftox)uSnUdL9nB`fU&Dfh$IGdZe zgQt0sPx&_!b`EzWV_p_vT{htmj^Yxo=24#HBfem~uR|{}bFvUivpO5IJ$rLFzvnjY z;dx%;E52jGE}ol(Sb}xgg#9^;OSqaxd6JL#g7La~ZsucA)@CENW;YJvSWf36uHzxz z;J=L2E%Z|`9ZRx2+p;sq^EFlvu**9T0%#7xJWEXvPWn@!o1len52d4gy8jDIs}&u~vF7GoJUWOEMY2(IN0 z9^y$}<{dueYsT#r`U&|d^YU|6Wiz&BUk>IJ&gT!@!-G7^v%JYie8XtH!+r6Xk)_y( zEjXAXxQHwGGf(jeUouXg&`ZEvEWjpg&z>B@ah%SDT+Y2b%Yn~c&w^kOk1KV>D> zWM}r|cbvtI+{r^c!OOhM=Zr8Q-0?m?W_Etg7HrEA9LE)0$5TAdm;9Fr28M1D7T{-W z#V+j6k(|sqT+X#T%wKq$4;W!k=tpB>reH1>U?tXJ2liw?4(2${;9{=lE*{}EzTroM z!+l9vfS<8Gn{p^eaVb~xAdm4LA2ZRA&`ZPYEXdNV%6e?VUL3$_{GRK%g-3aUzw;j7 zGRDwwS8|qQCD!Fv?8dG&Z zV?}<+=Iq38IFCEHmsfd<5l4qkbY|kGtjwBh$FDhoQ@D#qc#+Q;XH4j2WC507ZMI}b z4&fxu;#&U5pLm%M_<}LUhJIqEWRW@f=_T#sl$K~9`UwD>(@(m-83wI=92IgRC z)?!0`&A}YaIb6dnJjP4B#n*gqe7NI7rej`y#u{wKb{xnFoX%C;%Dp_#YrM^ee9lM{ z!d)>Kmx-91X_${CScUc3n%y~s6F8g8`2+X!1h4QyXT+jBbC@F<`172{0`odT@MP8`GeT+P#b z&BT+#PH8q~cTVL7{=$ch{ayI^T&%$k9LY8Oi8uK#6HW;`IoOUpIg}GPi%YqYKk^vQ z@pnF9w5g$&o@LmA6S$m5`3Iv;3qPNZW!Qp!IFs9Wp05~Zx*cX=DOO-Jw&oy?;9M@@ zeqQA}W}OjwJvfBpIg?AcfxCH>XL*y4_=eGDhE6;tXJ+PONmgM!wqh3!;Al?eLhj

    Pv$%l!d5!OwXi3=5!d$G$ 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%0A;+zop8L@29N4Wc@em$)nAB zI#u@LfmKy`&boA4x*HC_;jGW57vn1CJLqUU!u$e#lm3j!W6XV>RoPEIx)_$lYOMRw z{@9!ONP05PWWJORr?+A(Ucs063!M*|{di(EtdEQE7~Vs-L*~3vSR317Kb)&(w_B@K z`P^;8!+1fJuj><4zAlOQlXa)VW}XFesdAlybYoSn-;M4=2VyX8VtpHZ3~w@jOn;;Q z(ph88^>eDS&!VdAvz#iQzZ$I9X1yKjJy{>X`V5?-%5_$%a-EI1ll8rvY6iHyvijd{_+2s&Za^+7JD)H|t~QX*i$xYI+OqWFAY$(Kqp~D*JoM zdIJ7N$D?LHE?7#H_fv&#Ot-?1E0 z#WJkdqg!A{<^$;wIF9)odNI8kqwp-=$4{8zxYsAKcU~La$m>O=6cCh={)GoyfWR4ZbJv)5LNaymGuRx{Cp6~ zdN}KQSU(XuMZa4skvp$<%jH{UMpri2!^9%G%`ZFd! zWA@{$%6{_E#jq?^W8IJT$KK3G(vxu}^QCk+y%l5e4Bo>8bUJJHlMBmXeVmOkcmcnn z!#Q()N-TgCu@x@Gtr&|}@Fo7jyz%C`b+I2#z+l{jpE3P;b6z#JxH!To9;`R`R#e!SkNKdbWN@&}#zqB$<7>SDKwt8#oL zY@o`In@*~n7l6Z9pGYsnWz5&oXH~iGL;5-W5uGoY^@6HgzZhKuTQl!M52MG@i!nr% zeMYdpPn93vM_E6~`fb*qv;L0t zI&?D}jMG@3LxJx> zXjPtfDh9D0%z8NU2;75*F%GY&a{n8uT=xm{clZr$H_iQ0VP;j%D@=Q1WvtD5JGwg# zWImpri9yU)(i`Z#ctDl?on-wY-o}Tj?B@?U-!l8nrOLb*T^6fheb)Wy-uNH$$@E+d zX1+vYw$GmsVc`dLfj>M%Hf$z}qo;fcodY~7U#Wrd_yVYNnALnD~g{pkcm(g1= zT6MQu7gRa^E&j&T_su+)DxVuKRjyMFYqQ>r?uxyc2hw}#BlKBS?)#8_PXERX56pdX zs&bqcU6yW)%~jb~H`WKK^7Fwc*2l5Fko7Ru*Ry^Eue1ITpEFPX(A+<_D$iYzE=O0# z2H2AIK6D_CWj>EyhGERN(tGJk_?-Di+V;roBNb*w7ggSqH(eQPGjC0I!CuUV(&Ok^ zxDq#FG+x9f_!F}{Huo=#eJ}*K;#ItlFEQy8bAEO#jYDx3uEZU95^tfyQ*)hySP%Vi zFiyiu_#R!Jne(e)dmM-paS3k0BX}KO;RpPJztHyF+$Reb!4g;t+hAW@t;&zn9k@p= zV7IR0ZB>3eyjJD&nuvc{cYI;i)2g!Wg85asjt}}_Z`KFW(=Z(O;5oHf66+5ASuJF@ z>@P*xZzjx#C9xVdQRVm^I0A#!t*%y>Ix(lUp7}w%rh3?|SE}6SD>}V0^PK33byc}u z3stVyj`?7msTQ?cD^`xRa461E<@2(F-mR9jTc=go?=^gipV9H1Sb2 z9ECG+8E(XVs+<>(5Al~O`%m^kl>4PoC`SMY;c!EPn_WUiYYbE@(=aidFMO;wJstIFrH ztt!WL!vQ!PC*o{X&I?lIycNvX<90lN$MLEv=e?v8@H_Kl39{bV)k=@KR5{*Dm3>t} zALflzIleV^V?JD!<0s;D=Brfs|Gu`+Cs{v7-%;gyFX&&aJAF3SOQp(wT+kOgsl8mS zLG*03QEqDm9f!ZLc%r$Ew<_&Nj7^INJM_lQoU zlYWu8JV#b6icM7coVUduI2gy`Ox%v~_*|`Mw|>(0ujYErsytsdx)4@U<#-=e-or>$ zj+@MUI`h5EPcpwvKgHL~zpLF`Eyr)7d>zxOa{aujT(>BeWbUKN@%2{t}5VjJwE>gNYXG7rUAe2yu9o9pIL<-9`Z$-I^-pSxysKh_7+GjS#JjTp)N zDBf1PyIODPjDMu%$9rxpjHR&}HpG570;BLK-d8KztpwWoYp$PCmFG%NyJ9I-jxVRm z*Qc&3$2G?e*b@VAlq%VO) zSIeIsrOMAIv*;*%jd^V5{Jg5XKW|m`TNxX&-kI);0nBHp@*IokO|0+2{mf6Ra@ysgS}J)}Qk(j?~ibybdQ zz`P0bvCQW(Urlepoy=p^ey-LTRlk1BU#oK6MEuD-c~Wz{vnt2uQDy%nRXM&AR%hN; zmG{_#9?$wzdL`~;9)m}jU&jPBR{r_uWbT(omCuPM-3fznsVeVh8@-D@rpi9!@doR6 zSbxj>D>@`I_e-kE^)je(eooBKdSTYfF!#ZFtT$r4E%RhNA9S*t=O~0lRe7Gusyt6^Y|6SH>z$eR#Q^4`=n1NP{g+|{9>SaWN|pP3 z#vjacCO79-!Jar=mE$MkbmkFw0TVHK3UjaNfUaEZlD$y-jZ%+r}bmj|iDf2CO zT0^^xy4O=)z)QrJnAnnwd_{*)J9KL_Eiq6GjB9fj%Dw{V3G^&_IlYnIqRR6eV;;}^1^tOmmCjr@vnubSC|!nb zNVlc?(1YnIxDF4new@Ba->2Wx-{|b=&3!#p{any>X+OFLJ&2w_&!yMUTj@je8TtYJ zivCGEW-#~9t;V}r?sQeU7VW3X=ednq&u&e^X{x;ErK;?IHS_h%4>CW+{4De5^lRG5 z*<3e;D%Z=Q%Jp2Cm%=*O9tYtR3{mC0we)WK5PhD$LqAaEeqWh8WR#ZY%c073-03QG z9onDnO^>JN(4q7?Itp*$d)B|x$upVzIjeI2ymS$|5q4$XpB_ukq?gm{=)Lq|Iu2iA z+RSo4`MPGqyjTV+s158^CmeqM4`4#3jn7?QKo%wI(X|tN^WK-onxm3BnC-ZX5D=}}#ygBop zI11enEetZQ0CvT2=PptjazLGxuiRkZwf>(4*)D^a^?x9ZO%NZ_;lt zRd#b<>b@~OJNTdodr(d?@od z%$G1<&U`ELeaxeo$1}gd{0{TC%oCU=%VqYN13j@iw!(g@?0YCZl@6j;(Oc;qsyy#$ z=9ihjrN7eYbDQhtQ00A${mBV15bT zs&d|EI;ERwXI1V~04p=EOLtJ^K0WE-^kjM|y_()dN7FY{c|VWv4W`L!=2_7VOJjMp zmECHK9aVY$LFyYkoK&-@_XROP$}^jG>X?VL~6<$i@#Ij%HaSC#uT zr@PUE=*je4I*i^xA6Mo1&*M#eiyzfCb}NIsF|#VqSx8NAwY*iie`VIIvEG__7v?>f z4`V)o`4r|Wn6GEPnRyKJlg!UBzsvkN^ViIOF}LMszgQS6V^i#bqg4HR(TnIXdK(=> z$ExxkZZLnu{1@$1z}(+OmFpI!edv00XLfGS__BlJ!BA)Sb+3Yp`ws&fCLsyu%gx;EXM?nMu#C(*O$ zjjDV;cVY})!&_=Q`TZaKtIF3ULt*iUtCdTY`xj81LdydLw;%zH8)i_28G z-YR+@eVD$2ubF?NQ+t^EXHn(;1!-@(4&99IO82FwtNQaduE0IGU+rMGZsUDbp6`?D z;AZ_+<@u8pF~_A;Wj(hl^McHaFt5(M0rMuzJ2UUgd?53w%!8N*GhfeqJM-PlPcpyA z{3`Qj%-=AV|1kddTp6(-R>UUQU6tn;NROju(97uc^k!9_{|NK5%%9O8=oH1wbu+5+ zem&??bbY!t-HRSXPsX*lpY>z(75X0ij{Zt#^ECG@rpoh`rR&fw=)^9v7Or0ZVjYo;|f)NoUf<%;W<@~ zzsUL{RldG&@C)ldSWj8TtY=c?ylkpmH$U^@%)OcWFt5klpYBbMpeND6^h$agy`Mf$ z-=bgBiL_H$v%gfT?5`M>P-UN0Sg*sp0rNJ@yJCOV16ZHTd@l1fbR@k~mFvebzry?m z^Y_dXnWrmf_E%7qpO3uhvZ`FCjw)Y=X3SeM@6UV~^HI#_FkixaIrFW|_c4!Vewq1Q z=3i-t@@8LIRJp$^U6!s!x2C($LvaaiVSO)slD>$ynZKqJ(N@9S-$|ACkVVyfFfT<{ zp&QYy>0WdIJrzT6JDyPGx)MZZ_&J$=W&%u`p9 zxqRPH7FCYVqssk#(NC50{OLjTPGSke`V%_(n0;nY zWuKW<*=GUfUd&4|_hsG)TeIGu9!`%|bPO{pfkPiuqd5%A-+|TYS%I7GjDxIG$O;@EG)2->gI1cCG23792i$12xb>r##^c(s& zovfzWM;29%ccn|v73l_aOS&&Tgq}(V(cyFi9Ydd?@6hk)PpZ5h$696|sWFQx?jjyYz=~K?mE-EFa$HO1op2EAfvitqJ`b0%9!W>xQ9RB19aX+R-~*kswzRyrl&ai6 zAC_ZYg>H@gng2)6!d1-I(+BVgCaWXYm+#+kR^>hgRk?2oEX%y6D&McuSe4^jF&}|* zRXJ}dy@}pNN8=@Y&iY5%R@a=LN|k-&qVv*KusQP%^Z&Pt&*PCv+nH zlg?Dn?4z(M&*e?~(v4_;x;s4vm*a6fk2moHCaZ7mlN(E6OI7}RtgYJJZjHims(cQE zRM}Su^KJBgI*z_VKc(N(Rs(Z>3RSM3hb}~yr)$tH=#KP2dJH|64y6y^WqgB48=Cv& z!z$PYhvNcVk9$;kAN$o_^6N}^UzPXqL6!IMgZUrkDI1x2CRNTWOncKc=!SGhx)(iy zo2yua{j#gFA5Xd*U6*c7 zccTZ;&l?+IZ=8;+F$zzq^8U`M1MJpY{HV(Nvo#mx{iRZ6 z-IeyBE6~2QAMH;MqDRv6=wk)a zSK5QFNY|uW(w*o4dK?`@htV;372jd9R_1>B(Ffb%NDRhJ7>gHFd0$u5!FDSVzpL`T zQnVK3ePvW-J*z5ncjlhVOERy@ye{*ObT4{1J&|5WhtiRB6dh0BpkLAnbdok^e`!?N zUmm(BU72n`_r?hrg1hiCzQg2g&249!5`~7t^cg9dtB(j=oO6puf<` z+ME4kR%JgWu^x8C(YPG<;wAiuDLa_!xM4Z;Q|0~oV{e>@Q`Mn%YXe58^4<@ro^Dp0 zD)0Xa>o-_`#r!k#Z_LwnG{tRRy52vg0oD1mH^cFgXj-%sMc|T8?zh|DjtGSM|D)%o+m!TWdt>^*t zD0&vXklui&@Gk4m>94dyH*>%Asys(_x*|4V-j?o552L5k3+OfU7W$MbU+?quGx{BE z>u&C!O_k%^>GG=Vrv}}E?nDRBqv+Z6B6oM<)qg6R?5*k-KX>y+SW(rvX3mPth>@B=<;+!?54_n`q7hcfhy0nSetAPnoB2Cc{yF!Zb;rKu{A8+}mra%P@-i>LyfX6|%-iA+RjxOhUPv#e zx8X_VSLm0j+$Vuf($91{Ri4L{_Mj`$zH~e6qsn_2piY)Qe-am}@;qx*xlbhXoy^UVFt^>V6mzmnKcmFu;j`_li>({Ls82s&1k{hguj&@brk zwBrDCzl^FJpNsa!CaS!Lw%8l{t5fCgali$tyq7hqTxTou9n6ob^7XvH`YqP)vHpSi z59WWEXBud(mqV5NmBfasT(1S)m;R5QhAWvz(6Oq%7y1tUg8oiB4l?)4sLJuKbZNRO z-I#7e_n`ynDfB#gEgeZ8rsL?_^i%o^og~2QCzC4s$w!x?tJBTs_H=)G7(Ja{KyRRT z&`0TW^ga3o{hdxW*z6~(D*MSxmr&*NQd*s1x0+#h9K-qqb*B6|F}RO;v^v{v-NjF; zT>l%L>OZrdPnG)=ROi^OI@my!&tXS;xGKkuR_EERP~54?bz|sw`U?FL9RkhyN!1|v zc^(U^a-XVn4cd<$q{@8*)dlkZJ>X_l?z@{lL0_OB($DGN=rY7yuP*k$K{yhZ<2u}i zm+%fgL;Fy3-3*u$E1)m-#wj=tmti!Xzzg^Zf1%SbbHD8BLizU>x*oPw<-K;Jhu}&02G#=JiBPIO;-peomy$~=g9 zF!KoJJD8utr>gvX`<6~RQd+(qxm20E(`B(S^Gf&`!6&T0VEsFD$5G~fsZ}}OjV^+vu_Eh@)O4;^H+lr?rj_q!r-M{^KOwk^d8GQ?#fnnp_*mvo@rx?wSz|B=E2ODGGE7h8}nVvk262d{4(?V%wIBp%lrrPBxB8U z*j3qYCRLs%4|8w23f-LUKo6h;>G`;t`3`!ID%U^B{37$K%%3uUkKb8OGtTTMo2ow! zRJo2f^YYA_VsCYpi#3EEp~~?yRe7#p=1ZAxWFE=<2wuZi_(zrV?c+t+M^;tZjV?h~ zpc|n-4pU`cljw!2oF7U@($Vxe`a1ob{z%&ngU zK_8@#sPY~!Grx<^S%1y?H|Dm9><=@mvd`?QT&DnYFZ5yEmvukp{@9!KvGjCYfJ<4A zQ2)4CN9gOU-=)7`%1LH_=~da62UcZXlkR|nnGdID;~u=J{&umR(mz!B`X-rdOrh%M zM*ZSqxv6q|Vdf37iz?^!qsP#b=%pBm$5@Z2@6#{oAG9^a+&?>ds&b!lbX~eR-Hq-; zPsU};*U-D^L-Ymu8vOy2PBr&StIB(Dp$pR$Xdk*I4#wrU4!7Y+yoZUHYMQxEMOFU& zuqL*^*6Jd=H3G+|^0}O=%6nPLdYD zRjyZ+Zb^5f2jdLpi|Ghe_P2*VNnfU)(C_HKbgCKV{;sN=??G3feQ7`1pB_Yyr03Dg z=*{$Q`UHJ}en`Kkt(oTjX;pb2`RHPFWx6)qn(jjXM~|Tw&@1Sz^gjADeVKkjf1({{ znf;_uWk0!8`MkKQOYK%=Y=XU5@24)aTQhJq^Y!X-yLAfhs`9=c(_b;|Y?;e_oYfWb z=MiC9RX&Gx>8`3A*Hc|-x29vLD%agWN70AqEBHp0^FOFz^6x8ijG0uqj|c5Z`_S!F zInQ4Wmp_jk7pZdJFnT+EfIdrKqF-Rjx#oJMuqn2~?l={LFa%@pBwoY>{Ef-xnfv6& z;@AQQ;Ygf}>v20Cz`OVyKVs4#xzB3(K6+K&Q)#TJ%6n~0cfuj696y5fnX0_UU|h-i zYSwo#Kgj$D^YhGaGQZ3G74y%`lg~HTcUI-TdFi5bWx6)qn(jgmqbJe}=}RhyXkTdN=~R7BSb=$cy0I$v?WD@rtq%sWKAiO_%;(`UT%*eMH>h%*-OLZ+dDbtp z{)G8E{Kk6fU~~U0=!ykYxqf*yi+rCQ-Hr7=^kiJdJdECl=a^rn-=b}ixvyQ7`#57o zY_Dc^wR+KGRC!O+a1Qh3Y7$p#ohrv~Wqt`Ct8(63`VXCCvCQSZc`&ak@6lV8<11rr z*6Xw0o_P=EeV7kpK7siZ<_nmwV7`j^4(8F!4>Lc@{2KFH%%3y=$UKp`ZHd`$Dpj7x zl`ca2(DmqcbZ2@j&SSokUaiXe*v0%H^CQeJF~5V)SpP{oEj9Z|p~`h!Re7%km{-A; zY9$w|3*AGNEU=rDR4y`PSwFVoNP2c}pi*OT|-rpo<_(Un!XPi?w2-JKpv zkEes^5ITb1L!YEC($DA*v_puwUrJT>latO*m!W-WKe{K~SC#iOn)y@=Vm+AkaOM%X z2M?=q-(#v==OXjl_?q?itXs?FIC(!QFrzBx7otmIC9KZ6pPJm&>PwGjeJUM>yO|%L zui`7_A87jubKhL5>?bc>2K{lOYIn8f(rZ*Xek<-`enfR}wa%(?{1xWkFmt%bb0~3hTcRU!<)<>)1T=-blR0>ADL9yhbPux-jMD{_o7G8DRPFn7MB*tci`W4GzL-xDxl^4ORZV=8n47Zv94wRnqb~%%IBGDW@vy zWoRF|E!~YCMNgxb&}--@`Y3&cen9`ltl{Q<9#{qau)iw%4p7(Itp&JPm3?neW#2n6 zn)U1SL;55AoldpdTraO0;%0f$HB`A?L%Ji~haN}IphM`@^nSdm%60G1uT^=D_v%Kw zm2QnOqbkqguF8Equ^j8o=?-*%dI&uo!_-ys|5MYks$B03eTRNQ|E80zmE&YTSyegS zg)W0lRk?0!x~D47(O2DUw`OCID$fzF%5@@`Z(|Dxr@m&)HO!`?q86 z&wLQ`kvN(4FnSZcpFTog#W$*aZobi}H<Ym?-Hh%^_oXM|GF7e{PDkM> zRi5*#8Y$o3j2~5bPTNLNo--9@R^_UO(z1W%~)T-Q~(&qI98`g_)$ zHk7(iyVFH!A8e<} z{kqTr>Q1{gMV03d#~pY?mFK@pXV_wnFQdwSD$yNOIj*NF*BQ=yIUd4m_!7UXa-QQ> zb6!St$2zL)uY)T0>xqMzPowA4tLZJc7h_q!O5ewq%zw~HBF%kLsB+(|v@7j}HJLZ2 zJJEeG5XZ8e5)ccs0sJI=tBcp4w!cTBg#T(1Duz?Rq-C*o{egHafdH}L}|*(ulGEng>9K6l<& z1DmVz`5Hj4QRVp4syyF$`hzOR{ZQpPDR-IUieVG%i6e2QD(3~Oa^5=Ji?>y|-v?Fh z_XCseHuLPN%=6Ku=qgwTo3Y-59)u&A&!QLMa^{=po%B(>!Tb@OK>x;Md(6JltFnK0 z+7rt$uS++_Hq3j{gXqy1hNtlXCgNYrx7Xaa9M;E97>F}ed4KchH5kSG5Pcq#>@(Lb zh?TGhj>E;c6_4X1OvDsX=6bH^fz_}j_Qjz%2SZi)+-$&I=(JzvBjr!oS7kjr=EGuG z7OP=HY_9%sxBThu>Th=|fF7p)awqZFWUpA?t|bD=91S0gO>`zwqUu_`vlR@f1{U~lY? zqj5Y=!&$f-!*D%r#slgO%Q}Q7@eJO_$M_20VIqDYPYk+$Crpj$F&DaG zK`eq*u?E(|M%WpD9CoP|qpIj+X_xD)r{K|F%-cnKfk zQ+$IT&_Vv!JbnL3F%_mmS9C{jEQ|72Z~Qx7{z(0Qw#AM(80CM#{I@;^Ctxtjw^00B zmv24z=Ngn>68hKjpV0r@j|cH0Ud5OA7C+-ROqtwVCoN{i>{t}NuqxKTX4n!tViz2& zHgT|q;uxHO!MGH|a1BP{PTY?N@giQuJNN(-@GJg7TMDzUOqdM|ViBx>Rj?M;!?tQu z2dg7?$KE&^$Ky1dg^Mu+!*Lx(VGJI_Q+ONi<1>7PztJJ3*=IV;hgPf8qeWPyo)dKEq=ytm_oh|l5L}6yF%l2pAv}R`cn2Tgb9{}z z(31b~(f5!HQ({hZK~F4+)vzY|VH@m^0XQ5-<2+o5A-EDZ;a1#@QFsI8L1NK+_9IOBwj-zpw+S+(NtVrC0`!P=K zCI3E$SMeskP?Mh2^j+*1*Qt9J^o-?2iFB1}ETj zoQChn28CHpX`7j{!IYC*TyEkBe{vM&M4|i%0P!#^WV?jL-2Me!@R! z%V3^6Ii|+k=!V6x1Xjjs*c@A7N9=MF6LBFf!S%Qq_v1l~$4mGOU*ShgM7y(j z&Q$1(SgvHStYp5X(R&8vA&9IBQ&cW(|{V@P1sM{T^DL5O0aFrVEV6DXn z+=hqMlMdD~JcH-)zIxTcdW^5|9sW^oI9Rq!#^jh9bE)!+T&`FUi(o}nezB`6*1~$& zQB7{Mx?peYk7IBG24OIUVmNNZEw~$_Fiw?UY>UUMcoSdZTl|GqW^-P0OpO^aE4pAl zETv|&S>>=A*2FeyCY#j(yJ0UJu4cAbqj3^W!zF4K`TKTpHLl0KYF3+d0FU4ayryQe zS-0>ZKE*^eyUqHJRuKu@fq7PMK_u`V{m4r(Er)fszXKOC(VwprtG8qUJys)x-A!}Yis z52!_K)*(EBad->w;ZuBx-|;s(^Lq!zVVK3E&;V>|T69@qy*;#i!9 zvoH+T;AV`(LuxUbbrj<;9`E5Je2H)IH#+1r*GYkC&<*orQS?F|)l)wISRWgszbe1U z(-r&R033@GaR$!8Pz=Y-7>P&mB*x<qtENZg4h@eE$VYxqnpX|rD8M@+<|xn*5`^DQ~1 z!;F|uEoHL`q9>Nb>S`IARSO$pQ|zpkwOQS<9}dFtYB`%V8E4@<3{%V7tTnh9Bk>R( z#W;+|d-w=n<9l?>W3HbJ(_jX4Q!Ci4{8$vd&w?27$x5KhMFI1d-%8dZK% zbOT1>PCSYyF&;1BBYcMMF#(ggnCqv+444`7tCeh4Vf4aM=!wORcuxSqZ^h`tJ|#7SP6Zw3AVs?=#K;OKOBwYF&LL(7_PxxY7LvU4-er{yo}fJ9zMcP z_yzx>V?J};ESLk`Fh7=7eQj2G^g&;2fvwRWyW)R149DYST#74j4Q{}FYE7FJjYsh$ zUdP+`1Yh7UwA{^gl3_~Bq1Lilc`!c~#`0=yoBVy8MqjLht+73J$KE&wC*X9PjVshT zHft4bzzB@S!+09c;X{0iZ&1GF?B8{*{9;|3l>}2_TFirau?QB&8dw_}VKeNa*0WhX zus;Ui1e}6%aRIK!&A0>i;0d+9&5FZ|com_8#4`tJ=8`vs}Ba?5S*emwplYU2!nAgZp0n92jegvui{O7sW!1$Z}BsJLwiB9 zo(eNzHY|!>SQaZ{eYL60YK$$hE%s5H*{lIL1V`WuoP&!o1S4@L?#F`|ugW)pUBa7q z7vJJX{DFTkLm_j1X3T}I=%u!>S*5TdR>j8H9NS|j48-9$4kzJ4wYAM!f-7+~?!>)# z7?0r%yn~PNIet~!*yQhPHQEXroiMZ7)@Ef#S9HfxYCHM$JFJQ|u({gaX0^hO*aZix z9cKeuiDFI6~JOx0?T7%Y=BL$4R*lZ*dNE@M4W+ha508pIIhFJcmR*!2|SON@fP00 z_n3gc(DF3ToeI;TE4pJ5ERH_ti}kTFcEWD>9}dH*I1}gNB3!4+Hz{wz?YJ9bFcvT1 z6}*cN@hyHtTXA!JCrpj$F+1i)cPxbEu`>E%9c+qz*d9A!01m;iI1%UK0$hU|FcNp- zF+7Fm@iIQa7x)!_VhS(wKGI+&%!Y;3J~pc;dSh9viZ!qqwnTsIiUaXKoQ%_P9xlWc zxC%F51jb-2p2D+u6>s7Le1eJi9c?Ad^EzP$%!~!l1503OtcCTkDf(d#?1Lk449>rAC6K=)b7=>{dk5};~zQT9-8y&pOdq{^FF$d;BPqm-TDv9N>GSAc~02gB@hT|sOiZK|AaTt%c@E*R$1pI-2 zFj*P%9#Uck%!~!l1503Otb*0CE;huD*aiFIKpchRFbIQjIfmhO+>OzA7%$>ge1b3V zEB-`VS@Zl(m{|>w|Gq>IHPB{xVp*(+wXr_7$4)p1191{g!ypXCRk#-S;C_t5c)W`b z@fE&9TRF3TCrpdZm=j&l8_Qx9td7mFCHiAm9EPKCB2LA{7=mkX14gOCY*q}Oz&N~y zx9~N-$G_-U-draGX2v|27d^2g*1+1>3fo~H9DqY`1kS)YxEMn)5_jT$Jc#k?2>JCP zyoq=5jXKh1eZa5y6H`=>^-(q}4Q9e@SO|+^X)KRE=!*@o33gV;%I|+-01m;?I39!5 z2{vmfhT$6ArB0UL55QPFj`4U2ALDa;hoA5#{za#X=K3ix8|K3NSQsm)vusustci88 z3AVuQ*c%67AWl+e+pK9g7Z>0%48=&?iTm*&o>Ldutc&;%pWMHsD0rbT>*akabe+GSRHGjpSs#+wZTr<4TsYY2|U@i-3`VhFCpNZg4>)Gapa1fIi-_yC{aYkZG? z(XpzzP6ltQ48pq`RnAI8Br z6sO`$T!x_-i97Kqp2TZ-3t!YunGEOR}94AI2~u> zaty<5xC@WsNxY7?@s)bkX1&8i{Eo@1oAuO~3A3RK=EE{r0jpt6^uspT8M|X34##O~ zyv>@03ve;6$IZAC_u@f3f>-e-KENmV8NZ=b!`wd!I%5{huU?RU9$`r=gH^ExHozv> z8M|XY9E2lq3{J-BxCEEuTHJ{H@gSbVi}(8?vp2Iu%0N-N*I@UDLlMFMfSLDB+&;vcO3RcIa=!ZS9501pK zI0xrrIIhFp7=@?t9Ntl{$?s3$M@+<|waj{Q%!)a&D0-m}`eJizg*~w^j>NGz7Z+f- zdc$U|!@YO_&)|8yhmSA;zhbi5=6WeHJLbk>SOR^}7h7O!?5RGqS$%Odj>jMj#x=MB zqc8@~;YECaPw+E-!(?^L{ZnEN%!9?$$MXGMSPm;;ef5d_{y%oYZWxHeaT?CT6}Sqw z<8C~Lr|<^e!Pod6|Dt1Ev#$*5Gx_%$EPx(Z0jpp`Y>Hj52M)!NI0NTkD2C&9+>OWa zG~Q5O*sMGF7C)jxJ+qz^Gh$XOghjCu`e0*hj$N@Q4#kl;6X#;6`da?~0^EpOFbZSv z7@opA_yC{dYy5;?@HaZtH}|z;Ds;vym>&zHmn#3$cV)U7*1-nY4*hWe4#o*M1!rRr zhT$6AseZIsd+{J1!OLob&AN{F@DV1c-)+`c{DZazX6~&1v{_j&H@abAEQXcP2Ww+} zY>ut4BX+?6^_Tp23y#L|I1d-%8r*>UFdEOOzirleyoR^%CBDVq=+MxdmmV`=KJ}0M zdnkIEPEPg6p`6`y;*|4jtlgp5iV3$58Dz`)3b_qB1t)F)33rTg05< zP%ai^5td;Ee#RPXz{YIN_Uyv}9L7=rcc~)UH)?-7qU~7KGulXIn=QvK{EY9OnuH;5;aWDVoabD#O zKHw8ZsTcGSjq#X}8JUH-nV%oBBtK&fHeh46W_$MG0DjMroXqK5z(ric_57WG@NXXH zd0yrtK4X;n`e0lpU^1rSdwieyS%@WAhBa7+joF;-`4tCnFh_A5=Wqd+b2T?}8xQda zPxCyl^A=x5%o~35-iW~XOw6pz!GbKpGOWO=tjQK^%}(sf-t5m|9K|X8fy=mx8@PqL zxR-}{jOTfokNAw?20;%o_zn{>HPbU6KVV6gWo1@neKul8c405}bv-3liWCecAdThw%{F2?-lY=;v zlR2Gpxsc1aikrEO2Y8q#c!sz5AD{3AV}B9!5|2rllG&Jxh4>*q=BKR72J8^=gK(%b zzhQ3<;!uv|M9$zGF6MHs=Vt!O-}xv1;z^$6zr4-oe9ah*gZX1KA>Ud% zIaXvf)?!n(WJh*kFZSd29LX7+!&Us5d-*4i@gy(vI`8u_LrsD{qB1TMFat9)C-br> zORypI8C$UvyRr`la0JJ2GN*Gsf8uJc<8JQb5&pxAyvnO`tjWe~&Q9#gejLOp{DBL&h^x7d+qsiR zd4lJ8nYVe5&-t1$TLpRIFg4RND|4_Qi?9qUuqtb^1zWQ-yRk0^awNxcE*EkI*KiBB z^A8^2IbPx|{>Nv0#kao<`uHDHF&*D$PJY0m{DhyeHtVxFzhp;t;ed$6!lA(&$+4Wm zAGm;vxQajX7yin9Jji1_$qT%~JG{?Ve5-XZXFMik3Z`LZW@CO9Vo8=|WmaWfHed_3 zW;cGzfgHjyoWL2J!&Us5zwlQc;9;KPIo{-5KIKcsY!mbphe?>6@9}*WWD%BO1=eRH zwqjd;&2Ko6LpX*LIFoa^hU@tYf8{u3KIL0&gFd439VTLGre{{>U_lmP zS$@R2Y`_+5%`WWDejLP69LMRL#YJ4k_1w&z+{42>#%sLE`+Uq-e5;+u7ZWlqGcp@< z@k5qm1%Avr{G3hMl3m!HeK>%lIiAxvlS{aQ>$r)#xsNA#mRI;M@AEN3?So#TGBJ}e zJ>TO8EXuO{h*epWjo6fJ*^%F{H%Di*I$* z592W*GcpVFumH=m605T|Td^&Bu^)$V6en^jmqaWP4z1uiZsI;3=qo;xG9@!GGe2NamS%a@WL>II6I5d#MIEoWFm2&epqE5U!8FXu9L&!` ztPrt6IP@`VunwEC6??E3M{o>haUPd)B{y;_f9D_ko5y*H*Z3bF@)h6e7UYP{cudQT z%+Ersz>isjb=Zup*n_<|f@3&~^SG2NxshA>JOAJ@p5!H7<9~d}=-q?dv6!5xnS*&) zgvD8jRoIA4*_qw=9lz%|PU0-i;|i|f7H;QXJjyHlmrwbU(R;|tBuvh1%*7Hc!)mO> zMr_Is?9722!pWS@#azyxxsiMMC(rUC@AEOEet|KH@9B)hjqI7UME8lQAtbG8=QT1k11z ztFRH9vNhYYD|@gn2XZ_ob0+6<5tnf*cW@8)^KTyKHQwYyK4q-lK~Hg+n8}!y8JVAj zSb}9(jkVZ-joF&**(+l0aHt=La5%?t5@&D@S8^>ka~pSaA5TTB`{w?{tGvPce9TvT zt50xTEXHMGCSy8gVs_?c$%ysCp|bp#pRyL~u`!#oEjzLg2k?82^5(a=y=;{D4LIDXX&{8?t@G#^KOc{FZ$i?ML3j%nVF46S%OtqjZN8--S{oP=Sa@r z9IoVA?&KaGkJu_4I>n2;$~(Nzw+00JN9Q|C#I(%Ff-J(a{D@Uqla1M&?fDf4atKFp z9H(;@f8tWE;d<`je*VqlJkQI#&3k;xmyA0w=qCYFGA*+*2Me<8S~B#3$qxjuo@e)IlHhs z2XY9aW9YZ1TXO#pYau=jR^9_WCA8(8fM`8%*hfg!%D2e+N{rJY{d@j%z+%j zv7E?RoW~Vh!>!!Gzj>Tzd65tJgs&MM8T68fNtv11ScJv-5kFxae$Mv%iaptv!#SFB zxPVK!k{h{|JGqA^c!rmGo%i^NFBxT2kUs&FFfB7OH}kVRE3qnTvISeS6T9*|e$OfV zflIi88@ZK#MeGm`9pzbGOYk$+U^BL2H-5{39Ktc2 zz}cM7Wn9Hy`8$vCB>&}YKIBtI8587>#zaiYbj-v&EWq-t#CmMVcI?D&*qh&TBxiCi zS92YAaW4Y|bzF4SRDW$8t93b1gS; zH}~-r&+$&g&f(B~KI1FK9T(i5fGL=U`S<~gvox!*78|iCyG8604t>l1{Ej0yhLbs+ zi@BWZxtTk;hbMT3SNJcV@fBl?59W)_#7xEv%*?_p#&WF4x@^Ga{E|J`i{J5kj^|{~ z;R3GbX71u%{>|h3m$&(d&lqb$kUuVyFgf36P8MVlR$>*_;pc3@*6hi?9L!-H%ZZ%N zpSYUqxSRWUn8$dHH~EOq7<*!nKOR#vJ@c>tKV(T(Wlc6?D|UTgvD8&l~|QE*?^7Nif!42-Pwl&IF6Gz zgLC*3mvRl)^LPHizj&0Vd7jsJlMnfnZ%+yO_#YE98PoGU=3+jU;Jiy~T#T&fCCw#$ZQ-eNYGC5N-2lKEr%d;lyvK8C17yEH^ z#Bai(@tnq)T*$@T$gTXHfAAPj@+R-{DPJ=BwBY=)n1sohftgu|AMz7^#zt()w(Q6r z?8TuR!HJy8#azx`_$&Y7QJ&^`Ugs^oU}$=fJ0{~W8B;MQ^RhI{vnK1Z30v?he$Bxg z#%Y|%Wn9G#+`|1l#1lNjdwj%~jPgT}H-5yPZ{8or_xL`GusAETDx0tczved_$`Sm5 zv$=w6_#1cgSj67p&`Dn6H9p`I#+(uCABRbpoEeyzxtX6OS(cSqmG#(=9oU%zIG7VT zm2^Rpz&vL@@Y30v?he$Bxg#_^oY z*__XnT+6N8!NWYptGvNye8m{Eg50s0h)J1|S(t|fSe}(wj}6(5o%juV^LviuOwQ#J zuHa^F;~^g5WnSkKzF@T3LEe~5%w&9@Ia!>gS(P=}kWKhCzu^E5=4g)Rk6gmF+`w)8 zjeqkvuk#jP@vS*Q&V+oIshOU6S&$`IhP7FrP1u58^BWH32+rUfu8i3C&Fi(encH|U zV!v?cZ=T@=-sU|0!AFwz}vpQ?DA)BxbJFq)@asUT&GN*F^ z7jY%mayxhOZyx7aUgQHl;cJE$1id6;Qf6j07GZIgV?|bFO*UgIc4Ald;~-AtRLSLzxWSN^9ujve|*U33xghFF(Kb&24-dvg$@`+17zc#SvtoUa-C$6&p9Ov{YS##}7Q5-iV3tj|Vl!Pfkm->@GC zaU!R30T*!-f8j3f6975>ZTe9gE&1^E*&9W${23$rq-vT?*A;ZSq7V<&cJPY&ZK zPUB4e#HIX&zw#je<{4h#13uwvh8G2M#$!UJWLjosHh##GtiX?1oAud@t=NH`Igmp* zfm1k_3%P+?_#1cgAD-qVUgJ}~a5MCY{^dS%E27Qv7E>` zT)?GV$sOFq{XE3eJkM*q$(M|>B*-0y@tJ~Yn1==UAxp9(Y2 zoNd{WJ=lw5B8~}%CU81uaRt|K3%Bz~#IbKaH=pNti4XXMQC0-|M`N;xJ@0#LE#UhC|nRmk$_qWpMl3 zjL*c(8gbH_zaKL{3-Kd2Jvp4CIfXxPWyC3OetzXLXkA|_=zW@6!p)54)*EX$8rho7@Kzhtk7)8D*5hC?`<<2jiNxtMFX zp1<%{9^heK;1%BDe|*MQjJ7(MFD8>SH8U|Q^Rgg|u@tMZ78|iCTeCgCVQ-G$7*6JN zF6BzD=VtEbA)ezU-sfY!;#+Hi9uhDK(=Y=+U{RK4dDe>fLpW5AjoF;-*ol2PkRv&k zGdPE9xSl(>i-&oP*LjN%_=Hi`2J=Q^Tqa;LreaR!WnmU$c~)X|)@DOCVP|$@KMvwp zPUMeV!qr^I-Q35+JjQFh$>)5{xIYJdBw$LWWp?IfX_n__tidnXj9>E`_TwOqPWdpX0IP=Z(0d{9k z4(Di2;SXFHan_sX1KiAQ+|7MF$+Nu1n|#6-jI%LVKR%N(B{MNAb2C57u_8ZX4K`q7 zwqjfMVn2S*k(|mIT+Y?p$gMoU!#u$=yuG;7Ok4HQr=s^PA)6zPTO_V>2GpFaxtQH_Jwx z_vZ6h`6;WjDO<85yKqRv`ERZV#c`a(gI%r6>-s<_k;5) zZ}2%^^X;v{{{Lgzh>PERz5=r`7fY}VKjCL=7I8^9)QTP0nFBbOqdA^GMqK*l?>St} zb^M)w@NXXH&4|mwp}Ty{=ZyVJaCq%lm+Zu@?8&|y$4Q*U zd0fxU{EfSLj3@bT#1-MtZ9e2v#@rU%9*2pTlxdiO?=vThvot^Er)r+4W@Hu?W-(S~Rer%{Y|D=9%Yhuu(VWG3 zT){Qm&3!!0^Zbtw8THp7*V|0SRLsFVEXlI0!8&ZoHvE=-I5OgzaA+*2aV8gYIoESD z5AtuGnl->^4FMqK~q@yRLtf%Ewj*K;#}p6bk65bT+0pI!CgGTGrY{} zyvIj;$tZh*xf3u6-{bo%%wjCdk64v8`8mH}CwAo^4&`J{=TffZcJAcgJkIO9#g~k- zH^}!66EP*zGB@+{LzZL(e$4u8#5U}}0UXT9oX#a&!C&|*|K@RC<4r#2YsUK{$eEDo z`5p_h2rIHO8?Z6EM%)|@^pU?T4G4=)X z#%2npVPbmmvI%h zN8A<;?c_cl@3O>{DhyeHtVw$+p-@AaRR4s7UyvZS8yAD z<31kbF`ndY-s3C2^;eKPHskRa5L%Y{Ite$UYpv(HzfdoXI6z!JQFz zghPAy7mxA+ukbOS^R2_d@zEKV37C$Vn3H)~oTXWvwfO~`u_L>15QlO!$8#m zzwkiB-Qmz-p5Pf?=5^lX1BQp4+Ig2Z}hFiFuNB9rV@e&_I+!qc#;cJGE2mc-9^oZk;~m~-_@5wm48Fre%);!<#}8N`;-7D>o4{(U z#RhE5R&2{}*@uHUjMF%iKXM7zas&7BPafq7{>$5Z%;$`HBFOVLlQ9)DF)ItR7|XK~ ztFty+u`Ro>JBM&MCvXbqZ~@nG6Zi2T&+!uP^D#pwgS=50hw+)5shNxUScVl?i}l!s z9oUBhIF=JRlXJO*E4ZCId4&J)8gKF?qnrwI#%E$?WESRO0hVVa)?-7qV<-0Kcbv$n z{E17sl{@$skMc6F^9f%t`spB7EXHSIreOx=U>=rX1y*HEHeyqDWe@h_AWq;E&gDX` zTNz4ixh~?taA*_v^AL~o6fg2B zZ}T3boDbHE#yE`6bj-w@%*&!I!OvKOpYscLWEb{gKYq`VoXNRd%;o%rzj7ZB@*ke& zZQkQEzGB=9K_3a2f@zqA*;$OGSdF#Vg00zuz4#r!=QvK{EY9OvZr~p7=P91!e|*Sj z7lV8;nUpD+iCLMK1zCX~vpyTKJ-^}r4(23I<03BOI&R`V9^^S*;(b2m+n0iT|6@v~ zWiIApS$@Pi{G4srfxX$E!#SFhIF0l96IXK`_i#Ut@gy(vI-m13V_XjM#%2npVOHkg z2Q12RtjPLo#FlKsZ`p@~IgHadlRt4O*Krefat}}PEU)txAM-imTnX~WXELT@4(4HD z7Gq^rWnDI4J9gr??8BiP!I_-PrCiBP{Dp^jgjack5BZd_uLgPJF$t418*{NF%d!fq zu^C&j8^7iE9LZUn$Dg^8+qsiRd4e~1hf%Htd7?29lQJ{2u~@{v!l6>E&f09qCj64^ z*oECWn8P@ZlemzJxrXbxojZAyCwPHZ_=wLKz8>U>!FQO5nV6M%Sb*hNk=0m>jo6f3 z*qwbjkmEU-vpJv3xQf5>cOK^{-sD}rX87MA_y70~lQ9+FkYTe*XWc!ZaDjnDXs?>q|fC1MJuVQ%JUIaXwSHe!2z#eN*bNfD2} zxlSVIZ~>QcCD(H^|KI^0<4NA&9X{a;MtdBbKPHniHQ(d=EW+Zfz>isjb@(OQu`7FU zC`WK2r*bYAay>WmH}2+fp5kR*=RH1Rj3+_<*i6Z^%+35P!wUS2HQ0cS*_!RyhXXi{ zlemD3xQV~;01xv5uka4<^94gsgPif1n3*Wvnm_2IlHhs`*9E_aw->b8Mkmd z|Kd?z;lF&!myG)?$d!QU`5p_fFhAlati^h4%;xOC&g{j09LGtV&G}r;)!fNFJj5fs z%Vi|L{6* z@iCt>+6(!af@zqQIrssKvNEf(J{$2%wqqX--~>+LEY9OvZs1=2$#cBK`+UskFN1us zn38FkmjzjjrC5!%*phA7i~Ts7<2jcLxgp~5aA*q;@GwvC3@`IK@A3h|uY&brFdh>! z12Z!>^RpOBu^MZ!A)D|ke$74{z~LOt*__X%T*>X+$v^oQPx379@&R8k^g8I_9VTKb zrsMm}$r3EX8mz-sY|C%iheJ4=6F7x)xPa@piGT0_&+r28^D$$DqWu5;CpMEaH8V3C z^Ro~uvN9X6F*~vg2XQE;@CPp83U1&Q{>i_1fmisDPZ=vpkS{J%Gd=UL0L!xy>#-r* zu@n1pAV+d6r|<_Z6nQHS%ei?nKf94 zt=XP^IDlh0kw0)YS8xq?aWDVoabD#OzF;U;kTV_=G8NM?H}kU`E3ythXB&24Z}#U{ zPUL+4#P!_FeLTpsyvTce#OSd-o|ufOn4P&1jld|=Wz|!^LPHi z6FkG)yvHd23-Ux`A|_=PW@k~BU{%&+3$|tt_Tngx<2?Szb=<_g{F7&Rf&cL#qs9sH zyv?Lc$!yHU;w;T-ti|U1lHJ*p!#SEWBc2L}=5i62@n>%29`5H+p5PV!%jbN}=y8Md z#bN>`VJ2o}UKV6&mS=6&XEU~97k1}Rj^KDs=0Yy!D*nu!+{5EM#T&fCM|{Ru@q+wu z`7Tp17xS?Qi?d3^GvQD*)@1`W=a=lxo*cxXoWLnu#ARH|4cyM1{F}#lo|pL_A2Rwo z!Thn9knb`BGqVssWEoaqE!JaWHfI-h=U@)wRLO)mk|4+( zjd7WP8JL;5nV%(DmX%qRP1u6%*oocQlfyWQ6FHSXaVa-*8xQa>Pw)(H^B$k`H4`Qb z`goVAnVxwgUJQo{vKULTA}jNAe!(x3mBRQ7SIFpOHoZI*t|KI_h;RRmjExuqV zQIIPh6EZ#DV-DtFsfd@up>q6$pRo={aT2F-30H6%f8${u<2hd9 zT|Qv6B*DBfnT)BJow@k|i?R$WunMcOF`KhJzhZCp=P-`qEY9OnuH+VO=U)EFv%JWE zd7BUUlyAQq^zlC?w*v#@I=N_2V%OGcYd;vINWUQ&wj)wqkeornL{8-#F5ptGVN15*SNxiTIFyq)or}4gKXW7Z@=qS) zN#5aoKI1FKP5!2bTj5XwCSxjQVpbO7hb+g6tjW4;&Gzig{v5*zoWVI<##Q{4zw;PR z@?YNOLq27c6hYo-{2$+88fIX2=H`bi$%?GZhHSz%?7(l?heJ4=KX5jG zxrh6Cn&)|!5BQQ%QU!CxVSJ|Ndo0KztjNl&!8-hc&De$=*qi-1jH5V>Gx;Nza0|C{ zH}~;x9_LwJ?VF4CrX;xu1)@LJjWEXzRKKzc~a|(apJpRaa z+{C^7lc#x}*LagJ7)lf5kI6Vp$4t!5+$_nmtj^kO74d#J)RvvujeR(PV>yvCIhV`1 zn!j;35AZNg@+@!j9-s3yW2X(~jmNai$Q;bWVl2gKti=Xw%#Q5BZ`p?im@CT22bVRjZ^VU}Y>R%0!;WE*y2cMjwbj^P9@;3BT% zT5jex9^he~;2GZHe+*>^dWgz|e3z-2o_Sf2C0K^FS)WbVf?r2`5)OUCejLOR9K%_h z$E94!E!@t(c$8;(kvDmlFBr-g%oUSyn1sohjk#EmMOcdESc7%gh)wwwzvdtg>u%YIP@Jya15vL z2QJ|XZr~Q~;eMXs1>WN$M#~(WKPD3}3DfgEe!!yqn4hvCoA67vV^{WIUk>CrPU0-i z;|i|f7H;QXJj&BN&+EL!2YkX9S%N-dGZB+ABeO6M3$Q#Zu{vwBDO<85yKoSPax}+t z8fS7DS8)Tka32ryEHCmNAMqulWDRGa5J~@5RdQ_&+!^>@;P7g?QHsBQl?}M=3x;QXC+o)BQ|Agwr4N);}8z# zG|uEQuHts?Nz9gS;{M4ihmWv+x5Jnp;eEblI7cvNA|_=PW@k~BV0l(zHP&JSHfBe5VK4UM2#(=Y z&fs#c=4Ni=J|5&hJk8s@$ESSBs5yfk-sZbZ!SsBO1z4CL@e|f(Beq~`e#71z%we3# zxm?6$+!`?)HME0!xSvP(53lhiAMz=qdDUoXpEoEXOLW#)fRd&g{m)9LA}f z!TJ1&E4h}Nxs3;Sn5TG-H+h#&`I2#S2l*2)8B;M6vobgHvkWWnGuGf2Y{qu%#Qyw_ zqd1N;IhRYgg4?;1`*@JYc#{9}HXrgS-_8^C@js?u8s=nP7G^P4W>wZ>Lw?1t*^B)+ zh7&lCKXOCF=utyk_#1cgAphn?UgcdrU?^{}UQ{M#GG=8Ce#nxn$jYqC25ir-*q`5V z0;g~m=Wz*Fa2+>sFaP8*p5#^D-~&Ek%zQ!qI84N(Ov{YS##}7U()^g8vOXKJ72C2G z`|*2@AK$nVict5o1OTt>-WNm4EO6&+r0o@D88zHQy-^te=P(nS~#)D9iFA)?gie$#(3; zejLs5oW_}4$i-a6pShEJ_!p1z097)!AdtFRs$ zvI9GF00(m-r*bYAay8d+H}~-r&+!iL^BG?;dZ8e1EXHSIW@HxTVF8w6IaXmcHf2k8 zWEb}3K#t%T&fx+sa5L%Y{IW1 z#)%sGn!VVMLpg%eIg3AWDK~Hn|Kwjh$+Nu1n|#6-j8-I=FD4T(2{SVr^Rgg|u@paJ z4c2EPw&z#u$3Yy=$(+f#T+HR%${qZJ2Y8Zad6y6PoUa+9XwXM&CTD79W;TAnqWpxP zu`V0%OSWTg_UBNJ;B?O7LN4Y;ZsmR+;yGU84c_5vhCd8)|Bvr5BeO6U^RWyouommF z4Lh)R#CTCd{W*-IIE^#8f@}C2ck>ue@)ED{0iQ5tvEcl1n2PC`oB3IcrC6C&S&t3b zft}fteL0jPIE6oO0T*!-f8j3f%|+e888CQd|#=&*V(aT+GKJEY9+*#Hy^x zW^Bby?8<%|#E~4!xm?H1gFcC8{3v)3aOS3#H zvnsz}Gj?V-_GW*M@$2XHVaaw_L?Ay;!9cXJ<4@f`2)KA-Uwqn8Tu#$tRXW=3XV9u{CJmSYuG zV^g+dM|NRf4&(@q;T$gDQm*8BZss36z@t3D>%7Gm43!Rgh{uFX&eY7wye!HRtj^kO z$R_+MVxl+ChuDk#IFuteowN88mvRHQ@K6553%tUIe9E`V1oK2^0w!T*W@Ay7U=>zl zT{d8Ie#wsP!T}u2(HzfNoX4eH$sOFq{XE2fc$$}ZjgR@9QOgE>yv;;R%5==cf-J%^ ztibB5%`e!DUD<G>WDvIr}( zGHb97zhE=AVF&hRe-7g)PUB4e$R*su?cB>hd4gwnl{ff;p$b9%7>vyXOu|ge%G}J) zGOWN_tj90ej$PQDLpYohIE72OlIyvd`ywWd8al{hJjsi^%13<0@JGS%F_@6=G7Gcw zLzd*Htj^E*1>3SC`*9E_a0-9q60YS2?&Kc+#iP8+8+^bgj8ZYk8;$Xqn5mhb`S<~g zvotHQ3Tv`1Td^&>vIhroD93Ul7jiLI@n>%34({Q8p5i%P=Pf?vOGd90^b?CIn1)%H zorU-z%dsNsu_2rDOLk-z_GDiU;c!mpEH30?Zsb<(OG~E+NH-!9(j_6Oppicg_!coX2%D^Lw8A68PXQyOTMSbGeG^xShLs zlqY$UclaNl^Sw&p^COsmNtl}Hn4KT91V3j*R%H#=VJo)dckIr=9L~v{#>HIDwcN;^ z+{;ru$7{UB|M;9SD~J1dpQ)IZxtW(mS(26c6&tfTzvmAe%AYxo6FHr;xsq$Rl{C`2Yd4;4&g*j;T-$5Stup9gFC;rSaoXQzoz$IM64LrcZ zJjHXo!W(?T7YuwE-ap7hOvX&i#)2%$&sm;d@@qC>3wGpp?8l!to|8D8v$=@NxP?1- zfQNaWm-vuR_?A(=3il9~37MXmnTvT?l4V$lU$Oz4urt5sKn~?-j^k|3=W?#%pFGIp zJk49Y%U68I_|?LDCuaJPX@Y^w%+0(k!O!^(YqK$%vje-ZF9&c0M{^RVatT*(9XD|& z_wp3a@d|J7312Wq_3*xNn38FjiP@Nk`B{cvuo`QyF`Kg+dvZ8OaT;fGA(wIkx9~8J z^BQmQ8DBBV*WrDmF)kA_Ei*C~^RO68u{vwAA)B%zzvDm- zGOzOqUob|E@cD6=gejPjSy_n1ScTQth|SoR9oe0|IDmsWfs;9l^SF|0xRpD3f@gS% z*Lar?_>8X@t7f>5xJ<^B%*^b}%g^`)E3*dcusK_^3%hX$NAMT^%4wX*tCDfJ?ZB8@Px2 zd7hW}5AX3QUou+l@O@%25tH#FW?()RWC?!Gimb}|Y|K_{$6oBmQT&B7IhTvMoa?xW z2Y8rg_&5LIJ-%g>I^iA?GAT1MEAucvOR+3#@>{lH2lioq4&~1r&q3L-yRi@Za}39G8fS6|S8xNj@Gy__ zZ(im-KIBWjWxV>~UJ~&Gre;QFG;>w|JLN_=2$-h5LxhBuv4Nn1P?N0E@8{zv4G+%9iZLp6t&-oWRMP#d+MoE!@q0 zJj)Bb$A^s4IC9_Y!9X;=&jd`tRLsdw_!*0^G|RCHtFbYg^LzflK^(>joXq81#ZBDC z<2=o4yv28n+9bSp9L8q~reY>$2$g8}|2YkUdjMgl?e=MeC8fIcP=H+KB&eE*FDy+vwY{|Cl!fx!t{v67m zIi8a^Kjg>3z#^{X8gAhZ9_2}1n1rdBj=7kJg;|{CS&8-7h%MQc zUD%C-IE-UBp0hchYq){?c!(!>hL?Gr|M5BBYZ2}vf(e*}nV5}*Sd5kV73;7*TeCg; zasYqfubj&TT+UV8#BDsx7Cu z2Xg`^a|Y*d71wb)ck?VS@H+qD3%+5TR^k2QGc7YRZ^%!AfzMcyW%w1pVRN?T5A4IA zIfj!tjSIMhTeySAc#1c8n~(X7QCo-aAD!`;m>HRsd6=KYS(;T@opsreo!FJV*pEXv zg1_)r&gBBGW$d`P}SZ%|-#APz3WDe$L0TyOymSYuGVIi=#P?zwv)u%9Y&C-8{u}yvqlC7qUPw5Vd{SSd7cmAqxcq>6n!{Su|wfV4x(+ zvl72%Ew*4Ae#h?oi9%|6e8`u4%UB)5&x^}6OwVl0 z#bPYQ>a5A;AwLfWTC)?ovNwO^XpZAl&fsD$=XUPqUp&V1yu^Qak1zO!(K?0i8;gmU zj9Hk2MOcDWS)Fy+kgeE`-}46!;xPWgUpbw#xr*!fClB&GFYzDV;|soF+|J?s6EY>! zFgrhH34YGX{EBs0pRL)R-Pn^OIGWQrn=847Te*`5d4zxSGH>%=zGKub;k^?v88a~( zKV<=yW;xbkT{dGYc4ZF^<48{9OfKgtZsv9#;!$4ZO+Mo*#`-S2XIv&@N`A~wS%f9{ z1uL@=o3TARvj=LKzjJNKTEW0Z?%*CC;!$4ZP5#SAe6Mf#c@az; zvQ99NoN1Vz*_eyPS(+7Ch4t8o9YfX)2EJoY_T?ZB<8S;Q=W+qpaT5=OtRMOB{dkJ! zc!f9kjIS7_U->tCgkH@6^fLWQ7MM5?Y21>9TE3z7Eum#(&Gr#9R z4&}s38?ZTBvnTs<5QlLRr*cuq_QAk1uHgo5=Wd?jIbPunKH&?-7!djVj=?}2CSo$C zW;%Y#0xZT-{EFYOX~@pOKudOD7yiIL9K~NanbWwK%egh=cfr6;?&n`T$+Nt}`+Ulm zjQLaedGGVXklzObA2BntGY|8#94oRKYp@wxv3tnw!9Xt#;9!pASkB@+F5wDp<1QW# z`9m;pniqMMxA`yMG3vnZ`(iOJQ!y=bhwK#$(LpHiI|4znS;6cIm@#utFsAPusu7o z2YYiQ$8r*N9!||NW`CJq7mtbH6w{tfS@(8c+2Ji79 z14F~l3o=p2@sZzeiK&^6pD-VbumsDoBI~jtTd)m(U?2V*a$+zrh7&o3i@1zixs%6v zniqMMxA`yMG3v1Jxv?0RshF0zL;e=|_a}?8BrEeP)?t0NW_xyHPY&jAPT_RU<3g_B zYHs5$9^he~<3--!Z9d@(#uy&nHx8391v4@$^DsY4u`H{yIvcPFzhigybYo?o*T8?hNX zu`3607{_t~r*S4%a5Xn^8xQa>Pw^aY@HStBoDvMYVQ^$P$6#`P$n?z2T+GA5EY2#d z#&6kxUD%EN_!EET7|!HeF6BzD=VtEVejev({=<9xkIxxrRJf1$Ou1oY zGY50CAd9jJtMOYlU@Nv`H}>RD9Ky+*#yR|*>$#bGxSuC@hF5u$5BMLWjS24`iz%3j znVFphSeR8=o%Ps=ZP(S{>K={t0!~1-1TzKCI#$zIW zz|_pb9L&!`ti&%_i*?zS9odaNIf}nXWnmU)1yDxtF(H#O71J^YbF%;ovkI%RHtVr1JF**lau`SQ zSN_IDT*fWj!J|CM>->ig`GgU_h4+ui_)N?+OwVl0#gZXs1p{SRiC?l7>#_|yuseHk zAct~1Cvhg{aw%7GBe(KT9^^@$s=a(>A4%*>DZDNC^|tFk)l zvLV~DBYUtn2XPpG;jf&|*<8%!+|J!R$Rj+%zj=+fc%P5?itiYAYPi3IOu7F)6{d$KPFaTq6YD(7+mS8@&a@&J$XG%xWQ|KoGMW7PkJ zdx^!kOvSX!%ACy0&sc(=vl72#O@7NZ?7;5q#h*EblQ@-g_&b+#6*qAkkMIQl=4IaE zUH-@C3``IA6l841V;ZJsHs)ecmSlNW;mX~>* z|M5BBn-ShWf(e*}shN)1`7ulIb5`P)ti`%)%9iZTUL44w9M4Id$+=w0mE6g_Jj~-f z&r7_;yL`>S%y2I;7>9|OoF6d*^YSwmXK7Yo71m=Twq#p&VK??+e~#gJPUB22wo2T{dJ(w&i#1&LJGZah%BiaTXVH zDOYnn_l2At3>@MKp5bL)=UqPFbG~NO+2Q9!XFMiiI%eX>{FKF6nw9t^>#`wRu^oG` zH%D?TCvhrgb3Rvc4L5T;5Aq04^E_|z4qx&uqt6NV6PwAHk{OtVdHESjvJAiCH*C(< z?8L6@$DcTyqd1wR%$hWm-dgiOlROvkLu$$Tux zFIbs1Scgs6g5BAR12~uyIGHmzhl{w3Yq^m-xtE7|oY#1Z&-jW_=7sx-#w1L^bj-w$ z`6)kVd49>SS(gpjk>9Z=`*IM6aT2F;4u9t|{=qHW!TtP;CwZ3F`41oPKSrPL&leLj zIkPe+^RXbmU}b*8+HAknVWf8n&nu9)mWSL*p?mHjXgPlgE@hdIfHY!n9I41yLgC4 zd4X5>n9ul@Q5J`Lh{d=}&2-GloGi+cEYC{(mJQgFZP}f@_%p|FBByW>mvId@a32rx z6wmQ4AMhQcF0nu3G8NM@D|50aOY#d==GUynmTb$e?7?9n=LG{JIi8a^owK=;Yq*)) z`6mzZJTLJk@9;67G1}7bePS^IlQ0$2@)PD`F_vN#R$~*kV0(7v5A4H{9Lq_Z%EesH zwcN=4{EMe~p0{|HZ}{G_a1SvUhad7IW@dI4VlkFuMb>3Qc3>C&z&`w$V>pRZxtPnj zj+?lXdwH7Yd7c08Wytx#z*|Nv59gRnz$DDTEc}G|SdwK}gLT-5&Df5e*pEMPI7e|B zXL2Ezas#*UFpu*bFY-PgGs=qa{?QnZiI{;|Sb&9DfmK+8b=aEi`8|K&Q2xvboXmwG ze-8$hay8d;J9qO0&+rOw@DZOf`pWS0V>2O>GBwlj6Xs(PmS9y@XI(aATXy7+9LNzI z&FP%Ym0ZKE+{qI>!&|(|SA56lf7qWXnTDB}orPG8730)T*fWj!F@c$zj>Lr`7dAcE#s{X_mYSoFg0^A4@%}X{D)8Yg0a?z`-;nCOv%j5 z&LS+qa;(VetjPv!!q#lhKJ3q-{F&o9iSxOLE4hZdxsS(qidT7)&-t2BH-!6$&SXr< zY|O<1EX+#$k`35|o%uccus_Fg0;h2%f9GOu;x_K%Azlo*I2gFf+x(YL`I0d=hF||a z6Eiu}Fg>&LV-{dxR$vu=!`f`fru>fG*_Q)2oTK}j^TJt;dCzLN^ay<9^heK=5^lX z0|qwhgNc}oA29>-u^`K{62D~wwqP6fWM2;EaE|2!&gBBGKXC|0@fXhI zTrTEvuH{DV;2xgjSzhLK-s3~Q;2TD44fhz6DVT~Gn1!FQ2rIHG8?Xtxup0++I46f( z77R?|TrS{puHq(c<6a)%F`nW@Ugd56%eRcOEqsrde4mM#oN1Vz*_ew(S(4>hiPc$? z_1T!6*p$!t_c#Nlb ziP!jqFBo%oc>nkLAwObP=445h;WwPj^ad4;bJc5CT`;i zp5YbV;5|O%OTJ~iKf^sGVtQugXDq_*ke8iW0%lG$%pO=6iFg5cqKZ~&xzhGrHWK(uwH}>OCoX9Dh&G}rz z4cr%UcjVVe@&wQD60h+N@ADa7G1mU@^WriYQ}Sbe%EBzpvaG;*Y{ZWIj=lLK$8!>A za1Q_ATJ8zCH}d-!^EglQ8gKCh-!R&N@cUyi5tA`JGcz~yvJAgqZPsI3c4QCs<{%E^ z1Wx8G&f{8cDJv_vtJjaXthxhoJfn(ubqBAy=Fa@(P2lMhXmS-haXH7O@Gqz<% z_T>N$=P3Tl-?%X3!N{*G;aYCw4({P$9_Kk;5Pgwq#p&XD<%qP)_DFF6Bz@;2xgjS>EA&zGKvr;XM*EDKj%W3$YlhvO1fv z1;6JH9L`bvA7^m|S91^d^BgboUp`{gQ{g?LGZ|AdTgYR9^KVvyoWL-97M}Efv9Lx!v z%!ORaE!@GQJjt89!&iLAxM#xqBxHJKW&svv1y*4LHenZb;~);>Zy`?v1OMZEF5*`1 zvV2OvX&i#yrf=qAbZTSefoFOhiTNQv z;>RJc2Lqq75R0)KEAngBVk@>|SN7nK9LVvU#F?DSrCiC4+{!MrTE4Z3lxPu3H zn3s8-clm%X_=dqN{yZ@OlQ0d_GY|8#C`+;;tFk^Dvo+hZ5BqZ{f99|JjWaoytGJHa zxQhpQgqK6!3Fn$8tusDPG_e{=<8G&A_$rInf!LiI|L;Lf#Jsvhfq ze{?402h7TxEXtBB&q}PvM(iB&SupTDd-F#Q;RsIU49@2wZr~Ok;!$4V4c_BJM!6Bb zPc$YA`63ud$#l%bkNGJJu^6keI=^KDc3>CwWM7WrFPzM2T*{SP&&~Xc$9Rpm_=0a3 z_hxwCgiIguRWOj5xtW*cS&8*Rz84W_#FlK!ULm7I1p09(f951k4kY z#{c-7(Qk#%kIlqP&J4`Lf-K6){E7`jMnnXfvJE@1Z^-BofdL%Gk(?GXMnqsHf9GPZ z;yUgP87m@ifX8@>7kQPB_>}J$^`G!_;xQ33Fbh9nK9*z|)?gjBW_$MLj~vF4oXlxl z%9Y%~JveP>?0~Ilp0Twq|?wa#cF*CEX5R0)4zhEuaWfQhwM}Ehi?8_k>!SS5L1zf^aAtS%;f4#h! zyUh2=hj_yLtbBpj&2P*9@`?FN`7I;vhtG`_GV=F#TqZI9Ku*n!=Go+2%x7LmF2*wE z733=X#=NoIobA|&Kd=u6awx}g0{_QZT*PJE#$7xRGP3t0@(G?dzbs$pUGo?68%8_` z_ZO21n1mUbmAOMko|{iD$P(sd0u5u6dGao1q!)%77Bep`mtz(4 z>T*riH*X_%U^n*U01oCT{=!+D$0Z>n@3&H3!_DS998JUB*S(0T~h1FP__1K=B`6CB% z0w;4u$jBa-$Sb(ce7C%hN6atCSNMoe8U4TT-m#f5WaK%?|V$Jmv-D!YpN8 zRj$q^Y{BmA#Q`BB&mS$1<8037T5jZykdg1(D<9x7^V9NqUNwIp|Ht5ya33+4oF6iM z$jEbY%XwLbU$8dov1!Q2_qCGS@jLS$<$;{Q$y~rCTop3%dE4dPJjHXo!}|<84eu9Z zVkT#rkde>LA?IdEmSGiEV_xypwIf@fPMxHZEp2s!Zz#ZJflRV4Y{FiSTw*UD%C%LPnl5Tpq>goXtgC#x2~z<2=n#-4Au^oH!M-Jf#j^`v!=WH(Ka<1h@?&6<3 z&GWpeDBeSv)i?J%JvuVhWA_6VhfnC^>eL0e2IU{6-h`=1K z;yV7xgZ!J9`7mUrh`$IS&vQGlHJ&o zgE^f43z<10FpDd>hMT#a`*?^ac!rmGopjqz|N&(=e0yr*Z)n zGcPTdV-@pn)Waz%KlOeK?RqIhoVAge$l%WaK%!<$XNM3%njO@^z2o zr;G?j&a*@WVlo9&F$1$OH}kSEi?bXnvKni!J{z+WyRuivN9hAU$^$vVe3Cqsv(0~( z7xNGEZSpQ22pQSK8ToJC<3k1_!o38UgejPXIarv*S%Y=hC}iZh&E?kYWZp;a&!OfM zC`C;M_F$8rYea3i;JPsqq~56Fjk%KVyqi}%f6%Yn%E zhWhRhZbn82x=!3A8x_1w%o z+|T1Y&AWWS=X}jLF~jG_X9}ibF6Ln=mSq)IV`DaFJ9gp^?8AW^%CVflshq(DT*6J< z#=ShilRV4Iyw1CPz$mf8eMDn2rew~LIU)j|@G}-+Wq!q4tjl)n#Qq$_U-=tnaxT|! z0}q7E6%jbhQ#{AJe86XX#W=CU?~l*4%*gyK#F8w-8mz-MA#+Fmy~pqQ1N(Cjf94oY z;#AJ&d@kc3+`ujTi^q757kQtL88uG$zR{VCDVdI$n2UK>kVRRBU+_zQ&8BS04(!5S z?8m_z&MBPEE+tJ{-hh9K-RP!{51#e{dtWau4_O7*Fv6ukbei zU*L&ncYFd0fa1+`>aV$}7CV zdwj@1f^ZK(CSo$CW;$kNP8MZJmS-i_WkYu4ckIc&9Lceq!8u&Tb==DXJRh=fMBox{ z@(v&K8Q(HW!tncIF)ouZ1+y|I^YSwmXK8-TT5P~3?9A^uFl5n)z)+6nIL_vLuH{DV z4_PcC@E1?=EU)ke@9`mD@C}2B!q1Dr_)N@{OvB8~&OFS|vaGBU-G@A;XWc5 zhw=FlGw@RuU^!M~HP&D=wqkeo;s6fjNRH)XPUBoI;0mthZtmj|p5WiS%zt=~Pxyi{ zlZE?vpGla4X_=8Z`3Xz13@h$Pjtp(BBo>-W@dI4W^tBf1=eOgHf2k8V^0p_Nd7NmiOA10Z~>QaHP>?+ zckv*P@HEf!E+6n2UolFG@cGf0j47FpnV63SSw3W`$j`I0I%~28+ps75a%9NT5rMIs z#HpOa-?@x`a3i;J5BKvNFY*R&^C6!w+6UqL#9{&_VFqSlfskb)0)<(MWm$uD*oe*8 zl|A?qhj0p~b7{!35rLIl&&}M;eLTVw{F|3~i+A}SpYt7~rVO7OoAH>GA21tpF&_)E zB+IZ8zho`eWfQhw2X^5P?88AE#xWevshq+2T*Qss%01lAV?4zRyu#c3mrwYD?|m5V zF@kXzpUL?l(=#&*urN!pEUT~@YqK7ku@yV=JN9Bf4(4$F!e2R$3%QbOxQF|BlqY$e z|L_6-W1dvuzVfpeOR)m0us$2J72B~Zd$1pW;&6`Q|2T^axs+?Tf&2LvFYpQ<@(Euv zkUG3)d?sdkW@Z5vW?5EXeKuw%c4aU2;}DMEI8Nkr&gLIn%Pri&{rrokc#c6nN4S(GLDCBNpkY{2&H%pWJxSG58ClB*D&+`&*@(v&K8Kb4w7ZWfEGcqebV-c2SIo4nu zwqiT>Vm}Vy2u|U2&f`L^=VtEWpFAD%tBAmPUgb@`3|TEA@Rku7!Z{{C3|T!Q@DVdJ zJ3nOsmSaU$V-414V|HR!_F;dHZ~>QaJvZ~Oko6-1$9R?(c!Rh3f^QftQ~3R{ zn3NwdJ3nSImSP1~VSP4c8+Kq%_T^}f;}lNkGXB9$+{S}E!YjPN`+UrIjG8&TcVZ@I z7Up0+7G&j+4I=_yu@>vHDO<7|d-5j^;W$p@?_A7{+{(Q?!1KJse|V2C_=a(_gzuk_ zA22m@F%Ju~I4iO$8?q_eu@k$q7YA}E$8!=Fa0yp)J@@etPw^aY@(y1!kTtw_494My z{D_&Eou9G*%d!G%hin`XsK=&k$&UPv12~wYIgZmgo2$5vdwGDzd78I)mrwYD5!u4` zjmd;e%FN8pPg#KFSdm||7MrpqJFzPVaTtH$ubjr2T*#%|z%AU%1N@tp`H)ZemQk{Y zdx*<~OwY_Lz{0G^s;t2}Y|ZxU${zfY138Wp`9IF$LN4WMuIHaT$df$F8@$cOe8w0# z!ac-cA|_*Mrejv-WD%C&7p%WFoKH^hG%N6b`7E>@4GcXGaurNPod49!j*qp7|ncuSy`*SQOa4KhTJ{NHV zw{Q>l^C(a902bwFbi|A1V883ti?ub#vUP?M+AEFCl29g zj^ixO<1+rit=!2IJi}YO%m4VCF+K_3Ck~S^1v4@$3$Yl>vI6U{K3lL2yRj!na5N`! z3Kwx1*Kh-Oa1T$0Y#I4|w|JS?d5;en$P<2jknb}AQ!y>`Fh9$(0;{too3I7DvlmBj zG$(N?f9GOu=5`+CN#5XXKI9X=;d`Hk_m06h{E#0pGqdwk7GPOc;8*;H_1K6l*_J)o zmqR#$6FG%*_&e8gGk5V%9_DeL<3--)zkI{@@`n3~#kl-{shOGCS%f86o|Raa4cUTi z*qPt+M-JpTPUQbMiwn4fo4Ad8d4R`wiWhm6cX*#q`I1rcg?oy|xJ<}&%*2oRDT}ZK zzhGt7XJfWvJN9Bf4(4!<0dUL4L*{FT3PCg*Z7mvbYxaxV|?953<~@A3`bD-iA_Cf{cg zreIoTWIh&TNtR(He#x5u$I@MgNmc)C03Kpjkq$}eMp6)vkd~D0?(P*@@oH_A*o;@?yT-WZ-upV2oExWQOhjIkRa}wurA%Ej4 z?%*CCjFvy>B_=;%DrRC<7GhDBW_i|SL$+jFc4bcv<48{6kDS5TT*Rf^ z#BJQmgFMbtyve(K%%_a{MbO8GOvGf&%A70`VcYk=PhmM$WKGs(8+Kq%_Tey&QQ@&)(0`J$~J}eZMiTMfBF%$E#AWO0gtFt!Sumk&XAcu1_XK*$b za~U^s3y<;y&+{_>=0AMRcZ^;z$RC@jn2uSQlSNsQ=+j6$R7NLgE*9v zIF)lapDVeRdwG!Od6~C(kI(sp{E;&_ zn=816o4Aepc!=kDnKyWckNK2u7%Cj}5S#J&2~#mEbMgxoW<^$I9X4Qdwq_@G<6sWs zIR3y{oXe$L!5!SgBRtNlyutf?#OHj?kG>3giN%kZgsGU0xtWh&vN+4~Yt~>LHen04 zXJ__iKMvt=PUQ^F=VGqnI&R}Gp5$5n$-npypYbgt6$yI!kTIBmiJ6M&n3Xx1pM_X~ zmDz~R*p?mnEeCNV$8rj%b17GF12=Ow_wy_-@-N=v-~5M>iUz%eF(%_OF+X8iW@HZL zW^sPSO034_Y|YN>&VC%o;T+8woXtgC%GF%Yt=!3jJjzSF%GQ@-naS4j=FdUoccW$RCyQnTRQv zhMAd-U$QvM@@v*-V|HRU4&iYA#Gkp0E4hK2d6>ueXM~-@LVxit|K>BkVzd&${xO-5 zNtuCJSdc|niPc!2joF>OIh>>UBY)yDuH+8x;ZdI8%?P`Oh3@h(pYkmul??Wa!vsvu z)Xc_QEY7c3gLT-1E!czKa4?5)A}4bpmvA-La~}`!B+v3XZ}TPJGOSdPI~tQPIWsT| z^RfWTvl45u9^0`Kd$JD)a~OY&uzOhOC(hyR$b(a11ALDi?AI zS8*M;a0d_Y2v6}Gukr>T@G&EmcYiSf6Eh{#@-yaT5td*DR%R2nULH~f}kIDu0+ zgLAo%>-al&axahYIM4ACZ}1Ku@d=|=2>SVuarrSbFbh9pUVh2qEXRth$+~RIj_k=k z9K@jOG=JtCF6J_>uKfzvpX3%P`wxt;rXi065kH+YAS_=Hg^2mO4&giOlJ%*MPd zz!EIY+N{s!Y|YN>&LJGm@tnlzoW+G)!r!@-dwGy2c$znPmyh|BZy2f)^ztENFd0)a z1G6v}Kj&90$11GB=4{Pg?90&{&pDjWwcN<<+|82__6!T1<)8eE_xO=-5xaf?{ zWK7AN%)^o_!z!%7HtfJ}Ifx@UmcK;UJ1n$-%eayoxrK*$jOTcXcldz+F>Io8NO3Cvq}><{U2OGOp!D?%*CC z;c;H&4L;!uzGIZyK~M3RkSUp#S(%f?Sc+e>3hS@|JFp9Tvmd|X_ngdW{Dlj+j4Qc; zo4K3&d4?BwowxatZy8o6=p`EC@?$1vYUbkSEX-mo!wRg%T5QB-?8=_}mV-E+lQ^BT z_#0Po6SwggPx3F`;xoQtw7NkbG5Il*Ff+3;5A(A$%d;A5u@RfG8+)-o2Xh3+@JIf{ zMO@0&T+glC$^Y>TFY_87^C_d&3;OtwNtm43`5BAzD}K!?Y{C}o9$~+*P;U<4cO1oW zoXKCfgv+^!+jxv8d7ZcUm`@q4ez2aHOwQEI!t5;0uUM0H*^I5&H^Tm5p#dDmk(|iM zoX^Ev#dX}ty*$GUyvx7&jIa1ngJ32G!hvC-?EIWxuoz3RI%~5DTd)gza2Q8& z8fS7LmvB8d@i33^3a|44AM-6EH41XYV?t(N7UpI?mSAbtW_`A2XAa~Lj^a2@;dK7O z1zgA9xr2LngvWV>*LjZ*`JAsAxpB}#I6r0*reOx=U~U#-QI_S`tiuLu$+qmqUL43F z9K#8m#+h8mCEU#I+{Z&a!PC6VYrMk;e8LwDH3|BP%IJ*E6imZUnS=RRh^1JTRauiw z*^-^ujr}-~BRGbWIgN9R@+psgcvo8nmdye7{oWfb0%OzaS_1wgr+{>dp!E3z9hy0gs7-|;u7mYEQ zf@zqU*;t50S(@cpl{MLrP1%+m*^_-Zn8P@k)3}(+xP}|JkB4}YXL*%3_>8X@xw+RX z#$r6CVFqSnF6L(;mS-i_Vm&rxOLk;e_F;bxQ z-!V#ypr`1J&4f(KG|a&4{ET0)Fu!IM)@FUSV<+}xACBM{PUbW&;c{-}P9EneUgvE- z;uA(~8T9ZWV>3R}FavWiHw&>SE3h)_umM}LExWN7hjTP1aVlqX9+z?jH*hl#^BB+Z z5^wS@pYau=vkjLrB=!wk&9+$_YRtil?s&&KS;ZtTPU9Lf=#${Ae3 z<=o1hJj6eEmKXVekNJ{s8P+D~BN~%1Iny&Ub21MLu_!CC8tbtUTd^JcasY>MBq#7k z{>(XC!8P2(ZQRR)yud$slXv-&ZyBR)&`%tuW_spj0hVJ$)?gjBVF&h$aAa6$Aiw7* zPLFU@SZEd(@K>(lI&R?(9_J}u=s> zUD=cUIhZ3jhClKrF6J_>i_1mw)puBemBLV=_5YGYhjb9}BVqE3+2s zu^C&jBfGK>`*SQOayn;m5tnicckm#O@;oo|7Vq&nUo&=xpqKdkgsGUB+4v=kvm7h3 zA)B%dJFp)Ias1zxF)cGP2XnIo zOS2-YvMw941G{h_hj28^VQ=>17*60E&gU9#;12HL8D8LhKH@t@=^o^Y&e%-JwEUDgn2!Zno|Rae z_1S`L*p)r`JxB2ePT@i>;Tmq>0UqHgp5q-p;2VZ|1o=N?3?^V=W@1);&M#P;U$GLa zu{m3_3wy9X2Xhjqat`Nn9e?Kz?%@$0=UHClJwD`rjNH@xz}QU8Pneybu^@}EGOM!z zo3I;uaUh5ANB+cLxPa@qiHGOL^SOd+xQW}imj`){mw27G`G`*#<(r_N4;YK_n40OCl{s0IC0UKN*n}ic%oI$+yb(?b3l(5le$AS!%a&}* zZtTTT5l#&YjpJla<6%|cyvu+2oYB7x^2BB$CgZ2f!MrTM z5-iPXti{G`&d%)4Z#jr#IDykRldHInTeyPRoT+Mwv#FISB`w`9z3q9g3)MPp1R zXKH3*R({SeSc+v?l{MLvE!m0PIDp@AG{1+h%fn;(FO&* z#AHGyWd>$pZsucoR$@)oWiz&7Pxj$p4&!7_<1bvmb^M*XxR1wpl9zdn|MEHiW8}d> z578N$DVTXH5@n_EAT5jY{?&W!2<}Kdiy9gJ& z|9^+?0zYCbreGR=${Z}g(yYwtY|ZxU!EZQ*6F8MKxRfinkz05?!bM@BQ@qG4yv_T3 z&36nR5*+^#lQIP}@>3RJ307cbHfL*gVGoYr7*66;F5*(I@)iGMtYPnS zE(;6AV-hB3dS+&R7Gf!uWo1@pbGBwDcH?*ap5r-*vpJ7zxsiK#fR}iccldyB8R`2V zcTC1*dS>Ql%**2ZinUmeE!c+Nau9#yPh7^8+`|Jr8{x|L-yg*L5w3s#euU5YnlXk4 zkH=vurekjA!)JWQC?kUN z#AbY^VvLk!44@YneCvzGX@Kn%dE`FLM+NEtik4N&2RWEM{_)9aW2*yU$Go(vM!sk6}zz)2XY9fat7yfF}H9B5AX<2@+|N1A^&6K z(Ls*rjLo#n$Q;bg;{1v=Scgs7l6@lF8y4!%?>UN7IGyvjh-dx=@J;!qrXLBA`a1HnH z0FUt`FY*c>@?XATXl$^q4;Y;Zn3$QFjd_@#rCFZUS(}a6jP2Q(gE*9vIgLvqJo^6o zD7cQl^8k6mDmRXsTU$8L0VmVf0EjDIz zc3>CwVSkR|IL_uguI75~=V4yppS;Pte9WhO!_ZXs6QeT~(=i)!u>ikhX_jYo)@B=a zU{Chpcl@5?If*}W4p(s<_wf)f@(LgFUq<~Y$o(PXF(ETCEAz4dE3h)_vLQROJBM*3 zXK*%GMR+nSw2oW2gU5M_mwAo%_>eF7hB2oF=a0)|Ovwz)!raWqqAba;S%pp6k{#KV zeb}GFIFi#ilgqi9ySbldc!Br%h>@lTdBd21iJ6g~G7s~!7)!AttFjqeu?u^!9|v+I z$8suXa4r{eCD(E@xAO!~^D?jTF8}5;zT!tSf_`H0Vw&x$4tU3%+A6r#xktHnykxaY{f3@!S6YW zGdP>extg1~oyU2KmwAo%`G}Ec206o-h{>3R*_n?8S&C&@kB!)w-T58A=U7hU9M0!* zuI3&d;CWu=13uo*nry{(?9SdC#GxF^iJZ<^T){Qm%AGvG zBRt8oyvCb+z{iX-C+Oz`#$r5v!c_c>d0CjnSe}(woAud}ZP}f@Ifz3!jz92c&f#jV z=YAgM1^&sKyvrwi!AQRZeS|SK<1;x^GYhjbKMV0ImSZ*6ViUGtdv@kv4&xL~=db*Y zYq^n!_y@1>I{)Q!{>R93gB}tvF*7q83$Z9Gu^Q{MG25^M`*Scyb3CVTI_GmSS8xrt zawiY)2+!~Wukj{d@C~ER3wrpFahQPVn29-k7GHJbGeY~_&axS z4^QzNukj`y@?S=sFE8UUA(JyTvoJgJu^=n3GHbIwo3k~0vmeKB0)OEGuH{A^M%AEXyg;|N!*n(}?mjgJSlQ@?Pxsh9VlqYzVH~5UN7=2NYCpJ?s4RbRe%di6L zu@O77JBM-vr*a0DaV2+hFHi9t@9`l+i-Yw?Wqc-LW@h7;EY2#d!TM~>t`VLN3-#mx ze#deAf%CYCE4h|ixsykEf*1HFAMpv_GSaWXx;~EZY*;7>(=Y=+V_ueKc~)gjHe^$F zVGs7_V26EHE;F%!RFVSdGOtj1bw##Zdj zejLgX{Enh7xv%~4(Ct& znM)(Q7#3Q=_1wgr+{-`sKVIi;KIFfA#s3(#EVy1YCW-KJSSUHOM)+4)C?^ZCD9iF| z)?ov-WLx%RAAZO0Ii0h(h)cPFo4JPvc#7wEjW_v<|M7$0f_%}Lh{>3anV5(9S&XGv zhYi@At=Wm)IGDpYh7&lIGq{W^xshAAmj`*7*Z2>gG4k>te>h_@E>kl-zhGg0#d55| z8f?HOY|D-u!0$Mk<2i-XIgg9Dkz2Tz2YH;Qc$wGuFP}5CBIqM3<1-OcFb(sv086km z>#-4AvMsx@7yENCf8Z3(<~*+DMsDYB9^xOo!t1=phkV9YjJ`7HBQ_KB6Q*TG=3s6X zVo_FM4K`#`wqXbMWFL;=I8Np?F5z;nY1#_Yl#9LABH#+h8kmE6g_Jk9gG!w3A2k=F(}<1-O6F)ItPC@ZlVo3k~0 zvmZxs9A|SL*Kh;(@enWa3Lo(aqpS;Ze89N;n5mhb`B;#pSe7+dhwa#jgE*9vIgN|C zjN7=2CwZ2)c#lu{lCjo%{xK~xGA|3TJS(vwo3a~waTrH(dW3i0e_j_C@K>(lI_}{C zp5SR-<4r#2YewA=T<=3BU}9!wHs)mke#LUE$3|?;_Uz4m9K#8m${Ae3<=nu{JjRo} z#H)N7;k~fXONKTEb5urWY$oO>%*I^I&q6H0(yYj;Y|57G#BThaqxb`-a3+7@T5jY{ z?&W!2=1tz^OTJ}{-{1G~AS@JzNtm4Jn2CiV{3k3_lx6uf>#zY^vMqbE4@Yqvr*Z}t zaVghwBlqwCPw+JF@^3!lD@NHAtezF?$nK@VX}5aH9XP-3QLdgkKi{F234kyTlbjo6Nz zIFLg)o|E`9=WrQU@^^0KK_2B9Uf?a>;~R#y2f3p$CX+BZGcXJDvH(l4G^?=|TeCfT z@EZ>02u|c={=x-Z&ehz;T|CLN{F8t2F8}6JzT}5Hf?i@UJ`*to(=a#lu?S1B0xPpQ zTeCO&aX3fw2TtKaF5x!r;$a@+8D8LDyv0X+!ncgHGw2~66EY>!G7Gaa9}BVqE3*z8 zusK_^3wy9X2lEF`;cU+1YOd#2?&N8n=T+X|-~5OFG4igUk64Vyw9Lqy%)_EA$;zzG z7Hq@L?9RR%!10{K>72y{{FT3REBEmbPw+G^^BV8*Aw#=^9-=ZP<1#TnVNT{@K^9?U zR%bmnVkdTEKMv$L{=gZW&4paTZQR9!Jjzo%$GiNSPx+FeJ^EmD#%3y}V>aeueimX$ zmSGjvU`w`TH}>K{4&f+{<5bSzGOpwXZsrjl=UHCl13u;}{>PYmgMQ*NDN`_8gwMi4 zxmbW-vK%Y27VEJU+p#-)a|nm?C;rR@{FUqYJ9lv(|Hm`D!s~p*Ck)#cGc7YR zH}mmJ7H3t~WLtJ*FZShN4&zu(8Mf{>wKE9SVAg z!8rVcshEqOvj|JD605Nho3RJK;Xn@ID30T7&f^j;=Q{q*gFMPJyufR`$-nszU-KQ~ z91eO(z~oHLOw7unEXne$#KvsScI?Cf{EnkJp0hZYOSyvUxru-9e>~62yumws#s3&~ zB*-6)ahQO~n36e}hlN>;WmtjLS({DRf<4)X-|>5n=Oj+&EH2_wZs88@=V4yrRo>=( zzGbANUN;zv$(fp2n4N_qd>$4m#xktHdThkjY|n1&#ZeKyc>npFoXlyQ!}(mp4cx|E zJj6eEnb&xa5BZw!80U{*JqehcshN$rSe#$6605Nho3T54a}bAe0)ONJ{>s%{&t2Td zv%JW^c#9ADFC!ld@`f`u<1-^aWgg~dg$Q4Ug(|Za>#;36vKRYuFo$tkgs;OwGdZ7& zxq@rBi~D$#CwQKh`GAl4ivRJWVWH-1$4>0YKKzc~b1Wxv zI%n}WuHq(c<6a)*|9FO%d5!<_Im7=Ktp6j%XCkIx8h*+g%+EqB#j>o+hHS-l?8ku| z&e5E~*<8$J+{&Fi#6NhN=lK_J@e!Z!EhC)_dWpw`Ov$v&!tBh)f-K20til>>$+qmm z9{iSrIEhm^hx55H!bstvE!@rh{Dc4Fb>8Mbe8#tobSgOShm665Ov=k6w|I|F`I4bCLH?+W#du7|Ow7UDEWj^W zh80+iwb+Io*qyyOoTE9Nv-lfVaU-|z5B`rAd4>P*8Q(I}*`SAbOvsc>%g^}*%di3) zun9Y}JBM*3C-6u9%sE`drQFQzJjRo}$-8{arwlt6jy*P{` zIi0ik8&`2-gzwM0*L;u{_$UA7Ka6rA$n^meMi?bLl$5ENp4pg-`B{i1S%$S(kImVd z-PxOiIFu9kBNs#%9v=FYE4h|?d636>iZ^+eulbH~E(YgM!1T<_oXo>gEX%rV$W9S{ z7#`}zKJ3q-9KmUv$@yH&4cyE_5q=aN`h%x=p4WJj5BQib`Ib>H1?T&aiTMfBG9z;^ zHw*Afe#LUE!WwMACTz|2?9SdC!0-42r*I~J;jjFSYq^m-xQB;%jAwa~fAJQd^ED%1 z4*Cn{$4tUZ%*s5>&oZpQYOKXZY{s_i$o?G6ksQmJ{Dq6TjBB`o`+1lbd4-Sogs=II zvHlGDh{rU{z--LL{4B(hEW_HY&*p5+-t5OA9L}kn!MR+>b^M(Nd6cJlo_F~-pYkOm zT?z7sF$Uu>71J>*bFyfJ(ZfR}S)P?xi}l!)E!mM>`3=A2P>$euPT~yC=0YyvYOd#2 z?&Jxc<|SU`9X{Y2hOP#=qcJ9vFgdgHGZteh)?{6_VF&hNUw+R~{EBRJvL=ac4Sw6!*4l;6F8MKxRfinkz06xM|hg&d6RefFP}5YP4^$;Fac9B z9kVeP3$qx@u_EiTAzQH>d$BKva5!ghHWzalH*yP)@&qsNPu}B0zTg{vcq`~51{3oW zre|h;&M#P;U$H7{vJsoH6T7h=2XZvW^C$kym0Zgm+{1Ic#GAa!XMDvdx7`nn&qPei zjLgYAEXtDnnpN0+kqh`M*Kh-Ob3ae;G_UYFAMpu8_ktdx zG7b|k1=BDu3$P^1usUnADO<8LyR$zBb2P{E7cSrmuHkm>=24#DMPA{3KH?jO?gu@@ zU>qi83Vz1CEX-mo!wRg%TI|Gb{FZ|_h7&lQv$&YcxSpH1hX;6pfAS{p@-d(C4MPut zJ`(d2W?&ZPWdW9C8CGRYHfD2nWLFO1aE|9B&f_93=W71Wtvt>1yviGVz{h;SH;nOj z&_f(1VRB|*7UpI?7G+7+U>!DQbGBnA_GBLp;!sZFRLRmMxRQtX2QTv)pYauAJqq%~V+Lm7 z7ZJt|4;5xfmSJU9XFWDzE4E`-_T(^*$5Riu^s!cKZkK7Cvq}p@)xe+I&R?(9^esP;#J<^ z1HNUXe}kT)F(#8UHFGi#OR@|ru^Q{K5nHhx`*Hxk=P3TbDO|`UT+Q{|#$Eg$&+sPi z@)iGM_>-WAkC>Dxn4X!Li=VSFi?K4RvpyTMbA)liL)|%q!#R~RIF}3g8&`1`_wguC z@G5WcNrdsjLoXP58q84{mmf0?GcYd;usFYBMOI}~wqyr(VQ=>1D30S)&fqex|#${@zXEx?yF_vNlR%UJ1XM1*LFZShN4&zV!nJc)4`*?^a zc$znPmyh|BVb6p7(HMsbn2wp4j|KTPtFSifvpqX=V1)6*Lqj;4<2i$~xs)roo}0Ln zdwGJVd4qTOm`@q`MX;W5#%Cg?WLoBA9+qSoR%Uh9XJd9|clPA~4&z8pfS z+`=8)&%^wafAKE=<}$5RCu^aoaKZkK7r*S41 zatYUS6A$wk&+;Pg^AVr(HKV)^`uKo}n2c$dfq7Yg#aN2fS({DRf?e2y!#I)?_#@|Y zF;{R6cX1z&@g#5X4qxyMqr8!y37M2>n1Oj&fW`S0zh)ISVGDL-SANIuIhGUo3m0%1 zS8^x!@(7Rf3a|4XAM(El6NZN(zYY9|v6zf0nUy(NlqFe#m06qh*`A%*i+wqm!}ueA z;xAml_1whW+|P5o#Ou7x=X}i={{=n7VIn5ur_8~8EXeY##G0(jrfkWc?88AE%F!Ip zxm?KKxs}IxiWhl>kNAYI`Hr#Q1^MGMDN`^zKVvbLVlCEVQ?_JJ_Tk6~6NQJyax$lJ z0e|H>{>~lT!^1qri@d^z{Fkr!jxj<}{(n7jn4GDZnb}x?U$P>rvMw94CEKzO`*SEq za6Bh*24`~-mvS?=a~}`!1W)r0AMgoZ@ckbH{(m1)nTW}louBaw7Uowh$2x4l=4{Pg z?90I%#>t$)i$8!>=a~79#HGk(;9^rAG=Vd9g6-Lv z1383~B1{$@n#$Rn#}!<|?cB{n{DY@?o;P`yFZq^X9|qTt#)M4DjQo_jnU5t|hP7Fr z&Dolr*_}f;oa6Wdr*S41@K>(lI_~8`9_J}ubWdW9B zMb>0pHen0);5Qu1VVuJ0{Dlj+j=ysU_wY2&^D1xf319FXqr?n)h!JV-PxN%IGjK6XD;BcT*u#eh=1@bFY-3;^DQIA4%YQygyT|%Vw&SJvF+*2nVFM$ zScpYgiPcz_4cU=h*_Q+O1E+8imvRet@I-`Z!$YTeiC1}t5BP?mIKgqz7?VkuoZ0yq z3$h5yvl1J#IXkcmzvUoKZn3$QFjd_@# zMOl*7Sc?tWlwH}A1Na@Ma60F45jS%?5AX=D@&@no5kv8VyixfvlQ0XjGan1G605O! zgc-v_t=Wm)*p~x1mJ>Ohv$%xIxt+UtgvWV_SNRX0@g1Wi2-X>!@tKa9n1i`lkVROL zRau7(*nwR*n8P@Q(>afexS88|Ji^T3p;NrbE4p@9xPZTM6Sr|M5Ap<0^9Jwm5uY$>!XW>LjLVOinc0|^1z3?) zS&xm_jlI~PgE^6txsXe^ncI1QM|hPt_$rbFnasu_|k_ z5u33SyKxAIa{_~lT!y`P-E4HF5wz(;BM~cIbPyT-sLmCV)PWj`eQROKVc?jWnmU$IaXv{He@GuV?Pe$ zBu?dGF5_12d4iXDjd%Ef&-jYbQU&>AG654a9WyZpbF&bOvJ$JYJ{z+= zJ97|+ax5ouCV$~-uIF~{<}se+4c_4+K4B;WNHtlr%xkL`=qX%*0&$oMrhnYqBoeu@ifH}VLN z^9JwmEhA+La(&DsOwY{xjCom(71@+6*@@lwJx6h3gqu=^W|`-5DOYee_w!tYg~CIZ zc%8TTf^QflbFlvhOvGeN$4o55qAbnwtQTRC@K7VRWLtJ+PY&e>j^`xK<03BSYVP7b z9^*;g=6(Ll=lmec`}GzN4@GA@CS(exVJ?2oLM+P4tj>CD#7^wSejLb2oXT08%heH< z3JQ8-_j&&ietQGZ|Ad6SJ}?OS1g`v2>TwQkD%DfDb8MFCZWd z0@5KJ(jXw+-QC?S-5db{>F)0C?(S|7kj@Xjxqe-1?*)3_d*(T7IU~w4tn=OCVS^g5 zIa{+cyK^W$#tYd4?DGgwOew9~m+2xAT?=8x)nX8IMVsf?1i9`B|71 zS(SCzfF0O{eL0YmIF++GpX$#bSd7Kw`h0pnlANiG0(|~8g3Z`aG=4DZqU^!M|JvL%Xwq-Z=;s}o6L{8y+F6Jt(<96=mDW2n1-sDrh;5&X| zm<)k^!ZQxzGZ|Ad3$rsH3$i53ur}+n1>3L(`)~|{`44AuDOYkA_whJS^Ez+y72okI zLuCx?5S9O9Ql?-!W?~Wk&ho6x=4{O_?7`6- cjHQd1M+|Bd6%qM)#5Saq^3d1Oj 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

    F}HGXFQN&4^Uo>V%7OEZA+f(hiTOqi!~ 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

    kDVc3fzkn7aY}x8YZ@od8^M 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 *^$!G<@xWKOS^ZNeU^6B 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%0D*j6|c4V%zVts`GYN0?0f|yc402M}v-O@HJ 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

    UNftN z^DZYXjzCrbmvBzDE2Bh?T2HX>jZ4*&ZdZ6T#4UoEU=)KQNm=RSS}AoRVQp?v*PNV( z_DE$Ux+t#J!-UdlZGLmQE6pu5IKDykbIo#KuN)&cIR`VH%1hHa$urivEc?QRB`kZb z-ConAtPv0@>;xeAewv8BK$gDU9Z(Cow}>z2#gWcb4y<#eZq2&n8Oeson#^WJXslV; zNTHaFv$>6t{w3JKL()PuU@Q2X_S_?)s(e zQiz400jg`o7|gZBEv-c%7ZEO_k1e|rhRh?9W6O|YzhY8Ac1mgAST#nLNbL>OfW~O9 z65}x}X8AM?$tF2RhnB}hZbP}{#GUU_Y|(q)FOjb>SIY~;Pw?#|t!C$+RA;)2iQH0+ zO7qmbseTiP^;x-AszlOF9ky7ZsO0HQ70SAEE5`^bPK=xtK8l+@5u#gW;Y z&4xsqcR~n;u4h#yhs}3PMsuJ6!B$2tMH!*~r2&eIdMcp0IurqNv7sCn38B51Zf?gE z0DWmGfU;JVghG-7KcXfeU;HbqX)w5K;^!QQXy zMxIjjmd&L*n6VFW0vMpU7s;-6q`|F{2g$dBm`R-xr?^y;l5>3Ru4#!6rZhv|$Mlz6 z9J34JjiE782{}Kjp(=G>Hd7ro4}x(96_?`u>{LXF_o!uO7EP}hb&mCNa<;#FX1XH8 zT5MKTY?Rw&Ro2NUL1HwD>SUz9$=XFtW38dGrFvkkj@F7Uk{75Pi_0m3poUP^lwd+Y zQ8GtLPb1co=mK$CR>HsHtw39$yH3o4vcTI~4MR|Ahk@wSvDLLeiIHv1X2`Q*YDb4D zNuVj+qTbpR>CQAkhEnXgkCBx1C`erg6&)$4HL2_9U(!>|OEn<&;{ziR-kGi4`4Y0I z+reXjecagyWRb*7AEQ_UW`XqDB@AZbfs$`+3(G3U7Uk;AD7!^$18NyiQIBp0)IGEk zVjc@uzt^W*6nRY8>Qg-n=DT4DX@^c792b>Yv)4e{liHMeDBhvGu3u81P8eMAy1ZtM zeaLBsm(k%F-BEd|&p#RrJD5m-Xt+$j9K+rKNUZHCLWzb^xMge2tflSgTrSg5G7Xbw z#O{irqklfcm!E=A0D}saCq?C-qn{JwbUo0nWt(@XRU^Q*DZ4nxbzLVI+tYzo5J_$M81tuJgsx0i zZK7z;wk0y79SPwtAfk>no089rH6taGxu?x)(aS)inDZr5tb!feVI zS`*IZw#Z)?ziwA8!1~y#Da(kAx==Nx`9_aX2)r#vrbj4^kfPOUv`_jA7og3R%4K;G zNTqa2+Up9brVKn<(74nk&=yI7Wt8JH=*pqz!NBnIDy`#7##KoQslvf{k+zC;*bG!W79Vz%V>c5s zm9;+8y)F;i$jsDMskAwL?b=nzC2Jy`D0eQ>+MRArwPf44t9J?$clSEz1C061n(@M2 zkd#nsA!`MEC>??o^s5!-cn`-6Ya`vM=x|~t`(kIRvn9RN-&qS>)i@^@&uo=!?jX+r z*PC>zwL1edvOAqa2ZB+W-%6CMZB2I+V9!2d%~{iyo_z8&Y$HB>_Ow$wXVu_O0W@M` zH}v7)#PFEL$X?V%DXyoJX#&q}cx9~)t@U+Fr=8j=cXkGccxr*3J=ljEFuD-f&zs

    `E3onCUZ-8?YCU#Dl&A`$k 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

    rm zxr|&%K1gmMUnUQbUz0zQmC%^T^{SB#$);pKatK*KmXb@!o5%;rE#yA(HS!DcTQV9A zyj=e*vIRMuEG1`?Ysd}c4ss9qG5ICwM}sQy$B=1c8}brz40#244Y`TjOuk6IMjj)7 zBF{miE!RsRyONn?9$7#xCs&bAlRL>z$*;&bG=vg=U9ub5o19FRkZZ|1$UWps(7+(o`f{!IQ!UVsjUq;CqDNe&<S%p&SXzApDZF*khhRK$$jKkB(lFP}RCWN$Kyyp+r%Cy_nt>ho5R>&ZvR9psDThvXk*&2#nn ziDU|yPIe-DlOxFjav^ye`84@F`9Aq2`Cl>$9ddczIPyHQDVafzCZ~~$$d%-s(tlR??PTi&LZcNYsd}cljO7HJLD1a7xFJME0cOpYRR$$8|} zX5@?0{RY(;h?dy(1XeDVQuANd*i6&Z1XzD^ag5t&BzCI^xEWD&WXe3*QJ ze3kqU`3>oBpsyE0o=+x|UCB%`hnzspCl`@-lMj-6$(PBaIBBDaz|$oI&PNb@3ny(lt~ zY)G~zyOEcYW63MYYsovvP2?`}Me;ED8TlLe51E*(@24Tzn;b-zlC#NM$lJ+1_ZMFCy~YE5^@Fk0QngCGI@afgA7YyI+NAOdSo)0PWB<^k~fg+ z$W7$qB9}^6bX?`iW!;*`Dl0jwJKQVsajN6ZsIig?y1bM1DqoPyR_7P4s=# zBF`mTkZs99WFC1nxq*C^JVbs-{z)25^>xlA&nG94Gsx@6Rpg!I!{j#d1@Zv-A^A1= zE9q;duUnN&A~VP$aw)lqe3*QhJV5?H{zk^8>iFZymgEp}GFd_{Ay<(1laG@7$v4QO z+826hmn_&)5tmGO7d26 z3%QLvK)y%*Nd8V%YoV`Ki)===BKweo$P)5$ay_|`+)2Jb9womgqgv|g#ggZf$z(6G zKRKB!Ay<*>$?fEB@^kVS=}*_!JBRE{_9h3ABgir21adxk4Y`rLk9?6lNPa|qP5wfj zAY)qT`-vwL$rQ33*^?YhUQA9ROUWz9CFCk{9l4o&irhoKPQFimNB%-ax8{A4iR6W3 zTe2J3pBzc%l9R}JdVPqazNUkF9CLbpEk?)cplacLo{I$piWICBa4kfQ7ZzOLgA0VG2Un0LD z>$TU{Ng|t*W645tHo1triQGUwK<*+BlfRLFleIhO>m`tI+oZ;q-N;;W61kXMPTosC zM7~VEN&Z2GchvD#BkPb2$W*c&*_oU}t|V_KA0(e5_mXdrhsmGFDxLK885=L^pk3HOK_A6`4hjB#X&eQJNliSICz{4eS2t?#E2S(QvA8<44F2eKF0kGz;1 zPtGJ4lFP|k$!+9wnNR267wuHu+yNuD?FNDVa%*CFhb)k$cHE$iw7O@;GS>(D7C# z&nA<|W@HC4i!32mkdKmw$zRD@19kjqBL?a7FCe>*^cZkifN zw;>0Rx#VneC;1NfBUyPE-v`-;oJ`InuOsg#_mfA-f5>x(>-bucgUJcxBJv(`C;2}4 zG5I%H>tY>WW3m@Ho-81*CYO?Tk@u6k$^GOfF z7CD(*NwAxIh4#H3&;iJI`U5PS#mG=DS3>nbP2CZ zCX$WGHe?1lh#XFql9!XK$@S!Rau@kN`7!xB`43s=Qhh&7$hKq;axi%@c{w?syp6nz ze3$%`{EqySjJQl+uR2+eOeUL={m3k`h@4KYB-fH#$fwCS$#==)WaKD){TgI_vJsg| zW|1Sv8RT5@5pp}Zmpn}VL{`bx*Smo1NDd)O$))6-92LByS)eB)5<+lLyGJ$sfr|Ir@6l$cAK7vM1S}EFhPXcaaZ}d&rl_Psy)HbBw-T z6q!I?NOmH7kfX?4axQrlc_(=vxtrWienEaqMvv9kKZ|Tawj>9WBgnbrDsnx!m3)SL zhde_5O8!m8kJHyZm+VarC$R)p=|kXQO>sVXJ$Wm+iQG$mOq#ijpG+d#likQm$T8&Q zB%WI{6Oy9r+7cW4yk8 zZL&GpmK;uwB4?8e$PMH@u~J=vAaB`1-K$ven<$sOdYA=!i+K#nFSk+aA}h2-_*gX9+S5cv@qRixufCp(dS$l>HzvXGoct|T{*_mf-5UF2)z z2jo%m7t%LX-$y0#Lb3_jgX~96B&U)$lUvAbYeZAUb zXR;@mP3DpF$hG8c-C2u5GlRL=Wvb#kUUQQN!Gra=}UGd zdywPF0&+Qd54npxOdcoeU!&t~OAaPSle5U1$#vv2 zYsovvUF4VK4`j@>I^LRO8rg=tge)PKlTVNzlM#z`Jc(o*vL`v3oI@@o?;;-{-zE=} z5!dN>tB`4A8*&6Wn!J*{mfS?XM!rk_M#e5-x{@8qEV6*ShFnYDP97xRC;dxxe9>f6 zvL!i%EG0LRuaSqyAISJ+I=)mglN>`XB(EbMARi+Sk-w9FlX2JUc-xVekmJZ%SX7ZoJaR6%hTKBFME-{~ zR_SlgG&T+jRUFl4)cXIg-4ByoP*$e2jdT{E+;I4Bx=` z$!26GIfk4^ZXh?3&yWYnZ^@|JnJ#1tvNPG8%por)uO~N?Tgi9GBV^beI{s*~3E7(L zKwe5tBNvl5kdKgWkYADClF@haImk|A4>FHjLf%O}LmnZIld&6hd~L{XWF|S0yqdh8 zypMd0JV1U&{ze*i>Gi6jTXh1e2Tacs3@nivc4S5}TANewQlnlRD$A2E#h8#%dkTc0u z_yHbuOrux_mEr2ZRB3^W%3~T33-(KiG1TheIFlh*8H0M zjjZ>GKHiXQNp>Z($$WA;c@w#wyq|oM+)I8z{y_dsMn9^rn?m*>=aU=Az2s};aq=Is z{$o0xj$|)#JUNwIMcz(6NA4$&k-v~Nx9E85ksZjMWFA>Wt{~Tu&yf4bqvTIy?BhEA zbI7)2cQThOByS+slDo-Q$ZyHt$g`f%@z){SlHJL%WC6L9Ttz-XK1Y5@{z%r?s^dSG zY)|$eCy>SDYVr-ZDME@U4vk1QtFkdKkCkYAAT+jM+w$kF5#@^$i- z?fSfD$s^=%q`5E$<5?` z@-6Zwvhr@;2ib$nBCjBCBcCD}izC(t+q_5MQ>_AQ?uOV+BA14oz z$H`A$*75vK)_g_(u19tt7n1AA9pqWBYWWdlA-ROSnS6}gL4HUcC8J-{@zf;K$hErH{`Em+yNb5Q!$!EzUo&*a}^+}k?dG_n)fm%M~5CFhZ=$Svef z@>SCRj*d5hyohX0b|U+bZr|lEcZ-JNZ0$g#3~`LDqdwU*{q+oy;IdkrT+P z$qnQ-au4|``9Ap<8S%cpPIdAkvN_p_yqKIs&LG#5Pm&*z-;jTh$sg$Jj3@6RUnP%| zO%H3iEOH!KM9v|vC0CNSlm8{dkLY+}$p{0#!{MH?pd=@)Nnz6j{!4AqCM~U5i&m}E z6B1IJHEZVjo1WeRzgo0RPXiMYMn_+f(YJ?bnutmNGvN`_`DGZ7+@pWBP{9qM%3iL* zo8q^GG$Yf<=A_6=cuO*!Y(=&q+mRi}PGlFd8<|1&Bs0lAWIu2KzYhYl_dAxnv$Wfy^f-k(0>+vXGogmXOoP8RRT-HaUk}3@+)O+!!POS-t-D9gu59j<{}%47 zUv3=b#htbAo3nM;9=Wc>zU(Hs_F}n)3R$@K>`V6i+j7H)A;tvvl}nSFEnBFr9I>QF z)Utuc+uelQFs8*WZeiU=!X=}!_blu6*TU@*Vw9e{@Wm59#O^Y$-g(9Q%ep7kUyOuY zTvJOQdvQsxzn0B9v3TZRi(fo;xk z19lmhP&lq_Lg|G3l7y1{@l$e2rxoWWl#HE_TacSDt}wSG0dBw(N~RSR6&9B!6y%na zV3U#r?gJuqPDa11E@^EO6mWd%w0!Jinvjz)DR)+acJ7bJb4n8se@;Tdw8^FUMU!(A z3iA?L8%CKjv(KMY8F8woU;F}cMr}N1)Ut(A7}W#MNvdl-*y1@!QTvbxDvTxAN++CI zN92)Ebr&A3Y$cK%kt<3&y~?EA;(g^rbL?#-YHaK9rKZt0{5I2AWY+qB&+`A*_cByv zvi9x*H6&>?GR8P$kh)7ICrw^bnpCu8PEzUO-xq!yx$yVM*sHHXo?7BVMZb7R(%B~l zCM?_+x$FC|#a~^ue+dpu8}UNKq{V+<^!&1nzn1kkMMiR|oJ@I5F^S$(ONPjcdDi{O5)49Z$TnaBq8*-pls95Yfkp_}JZLibJwo z$j-(7Wpk2J0*iz6<*YpIDh`cU98%7#I0TCZ#o^X-%(yP-A$?|sKj|}mGsE}$jK_Q^ z75bkvy4F8u`weHCTIrJom%*mlg{7GVs4`?vg4}T#9yu#cp%ZVg-FZ{fxw&wk+*#b2 zx7=%nu+<1|*nPhN*KegNL)jrcb6nrT!b#JLGO^Khi*&Uc8}>#i!0w;K>QZ%O5(Jxl5)?Gb&aY6lFz`2sr1e&1ljsB*Po6iJtp z|9qQk7)JDiGR_Dyqedh_tfX|Dk!HM+Vi@5?v2f4aETU59r<%hrf2Aco6qdcEaQ#;b z%fm4kiKui#n!=6!6jq2cr-({7U9Yh6eubOGb5lg6RfiQ;A5~aW6=Rr)O1CsuSUW`F z)+-d&tyQ?~5rx~|RJh|?g*&4#=833uS3`w+dnw#spzz=_g@-pOJhDgO(XSL93u`6k zZ8=xr@m2~?3{u!CE|4NBJ=qAYa73l2x+pxIqp)qh!uAacJ6=+F=5vMT!ZF^8sI)6V zVRvVRJ);%&&R2MTgTf0>DC~P%;l<+$`)jn7(_czccsWzymC*{X&Qo}8y~69;72bFs zh^!Q4{-apQJO|^v$V$;>8!+m{EQ}3fzIrwc+f1B|3=ngy1zwczz=inw%>j%gD<#X< zpN2uMIkH0Z2%Ht2jXy?A7=BmIoodAV`dI^vd~s~3NJyZTs64sUi1|}qfdm$N1FLMj z332@MGDd51otq_evYe{^$PF1)KdJ-~pJ`%*DF-%NGDg)ZJrELMK3B~!ME)%+BwFP3 z)vI1V6f)7~Y>Y39A@iHa$QSn&uE>E*RdaN_mZ>9W2g;}vsBTsnp=CPRGU{5A3P#mF ziHIlOJP&s&2S$j@Ok4|*<7d??bMdXN+2A^S$M2cWP2MXvkYGNCLAE5)YU@OOc5E)T z#f?can_z4$Csx~lKQRr>_D%I~EoJ!TBD+@JCeGc?s)OdsY}Uerp(waZ_f^B|w#Ic>uHK-nIBXb`h>_)-1Xl-^VSJ?{TlABUxptc|K0N2%q@7 z<$3hc60;4CbhnO1i#sTz)|@+W!Yp&3bvRzGj{7}~%S2Rd`6z@Us-}O~UeM}yp!)im zs6+fkCu(E2mpQfMdo}Z2oPLg+V${y7ibHYcXLvfJjtZ}CK8E1ka)o5*DWWAvU%l>B zq~yz1057ec(?9EbdCqg=aC`o9%^x6R#>iD_SBGlApJ*y+<-$5i{Imb7 zzDtt$=S0d`HM=yy_bZh1!MXuafH;^$wTd`)c{_ulEHqxqpo~u!=IGii+ffTiZn<4Tj+?qy8`i#HPtj z*Z&r`8{6tN6wvyKNWIvuLlBm*CJyI6VJo&J3fUyB1cSXTnt%US1bT7ZC;A470c9Bkaw6Ja{E!mfCVEss^h%Lu8Ek{6&WGAcAxummr<78q`fi_#`u{#4uh7 z7Csz>!(VFtRL?NJvBTA^O5=u9+<@>!W~F45H55J_zoc!n{9*VK^UW!EW;;Ah!sQRc zmz!M>*4GY~SFhivj{hce)?zeHcDTBK^?X%_NsY4F{I$1k`j&`{x;^=0oPTW=GTlKl z9}#Xq(Bt^%++xe-d zi!FAM9FBd|439>}$46g96{j?YY4!2*qj-=r*^j!V5edaHakiDeT z^Xir&c@Q#-|2*Hk>oE?(Q<~=>Jjs%YRu8Ual6~o@hLubQg!i&#)VtL(Eq!mJEGwBD zgip3*RQ^l;Qu5zrzRzpuGHYIqaM=(>7fl^J!8hPy!;t)DN)fzYf>njm2)msc{vuy@ zG*^;c%{>U(Z=bD$XZ!Z{;n|-e=%@s%vy*pp!nLpRy^adCx14RFk&ncO*H*#HeA`hv z)mBXj2x=g~`s|GjarP=-ja;7H2|*do*(!L0ukw7JJqkhNoU`vm>GQwr`{yQIMVNCD zw9pBb-k$$W--EbAd2{AE1l{QbKZ#rRzvF8;n8Di-w95`od0-^+@)f>nC==#8IQ)eK zsY=$)28I&y|LD6NCENTj1R@ZpBV;7Upt|r!g$>2!)h*OV_yr=P9zSKxBwXVcb1)hu zvn>v1cu!B+BvtkKVO7w^m?IH3+6p(4yDvgeqp+KCm(nhqvk-KJ1nY#Yjo0OG8&(Ug zRBd@JYY?>23f9FvS;_PX>yFltj>xa^zbdVoebrG|fWSo;)4^AUo-_C}*bO2XFQ z4XapuRncj~#}!NRjRm-yyTX2K%uL(>;i)6Eu*icWQLl(@K{P_E5cv)$hfMWWF>u(`S}D& ze-6pxwzOTd7)sFpU6|~tprWl3i$)M1ofP^JRAgtHGImoksR-|4%eb=E@0CI z4iFe@3#kUwNsweE`KJE^Jd}FkNsydvODjSB*h=tA|0t9YCAbno50@2mKf9a~JKo%$ z&r|k6{IK^FR|2RDR0|&g0d;|2@Fg4-wCmyY%T|IHh7Uz&N(t73P;;+f-~+Y^kIZI8 z+!vCU+R`dHbQV867il&){GTO^b{d4Pwgpv;^2bP4f@8urVWh9B_S+zIpDiedv`p+Z zW)-XP*p2W59vR(>Nshrm|IOjsQ+d^6_-)|HTu<$K2}=5b@R*sDJ_nMm%aL}!2{|uz zy@}1Nb&?IjIg^5%=XxFLQisB?smoKYg7_`voPsJ@9^;4bkE|Pe43e(|k#@Zpb&4-S zGMsvi|AF|Q_9^Pcs6RUUDe1U~r@B$P22!>$K02Ko>A)vQj`$qoD0P7z5Wl3HQ}_g( zB33M;bSWgS4;c~roG$ld)`L)Ud{iT?hY9w*8Yu;MJFyYIjpHHN3sPAksd^leDU9Ta z(#?;Gj6$0(w`xvCc(E0mk=!3cDu4CJWK?@9cnN}Tbb^y*Jataw7agIFlh*!z1U=#e zivle6W1pA^C>Q>ZBa5d~a4&=o+Jded6~Wk!VXX&I@LLG^kjnbe18-DC`%h&1W|Xc2$wpK;A3U-3f5L+ka3Eh}v#t7xwXlg)DU^F!z!ThMi*htI=} z-WIhN<#@VOP|rc=bz4x*W$_T@y8qFre^RxI!8{6~pKU>TA|qL3Vs8rTjrvOzwPs~h zqKWwEr?w;G;8#iC8TKivD<$0)k|WBIc2_;>yvM`d#j~mNigC_d`#ec9-pQV@0SS~@ zh42S#8Rt%1(r<-5xQfzyA^BlB(mFX}L;>4m@LI!=v}|$^Ex~Ulz6_s&ZetkkplLX& z{H76T$O`Ldv^Zlh;y9adCk{Vk1!-kXGqo#Jl?mqSIPRN- z3ad)~&-mIzc3b`eS2I%QN`{66L({F$;Uf@g#K`aJkJk{HOH0nh&F@1b&P~SSP+ffD z#m$3#ld?BrE9+?VLHAAe#NokKkiN-Uk~URlnB#F+-I!cjMW~<8NV}mO##nJrnmZEE z%Xk=?hlX+An7*p@p!%2lGinzhiQ~REtI3sW%jt1Hm@;MKul+Ide%z0y$VSy}buE7U zq<)-TN8*V)ZXUu_Ka?A4A}8ykf0*Cl$RF0x=oS)Gw+1RiAL3DxoHl78^Bi$I)t#9! z2?%Y`q$7@eZ63mn`C9%|1wT@J^AVNdYatUSaobF}XS0ROip1?QTc0mK#QR#@QFEJ| zlq?;ZxM$3DC~55wqd6OYuEZz4t=vb$ZL1Ny$23>q&>A`1**Uz=H1ETq$F0L^mXD{r zY?{yG_}g|^51gk3V&pnH;@3^{7=HZfkun+{O2WEC9aLv?6KLi&0mXrKhE$4Q5^f6*COb8306;?vI#A9+&R95xCP%v9DdjeidNY>d6mRo-`8?36t{BmeF#5b%SawE zQpP}?7I(g{XGes8iLl@7a5+V%P|6Q@8*v%FM-b+#oPaqzeAGQKym$@5C;KibP-Ad2<2&o@iCQ-Y$q+YD@?5?9I^bSrt5m8t{9JsWBj5e?_DJrVE8nAhZ}-CY znR4&--p|6Or<~IDCe{rH=Ou#2TUea13ik6Eo_^KHQnrj8~;G(5Cu-ZBpT^A=} zjvc=fN6T|8E$WGi0YA6k^R$SaClZO`kuUCsbRX1tIQRxW?>K=EOh(|!1$c=KA^a@@ zewIMFDI-w@-X4X(rZ^alu0GZ8Sv z3XImLi~28a$A56&a`j0Foo-7c;T$7zqCDB_l~?LGmLYVFNXU~#Yl*Am@!qMA4wuBS z8KK((;<#4gc>l$C9mkspm0prN4pE%OeR3-*BT2uX5&Dl;;yf9;#eJRK4fE&7M0N4e z$)MhuljYhV3dspg23^jEruE!`cuSHGVx%2O+j=Q(6j^m$BQz><1oh)x$Qp6~@kypN zTd3@G)R(C$OPN}Z`^q;|{ZQHOYgPZV8a?Lgg=}WFklE$9Z&aLS3z=Sy`_^{{E?~Bh zY5chFd}}cA_7TAiQ=uz^TwCE-HtuK)oW)6keXj^og#MQ7F%4pop zVdhjEpJRpTnzpgby~JNSdORkHA#1Kg@CHjHTAiLE`pLKhVKYh*{y4(++Tr${K#3`3 z-0!b-nPJGSn@1od8>z+@$t|dPmAESY6jZ7*18)9>ARmThIwf>)od4i-!&olCbr6&& z!Rl-^uM$_!UjzR>^tD4sn6LD}}%YT6~Png6x5Q0PhIGZ8e;K3fO3 z@y|xKTqnV+5wzYpTjo{by87GVZL71lB4~$mwhHd!{}_+2&VCy~A2?^rv`gG{|BjJ{ zA&F%kN6?>6u*|E(&GzS`_Ey0)8laruqn}$%nZ!Ne{}Nf>Y=XlbB}np4v`Tq-@p^V6 z?iK%hR|ui@3x7hg+gjlslM?pesG`7+U6-e|#6LClHyn2$x-B)orM2 z87Z~z#I645e=Y_uZX3d$_lC>VMw~x<9df$5%n=03#vJ!dv%13arE7d#y87VKY)>mLYCRc)Ku!??BkTfbgHBs#q4D zhI=;;BkWTv+(`LPKLp(wKEsco-*EVEJE*bfz2jHbMzX7{9f$080X{n2 z_iKwN+CpG}SI8-fjYX3kzv~ygFBRi>2o`&U4J~r07phYwavg%#dPJh-xK^{pwT~Eu zcGcVrfo-;s)E0)Cbc-7pQE&~yUq{&6Rya~?0q$aydBJ?-m#=a77b}R*Ge%PTrHD^a z|N5dYLMIy^C$ms!{Mk6T&D?+r*VhyRZEYc`|BRHwS0MbbnFj^4ZvetZ283t#MfmS# z{TmQoh_Go^xREljDuNi3F?B!iH|bJB_QZ-9NuOHsZ`NrPhCGb7gbLD zAfN1LED7d&3zD+UZ<)8J1WSBJM?>g$2vorU#U7;b649TvMQfK?7LTZjj(n$HN8p8WVcDWYeHzI7EH#~Vi zvTWSw$l3$>gij!Rr!6D*Z6wdeQ^ie;ym2sP-b483UYV4M!|_GIIS5M%2!DAQu5nf5kI=sO+90fZK={w{97`i_pM>xc2pbm=p0x(? z=ZF1`T3U0Ed8TT(RGRGiD!)(h=LqdYjk`H`mbw{gKOpPxejO6 z%fYz3R-PCE`djTmyI*Vahq%D!a*>siQ}w~3pK%}z=cJKJ$o zk5M|ldIxmW8Oxd(#!EODvmc>Gr%xi#kIUGEr--QZyEc6_Y5M9@rmqpTQzV{<+Kr_{ zUp;F!s*l=jZ^Xb?84cF%pgL7GWh79$lT0d@HE)c@_s*h((rS*{T^ysy+FiBLKv{W-i9zl~xe@MKAY2(1`o+3}++6 zd=P)06p;-$F}fMP8I6_5Wu?d7|0cfiJKXZ@CLSwoTdbg#?n`)J+*sJ43}`w>bqNgt#0t7u$nU)>&csyPSYi##$q_lu4W<~g`Plo$k=by|tRW&MRSpvY*u z2Z8mcjmFn@>TCTu_}b|L6odNzbi~)ra};OF4P~RdjEO2wc2fWBijYZ zFf!t^GK}&ys`O&DyEuBW+Fi9?j2UJzqF;_r{7+IAtqijPNA9@_yF^}NSQ4x`u=ja@KvoegBoDCHbSu`Ajj}|FVB09tTgtk(}az28ai-_D= zbO(rdGE4?ufY}q_!)+NkO$k~V=1*iBIngYH%rudcJF+s&`SOw%e7gj7gT*TR0Vh|7vntzc`GvHx8BO#>bnfbYIk`=eV5T#?XFwpyH5WB zW_{?-FTf{$2aeirMK=HLY#oi>t%CSg2IBA~R*>hdRKL|QKElnLB?z7;A}`{^=-+V2 zdMlUIGmK**vI@a>*dk&0W)Rt!Gsj;yzmjat>LkE2Z`M4mrd#USZpy_NP;A=3@v{XH`Jtw<3tVnngp z`kp2?lItt_Z$Wdr|!u*ks zpaB71#Tj8ykuRa|5N1YvEn&X!8#fq6H-C8klv0RjhD*G>=B)|Nh&ISDb z?=cSQbRN?EtX8o|vhHWKM&W_wLp&4?zMIgqJGYA*_q~PIw_d|!e9iDLsA{Nr1YECc zA;QG?zWzaJFngTU5nppm`Q9@sVMrhJcvj(@UjBsPbHU6gyuO4H5}Y{|PnK|*gc|kU zKnw{(RfSb=#X@`^H44Z5MsKMK@4=^!{0WoieRCMDxH%s(*@JP+xA;n}7 z{bC*-Bj@$oipNU0((Hlnvie4+YrliniB5+uukbdbc--{{w;5l)+_PLnl4p0EMvDJFcW?nxF7>Dw7_ z9o}QYxB5<7rr`ThvmG8c3d2!7Q!c-v=of|XgojnMy@G{5hT(5wdv(67uL`)YXdTH%qY=qA z6^X3Aa_)`ceI%0cDw0ihxIXpCYB+VPI(1J#koc}od|D;9^w+e#hRT(EwNffNj6;Q# z_?x^6S=^=XPoB@{&}s;xzFqR1toL$m%IHw%|6}h>z^kgRxAC*iIY7t_hy=oes0cDBR=}~&IM3FpR%=^_s&%MCYwJ|2 zt;7F)_daKzdjquo+UNT}&+mIac+SZ_YrSjjz1LoQ?coe}GdK^D!&ks!IoGqKS5q6` z3X9d&5k=_vEn9>yip9v}aaquFwnNq?BV?K`ku8`1}<|5t5^l_=PlaRiG>7J?lw0iH&uOWS6YHJj^_ZE6;nw7T}F|+4!%FcZ2O;ydx zI}z|+2`YB*CAh#8iL9D6?nO*2dtOJ?=lVk0D4Jc1pxWyZ8j>%~wUo}g31P0+_bSgP z$X5-lQp#{%1G62+t%jza-;>OTHe(H+-yNKXfP+3prLyR8+ns7}V9X`EeJ+YH2L$S4U7f?p8$bUO8m*rNWkZjynb8 zN3Zo{XB)QaPP#~&^TD32GUr=}DszPACzqm3=co?Kw-P;ayK{0t{yooZq;)<=N3-@* z&;~sn;UBX30%K4atKBtQ!2XbDa`|4P=CU+a`#oL2Z7=*oHs5!Q5pI8RJ=mj!f5_%q zFp$=U%3BG)@A-^;h}Pljk(#d?HV<>xp6>`}{(NIHV0jH28V~-5@*w!?-ALwK~%>Vk5l^O+uy`u0^w&tWLQHTtY&q50aOY8n07((L=TgLAHf$ynIs3yO0(A(^-iDG=HsZNCEJp4gLtE5r?p zu*=s4!Rx^@pMnUxe7q#$ok@=<`e~f!@x8mbfbap8DG7axmt2T_6wp%pA++}`p<3(o znrMa9H_EhY*|GE3w>BT|QGV32 z8Z&OgEW7U-Wt;`?<|DmM`1DUA-NhQm_n`Xj;}~@vi7I2JU~$%NT*h+n?`2K+kWj$a z;bz>sQ^9_K!werDYRS$UbS2m?sJ7%&MT&2YOA4dLO|0>8<3VITI?ky`KQ14m|4FlH z=;4N~LT}!;aQ43496DTttYCj6kH2WvH(kZerDU-p*0{$J%=*4e*o8hZQPop5&o(bmzRysFT`}S8ORQ4Mp{6jV$yoxDIyHUr0{Uguh@_DRS;jhsV`^^ykA^RP} z=9P8I#ALv4If(V=nZ2(@+>knVBJR;$j8?K1zG!0|Z!Ma>0fU3A;WlsKB!sT~^9ejx z!bIl6bF77f*8#Z@Da&4XY6^z5g`LI&w2&L2trjjvy0w)|1$cP+Hh6{X=>%an^_Qn1 zy_b)VB`jt(vI^u2aHM>X-jL{Qf<%AC*eqK?zTU7XpZMaX;1}MGAzZcy3oiHJ^n?%6 z8!biM(cNX+<%rj;v)CPM1$`f|PY7+xTn26cU#=<#fm+2zO%rfv?)c|U1#NpDR^T{L z`;nuHsERP~iApebJi7#=B^1ahVCN8`R2R3y=q}e*V>FOCMvy>cF=ZA`^5)+_Pu*7n z#OG?iKlSniq`#!cxFd*>ceVnuo#JdQt3(ms-w(o_K2dv9FK)KW$GPcxC;d5ae?!FW z5KFv=vQh4}%U^D3)QFGcxmJj+Jm$(U=5eU?k`Vktz7qKdsL~mfl&j&W+O}55^){$! z$7kkvJ8NmZSY}Zh-EiH}r5cCFlT7UIBPU@=yY3aWvUF}$>W&F{_bP8F> zc{p9hyj}-4F@lud4NDvN3eq_^+;+!>-zoPka0w;N%8S?=~2YlnQ7Kd=OnQ?e|5P+$&u#0`rlrB%6`SA%6| zVj7|dR>!R;uo}m=L8#N^k89X3pu}(3Z&aFFrfK~h_8qTbdHcw3*pfD|413sooT4~V z_>*0Ud^E#v*innn1qfM-(?td{oDg*nAuaR$60moGz_-d%I#UCc>Kj$+9zxonCIRLV zP6$YakmO#H@XJHPmbo~s( zM-7f`q7^Ewe#5c`reVbz(-GnDb4&+HPd)>2z5jQ@xZD?nWQIj_ank$$C@x5eI8yFH zoUqE&PY=C`%%q!7^kP71yCfM_~0n?*H|dh#{x78yaQ(Y4coyIW*2#Fpbo=|?A^5-Uyd z9uQfBtBr;?klv|z&x%|H`i+Lij^_!thfAcrB61&?Pxt^`-}KgK&$QQN!sU9dBfkg# zJz|DXcRF8NO?y)^MqvGo5F+1!Wy3V8Y*zZo2&QRo%dhLONJ4(n1FT+TYw70@DAWER zm-Rp-C3`ejEjSQC0>9#{n}*nbjEStpX+0MB^#`f0sBd4OlxEFRo+pTLOKH0>11oOD0ZU# z4x~>ZyBe$&WNV{dQ3L7rc7B7G_Z46@8+OLqHrSo)A7OJj0P-QSlqUrqp+P6u?_CJc zF9CSnfRszAFA}5;w4cKK?X*jQ`4apeT44C3X4**m%`y+uC5-((96B?thtF!J<=O9G ze}hp)#(+P$1%@+{v;zBC1WiUI;j=Gg#IU-FS`X(WY0K^But%UU=Y!uEk13xXU1_DQ zw0}DqI<5on7V?8GlyN@Gd%k^e3;2(N_hJkF+kL>_Y+sMQE$@N%mlph&&jEj*ePJ)~ z9e~>7h}F-J38dX?|E4GSeZb3X!RM=gX^-0Pb_ahFc+(A^CblrjG8hk^V5x`_qP?>J zHdhCn7b8Ky8KOoPKj3hfHUVcXR0aWuV|fs8)L`!ioJEu}0q0i`dy}P^NsCiS5O6-l z)i;JWmnAg;r!4|jHym1yQ#eo94>;*y4)X!=0p~2l9j>WlI{34RIg`5mfHS7R3pf>E zG5D!Gtn^=}BLBC=h7r}2@iMSB2hty31oj`~{L?LqwU>in-5yBuBN_-e=l91QGSo?) z1?#02>_5qun9JTl_QzoTm26csKj2)0{->n5oz@3&clGCr2Bz2kZfHszPgEk z^ZZh8-ZdGlu#xry&IiNs3a+v6E<7VQGCE(zFPz!?mmQT^jOu=WRR zFW_`UFH!;LF|eK?n+&D{DAZ79^}&r9rOeoy5gz} z`2nXp1I|$JPHDmS0!~&x@MnWp(1Py;oG;G>zYe@}TJXJq^Bo2P*$UpS7JM(@{EBnl zJHdO{@M&TOoWcAv!BP<=M0<6-4KC6(J@wbKFx}?+2x;Fms`-r=Tlc9TAZ zE4hT!U44d^Y}ASo&i&j*^WHBgWA{Uc(zbxnqUtDdAwm= z%QB7UGyDT4cFcw~XMC{Y&Q5kQkeWujxa;6D!Q#pd^bW(H*?4R-GXRrcu-_E>VM|l&~vyfJZ?~qyc zmGz)Ja1YY<3)dof4{w-^nSdJgg=Np~gM5z5m?-uMxa$6kZO}MfIILUUPei#gW~j#~ zlDZGWiqX61(47+j@1j%p?O14M%oNTqyJplPB4p%9hhi9P(0mNSI8s(H5^=!Q`)BDN z4FqVi6z%p*e+EE{d?4c9bzo1y3)vofC0Ofyw$~!JVZxg+Rkro>41EpwHy8}dVwJNo zGIAvwb&~tRd(QApV_50$u#%_A&TBkH?*sG+foo7`D}7UEu&2qRP^e}M4y@D`hi0$- z12B@zYu3^CzUOH8F?AS|c7k=*(Bt9p84u|pXB8;kkdsD6#-k!KZBI;RMB3(Y z$z^vqMnO&jdpIE~3pRyr_OeGt1EnB2KHIk#sblIfvHKY~YnRp1U?pXe#I#@KN3jtjA#EIb<~$(U%%Z-H4@jBaKv{98B3Ed2gz z^oxbBz_}eOeN8)LafaORZ?KPh$ysx`~1O2zEawWkWR z+gE_8%4z5MQqrh9|5jd= z#9FhX0!q%7&Bq%hiAu@pBPcL-jIoM}e%3ivXfW5_-}*_2E&LRQvKCH+-^jv0PlSGJ z(Ne5cTxT3rpT8Jk;xrhBEeT|wSk4MRq)sjJm zJ&=m1eWkn(C+}b{{!?oxxCgS2QJ$Wk_(zLid;p~tGV6{b)S^WQ=&sY9 zjc_r*$q(UV$x5y!gbgBfIPptkDLqW(Gk31Wd)fqsXqz#oV}PCE?o*C7A1?<706!Z`=XZ(UavGpiB)=h^U*qu2`{^!(VEb8{tE3FHWHL{dq>*mF zU`q&>$Kpuog<@G{=`+BjPU-0rJxz;_rzW|XiZ+AiFSkgR2nc6V;Dak*%Rk{{^;eAB zq#WdxhNb3vWledIVL{|VpW~Oe`?YlTeKxabk4RGe`o$*xesvDYe4{Po$rCvJlF}26 zJ=e>qy+G`@Ee;82X9fJ2ps4`qaAAT(Oh;2rVuc8=>RW{Z$Wy{m_i+~Be2D6`>iNR; zmxHOwd8naG2A9DuWg{znIV-)G(oz6o*^w9xAg=QnR?P$Gpz;e*S;cMi@EkI&w&0ime$otJN+^j_MQln{6@%cWdN}*5d7kb zWxq8HWR%)fxD~kAZg4GPN6;)wkfF6f=AlIPJAdnIVrMI*_8 z^)s6d*-Chku@pv`ewlBSvpQXXpd;<{Oz!b0yjd-+r2B^HC~z;i9kxyCKBgQOz2$CP zbXZIg83pL6I8yEhE%8ydK$>E75}5;fnc>mV)vJ&C{m1k_XFF_M;GZiPchST&s(sS`w5P0~Og;`4Nd>7C{SaE6q@HfrV?27eYY`&31i zZ3Vknen1FPlaJ+Kt@hbE${tie-j$Vdc^hTob5ODspzGs->iMV(WkfHq8{}1@o&q8! zR?}8iMtja$n`Qf8{CNX_&*Ign(5^CV;BJfTlSH_KDjhl$-9wHA;UpZY5;6MMar6k$ z@YbSLdF*5Neh3(kWS%T3oIDABdcV-a$(Lg6QHYkRMdC0)SljU#1Ui{c;nzQE*TE9gYPW)XTpeDODkD*vr7 zW6AE9UkOzCVAzu-4YAlEvKFm`@4I%+1|a5^qI4%hr4G1-7f(a!rV3ed7fz2*%OyeS zdN+WdcL!Gao)v5beFv~V61oXctLOx*SM11?DuZ$qsx>l8!r`I1t^{h%SoA>Oq6(D( zM7BX~khW_8oA=Tn18b#VGYrHEk+A4R5RwLV;c$5)lHPFHpX7nvWj+2}jw59o?Wae@ zQRktS3qX_|KF1#wr=quw&v?>d^ly#6p3DcobnNnwL2uT*s>0%iw#c2sD?>c*kxSn@Uw4fd2V;e zR@ei;9WvNkm?_=LYFLv9f!$8>Tq7_<3A_RDpNs&XSMmhrVdf zy%|&BjN6rid#CLOr<&Duj279=hS7P|^1coSq z#{hoW2psO_`4J;9R0(_u@DD~H&donZP$2;&AEvM;z!H6Nq&$B)D(<`aHJs?%9Xcq; zM6mM+Q3i^0^Aya|eK%LwO5o~@I_>6)u@S`0z7pf+YzJ%1>*x#*AyxK|S;&?&`8lDt z827b8RI=!W>1ejhQbxw@)o4_nEZHav@HZ*5Tx~s#LLk#y-784`5sDH)O6jo)iC#Ea zBS_Dz=mzQuKF6xR5y3)U2YR4S^L%M>RSh^CQD%|zGVGN2I~q$f7K6CNXIMoG+d}u* z9WYVw+OYNG&?y%JvD-(*tVU=&9khxv&w}K+6X8}~1BI02BanK@NGk7FEm~B8;E=g~ z5L(K^Cn@}A!2UB1ZxwMvH}ir{T}+|+DrgVbVKfe1C)K-x-WXG|FR*sWyzuh{CZ{wd zJ|Ci0@#2Bd%9*oKZG~G8%;i2#8#P2jBh0A=9F&UUs>)Ukx&r+z<2kkR`5q$4JR$gy zp7EkBFW~ZBs(Op9pvJ!UnbN~v-SNO)54L>nWBhoq9Cn_XakoNhO(ei4&X`yrY)`7lQ8MZ zc+h@gv%-y3xUIlkABXdHTVFZ}C&bOK()eHxlU? zPulVYkZnLu`NSCMv%pAS3_upY07O!JjGsk65XKyng%KBtwcNo^lGO=u8@eRQx&)aE z#F>pgQlTXLabBOjhlF@~`N9sTgd-5TAnY|a$(i3f?M0Y^!ZX+5ji-T@dn>84sjrQ->p;UHz+W_DaC5LrlaGR6XYYS3_b1Qk(6Y!$#^DB{donrx~fBOby7z z%4oKm(daBQ%5|a=SPt-NBcS4mHXY+n#+CLQ$a(ees|0oce1E*a5$$)@YRF%0Uy)UQH@dK9JPG1+ zKEpas=oOj!+CUYZg55|y!s#0yqILtcQ(PpRmuKF1wcaO7B)AjuJOPK!M@?5&_Qd2* zl%{NO#`#=bY=r7m%xJ9;>$J$3!76NG6}o|%tXQ&mJ#(mn;Mo*DfmP_Ms-PGbf!OFX ztRlKX&(C|)HgW+@*ZMFWzSO+Wc%0Sn@%a!!CGn}Bk>_#BM2os0o_5Wg&Ndsk3f0q7r^T17g;<{kEG$3PNM=*g7F4$lj+Ak%*vjiT7ATe7LF`Kgt8IKj8Ag?H z(al&yEX(+uHaiEnoJG4)Avrm_tVtG50k@>1D z0C|aFQ3j!z8wHua{WbDIXzp+f*m6Ejjq$i5?h|Cb_Lsb1{iL9`fP5#RS2ClOtyluZ zcpAi)$zU-|rBtC8y@xU<>1EOF=+9p0ieDDZTobn}O2K6>94W`Zz=@r4@|Q*YjPG!t z<1LFmN5-f6G|vb1>SqzCrR40Sb*^KfHDe`+Ykh{lEb4lSiEgb~blC~SJwEDREsNI8 z4*Wn#{uWXn8cBMnat6y=7M+3Fxfef@6uu1%(-DU*sPbrUS=2nx6soU+W&;*6P!(#9 zG%G36%cAcwU-fcIQ{rbq^ul=YU}m6~MGAK{FxUGyZPXAAjj>jZJt4Mxh|ooEVX#cf z9KroX-n;N_VDu+BbF}b7S6@)kezt)suX+Tj>`6?G5$E32$$SIDqfvef7JxfEgTlax7#xjYG; zUv82!vt>I-2Pkr@DL02ctE>-;%woxXKHJk+H4B~0mE1(C+m0cx`l0du2C}|8(i5}v z7obnR0m1!4a^gLfYx98#5gb_iF}$Cz1LQ_3BZJXoEm|x z+Hc`rGB}@WmkA}!D5anB+FL|=EY(`_oL=xBjNjI)5&dx?Q$NTgus#VIkRXenGe`o3D=!$V2*;F3`njI z(~ETVAdkG8um$6xH&t^LwhXvxA8R%A91fKqB&4Ggdazas)&$57ALgm#Q$F%>!g&}x zy;#y(VIKtUaUW|ns5esooNxg&d$2YN_C6q=1h9F9(Dv7a0SgRFwYP-O;K$dc3O zyjwVlf$V0SH%6wg;=&3ny!|Vw~MZc7uM<@O0mK zbq9p_=_fhlb3BI+k&1VY`ZK%x87s2UIsJ}GvV0E2cNBYtnZ3r$`YXmmk_2oQ9Ga!` za=7ke9fUhoisR)~bv-7!t{iZg#mEh4?p273y18|*{dyiA7DWaU1)`ebIm~k!^IS}6 zSqI|9M`BzF;!dAo)$Az;_-0p_mE3{TLq5;*o@b5$<2Lu!KIYj*TVdY@?gL^Y%(V8T zJirdQSA)X9tROau-Vui`-03XgLV}mKV-J1E?d^J=)6anTbrlW5XEUK|&_Os^XbSj) z=F@-o!tYii0lPJlqtOnvz>MUlSG`D`ZLIXOvvIET94+m&e*<8eG znFF>w;$ys)v8w()hE4OTTCT1`3{2)c7Bfxt)XK{7n3N$)`3`bzz)h)Q0qSwG7E@9> zgV-~kk){~$h-862*69Dj&(bZown0tiCJ+u9(=>)Lqs%5j4f9@fG-fOKOOP zTr_ecP4*al_f??$o24YnlX5Fahba64i>zI=CqlGb1fu-H=lE*rxQl)@jT-Ny#(vP^ zb-n&1%RM5@4@b(|fyOVA!Frt+D9q7U?3QZyTa#qs>fVA3eP)(SauZxi%_d<{{oz zTyUWS&->cB0PMuKuf|Eu?Ci%-{>0lkJH156%j4U9{X44N-rI=fa}nxf<;_O+{nKpL z=(%`Sh>uT)_|);3T6E5D!7aPB5`}#gDftwqlnvMTm9z2&W80ujv&|A5bFp8Py!P;x zHpeXqzw#uPXy%P%{+Y}LU!#rNxb9kJ zwEYI0RK*wA=s;~ga<-EEgdy9F7#$LCqxdC4-h!Pez`gD~K%Cjiv=)p)?b>v6`FtD- zYRaOO=kYDI{(Y3C{zkzVBQEL!L0!v^C?A9eqm+q!-PT$#xTn%OxCKLNy;N?I!C zap0a4;&#(zlDrF)_VNQr?qzcKXj~nmu6kZ7FQaLt)O{T2%jNEJTs$O`CSZ*X%H{Gz zDhN-xT|4LpR41>l!h=vJOJ~LW0KF&u6dAY&NER&Y@;ThF%P;9f)H&?3*kSh#m_%H@7!-DMagKO&QX(GZq~n;TcZFTPd=gRT zu*(-nBI+D=`N8an%MX}`y)%D0DB|+h{K76j-yC)y=t&BHl`8Cx>%;UQl|C0v6>)o@ z-NNof(8Df&>?q>$XV@Yxe=#oX^2Z7yE`L-g;_{b+P=*0Kla5j$9d`L%McCzwDq)vz z3`AVM-w^iB2NizzWiTz@KMuPGnPkZ#s(cYe2)q2qbj0OHzr)`7OH~v8L_*l*v&3Qd z{KdrNARTePpc+268}*qNhV^7}6CXAJCE{}LJM8k^40If% zBQCd#@ssuHoT-|T8=PU6JCk9T`+X6Yn~-6b?-xc~8_pYcxzQGJx%(G(x!)FX6IEKD zxwR2-xmks8GO9E8IU?@eD$OkmxZ66O`I#DgyLBqL{2)!(<%eJ*Y9)=<1192fBOvUZ zx$F(A^;p>D0ypelaxTxkaE`cK)*zNB3vdFDZ#kdOGiTKim-BWw>FGT4HMp?LSJEOb zUwDhCS#VgLp=SfRJV)Gd>O4_VI9rRjoa=)OadWK9 zW~B`>ya(uf415|&61glFFSn z$zDBn#%kHA%j9Vp(*|1B1A4j9!W71^am-{5*?T~^DW2UVhgyNdS>YvDszs+HV_&{=_@acEw9DueOpiTwA zjR0Z{oAK>KcX1M(4Lk{@DO^DgbgB+ALg|V2$KBTX44ohpx6x z1z4_)8l?cyz{vn;f&uDO0OVdqqr7@9fO7yUGeDgRfZTpUeGrM9bpUNKK%EMJ+?s5b z8xUUPJ=Zw^+`|T|QvsHbo@^6tEN7NFuLAaof$CHMmmO;>Zdl+5+WZPJ z&}MlHodUN#oqm9fH87nrun_NiZWG>P&D`Y70&J;)>Qn&becx@uyUUq-owa~%Hc*`k zpuEeyO?WpabCPo-U=JFoP6bfjEW*$Qr*D=^an5MtIIjc!S0kZQfdm&-+k~sL%=evE z*yHMsLmNSN83S#U-58IZ{@|Z%Fgj&0AwG!QC^mt!09tB*Iu!uQn&aOFEeS!SaoAE6&dO zfL>+bIu*dVrp1H?2wLHYo(w>F&IPi@zDDP6bfDfVEAQ zEe3R)6S@++9yqiY=u`mZi)zinXFBkRk~0E0u8=iW4}}IBcDa<^Cg0;cXr@yPT!X>t zl);9mCG2uBy-m0lA2ih23etWfpi_YWSK64)RI)hN;hd4?IQ+KP8%9E>0tr4S8Fsnw zZkBg&&KT!7-++siIwo3QmxP>v8zX7vV-kZj>8eYP#My@3C{s1{a zODW_8BAMHgYalm?0#x2a5k95tDW4uAGTl?o4Ub0o0o8ZD0`f;3y78E@LX>WlE@UTP zjd%5NXf{(;h);PpNwW<$f9LFK47#;e$d+_osm(?~OAg(%V}Q^>AH za$_8Ot2Du>x;BvNPw2Q;)hJsium|Lui~v(sh(CtbD16J#c?8K<4V$U$QftX=uOo%; zcwkIYbB(ae{gfuDz}e}toi!+`U&1{YZogbDl}vKAxLK}|YOBpR3dE{iq2!t=cZ!lL z5C37rZgxQW#$`~r(Sh2$Fss8a!u-)Gq-d};#& z>F0p8-r*ZUrvfM+3fU%n9wu|Ta~xn<2C7p5l#j)16F%XK8OIdB&NNV+3ZQ%_I_%!D zoOOEu=ZtE{Sp{^XkkIGh@VKk4cG0BYK`z73e#Bq#O2jBr$&^?i8pOU9rveM5k7K>wPlT4=0Q4sV)TsbC9KdbDH<9ILM|NQ=7>5oF zI+Pk{v+#vzyff{j0W!|ObjrX&d}F#5Va)NUgaL*d7P6b##6|qhDO5wmR&O3np%|LZ3 zfbx|?teDP3=sdx8lJ?@MFC5wkIu&3Cs3P#2Hu&z1GZMHwgVm`3%a7hP3%{&}&$2ls zz^yV^oeHr0EZa6ooQj(i-#J$RcD;e>Q~foNHiAwCSiaBDEW9a;ySmOe;AR=DP6b%r)NNKWRR2(i8yOU5}4@;m~zwYO9(gr5)s_u(wNfU5%A?@LWV| zd;uSmiXC!)7t2b>;&k6xuHfrnMori%zl8M@vIyTQKh9@b-R)|Y?uBrSHR7y=$YztD zP6bBcM>a5Zng`uC0Q5Tp)FbkeWiYI?;z)iAtCC0~&>i0;vGAZN*G5*N<7S(?O!rzP_$3$4SBnce%2Hg6@p-ZU7+(s$O z04EjHVTQxSjJI03h*Z5=X%gNxb>@TM-6h>5KSDe1E2_JtO~MenKOKK&ou1vLuXCGo2d?Oj(STM*QJPBy142_7p9oJN!ld5yXt%wAV2cN zu*mr+c9HXm0&!}(OUdn{+|Zwy9A0;Lk5%RHdaT@=3Picl0AC_~VTvZ0|yriqk}5`cL@)3%aOh$( zWrdP(ZW7*1b|Of6w~bA+soTd*!aK^&nt*Q%LVmnKHs=6(DWJFD&^a-6B!lo9*|-G= z6^ISfA@&%6zcpey6sfm>j(Iu&5~He$2zojbgi=hOhV(O`8d!1ATMMmaDD<-7)<+YC^r z0w8~kxluMB2jCL`y=H(q6#!ioM)_00&ZhviJ>XZLDbB;I@vGl&55~NmzXgojfC@hZ zY3Fz#Mj1Ry;Nyc|cy1E@R=X1cY^&@>{MA3tj0A{Ji;?xS(oO|k|}-1!`vKis@YmaaAz+@~lgsI)qtr+Bmlf05aF3GyEp9lEl{ z7LCH!7oD%b|1k~&=`5DE{Xskik3+j4Q&woSD&VZ+!5$96WE`1?TH_=Ch)NnqQsOiP zei2}Abu^O-3qUQy5u>nCMo`x(P#X=0D&kgzFH?FasE-*;jPd%YO4E|CKp*=d2L)}G zZ=tvIpT+q#L_RiRI%RAS%2f5~Nd4aflyH+@I_ifZdLf)ST|n(^I9wQl^WKTzWPv)i zC1)`?(?DGu$BC)YHsQ-K8J|060db*0=~PfSzAUp%_^M0BC(aJQZZ}Y!3ZQ%y=304T zB8rB82{>fOi$K4LW0$%w$&}rM2H}r0?Usj{(Q+3kwAEF?zXzbr&3NBlxN}bEwZaei z@gGepJ5B&M4~JIB6i|Dm0rL2|ABTCn$=xg4Q5JKZV1@W`ziWlx`QtyWstm$69nidHDsDt%qAlVgzi^d0-Gv!D=1Gggr@1g2{09DdR#lGrdsC_`G<{bv5n)&-0oN@nUo}O#l zMLN?o{E;2MLxw50#kls3s@QBG>4U#hACEJ>w$y343Snu@*^s+I zY4$92P?^)$>~wEZipfNb@$49I_bWS+qYdeEU`SmWvheRH<)L}s+n^!3JdYu}$nC7D zXWoOV4Sc=MxUpdFSIm$L&`Qt~qRRBiCJ*l$@iKlq~)`Vo@9AdW0r>F*2{m zp$7n+3St<4SPt8faC7HkfOZ=or~P`5%>9&9J(J%ptmsqqDp#u-e`Lp_pnUOjR-akH zyKa)Fuf@v?8iSw9dl$_8!W}V&qZ?&&ljbrixjpO?6?+eeWdBTRW7z}IChI+xW!)@i z-;O5)0Artl?0(q-0_uPaSpEl)x=DENW*kz33Htg4=)Xl?2JM{v@)Z7j0P;augw$lD z+Tdt4>q=FKdeHdN@_s2r>Np0t8{{G+i;-$e;Otvu7p~9QBU|vtsY%#%tN6^@IsF|9)lVEEFv;^I~$g%bGnfX#^-Y+yW*+(%mS+Qnrz?CucHuy*1ksWWN zAQSJ2iw*>J1~UN;B3m-S)V3ao@&&f;sko_%%h+)`xQE$#@!b@rt;s%$t;veD^+;$o zw!RolZR@*{(zeb4d?rC(w?+1GwtgERZR_a(>Dcj#DgU<+8asSu zT z&AE!J8-|>qVXh))%RNet4KoMa!y4vW)oyGUvX9a*WW_ejZM3-`)Hi~u8|F@=f`)m9 zps)8L`?!YrJwPoRrd*Yg4fCT?#-QG*6|&Sp-M9S_gSyZBpEe9a|B+gT5$L&0R@ZNt zZ&0{~LopHP=PFFGW!|BMpGznK7Z!kIe-t_hP~T{_ZX2?Kw&{RSAY1a4AloJ%+{4cWt+N19Z^-6K0yBH<2Eof9B$7LcH(2ToH$YwHf-0G}N2IE$d>g^&C2mAJZA z`1y4HLn|WJQy{Pz)1J6B(v7nIIz0u#?u=!hE>{7yU#EI6GG;Xv{L3vartsGEQGQn;tv+k73aJd1pOAT_x zVMr|mFs9hnE`Zm?fME#K=P*-u^Ok$s)CVB2@S%89W9hAyqqRbgTG>8vAriI1k7wIW zNqgnHIqI7C>g^^hHxDHsQKx>|!fxuiSJe8u&RYo|w^y$11Ae{7@7ba$8>IL_zbVf* zO?k_I)RYafP3dA&KL692vO#_Uk)PU>Zvz|Ol&xSSMftZ)nQf3ip(%4?z(;IKZ+n4X z%jZAco@Ya9+#^SB&(%Us(4MP<_Eg&mYrO3Qw5QrmSmU)H+EZ;Oto8V4Pqovr*5mi| z+IOATz9+V5-}7YB!+!g|ZQ3^x6OI3QS3OTwC|zvdG^OF+cGdG_KSX|N`#ub8eEWXj zQ~quHc7%DgC;Wu=?H>dFSM7WJVoUui;Rv~7KBPW)%x_efl@)O==spX$}ElXRy(ZlCJZt=sW#jos99pX$@C z+i6`V-Xmw&mh~%Wx>x3$05zS-m;p6ciM<2YDZIW{T4x~LojNMOJ1FixeANW?fg1ob z=u!H`F`!)zF4(+F7)7cR+1=_DdopM@fxTZwBlWCGWg_)wqz>>yL)NW`e6+i3Cm<*v z6yDVQ2=wEqCHWDh<#W&y5vBGE?^+H+>VSL){^8@qaH`Vd#6dMqxT432*2!NeRcaEV z6!ZWmW|&yO%(+i64Rj6@t&>lLg?!gL6Qe}YVG?%;?J*KKlWZf}eZjS1x@V^w;h6$+gUJ}N&-oCMMZ^j4!h5F8@GBDE{1ZB()qlL^V< zv=4=ReA`SprJGh;*?w#{sz_{QF^AAe>Q9maDE*b~bCWfsU96N(Y;TCI0^~877W7lx zBl4q6ewK!GY%)r%3x!#%9aqBS<4}%~q3jTPYG46gb~cK@9owxWnWax*>4&02bZN=O zrkAOED?+v5Viv>OT7eG3Fm>BhYAys<|@>rlrD!R09s zf^RBAsP@y=!IL^BpO7Z$8uX4O`vvG@h%lN@JTaEYX3z@y9!|y+F|kD5iv3KHOhcpv zsKBKC4N=*-*vlr}kd=6VAD|ef%>zb8tVBQ_XvoSA0V8t|+J(M|T_gv!M!z&Ih@!9! zvtkMOc!lvD)xtvzx0Qwu^*jhIO%ECtw4?U0;m9$8IgSX*m3|7n5uw zfUL%L^Nloy1=8joYY;Kj#0)AR`#tI8q1qo6PP@-3=;X?ISn2VBNM-xLToW=qjIU>6 zEWxrSc`*aS$*H4FY{)qVkwlw$a$p_YOGy^pBP-i8I!OJ3v#-i@yZh~%oSH?0@C z-XNGYOqH}^o+&5{uB|Y=D}v#Sz=EV>1&D@92%=J?gQs8?HDR575`<iByo%-S3RfUYX``KVZHphH^;17z=`u>2jUv#zmclX=sAu5Z@OWj|v^H zYFQ8fwNEY9s)njSpnG7U(H;szENG&lfWa;w4&`-?Wf#Y?wG{3}1;oIwq5;v59r#wA zA+`###j4Jb;ZW2{t1TOh3g#vs2kVvwRm}D(S*As(#jh9M2Q+$OIy}CTs>oh<52{*W z$T9BDobgHDpsCmkt4#i_w27mGu8hS56>Nyj>hQK)rPwW^Af|A!m7(_4es+F)uQ|G2Jb@T1emun2 z8F%zT+&KY(>d%#++t5>(3%_<^GC}LKwA1>4izbkzsrWyswS zXjI-1uk*ryi~LwZ%4`(VTnP5Mxh@Kjrrdsf#@A#0iA78vKKBwCrsgx3iXU7V3fRLh z^C>Duu|r&LD6FLpz>Uy8CAnuvcknBum2y!|G&ZR;XE+RbO&*Rl*eoH;V7E}4vJ3fJ zeY6UY%?eFfU-LGf67nfmg5pp7da6P1D!+V6$JNxR{EYgy`&Wv0ji0wF+YV^*XM4G* z%TQ(Ko$wIWjC*6O|LtBY-}5$dp96i$(8L}fc5~Cl}x~11=rT# z^>uRbdcka#Gy6-{i)D9hnh5efABJKQc7q%bz0`U}Xda64v)Joa+!Bl7tFe8*&Jq*j z16~$cs6Li;F?!etHz~?2nbU=uNx3~7@(O@hC9@~Q9bcJq@MWbXtkG)nU zxx>q!y6-e);niKxtm}7oY<*GYdyvzdF2vj$)0j3m_u+at+qWps%g)O8h4|x>-`e7rZF&GgcXZ6M*)=d6M!(m(4(DwfQckJV#Wh4&AT9L4e ziP1P(Lw)N$3A>o)Hi}~6ulm;qXYBHU*i^NPiN!cjHvZ9I(2-XE2p)h#tXWjHSSO3| zhfq*)R{yx{T8zW7aGTlZs|&@(X)=yHg=qVu(H{^Y<|8?cU{%DL>(__|^J@dLkNkhN z|G%;A$LqG|pNTlw_Wav`qea_~2T3_M6U6wQ@8b{i{Dn#a9?rxv9PoVpp>owD@K^oo zgR|%PRHmV`mLsXlVLU&_<0@zO`Ei~<9SGgyVmv<}w($J%K%<)c!;Jr5?ftg=zr5`k zL3wXTtkbd6XzkWX{<#kae6!pH$N)N*Q1WApGY^-ZBBa#6K;VCuZWjJ(9OwkxIadF; ztGWmWI_}N*bB|8qtp2UT`BEHW&EcP$a5z@|ImUF9o}&1t^Unh~p!`JqQU3~Y*8O|t zAtcF0K8l4Cxy;kC67JvS^VLNxLd!>dzF63I)c-!hA8yp5iMid%-DD*Bhc^Mx#Aljv z2GF^Ls+$DCxW}DqPm!>@9^dK9O{UuaSPI0fN9%z4y5AMgK7^XM)A zat^?ME&tL2{MYiYZ%8^U|F!(fTKfNvM`8dDf7JKseq3%zr;BrX;m9Hmad~}7bWrht0fUBSjvQ1}T32fwkrQpG zi)WM$8997ld1+;R!@#AL^+%Wdms0;e-;!ui{n9uc`l7tFXwcH);z6auYQDJRqaY1ceO=;y)P+*$Ex~huO;?g=|ZQP+$ z*y3sx&nil5i?y7V7=jB}w|Hgovceh*LAJQ6a!Dx_;U8%Qbv1=BDhSYw>KcA4WK>>W zRgBzfJT9-wqtp^tsJh}}C0tuqg36Gsi~=DnlWXhB3(8At>pT^@RK)1il9eTzLtIJp ztoo?F)Jab>dDVrbUNP!cRYyxJ@q>F%5^X4sR@aqQRq~=Ty0Rd)$goXieMPhe<};N9 z4VEgPj(~`oqwJ+s$Qu5LWMK_0gpP%DNpy)$D-&vnO0s=m+PcyTmKlQDJUXr0s9vM#zb%1Yy3VfoVP!kWSgeN|ggSW|~Lb@kPf z((<}!4Vw`EmXuc4W(^(e;Yus2%UL?DAzD;Zs4rkDT5M_EvYLUYU}1eZ8wkZ5TT~Bi z14}DUri^}w7=wH>`lX$K?&;dwdE$8JvJacZ%eZ6#F6leeJx3^*I-a_M90_vs3p_v#5htnqI-6y^^RLtwAp+X*+pmmXM$`m!DE!D4rdllUAG zT_N#Qyu|Od#C1oI_!bh~An{Z9_CTVw?<4KRPEUEwZR4zOb;xb)oQEG&w_T_8 zwdy?1O>oBk2IQQCvGb-S47z!qvugb~=j=ns;{IcGHD0JeHCj90tX9>y$n~o+X~OjB zGiDb|4$sM-YE4>JSXmh@pHveqtc%X9ugkA4ERI?Q^QVuT#9^sw=FCw!esmp?AFVrm zSz%qytZDhR*2?1A>Y|$ERyoFs6>$<-Su^VEs_W}!)>JjD%F6Pxfbwi5Idj^wG7J#N zV_JS)R#w5OjQ0f?OQN|!u31@mQG~O}DyU^;=S6F43ztS`6;>{d=HwUV=4Th=Y%N4k)?P^9zRNmsT!EZi90xOY2Gt%S+FWq8?ym4V_+C z5uICDULT!_aj7<^)LJ(!x@vY+RsOQ7nmX$!I>-8!9X*y}M|RAqg2 z?y_*v;2iuLTD!8aI%ih?kOFJngd*fpSX?&?6AUZHfEC*E%!JJ~%xkVvG!EwkKe5SX zp}}Ud(W>iEU{feoacq5MEzBM*>B))6$yQ}mT|u;Ji4|{Kt0uYvqg%AV&)BM~D8NW* zP0XEAkTd<%+zHbQX3RP@XO=agmg@Xji}K}Z#+lL3Rh6}M6IazmC)CswuA0fwl#VvE zmdy&^nOa!8Y%XRCOG+{4fd@=3EG>_gSW8xxmMC5Mb;H!Gvf5Ilr>tLQ(2<=7W!4({D;$r zf@&D5x}a!PL9OcC>nfrZMbVl9e&b^an!KQ-bSWp)G{2e>#XHpLm>3ool}Cp%kyD{O zf7B$*u=49z8w(w9WwCaT+L6VD$O3axSTZLse?s=m!V(MKT2WX{#D8eJk=0cwJ~LZk z&8{h|tcAH|S7lRiO|&*zvm#m$Ess`2E9+_t3hN4%)Kpd0sREg1Z`rGs<%}pSDS>cp z&a7otZY|*iLKmZ)B>tXEl3Tw73G6D^LSBeqaGZ058A-JA1Q)z(ET zvW8D8tzH(bslz%X9IeE}Do1r%Q;;B-W@RIq=G4?w)y&2$G-rDL;DS-XWqdwEh9Dmm zo9f^*Uc={97FU&^vm#C|t18J>abxB5s!Ei!3SEUw2JdEfQ|`RV51~=ir53h=cdyVM zT|2B8fuROS^u1*@RVxeXto*9_n&Rl}C}xfr7-B<~T7u-G>qnKBP8(HFfR$B2aYIAa zkT~DVo%z$kdCtg+!iEB`{}pJ%`%Y)gs4m3lpoakqfj-L$+6ulQz=nK_yqa7=|m0 zD^&Li!d%v2jyW=~uwiC-Ay*SIuIYDIYh8k9MP5`)nQY7`z)kYB)tC}7;IMf>N2U~!hiRth{r1;4{a z6*aG+rhn0YVv6xEWs#9xr#f+Q)r)((iP~^1qJ1WwRP|t)yH#}Os}e&Q;UeF zr%Q+=xs{l-&8RG2#d00p@qc2mMqyrvDMfv8UCvCD3#LQiX4Y3!dx5Ano2%ZssuFHS z)MAvXqI1@unDNW?0+O);9*e&^;+WRS&O#sd)J-TZuCJ&^u&S!b8hmQ$QcRli^^i^@ z8&?ku12mhj$CokY9d^>q?Y5&tSDk?bOl;~LqRS#HK3+= zS+saL=6M`Nu$AHm8s#(p;Xs+X>AF-3n8$Wt$=FiV7#=Zs=k_YN(8F9s&aJb*yi{tBir!2 z(n^HGm{DtDsTp0%{E1!_JSSFj%gK4x2sN_M!g;0GIjJjNmNf##S0h=8Z+PAPkM8@$ zIV1gs$SIpSZG~5>a(HcVL!rM4!F14m3aX_ zt{p6YkZdtDv)1{w!)sJKp!l#mmMA5&w0BJ|$F!5}#VsIZprhCAC-&>u(Hgz2l-fB# zQ{l6qu)cvilgJBHcJSh=@^U>$Va$RL)K*u*SZaT%w6b7Dq1qOVZ@T~C8piZ;)5%Br z<3ZLaOj7Ggi_JWM!<=s8AS4)c_P_Bo)TX9*S&dayt=B$1S74%;j)1CM!qOALJotVM zR*BZc!V+eVDHa9;?heN;4bf;pY0Z+Y?C49jvT#urmuw@rbeUPl$r?NhgF0tQdVJDj zVXWr3h4?V#3pqttBFu`Glwz8QP-%J56YB@Ifhkkguv2p;Pr!P)VA51<7vzLB+38{>jfFI}P~YUJ=dv9uCX@;deowJON39f4uH9J>lRv17^zg!!tPio$ZUpv%Pw zTARaJ4%}Z)v>^*ODk-chM0HoJtSv6AT%vNpwt-%)s9kH!jr8;hS(eSpX9SN4P*GMb zSSesB5-bwDl36XL@$v5XQ)1NMS@E;($=D9y)EhPp94#wrPURAINY2f$z%2#86hL#SFz?iD`q-lA8A)j%VCz z@Yh(L<-Fl+c)2&Lm|s#pQ&kk@@!P&kH~oK>X%-t@EtgG5@z%`R9%PrIRbdd*6U`n1 zCJE^+tlnZrWm)`sgVA%C8qI#Pe|kNA=1gVv|9(#d!*V_%B6k7&We{RG_QdKiSXo8r z@WCJ#GaSckkc}Sg^$xJ+4`%dCr?GpXqVvp{%6MALgjK^Q%1kB^DQ2;!Wn zT5tj^x9e7+!?jq>WoI9G{lJB#x4`uVHXT9Av9S^3C_2iVY)z=ItJ3oj%*SH*D)!8Z za*Y$u@WZ>_bYZyWGMf!|>V(-73Ua5<&Y3bRclJCC5;>Em6-=Ix8_qe^>l7^mwAaQA z(bmx?bpK*ojGlEe{MMg;Y3KRxdtXH<_HEse)<$|Hs{XfLBqpao>B+fg~VJ zKtx0dMT7t$jVdZ31c+2gu%aOq0tpF8fPffLP!UvA6tSaXZ(u=G>|L?@*s=TAus7`A z|DO5p?(Cj(!b#wLzV~`_5q_DSd#CN}lzZ-()pZM+yCMvu(8yu9djfU-CAT;&&0Z^sL~`M=w~W-F)=JMbk*np*oaGip@xOCpjpi+ zMu5<*mQ)+>U2e@#2$z>tK);AK0P3vyHJJX_h}zPca5U7q`4cmb@jRonG_71$W11-X z`t+QdN|}iibKp~GRg02E)f?vxO-q|tP%~$2$y^!Iq4wLlq|`yYR+2flSVXd?ipGDa zyolb%l|5w^#yYcR>lF~)KRhiv0o9#}cQi=yLTb_eCW;d4!QZu|udf8KFTjerj z^W4&?C!F)GZg*-hTTK@#s7>(XD#NRamex3RNLUw~ojpi& zOITrCq+Z0`(U6pum6zvZ&W=_*Tjt`>yN30@dR0iRaO&<=+B;oi>_KUgGd%65l+B|{ ziqw)S7d0K<0rE)PSwalcjr3GbH#q7WQ;ns|5*Yp1gPQ1#Rc>vD*wExiiVBj6_#3#JV2fYRAXtW?(XxTT)(X71mZ_ znW+LA1B{F<-|W;$LZUMfFovv>EdAc`p<<}Xxhd9CjZv3=p)il3oSKM2C#ub+R47U_ zFWps9dF5PL2Ue>2*-)|C8b|K}oH5L5XuPh51){t3u87(y&)r-nS2HHh5Ez<2EI(G4 z%q_yI;G&8`QP?aHQzCOwBo|7;iV|Z;rj|^@hBRuDI;5zw0;WkN=)moXe-meaqN7xA zASaWNIt5V@;8(3E^9?oIj7GIbgJm*+wO`Jm2NzUTNed;pFeg=3o~(@Jl$r`etF}^U z|Mf(z0&h%7RhF#HsNwPCNfVC6+M*tVFeqoWw&~6AFtv(57KuTUb=#<4*dj-p=3grx zp{8v17>_IWvDD1|iLR|e)au(iCaEN6zSp#R;c7U;7m2Wfjiqg9bSw7 zK(20;=;tkOcoS0>V`bI73F5&(Ks6=Gn4=6sUCeHfiUpY9sO8&|V%8XMUWVEWqiLxT z)qe;;YKCs{8m)MfI&U@rOoDf%SvtDvl2XyiS+L&8uYd{)qiifNdD>o21y7B&6CWy_ zI2yyW>_Q9k5VXB|UW$p8Xi1?8QKl&>e@%N*O1tD;y~y5G6XSaZjnUU;Pk6Y??{?xK%+#2Hn2Wd*|&PeV)7#Ub;M~U^Uz-x$#Bk-x-9hM zl4fX6QFyYx%f&ZK4+Ff?&clzzzKX51%1Y|c@JUbhY7sQjT3FL7Ijck47H*6H zC4?GYh)En8LH|76vy_pVj=a08YH0M-U2cs@O+nJpNGYY0n({;+mAdt`fwkdm|GFR6 zN^``jS`;K`obW!47BjL6Xc}v<;H1=SQH^yx58EBA#89KWZ-Ko1 zDQU8bXzDA`7S2pm|2e(6nuJsoR=fRH8f<`l!)0k}xD2&>Hob$SPOF7*rSgPfjg0bh z2g71gnWSac%_@McF5bDOJvlM7!|YeDH4ai;fl-OEj%P28re=5=nHo+GoAzijq(zeu z^wJgjEHR+7Wa1HSa+w-I0iBi>Sy_y=!)O|5B;Oq@)l^N8-mS*+tX?=4AJR3cLbvj# z&0Q#i5_yYJe^nuy^I<$>#{?HTVcVoby+g_t6E(xs&QOi&H_wPc%aN9XZo*hs)f!_= zFlTGSA=nilb#B`-)Ev6%xohfRu6$wbUEe-BMS2Ur?QMttE zZ5j2ViI}QZaok1dn3{6vfy}m1-p>kH&)S1<)s`C*UvCPdl{Ll@7~fQvl)2^YJ|KU# zBG@IVxm~zX7#ko{X{z36)Yg1a=GcmyETz~{)^F0fdkviU1f6bDh2VLOQe5+J(X~dM zd1Pnn0W-#Yu8pKLY_dg>dWrCndF)-G?$M)<+pyZ?SkbDk-fand`!Z68MbO=Z&y}DF zmC}hGW32j1uU#-yn6{qAwmmkQ1hc7BPfFf;=@wMqpr#_CXp}!_tdd_-P^#Kxw@#&{ z`(Ju{p>MF?9#3h8(^Ac7ofaDH7asT!yjx;#neDCYu{792v!Dc=Uu#>a!&(Im76!j@B zpLM{j>|xHpPY;XSn&^L-qW0p>yCfq7ZBwa?@>N=zHs&a+;~*`3Cag?d)l69QNvgHh zc6oUBtw_DDT4AtP7j#bwD>9|2qV_-}yboL#qbzq-%oh!j?zz>7M?FBdlp^%p4ee)e z_9|g|Js+kLm;)&*a4I;_5&7N^w-&@O#j-Uv^X6Bo{@zKZ8%hjy3F~tU{9SFVN-$W1 zQETjWl=|KDcOKa=4Ccc8MBC=2M4JjI+bJn$C;hnDGig;rAydH3U<}1%zAQ4yitsL? zUskWGk%9&2cJn#(k| zxzr6LDl3K>%88Vko8Z^Q{C3~ux)t6vrl5|0`9YyFUtW`lbt$DK5RJ&5Xa(zdcfsD$@%T;TsY;+8x ze@|6+YjO;)YWk!SSxPZ%GmZXP&z99#B>KR>c*jzW(V}nLs$m@?olMT;{OqYyCr`C^ zxJa{QL~MlPweAZusEc8VM%G@O`HUDWJC!sPI#H{&G%gBW$B2v1vK}Yn`FUmHznn0migc*yoauAb6 zTa?NZLo=xRZ5cDYF9dJ5cR zKX0vLH#*%$Zi!VZF@}X3?2EOsN00BE7Bn@&@E}#@vyPJ0)(lv#`J`qRv|SLiaL19z(Y+_OC@?=dlMHCBiI4!Tnxs8kiDc>9n?cZG2u`-bPB0a zEuNzR#x%XQay}F(Ig^gcoRBj*UoBjZnLKr3X5Q|Euk2Wn+{t<4vZvb3oG}z}jpOwD z!$lWaI?vBvP+N$DUTV1)+4qoXreMrCbrHE60CpqY#^wrEpK#T2*q|mYWhQp4m6wZ} zNUg%@vjB7jY+Bc-M(%|**prJTZLzmeI*C%WX?mx1_}W%#YRNpT)!;S8%Ae?=xD;cr zGRu01ERt8&I5sOff!O;irwZwzDqa{BwV^MLwmfL5)R;S%)S8QZRskkW_NtaU?s7Lj z%f>5pl7y`K*bAE~LD8G}SUXuqDWE#pNm-L8PRY#688sn0mV+Q7sa~C38lKm@KFX9^ zauI1r6I=2fs}`)RyEf(6Kq+=mO#O@1+@>Oi{>^DBB5w-VgWCag{+y)+X}qNj zP-|z){%+CNs2YNqxwF{~Lk6iv>blbu`nOw~oBhYnvcimGcDeIm4`veMFj0+S6Pa4% z$KXWL?k3$d;Y>3W`xCLUR$3;j)I3AQIYPy`*L|!pjCu9y9EL423Q^~AL^wJ?j&`tT zm0Ew_)Q&C19o2}61u8=}0Ny9(HV_#L<(wI{UZU*6G0!c6Iu-qb>=Krdk=o15ciqa* zREMFdgSK=fXVplw`?vJ)jgVOH5jzG z4bUCcJL>QnF$To1>$7%~@Og0?3LsdT`jjwl&M{9C+b8l9f3`3+* zQCkV^<$Y9Z8E`bxej-;^H05DcF!GLES<+>-PrZ%Gs7r7D)@xX(s`|7<}a$!!0`(t`3DoSqUk zgy4|?a(ylg8nI?vYp>SZq3Z2(Dz~{cG^OVnr#qpMK{R$Cs}~1KTW&>)w8*I@0I=Yb z0G+C=4!lZDRjJTN?P%p!wE54}MWQ1wga!o`W70O;=k-XH!}FOhr%cH6k@=XRve$+f z%D5WSPrX)zg<5oq(#}?w`cESBu2l}E4#+X7&DN7Iw-%(wVCII&rM-^mwFO1txm&Ai z+zpt{a=lahG8yweVP~tP*M=h6h!KX4cwA-0qhV4xM(wimJdQ?n>=`sUvmb#fcjw7s zXyj;Eq?lzdMWc)jva{2~EW!=N&>zWr%$)d6ni1tAO%d{O)CW!_Lah+R66ytxv61z4 zv;KLWvoi|vs!wDXQG-1#-f6ngRXd8id^z5-qyVSMV0$Ch%rUd1+StE&%(z=0%vL{o zLO!-x@!Xt+thc&2|M&Pmb7DLIeIed;lc(%r2&dU4DNrNLx+*C`ih zi=L(poYG`Vge>+&Jd6w4)f#*EzCP{GHX$*Jya9!$+A0>KDSFJZFtzfxAXY=`m+DOl z>lbBu)#ybIkCn4C|8*K7_lzpH1fqmYEN{Q!X@z2O+hpm`4 zabl4s7Lbvu9S4aN_u$8~aLo?|u4Q64wkty@)| zlka5Ss?Qm7H%LkC_t@!kLW{PUdSv~6OhwC3s}JP#H1v(?ds4$qM5R_bd32v#3=?3z zcMB8XdZ%yFr-+#Yc&NZ@Fq1&er8>LW#)6_Ogv_*$HZt=RrN!0fw|Lk4u!1QoD*6;Y zHy@Go-BE1eytZ8K^jXaz?AZ{vnaiO7_Hk?KfDu_lP+L2Ey>HCR)Df0yBxJ`PDE`H)k9|cpadBTM?Ck=(>S`-HinKKW(8{db>w;< zLjX>_x0^q8h!F>@(s|e?gUYLA?j*^OVHyg1GIqyJ89T*T7FGj$M^6|&%kcGB_WKsg z0kyK-oMsg6`w`XbF5R}dQ}ZZQF`RQ{RU$mC63!VYKWC+ zOKKWswo%S5GH3M#V|t|~kwuIe)Na#o%QiSSs=> z7lw_sBDKq@gPrxMX;sSPMyeeQqtO3C3nkrQRwX8~nCqA$t;)HR_4f)4^Ja|LFx!_U zU^P`zvtXpgK9AAq<_0M4MtrTHt6*VziIY4PKL~R`@D2 zIc*s zzOjUE6tslN zgk)O%Mm?I&Yh~Qnemkrm3*Q`arv1yu_3^f(TnfuB%OLg)RTw~f8+fdYfPu(Lk|92+eXhO8DtFxM+ znp1Z>L`?6n>?KqG@SPs)bc6EEQyMYtyiLU}F?&7>GgS3-8dIKWgP=7n!gS2&{W*(> z-dIZ`Ee7ynCEuu~C)=C8hz5B+8{9#@t#%xMx_OL2v7U~j|FwQ0%4P$-vmCFEQbPN! zXUb|&Rm+OA)Q(cy=*PAcagyPO=E zMHy+D6@3eDT86#h!@nYdV^GW!RuBcUWuLOE@+F63<)LGg@6_NpQ>B>n8q26jC8p~* zG|Sfa)q8h>i19L}tSBFx)^AUZ^%FDJ_mC3bk@0TfsdHg{&&b;|I2wx@^Sm=y zDXWv9J-52=Lk#+0y*(Oj3JO80qrw~wUmp4_h8)F}^Px5L z?2%S8dQo=B@|onJsmmd9Vh4lKHWvIEj&EC<+f-(y`M*3P>#9nZ=^oW-VP1|eUtuI$ zfza)56?k)?Hk)9@z_Z?hoJ8-6)FB>fJgSsVqBp6nR$mmWca}(OC1t;URwN@^T~vPU zozouU{lHjHkI%wQ59IB^#!RE9kl@_(Mm;~nojlQynY<3=QZ`tdrsPf8C zK}Ukt2h~Qcy!k3inqMufZF%s~IN1blE2O9BSr`Ujd6oE2w%O_pA8H0%Wm}?zX+@$u z;aG+!x%v878X3vD<1ASwRIxbq!#_&Ku2!c@z}B>>u$;x25T#CK^_-SquOArJ7%=V7 z{ggVj9&yXL`_jQ{0~#nL*w^{?aEXc8?tWwrib;JKK+{H~&WV6xsA~7j`V~OkjBfTB z>;7=}i+(igb{|5dtuEnbSfrt`96M=RVphL?iTIRoaz^5Siu5%62YqVM9NAKc`2?J@ zf8bE8*VLBHuMioZdnRs~%-_-}Ia!GVN=x}EtpU(sON(EFYofU`-3xHeXkl47zVdb` z&auXU&X7?N52&iHtks{Du$#02128az7TY;pTp8B!SY5H;D}vqEVtgz{>{-1P((S%u zSk_{j9N|6L#h!a-^SeHI$9)o!RzbbfWZ!|a>RT12D%Vj5sqe3OKPTvv&!Nr>H9)o3 zW|!h_avA0f-F7wk!T=aRXZ`H{SB0}9vABJI$p~cW6od}!7^#G)a z!y0=zj%v19I9$cCG~;(}JUzEtb7C0y$r7VFNg4Yw$Kd>W)zI&L6I78y%V`WeB5xv^ zt#b4e-LOl${zD7VITE z|Kvgosv~gSrrvWRolzSjy$_L&VNQ*rJPNa%l7Xf=h6~$CeO66jqp9e%)t&F5<7m>P z+gZ6rRkjz9)hCR6!~Tehvq&Y-poJvtip5x2+4)S!$;-pGB+u7NBaL=!gMRmEXbasm zIcpXg{Fx>A8fL={!_-Bz(UoI*%W+bj)17(LQ|g(_w(Me1!xjtczcqQ4x`9^p1d{-@ zCEodTk5nW#agBQYQd5ogA9WYIpq=mBtLbH9zbnGp&%;vmDFM#ssl?N1(A;#!(7`xk z0tvz$0^r+*Q9f6fQ?2x7P1GOV{omCPzwP=>`OwYAW)>kKU-RAp)E zyK379*!^c>F-#=n8(YS6#YlGdjhrzrbVD(eAkwObSrq$@{1#gwbmsYUVe4LozRIOGa%<3!S^DqCzI!MS5Kj)&<5v@4Caa>eW0t&-k{T z4ED?Qw*xU(ikKBKlTx!24AJydL~o=}r#oN(i4nZ|U_iZEdbjFFmo30&OGYg^uA~|t zC^X*!|A$}QcPus4FzfZ7hv2n8hC&xp^`@8y$FRU3>lxMB%)l94ILF3Ger4r;H+H*= znwv%mO2dgEk#Xb%I(|72P({KDuTzr!B9#V&)s`|g>RVKsDyEtA90!7+Xk2$DP#I_I||F~!Xozd-qC-9y?li> zcaShK?ul?Tjvo9#SItig=%J^WK4Q~%138f`$VMX~XU1UHi*q8py!Gx@OJ(;}ua3s8 zkNlMzi3usRSH9fOrtU^X#5u>#0shb$VlIlq^^sry*}yRvx1VzEu2ut{*z8(7 z1=^?z=Q(U2rovubyVHa_Q$2eb*Yj;|PxPrn!Vbk7YHR4BT!NOxtcbA`QVO~!Sxxq6 z3Zs{fth>6OX>|=iuz*uit#^((qlT!5|2b-SPiozwjbY;D*yDxO7HeLO`r@?S0B;^C z?!KXJR51+R{AT)1YGBoICGK%eqF>L3{kF1ea&?h%T7#I$M?S3;_H4?W&H1vc+HirP z0@lv(RTC6u69-1A>gZqdE36o$nbQMRt}+lT#gH zsEuj@%C$hZ_l%&IQJJk7rdlgyqT;izvey9AF}#Msn6B8v+$&l3&KNW@FeMn~e1tvQ zKI;|@P_!?hSp#QPR+J2!T{&xR%|JYa1tkMf6xawOcCZ7X)xyV(XAZ;$u^GL5Di{1072eDdLpL(z@pUjz>=w;POtV#C!>xxqJFpD)l*q{SOvh) z5eB`3?9YQXwMq|C=O3aP%jRIGf#r52(E%9?RO;(y*+*qhJvMJ#&ZM!PO6#^1F*Hi{ z1WJ#5q;W&L%>2)V2@x0!2Q;4yBDo7ANJ{55--okeOMM8KnR7 zPpbJ=rx5AMYr;=sL-TLbMAlvXpc6HR#Q_A+aF|x znVc!;c%q$0jI-?xv(<qdl1z zrU-sLv^r%+6l(g@E;OI#X&fpxY^HSDs>u2^sfbN{xy+5$)v}q_)QhY3aQBo^GLEp# zsg*5&`{2`v`r5PPLRF=l*&Y+OrD_t;zFiv2u)2 zb)EX|uoFVG8jbC!a!Q!}C0^-jy@!oxrHiL|aNph->WFh_mM1?Ej0hVVNLN)?Ru#zS z8(>c54aa+6uR5EPxGluE@4O zE9yL;Xw5*RFCY6CEO+CBm})g^&!0ttDLfvw%r>RXlA(@&V@afi!ZhqeQHStL_vvgP zwMTh+*2GVtaS|($I7JvKNUY!EWhszvm+6jJhvwW9(|FTqidCkZdu8K{^LZt)Blm3v zL{xgQ&^{i9Wn#=^rC=AF(zkHPF{9?Ud}`{QHA0LXAB{)Zk@%_u0 zqR(qGO#=cy*h@mfVWR=RMVixUV8ULq#20ORX4DB=S8`LM)v~9onNiP=A?ppaF<^|fM+B{~hmdD>*;(t z(tqff*g8zEF4l+bG;uKGn3Y6$lzX6tNW*BHovl{6Fncmb#8$ASPd?-E7`3|V}4jlMJQDV458hl4^h!&jTv?xGG?pEFR0B|lU&q~0vrjz zDVcrpoO1$&r&^nlLi!7WVI~5@I;iLIF zy6>>D9v^u@3Zo9C6IMqoL)%p|hX%2D8e?b+Y?&ulIA?@OMK!m>>8ZGCf13C{+WXyL zkY8_FMtE9xpMi)P3JlKhR8r6JfvM>pRU-CN70<7zz=TrFmF&#|mio9zZq9Mp_BOWB zk&j}Gw5`jT>@~QHD{>>CKgFq!%;DhNefE(oF1-`Nw1&Q!p}!R1J;4xh||A^hKS!Ylab18zy5xwYY@#3q3c^!%$z5W_!iP$rEad+HE4^BIBIZ9Q%|l zw`a_rBIg>aFV^UFH_O>YVyu>+4Yv22D5aW+=A%#Z9-@|(8gW*Qbw;16V)y$JbMFOu z6ZGBkR_Mk0N%Q59Cao>7up(uDI?<^)ZYv$b)RkYqnTrKPrA`!cQp~?F<-*nnbRn)0 zB9;npCJr`6XU@e3oNIhvC{GPHg-y-y>i6()>$!LZ<3L#`7vtxKh96O9%dXk4lk4ye zEbcxFHJxl?vlOGUUKUbhDcaZ;YaU&OQLz0pHY;m*VxMV+_-5IBy?tXq>U`x&9aNv1 zmYkB&4>OK}it5_bemMOmt*;i6+dDFhz~ZS^U`aw?|5nYKtq53FJ6!KdzXVdQrSR|0 z#J7iotCc?FHUPJKeN8(8y*E&W=I3!Lk~A--IUIXV1;5SYkFYXNtc{cxxo?KZxU6|rn<>GoTej(l+R_fSr4?#RLgtgI#z=j? zoG+BRA8xs}(Ra;Cu31!p(?3CMGgh2s|Ah|>*ILO+bCz6)qZ*UtLNc01cRt|m^RT~< zkc=bZ96_fkjA7AB+37fUx>3Y%Yuez6Wpk%`rx0beR2D&N)x=Pvf9<)c0dfM=7`wP8 zM)f~F&?Q1Dokg}?KAng)X3uU9h+He3BE}DitVgmP2(B`Yrs379lH=g-vkb;-r*?}EZYm?fCL zSl=?8u!rJrQ=g#*rwW5FFz0PSrEiXKJuQRm@z zK7M6xEWdua5x8c{jcPz{v>|s=19B4#xg`zAFB@`__h|9HXUJ`6K<*1e z?z#r#eukf2E;lzI_m?3jWf?7f&7cpn!@IfxxmJeU?G4C@uGS9krUvA?8gh3uAlJ)~ z+t`3ye?#uh2INFnY^U$82INKAu>m>Jh1+tA8j!0s%vhkdgA*m0W*@7e`&Z#4GpNKfG*B!v%@gmfHYF zXIlug<&MPPEsX04Zv~W`v{xzkm3&C}tMO}ww-pXMt?+Wf`^+czNEErjxNe5`1lYY2061_5{+^hf&lGu`Pvtr zBq&mNpZmfaYJ@k;2(K*))yzj{+}DSBHS@6-S}Fzx@NJ`gz3{-bREs6h4yQO#IsU z{lgcYRMJS{{pt(v3nRQNBfNtUu=zZyqJ-BSa^~|$eA`W*J=$2k(-DqncVz#S>PGkxK$Gs4S3IPg~Q`DR~uFGmUQPG5L$8R3mL z!u!n^-niy^oev`F$IkChzVJHZ1x|s463aT>613pPT%tk&raVr2+wS< z?DQq!y8La&YsE*7w>RX>c()kw<{9yBVt97E_aVGU@s7iFGu~}c;vJ3aX1smgb@O|) z5$`Ju&yM$WRLV&4&c<~WFYc9}b#TjA!v3+#xfIvUc-J9bsn1f*$Kls5=kFPwecxZW z=>R)0%8By~T$gA<6ztm4TVEtR`8f@8X1wj*bNj&);BUu!8^g2n+XvxwQX%O7>@2`btz>w1 zyi4J>-zkYWQU1fvCd%3I-VHY%k@I7h^KH0p#(NCnZ3iiNzNPrJ%lQX}XUF>p+ykA^ z+;~%9d?9(ajjj3xW3Y z=!(Rc=_`j^r1W*hMKgU%jr3I@JiA=R_`<70cpZ&+?J^(b3vV65ON5-1b0vQ5@aFl# zJ1Y~W~PC2<(ewIM)#mDvE^1oeAfAOWS^ZRK3#_RI4^<0v^<``7l z_sIQ6ylh$d2-E(t{r2_A-2}yjwC(nfE!P2ZW;v(y4O&YfC(msue(mSh+ZSHj&nyd3 zJ3n@KJ$&J9ObuF(KuW?p4Zn7H!+ha=fbdc<7PEis@CNz9t4a%68xe?vw;aEAc;kKH zwf)kv=Av)3f9&wa`oc>b6128JNWwbGrSZAaPs#U*Ii2oAmPbxDdp_;Z|9nT z3d5F^@Z_h^7w=n$S00DNdlr7}cvtx1{R`pA{KWpT<2|2p_VqzBQ8s>T*L9S$`{|*O zd&DSbJAGIC()S_Kw-ez>`p&_xoj%bO8@F3KFAi9naj*Sj$1Aks6u+ep2CSFScASsD z?e?G@{+7CDhBxKefOSuV@F3>-vEz}8&8#2(H9bRCf76NZ2l(8{KDXJkNqSOz{$`IW z{^>q{vjr3XK|cS%KDW$Z-Jg)>3CsO5gLHpFmdpU%pO7UpIQJ){W?-f}%XQ$dkd^Io zkM+58d~P&6#!pDi0Ne{9YqIOWUm;~V=w1q`5xMEkbsb7R&*whM=avz!`xCN`bshLC zq(-9drI0n=lI;^ zK6i!BEh7Z?CuB(v@BV}=>7m`9kb0v`xAc(iPsoxU&ix5lC%F#%6|$E2+|uK?KOyTB z*MYx6)>5BaT6Xs*q*`XvEiJ426S7vg4*V5TEuecTWS#9gl>a$03^abGs4=Tsi>7$S ze$w)IYjlEjt#P-sIuCl>tsQ$(eYuVGyT`w+m0~tHo*9;;f0ai%e?Ojj&6$&fAjy`{LBro#j3{Twq`s6$N-23_5U3_lQ9=ksw&rD9jKfv|G zUm@#2pSzpSo#=CS_qluc+&z8nUOx9hK6h`Q`(U5DkI&uL=T7pu`&lQjKFb)SM{uCE zgl;Lx9>ElAqfy`62T!s@?`!|a)5h>#{YcN(JviTL%PMZ)pGCLS^d7-9YmLX9ZoN;p z1k)p!VP)}^=%Cz#tWW5cp+Jw|U~50VB0BsbR*ld7g2z3~`rPLZ@RgF1>JdD|8f3g; z?So6K@rGOSH`OD5sCBEyeYo`$-Bl{QOzR`Mr6zX|R$7134X1iL4lrI}2|v~6o-h7mTRiTgtzog?e4)+OY{}?kA#01 z-7=Ex9-L)~UO|3zddjTl=$?ja-Gg(io<F&G_<9t4|j)5v&_ z85xCz>=+e=`MCCnVP1ZFt#E;u?6bmdbEC`}6!BwlyV!za7FjICtoAsE8%h=7XpXTH zCXdRTkUx3MnB45V{JhLj_&Nq2NuFVk6+;X-0mLvBkKu;Vsrtz`%G7#S`z$=A7DFP^ zqVIocd{9l;`O@e}{>OV>Jn3^@pctNlvuR+@z0YCW^oL|m%*{-bqZ)IHCsbC>nO`NR zXJib<=IYTn#;&?TJ_Ld9IXJt(owN6f)CZ1nSpKZa;_Pg@COT<$GO9L`pbR4Tu=YAW zF;q5v6ma-U2y4asR?_Ry@4~ous0l^-qRAb!<-|{?2_bNsd7FNkHV8<>I-s;ybXvOS=iGFYm&n%Mg}&S z=g1d##M-i?I6Q>d+U&4!W4p~?GmNbG%R4M9VFIy5>A%g5GRjV!hRjq^RdQ>xQsuE= zbNaNo3vo0So^;K8IhG`nU8`BQjF?k*-LJ*)(nLROE5E3&z&)1PscBNxRr+zTi(9kI zitI0SvpVaFsgG+mDyF$xA;Rq{DLfKD{aspJQo@Z?JaVv6-P|7EzJoGpTmts|{uoaZ zoEG+fw=2dzf7vsziEWRcR1i-Mi0Q5L-{rm<%IBy_sB5S!b@<-Yf>bo4I4?232#0so zsBd*Dt92z9WgCnn2}i-0_1@eu6QP!RcGNU2=P|sn5i%zS>h2B( zF&lSJQB67p!eG}*S|B!#wGmaLdGJ4fg1|Hk`< zNcvDNV{{Q{>L?0&gRn$vT z&*w|NZ?LQtjd(8tx||LGTc8jR7T#o8>2e+AdZ-ZP znk_`Ro+w<8oADF41%C@~)wWiF+tg+E`t7`av+w#HzU!M9&YeEFyD4{%@A_t5$3s@} zBYY``z`0uA7g(cpssR*+^1qt?s5h-d?n0kG@~iGg{+0hlKL3sMUrhhy^v5z{M+py= zv9s`UZ4(zb*|HMFU9ZoU32f0e)WZI9eS@}b4_wFeAs;IKQyKo5O$`73DB<7B@Ru?C z6$~HCnlYvSdZs@@_@Z_Xpm9;E3xNB`bx_{#z;NhPg;>__&Fkr87P&K^<(pw$ zMDCOI6k!)Kkvxn%o~$7kk!#5-$c^N^B0nX6B}2_w&gA~&!DKpl zI4SExlAfc?A)BFsNxUsdSw|9gPjWChg3Ke2 zBj=F|$#vvaw$~u#{ z-zR?{car;|p%DK>auk_EDm!QR&!hVs@EsnN)VO@SjL`30Y1qCs&czk~fo& zkgIQu0i419=PiBKZT^1_KU>Zyz#^RCbNH zeiYp&kc-Jv$ty`^p9lGEbiYRaLjFbW2a^klFOeKY=8%QtEb?^nZ1OJhe)2u?6H*po zCH#1@FPTE-lE;xt$Ytam*Swgu!9aanH)q;CyU6{%j1@-MOv1|Cu#1Igpb zLh>B)Lh@nqDe@EYOEL}v4pqKn26+gXM;=eskc-I+$Vc3&>^UO7d3nF7iL*dt?X$R!M(LvOk$l zP9vw2_2lW~t>j(gf5`X9f5_$-07^UulgZ>XaynU0o=)CC-cG(uzDfQ}{z>-eqT}gH z9!D0C_2lW~t>j(gr{p)}ucQT2DM^2G@*}c;SABg5c?5YBSxDBAYslNl2gs+$m&v!u zPsyLj_ycr&2arR_Tr!`mB~K+UBCjFuAh(jwk{^(NkZljt@pUJY$q{4@c@$Yh&L&SI zFCp(C-z9$|J3!$h<=cf!BZrYklE;u$axt6?x+)TbkzC-RL|0O#o>iD~nhmxbo zyT}L0XUYGNACcdXJIQ94@JPPel3mDy$Q1GrGLt-lEFzUCDHE7&(nRo?J+tOkP4>MLs}2N^U1VA^#P`2hJC z`3AY2{FVHh+`q4mw+DF$If^`3@CzI!s>&OSl$H-5~ugNw^I=+3#baFU(0$EI+ zOfDy{AUBYYlFyKzkvqud{d9b-$b-oKWHvd0EFsIuHRKiKHRP@27V-)5W%4t!dw(5& z5}87dBPWq_$a&-{@3}hJ2m;klaD;B%7t`aN3c* z$xL!OSxBBjo=#pv-bg-2zD#~g{!F$?V?N0gaxi%!Sw~(#-a_6<-bX${K25$zzDIsS zentL3?j-*v+okJt?L#J#{mCKZ2y!fW6giWuChN(SyE$fwEeRRIe7zl7x^&xJozU13HcrQCmBCf$J2rAM)oI1k%i=`kkdf2dAh8CgxPA}=AYAs-;0C0`}KCVwTn9;U+`MouP6$dkxN$T!Fz$X18z`}>jO z$#SxeTuI(cK1+T<{zD!xQinH$oJ!6j&m^xWA0gi%KP3Mq_s!Jd4IsynGsz0_bny~82K#u5xIlhN&Z7NAEo2nhwMT2A(P1rayU7X97E=jGstrCbn-g#N%DE}Yw`!O zMV3xaTe1(COpYNZkcH%2axr-Zc^P>R`2hJQxt;uzY&KfQ--Aphhm&K-spN^|Y_f_x zhg?H$BsY_FnK6Bjhs%_k|&XC$Vaw3^WmXkH)D)IvIW^xnxEcr6|1^FErKSjsehU`zKlM~2XvWi?tUPxX>ZXq8g z-y=UECC?zQ zBsY*-$;ZeK$$!XBN9%aHk{RT1GMAi7){+;ISCX5_H^}eFgkyC0J;_7KX=DYtg1muz zlH5lAK<*^FAFIQiOddlPlU3vras_!Vc^kQfe4N}yzC(Ua{!9jr)A6<;_a}RhBgwI3 zK3PgGBUh5QliSGG$gjyC$(G0Kczcrr$#G;pxtKhaypr5ZzC?aPenqyNuEXD(96}yV z&LHQLXOlOQo5+XBC&}l@SID=>56Iuhf5;9e=ydcV2a;3Bqsddr7396-L*yIecJdeU zFS6^2I-Z{7Byt+Lnp{i1Lw-bd$=COHC-cct@_Orm@+tCt@>B9#@@KN!3?0uw zWEr`fyqvt5e4PA}{GQyuK!=k_jwcJrrQ~XI9eEe|F!>Dm3Hc}4zEFohfE-PpK-Q6K z$PMHj|2h7y*j3$f8+2n=frQ`$TqvRLlPBJu0hu4$rOXiWsk!O%=$*ajn$*0NB$#2Nk zWjg#0WCl5$oKDt|=aM&(kCHpc_}MzVZsY)R3|UB)kt@mb$p^^C$Q|TQWal{ypFEr# zL(U}UlIN0llMj+_ksp!&l5yoa{66GJayoe$c^ml}`7Ie&q3`cV4j^;LDdaq|j=YAv ziF}QGhy0g}o2$d`O%5O@k<-Ze@-iy4&Y$TOXSyN+)^FxzGM&b5HgRfB3F?c z$Op(b$lu6+$OBJhy2&HRBguJW9eD-0fqa5|p8T5pk!*jO4u3y#G&zl&L7qykAa5h@ zCf_DMB%3eO;kF|Clj-C%@JRO7cqbVe%>R zzvMS$htqZVUC6`8apXkuC~^*YHhCxcBKbM_HJNaR4!=8jC^?!eCeI?*lMj&Zl0TBI z&(z@!Av4LbSc@Q0qKIf|T2 zE+ChZ=a83@_mYp2FOpxAzmUQ6b@*+`uH<3lIC2_UNG>O@CEq8%AlqD^!|hBCBaa~q z$y3Qy>jM7~W1*6Q&0A_tH|$fL*^$@?&xb+4^D~{=VceGK(xBE6KIwdh!|aRq_u~_E?KOLr*f9%p~WK3(1SftI0da zXUNydU&(zg(c$Nk)#MWLTJkaS>`S%$Ch}$SEAnTu(`8z22$@S(kPFGH$eYM#$XCgq z$iK-0FW2GrA#=!F@+9(f@&ASN zlH8ZfB4?5pkav*xk#CV7lcB40c&*7KGJ`ydoI##St|D(GH$@?&xb+2$G@erIwxIhrgb ztH|@o%gC+dQ{?C54`hdHb@&I6hm$$vY_gVILvAJiOSavh!`Y7vVkG$P{t}IgTtQFC_0GA0&5>ao6kc63HZT5;>PVmt1m#mcM|! zo!mmcN%p)^%Vm@2kk^t=kS~(olYfw1Z_@YoCdZLe$y&0Wyn?)ee2RRT{EqB)vkrF* zSxBBst|PA_UnSooe!CZfyR~p{%Q}$mB)XG@xbF~N&n73+KbQWqdA*j`SI~U{c?GZE zPrgKcO70XQKYt0^qdwiG*TX}mt0?pnG}r~7=mFA^fWYk2)u zax?w!r~fOw{w}Y7NB8e!v%8r-axgiboFPPhiiI64>vZxgA>v;vM1I!u`UYOVo7W%W z_1Ea$PWQKT|3UXZLWH;1JvzL7$ZkT!+fxYt;k-VY*N>sQkgVYKmE=|A-Q=@EP;dJNFeH`7Tbk7#zzJCC9hu2S_dnQ@U>#NBP6rP9gRr2~$ za-Fa%%1<}~--aZgCEq5$B!4GcJgDUl5O&44`h>{G2yzs!myz|nzMSsM$$QD?$&bjL zLgXXpA3!yk1QA67pj57V=T@Eg|yrIo-iW;6{F03z46WLWJLs94Ab)tm#7JrRW^tSk}Y5{u(*_ zaa>0^jwW-+$z(oRMAndJl2?ogX0(m@{PtGFC$vScgc@B9#c`11%c^!EZc|Z9O`6P+Y zv#E5xOukNjLViwuPyS3c59<3`km_7BHo1UY zOs*nVlk3RK$!p0Q$Sven@^SKM@}vpG8EGJizhpiUC9ALjOS9xq2vg1 zG&znunmnE?CTEegWF2`Hc@DXjyp+6}ypG&V-cLSCK1psPUnV~wKOuLJ>RdPED}aVT z^4FZ~M0O$j2{8^ENDd~4lcUHn79N90%Jx8%R1I(H8DcZ6<1($ksjE9``RoXjAHk|W8{WG<=B zqr-hO=q@I!$XfDr@+|TKaxHlUc{O<_xtV;Be3X2K+(y1jen5Uf?jZjrMRy|kY)^I~ z4;FSoKToES>U=v~Ka}oFaw>Tgc>-BLR*|*jGGSMImxer-ynwufyn?))ypz0-e30Bm zzD#}~#5m;>@+O(&Liu{ zCFD8e`Q$qCa`IMkBY7_=--VKNJV(ArzDd4I?jXM>ebrv@+B1omT>m!70im-)cVQ8oHVaY9#Q3C2h;c}r5dGOwA^NcuLbP}13Gtq<6QbU)7h*niqY(9a zqY(9SixBna5n&?!!;gfEWtFqDY=|f`9}B`(!GwnoK*QoIo&F5P?ZCCH{FkrPms@$+sL=b_s9>)Ps#7e zpUIu%Uu1%eOFBZ2LbfA2l4@KA|6X+WA^Vdd4%U)O$>rn<@@#S)c{#bB+(2$5?*R+*)YnhRFUTF_PVz6( zl5q~?)%mqxJGwiPoyo3bAF@B0LS~R7$1W$@N0C6C21Ig{@GZ$&Es^8+VgiglIpul8*?{ zjyyp=BW#CrAjy}7c>iA~-xA_|dXM~2i1+1F@(UsA-wyJ7A?nl5{qmj#k^atjE*p0jzV<=+1`j~`g~;EbLQJx!3lni(zOXy`A0aY%w{Q@y zS5=o3RaR6bR}M^+pVW+DX=y1LLxv8<-zh06#{Yu{XCx*L8!|L)sFIw~@|5feV*&wW zfIk6LD%XX&c9?canL@*gBSu?WPp{W~8vYNQS&089_rXJ|Q4%N!lu+X z3q~odIYHsVMG6;Pq_9>FT!{-@e6PYfIc_B`aEX*mT;S543YSe%xV%i^%2O29uUEKw ztHL#JDs1>o;f8$&%k4LhP`Guv!tDzcHeR5xX^X<0uPWTNL*eeYA#&e6i3*#CE8P2s z!j^VJ#qYiph5IKfJTO;b>m>>g-lg#H>k5y4r|?+YVRGN&0~MZ_tnlPqg{PJ)JiS5T zna35L{aE2SQHsR{p6{%%ZJ@#n6BS-8S9ocq!pk=S@qvWE3yLiQUnsT=Bpia{hpTh& zeuci2W+5nZ#L(9vJfYz5p7?Xe)oF6*eh>WlqXoHssM9U`;I5X*_|MwwPgI{)CG)J% zuj3(;fol^*LOiuZtMXba^vC98?I}}#!?X3)r3m<+<|kT~#B+}L9wN7@|0F?Hn|ttP zhk}7MBXz?ilYixHwR!4L_{0Tj@hXe_^R`b*xlza7=AiMAX&D$d73yoqd?zyUhZ#fH zX^?3XxU++n=^%IeWmE~Y51czm%M5X3R9sRDR-1$IZihMr?nX-G!jU2~7I9g7#Ua`@ zB}c=%YhYR(9va+LZX&x&0ulpn8e4aB>6e?7`^Z*}5%QdV%lWL$bcine_n?hZ7co`<%%!#Q|Wtw6`y@DexAmkb0t zZa))$7afJz104&YsB2z4UH;yuHQLYS^8)+hw(j`tR4e(>S8D>PxH7`N+H$dY?fb^L zxM5LXoPD{I#Ev3(9nr+a4O$AJxVXW$jSviZ8fgFJEF?0%>bEXvVQ=Xuf42*~gxmL% zTdXeiXu0F}3EYX-&)Q%7|X?t#Vl+v<2z794dFu`ZJMlYUZvOOeDc`B(j&hjNcUr6gHo zHZ8;7r_NS?uRuQHPm^o}I-ZM16u;~*`8%OEx|mk+7oLKi>%c8@aDA=BYaO_@7=K?Z ze>XdDD=K;Xy0?&<1S{dF0=eO`baZX|O~PGPw{y{EC8SBByS;|wCJea(FKD-8(GVt# zYLB-d@vHW@|DK5pAq;2t>F2=t@RK!`s!wkrjQ8=|=>Ygy-Q}3C_{Xc!@knL+1s;Do zo;~hH?Tml=wFRiJ=wUnJx6>a;mDQtY9z34^2;QOw7~p!`*&QA)we5lN0WOZWJzAcLi23!!&Q^3`>r+S|Hp|%-}0#E23+=!|uX}JqB zDs=sys&+lPA;t0EgwU)#1@Bip!B{;z?}HGw2D0G&8N9ytdiRop_2Ywq%w9Sn2`G4( z^Xr@+R5JiKR|dQ7uYG&iK01jin^v!fry_`6f#cg~q45wpQUt%1!qdKe0y9gsZy9`Q z#rJ3Us_JX?DnAkd^bd4GWsyvt4etxw0A`|w#is?n-xu`;59?<5$gH2iUx^nvesG{0 z#xUah418qHuYG&wOn~q3Knn0Nu6`jt60z0mEIhRM%)tGpT9(QNDq%bPs{3@|UW|HX z^(?|*Dn2K0Z8h$Jzs&Cq8M(Ek66_@>HN_tp$VYL@)gvKT5H4)>+PV^Q#|EY&6;cNm zL1wulr-JJJ=un6h1`-a!_#IyQB^NJUv3hsz2md*N*2NgtMe>)!+Tv>iZ{rpG)bUqI zmCnuTeda3opBb2d@SC-;!(o9=HJl_j-kl~%Uf%KW0gi`1d415ELowk(jDUybwsN#DBhb=+- zi(CfwMvK!Gzq(9R#slIqSzTqgu` zFq)PM7dRRI%WN4-d(R5~G7-y|;(a;1t`Tq5p!6%5TWrNw1-E4J?g!xYsB^dWJ}J0j z6z_fqULQJlC&__+@ymmsojF^1dqgdnNBa3SQIQyXT@cjekD4FWa2Je0ZJYddp}p{*~ZsNTEEr zz=iO-)b)M|sf>Rk`0ZGF-vzJx9Pj=+CZiIc5?qXTBJd(Ezb{^rEL|&A$t$7wAA0OUW?LVVX|`_|yeOoG6%j*!ad z0GUN3{MZa536+I;@LuAG=xmBe{DfvB?P9+O{x^GM%xtOvgMlw{7~{OQyLfqfg>Ct)q%PN zlB6VGX_nQKK^8%>#*tQnI@?O{^JdHNhNz-B8$#EI3z~VCTM}jl)*jDW9)|eq-dl_U zP!Y6i-Uf9*Meq$I{|=Y7bdnElE+1i0f}PMp_rtGI3jPcZYu+`N4e@A5<~h=;ICK@i zt^#E?wfX*w8EgfFPId%Ui1MG6qy!6_f1Sz@*FxxOM^Ft;luW`Ifoh~*bsqP_|2dD0 z9>pX*g6zg$)cmx5jP(-;?Q{g4SX=6cprmhUK5rJK_im5H7ySCOF4E?ckoyv@2uwMe z_vPT8q6qgHk3&WER`b6*^OhwLKR?PXmd?ia&HI&6`esNz5kcB`Fe-vzT%!HFw?q6# z=N9!~)PF|K_lcW_R#`pty*gOdLHN}GckXbjp_}_&OVAf2+!zd; zq3^gH(wigP;XaTye|AD$e=hDFG@w!>??75tQh5RO=&$wrXe<)eoyU3D-w{NTL>rXw zYVdo!C6b&#r+x7L<5zXkdK%&+*y_I$PbVQRc;>N?90{rMBB}af$)}YxeKr!65Z?oR zx+FDF4FB17XjW2-YIwJgKXyL7m%-~S*ZUKM5x-x2YmA2ekhEL_uNz(Or{JCNVer<| znAAt%^@i=Orex+@D$?Lg+|GP!+obU?pusH1S38M=Yn{YzQrO1dXUgFrh_APPkN2uYu5wj-V5@ z$`*q?HGbhFNqbIF zFkxV*9|lP(p(7x4q$B80s0#L>_{{EZ)Os=n&xO#nj-WrGD%iskEHo%O z|B&1kE^Q^LVDm#~qd8H6pF!vsN6<*ag|5{mCl!E+&Wr6Xu0blZVQ=#>d6Z7plAGz#}Z z=xIk#GRfCt>rx1AN_Y~TzbIh?A42GBM^K91N)nlbHKF8VDbuVAl#ck-xpo5M06|G# z6N+Cz=`=_l8AaM`denV)hkibY_szyV^PT&o$e5DHL;WxiSE)T0{?|G(Zb}U4*Fujh zqx4otz7a)Q7spXAO3hN(GxcVK1A8u5M_;r1f-NhM~dr@B85K> zQuu4M!rvzY&0CK`-m>CajlWnfwwijs!nD^Fj{izwdUL$eajj11rEuaXh5Q1A8K(ey z^~4hjUOol(--k&#wSN*%6)Ow>#pMnUAwibCny>&5$6igCEq~jq31twi#BZl_an)H( zI0aW$+E-g%sJytEa49ZdXM1U7P0DJ#D1qj)0#D<5a3&h8=4D^w&*bKDSX+^sQ%CpL z67>E5So;$AsH*G#cjvu8oQVMw3Mpz;@u0NGSB9i$%kWR-3Q**o$W0LpNW8k{LC zw~~`VKEY$@O7^5~Qr4>o$Wk#DEdq7>tm21Ziv{Vot6Te7*2rtS^2>)R&?N_>koB{A zkAsTSKUSBrMZNc9rc3`s@yN#M{W(bKpDJQgdoRV1O#hpF>D7mF(mz*Eq15MDp*xsa zQ@>JggYv0I4c<#u->(q}@vo{0(mggQ;WE~ zvI_ohI0_vRQ2zowc&uBfyCb;qEbzJp+EK6PAu`Y({J|c^Din4o0H0z}k%6gT%_3Wx zQ@Cg`a(4@~V$@VXc%T}rRX+PV*jsvLfIp)}gAHs2>nyUR)k9uDr=({G&P5dhmw|k( z#|nyh7p|rBV*}qcVuy^`e+~Yl216UMhK$8_T6+J$Ms!@@Rq#GGd}h%a8nO_*kzN+q z)dwJ_AO0R3K2islf7Y4cHwM-Y0)GH_C5A6T#59Mzx&olhfhnf}R1Uz&2LW|We=)!s z@Lv|fe<_UrQZM|M3gEwNE&pYU_%F52e+NR5qazDiEe<7d-ZD;7qfkTl^fk1(oR>zS zE~ko?a-P71m%fQd3d z5Ff_p37`4aGB7W==u9k&0DcRM56EPttXyIKs4tjdovm;5HjXU*xfJUt`Oj9Jo!(I1}7G zM6hK+jX0jod;YnomT?`pw{(*6FUolFUzu9QBj7&QNd`Ap(_hqghEn(O+EbYX`#-1_*y+k_*aULl?qmpj?#lQs!yfR6F ze>?*7O!`{^8m%f3b9y&WD$bHe%jxe0D&&ip-}~bKT{rqcUq{X>zdN_f1S z{@1`IC_t6)7(e}^01Z!RKm18R{O~xj%D)HB8l%lJQ1CVeNqV}i-bdp;VFO=AL#**a z&a#ynfFXd7kb|$27rF~D4VY-FJTS)?z)fHU-v!ErR^huYqTE&$fSqKZ9|2_*eAR&B zFSJ!X=y8vyJ?&7Qy>weT{bXE+16J(YxX#&0o{E8*}K8I z(9g|tmGr63QuMauz6q>b{oKNy?OXyEC%GR7>sdcHk6qH&Ip1P+MP;cE!TOue=DAAx zsm?o_Ty`iQ;{+ewZaFeZ|E2RPOkd@LJen-FIVhTE$LrIL^xr#euxB~lm9>nmst> zmaeXd31F3yt*z`-s5!kTWkbZxy%?+&Wb53*o|H0lp__XnSX)f)Ay17$?zt(SPJ#w5 z0QpKUrwlfI%8=fi60pI)6}(?};vbJ~()4pvHlyz9Iq+We_|}kK)4{qbMQ(C_4D#O% zYbZC!yIsHlNCw7{u(M7&yW5o*0dP$c z*wT$pIZs5-ZZ+<8KG1I{RQeA!;_^ZHc^7z(})rh0Jbq&mH1M751gcr4M19(z)L;mvS4-6{hoLRnN;;4vUyN=EC73NRKp6Sg1t1b~!6ueH*} ze(w$01ncaUYri=K$lgE|CL?vftlb9Xjq5rN(^_CM01FNT>6Olq*MdM!?YgZWko7>t zlaSVsi_^gmcdf%ZCU6dT7bNow&v(FI(Y5Ccw}m%?e}}=a-d15Rv?_f~*9o&+%+uh% zoQxUrZ5YiOV^8dgay|v`pPl&Eodf+8W|g zH*_QNPIwy?>Nx~gvOa)ub+7qVg}asf1eniJcoqhrHFW9@a5p@UjuPkmAvpi=xWU%# zfK0p@dh6ctFn|IHL8xTbY->Vv3s!9)_GIFy$!Z7zb(C&Rx_<+jeKKPZ{xwv+a5#Pp zTy#&pK` zoMDzFH~BIqNu<+*;d#bn?)0l3tI%5+Q@Asv_Z~7z{hN##Q}s>8Ybk85dJ8rAfE8a! zO&=}PO7#sWT`)xoHMm+><1nT&PE=VS=XxwRSlNzQHsj=0WV!|)H4g0Qgft^#@E(w? zp#oWUF2={rge(Pnm4Q4WkQ))jWz;MSxl*=(y_*o$EO-eZ!MUu+lvohBrV-Ga`U&{I zFc=mtKx-%`@Qk%Dqh8FY9s}lS;#ebV%EoqZw|!6o&Rd}VJy`9!+hB##QDR-hw>#+f|5j$Da@8u^AYFnG+=WF8VEV@*5LD z9f$xla|)@$K26aZcGmEZQR;AKDfE8CBYHdQPkJBg&2Cdjd~2Zm^Y(Q4=iM6l=e^VL zPg-sLI_rq%`7^G}$UUdv&tXsUurhi!qiPxB=b}9aF&IYdp25^gn$dVhDMNa_S(PzW zZ&tYmlQkSp0H3T)Kp2A=0?HVV8a!QCuEER%dA`R=GML@tv5kP*sx@G@6Vic8EM!v zU~&HhCIF2|jXZ<-3YAe=pyrb!rHBOT$1|8F4m$qD+_EH$@58JRJ1F&IICdBe_t;#6 zIS(GqH5f@A+F*F68GjA44*%|a5_KF5jaI~&-e&6I7(P&2N)c1Oh_BUf1W}05r zis_lD*$Yzp;l&&vXF1u6!uYp*47xA-WU|YDIts~Up`bg~ z2`r`^pV@raZ1$8eO5Cvom`E;YffFl{T(b$u5c7u}-uezPU&ZBUR`xc<*K7Dvjn;U@ z(oLYg9U%1yQu#nO{ypZ3-+>?710S=k%g|vu9HgkB8U$N$iY7$k#heDXvIq+WtNd5sl);)w&J9Dko9+| zB41BRRAv@jTJ|@>+TyXSiZOE`J4XuV8%(-}BGy$?+YDqoUDU*Pn{*$zye5p{>uI?c<{4t60v+c>Hz*{tk*=z&)23p)yoyKX#s@X zDMI*Cm0vfPzl%avi4eYRrTM!2#&l%8O|qWfi8ZDTxqc<;X2hqjVTe__UCU81X$2z9 z-v6LwKSPk1IMrfJdaWFye?*((Yg~S%tVzod%Vyt04&UrbP729aQ3v99?CX?y9AZak8DEXIy-Ge$jVOUH--7LA{SpptXzXgDA-RZmnsQ4>cJ*9cw z;P?_MsQI6h|FojIhLg{#1f>)<*{b;SF7TgM+!2|35dNfMD)m0rn(y=_h!^cuG(%kW z*)k&dvY(7ttD;vMs8fZ?cmMphx=LNW9$G74)A&wcXQ7iG0kL-(*?d><0Cqm+kKU(~ z&36bjTZWUa(nQ!_?*&pgUoMow;hukbGU~KN1}I-Pbje4KMG&6-XFjPJzJI7|OMzDU zOgyq}#ec}=dx?HytRrvT3idmElFQc>6Ei>61Kf1Qf5_%*j0u_3kFNuJoZ>%Zb2aJb z){3e~!OAH6VRajNhi^S|)j)tLRzoT}6FRwhZjD(J_bmTQZ zhwnt%D)7*98XLcaT?XF(obQC4g%Dm<>Ci`2$|N3kxQMEBxTwXfBG2alu5|c*UMd`q zHMXz3B$v~SC0*a~91~Vf+tEl*VA{#~Cx&z1Ql?XL_8o`xOs3Ov-oTX7cNWv#bAGx6 z>2juf5(~W7a`rkbV<%V^+>leJ<6K& z;gR@q8Y|7W38m-s+eizZIUAg<&wv_s_}*b)7j$_{KMvXucR0chU-}C>3Mvabyvq=F zcuAzveUe@&^b;7?@$I>Vfbg2h%+#EktD!mG5Xt#!I3Bg)3r=jq#&b@TX~zmYjP+Aa zU4LMJZ@8r!euBi{8|h9gjc;Na_-{&qZ>}P~d(Qf%LcPA#@;A^*UHnF|SS#=mX7QX; z&H#Q!E8IcO+ksyr9d;hXa}n#nD=V^g&&Y z3QpKiskj0WNKT=+$$@0CA=adww54ZgiPJq|P}(WoIO$8QiF00{>#R8#`z5yhM$X2k zC9x5ZQSN@a>wU?bBVRiYPU<8+xi5AnxlCx|(d|0}cG>SD*5EmlS*lyH0PXE}xx7aF zK3Uq>UPm?hEfp&7J!ysL_7y{u{Vt(cUWM{G+O&>5aSPaQ@=5qqLYUBU)1O@i?nuRd zNagh@%@)~5e#C12i%)*%t*XS#Ph%kVo2&Q_*;g30WS)Focet{fDo(eoC3nT(@^d$F z`?t$9>@}yi!H?u_Ri7fuvSlz3YuQ&=3@cOvd6r$2iHU02WXx*LvR^}T%Cd`)?qX$9 z0Df}gb@-FqAO8xOotzi&%)N?ty;7I67?lHk48|vGJltw<3Le&AGIGyX<3KJqEanfM zbO!j5`Iwk<_o|567q5Pw;xj($=B;1{6E#3tCeUrI*=5lba z7y_rSzBU;N#K!tUXmlt(D~~-3pwE?}id8NiSQMsFF0d8}kM)mo(4*^9pO3mJQ>)AwS0~RK{}7#p7a@wFcbaGNklY zQr^&AXmBMV`|-HTKd`QI0TvJVFGPK1jGu~ZdHcGQVb_-g zC_of*smRlcxl|e{8~1saN^6F47cB2*qmgSl1grD#xPs-bWA*2=EPp#Z?}0x9r)~lD zeuEJgO`tXO^GwM4^EE}TtQSH2+{YP#B2^!`=oZvoib-7vRz_v` z*bYhSj@>J1-LaQ2?RM;%E^uqCa~&RQ@yWUp+#s9lb?lk*d0Ya>Ie1)PAX5o(JNDrd z!M+}ZJIKC<5-2ptlDv*xuYmbIs4pa8ypCO!fi40^eT>K731LONj_p1R9UDTEO~=Yy z7Gh^+G&5V?zE{D{B*Ap7$a6bZ8tHbdw8rh&jj;PM$f;K0u^ykSn_2zikV@*7ABOObi*Rk&*fE8K40P%5yW1nb&BGv0yw!n0(vL?I)uk*@GY~Q_E0r%PepNj6U z2!u>}AM6m5-v3{!J4jjle0V0vbvK_4-n%GF4fKev4~YIgNI^qI&|WZILCZ;3i$GY( z9DjqD;FpwjG#ULzs5X!{cr2@~AErLVim0p@nbP_&Ux3g0y#3~Tp z-AdJi9yh#u0C0JaDs?94TtDc199eGWJJ9EO&nk5-m^`TzfNoUbCFroc7u8Xx>d-(v z3jR~XJV4onU!;Nkvic5jI!#Hv2iC`)2&-^FHQ2AJbD}tW2VSL?W7&$2n|lO2Vcu)X z?qyjr=m&u{lx((4Um41KM?Ibk6lAIyV1+xeKTw}xi)T35QLq}wma55>p}db(3*rdL zy&bF_CbwpPrtU`BlKUrM{nX@^*N5`HRD;fOhr|6~JxsQ)8s9F;`$m1z4_oH!9PWa> zL$+26?*!#pfmB4f>>p)8!(H%k*?e0$&kj@}MBqqL$AUG`XD^!!cGti-7||o$)g-6OCL?N<9hzK$%hB;O)5 z=-5C8>Z$Gq;CBWjCMB=o=M4?KxE;YTtMC`_Kj?(v^~AifflHRU7-u%(Uwm|7S`IHL z=2ZlK3U$$Kr~>ducEa#@JuedAT1=D`27eJTRCQ3xq1EO!1lmyr!L)*ZYBFZ^oalNh zZ+)N}Lx?@#T}Hk%T!zq)dsyEy0>9k~{(kW8>cqeISn$seyug|JDezwE#J{Ws{A&X1 zjsgD@@V@E9=Nt5ScLaD_TXlzn=z~vU`F!6k@4mpvJ;CQMicBzks@OsxKyN#`)Dn*p zqP~i2fuX~>Yo70LCc{nm4u|uwaX4!L_Zb^!Qp%XdKdT)osTh^o7rm=7u2b2#&= zT!*t5tQDRJtMIPgkoc-PH4EE9z^jd5ZSixD!de~;>&xkaM$5H496nlV-Hvt z`E1wW+>KEr4(I1!{gP~5w(D?W@Mhw0o&f7PKey{}YA~ru*?$G=GsE^A&b~5Ki~DcA z@ab$3p2NAN2_XKo)>s1)lkyx+7|W=?v0p2}U)l-dIvgkBV%ovq+6m)2oO?&Wx~Qj1 zz`wc^#&tNSZFZG)5BLug!)^}h`nV3~M0Bqx^fmA~z!NZ@!@%261gY53@d%MkJ$ z&d9Cc=Ylt+6W?_>m*jz83SPJq-*q^vTEVXdudx%~bvU!?!QTenu14zNM>Fq$T$P3|eeucSPgm*1xyaD`d^H5TQp2Z6y*VVHDV)9r6bIIz&I;B@B z(bJfB^2lum=TtwhaEq5tKSt-gLa}`P#?q9+A%y6eXhWZSgm3=nK>$l}>PeLJB0gCc zqmM_QIgADGZe7$11glt17j$eRAG>PZ)x5F zrH%)Ej^RQ3-3F{|3Z?H@Qd5*_Q8Z6r|0>=Zd>cDO!WD144gXKF6r5WUI z2WN*Tz#A+Zw!*H+y$YP`{k(dx^g*3j3H2Lr9x{2|!Ln_!oA(uP-ZXjL!SXKLzU2KU zH~}di1;bESGgupw z*%&NTx;3F+8y4gz;iA+<2sF}i@8}{H{xW#k_pAe;59ztT>T(Mx_v4dQdlq_v8-9A@ zac$-~sM`*3p7OY^DYqUC^GVD7rIt7tYR|qJGlA8I^xWIJIG}XHCu@x-(OO&B6~b8f zF&@Jcb_aZGT5eT}RPQ_^tc~%3~+z;u)*c*g2MZc1hzQk zmQ&r)_67J|plgw*_tIq&YoFI1w{lfVF(M3^VEPzPr|HfLv9Qp;Fu*1ZfgijCz|=07 zcYEZ&xEE=hIN=K6E3%Q4)3}UjLYy4VU^<<)ZW#2R|MEje=vtl4vTE6%a@Wub$veA& za2*Wi?yJEJ%-xB{?L1$Y@C90w0W)9!jlz_ZKUD?N@U8cskv)Ho;DO1m5XsEt0xFPst@zxnH`p`Pr=SSC7Ks**?e@s5DZtE9-{rZA?f`$U!7!V(nw^nf zuEa-N58fSyZ#u&&ypD}LLEYBj3VIr#7YOWvN?V1mXMjChy|U3|e*)GQhP~l6V3Y;T zNgF-uy93I$CY%84+yPe8&$40h`S(R^xnHIBfz=$f1f^AN09nPm!u#ib zo4Oa~LbF2NR8~(tfX5@upTQQla5U$tBQ_xuAl(G=HrQVflE$8-cJ)?g-Io+3kQ9_8 zY)=WKPUwOzUIor6d9~ERv4O;WxB?RM^8%_2h}q0PQ`+BwzEH>FyISlKU7^;5+hMoQ zfO=}x8niNhYC!G7w`ElrIo7h~EaX|%6#+?LS)d)~Hdf(}Lnz{;K>q@FeT?&3PgOuG z-2=;ebOG%su>0bZRYg^ujE7Y~#(*tK4F!Fw;mLF#AxeCQo`kon3r>L)Ou~OgRa6A% zICHEaPICCudaQXSAc8v^nDaf!T3MJFSTAdMJ8ULI)RGG^{znXYgNDI(Ei(Cl10{LT z+v+jo=MiJpI+n#z6Qoux&3{*Y0Nyu-zlk8>*FC@p@M>^W5CSE;+h4=gIndtZ6*S0) z6w7@SpT??Fy)f=HMkWmy#P`D2s|qkrqKMz(TkugltmVwC>Ofq3Fvb=T&-55p^RhbF z?juS{QkQ{#t;f?9+8CS#z*Fi2ZwMCI8sM&Uuo>{sI86b4VWa zj9LxS2If1jQ?bH-PIZ8HvEg6f7h7@+N-PCOUFWggVwXH!!G=D_5(h^7hLSw!Vf7;5 z?=#D#ok|q`qv~t$g2<-%Kk`d#paHW9D%)dwC8ovT1qMxI=-t5*`M}u$$%7`VFuu)a zmTMu*($pzxB`8fERfd37_fi|OvCe9f$8n2jXoNAQvz4 z`l73YdF<~3GIC3U>QT_2@^~(JYEZof(uW>dM@n@o>GfE5^^M2zia#C7oRa^bO{GRz zJRg=SAU*$KTaCci6Y$BpfeO2Y51xsN3(%opU4L#Xukj@AE z&@2G+Z?H$>Td%X)GZ#_$*uSuN`d!TX_o{0QU? zbPuxH>d$z*YjD4%jQA+{-TW);Y)oAe;RL!D3-$=ua5g@=yhmB6xV89v%s2TzvQM9F zGK`cA;{iUwWZ)5?o1q3Bl7E#wpr6T5A{jWZtuq<4@W%%Md$oO2o$J2?-A4&_A8?lw z`xGnP^28><4SY-N#^$1*y797R#Peg@o?<0Ur7we8NBBHMfBnJ3j+#qSbsn zmJyeJu7}$=gY}nYr804yt&cg8N-41Kb%~PM@OZVl>qTYq9&+y6m613oV zcvuBwQ1JPM(FQ(&{PMwdx?0N^%GNFPCcj}gLuQi7B6_d<0M zMy~1r;PPZC5-muX@fRH+uTdW%E_LlEK;uyNBFD4IxhPui8ic5JtKpt4=&$^n#phfZ zg~9Lvk4Ad_t+>O9uSepO^*nQmGts=;ZIuK1NW+r~vHV2Towk||#Bzf&v3Y_|)B^9Z zRSRI-4OC3c7g#rds-nfKy&lFjmWGWfY=!omVGQq1o|7ccb3Ti_uQ311Y|!g?_@47) z(7!gkB+vQ#%_tY1lj>1D>ntk|A1x!vb3O~Z@jRzsrvX=Gum^fhzC-0^7%3Uz0B<)L z4)mNOXPOKplHnSF_nQn&lmD36uWv%f(GV1M$Hj?+_>s^!;J{wA!kB2pe^n#{G zL4C^OSZkyGAZZuAzv9u{l9!J_2dXbYHgt23O=`^c8Hq2ixy%|AZvxTIAYha*FXwhpt!#cTsTqEjtZ9 zP4GVk_J$<9wSs3S1>0x$FqIl8(BA|0fq}~4I%v%{pzjOL`bF53R3Ow?Qc46tLCrJd9VwA3>N9!o*DFoN@<@CN1~W)T9+WiMg9oRaYR6 z#3yUUS!iS(@1d#JD73FfbcI^O??`5l32z5G4Fk$|YT@%YqWWlu29k)6LI@Cvl-dgm^J z&1ghH_-MHY8$j{d<;c1#(15Y+X6-6jE0ArK$!fM){1t-LGPDp`&kOt*nu7TpDcQCo z%LOJICmVgEHtwVWyeF{tNHbE?CBrWPe$-@O(-Vq_cb$n`=LZ_5nOxl@*9XY)jmhN? z?Ks3+`4!w`Zhrm_-IXtL(rcKUD7faY%n765FjAM`@ly{X0kJlUZHg#m#tMzmxbL1sEP!RhG%?UBr1;}u9awZwx zu_f+JdZrw*sO6-qzayswV%B~(>NaVVFw#Nn z;W4cESq>W2Mg3{2vC};2MvVewt_RcZOTs=A&sy<|FijMss=ko{pTBSHb$#bI9>3b5*d6 zDrufD{tDt}9>eXk%9}Hc_S1h3rpko80(^A#P6J4XHC4L?noJ?dGz%F{O3ow=S;4Vd zu<+q3gC8XL4Zxmn@J4Y7er&}r5!x11|1sUuSHLLf3e)SfExWZ$2)%)Z$zj}SaR9o@b-#Y4 zdo&pZe^6=2(i0!eVjj3=Zao#ea2sQxK=(CVKx{_8!R(sN_=pjgYn$k`>8;x3y zhqo&F3#e~<9CuZ86~2G&(OeVMi=T9g#V6}ID(6MkSu+NKIMic!tD?zc02(QZ>B5?; z3LsW_sDHOADmcM61Ic+da_uuY#ph`Ep;tvCF`4l@x*$#Pw*z~B65d-C-CkfSHBg|h z1E!!x-6rug2MbD8=vC1l5w5x=6-f46WF4KH-Jikqsz`9CxEn=S>87Frg2zxA2vc5tEK8awkxqA8={=t@*u^PBerkM z$3yRQ%J$$FUBSnSL|q5KEzBLnw_tZJQku_$E_1^{#mwqqJf8IcT71hFqX4K3o?i|= z4vGZ#2{7MyIGKN~mfymkPF4E;Dy&aN8mQIs)V- zUIGXUUq}z}aACrWSva2uyYA7A$iP!v)j;&3U3iFlu^L{QNe%oimAL(zKJhqiC7OmF zN%MI|7c>)<%_I)%bTV@PkgD=Q8-h<(35%(likMfiLTZ9XbVW6P#7_BRs$zT8GH_QD zQGje35&zRz0A5Nx3L15NM?kRW0JodiVJsqk&0N4chTR0NBT=b@L2N`dgg_$QeHDC*bG)E%jdPGq^4Y zzrznTUJc0q8CXdACPYrd!w8O?+!IrO3GRK+LSub{XFbh(U}d={rz-N)J9zw!BEo)8 zRE7aqmilrRqmO`KGa)DkpRD=7y80M42H5JZKF6?hS-+iz zJgls`*yFfmExB<3OSy}s1QAGirI4&10r)v)=+08Iq!co8?^SPt{IOx_Ql40XJglnv z&f~bHG;DzlIl2Gmu!wHhuxacM2b$oN=R#4NpfWWPfSLGYolY%wP>ai%SuF%{#laZO zAjUn0)%?;j)bB<|u_Uzvj|)AX>nu*A|Jm=HcdX@Ic?k&iHsJ0i_B&w&btujm5f z>OkAB#wD z5UC;7aS5ZswA}k?xjzHSwcNoZ=RT;;1ZfX52Wh+7KtJJVTMnYS(&HGhu-GLRVl|bP zdn+Y=3xGSk2a}w8yLthn*O{-cFLBXP5Vjvg^{L14ByzZg7|w(kIZcQ(VKKXv(ZB4q zy!R*^GYl)32AV3yV-h}D4xEBMsjRyeL8lUK*yFgOC%je!n**`V;wYt5)k@62cH*If zfDq4u7gxX_2Y+E-3}*0GyYZl-wYDqXmJ0EbScn&~CVYu0{`bJtJraSa>yc8w!6R$` z9wV=!{~(Au%4XR39(V{rd1o;AGfXU2#koBUv&%MNqVhO06lNCSZqELiNg+YL187z7 z1$37=MKk$}rol~QE*^*EV8>YmM)2uN@sR2--U}ld{I1^*JwI!4T3?W}om)XhD@;XQ;Z;xpxX);=sj23kskXv$1NXcN?v@buSI$y* zqYnb2mIZH(01`b|Fq`fT+Hj251A**FYUP|j9A>kYy~&f^&5 zoVjLHufW}#Y`us6dF-!=<7eA}$jIU&rnejX!b|AAtdtQ1Jt z;foQK4&O%$%d=7_VTbQZgq_DL`CL%NCohCoI=rwScD}|FztAIeQYwWKmaDd5hu2># z9o||FJEQTebm^p2x|AGrVWmTB2s^wPTPe@5!`rQu@(ertwM^7!1Tp%_AM>wt`1f_f zPAhsQ?A+Rq6#kuvursPZ)BN)bVTXT=rP9gFVR}61VTXTypwi(VMyYi8H(a1)!Kb13 zE1fa&yy7^fNe??rhaFz}3_H9<8+Lg2G3@a2C4Q-BI~2((R7yqg14bZ(9sUp`svtd~ zpZs~^O6MmcjF$|<4lnIhI#(iH=|m}p7y803;d%k`+Fhl?XV~H8vPyY|9p3n=lxNuC zU93uZh8~IYPtHu+}7YYx}!V>R>9Y*A+C!UoK zLr~b&iG02+PhN4y;Fc$&jj#kC$N=i&Y6`?S4rz9kAo{69ukKgZi1k$z;`Gfj@hxZan%u@bJRI=bZUp%0wcz; z*ySMaP`^Rzct(bb;xBK(2tqs)>rgx+v-yhzZ* zx1@l>;ANLOS4Hq*T-Q4*P;d5C+E!*g8c#bLfD!oUUSjGz>7|1AMj>s5D8TKPp6Fq_ z9N$;qqw!3gCmmVvg6>Cdw{|FQo7!R*3tf9g6q4?7bjdZ`e9D2}Z}?(zZgp zAJ(CGXV|_Qpr;K`r+naV0mOtkjqq-G+8+RF?eJ=-Q$CzOZv(AiAlf|u8f<_%-iN{8ZB zn0*&OPZ^+2`9N-z?N)o?UUJ`X?010sr@`u!kL5LpJ&L=W1@(5uPF&{2M|Y%7`A}{Q z?@`>+E_lYC1lW87)xB?^yVY(?0yu)RYXRA4U^-=BA)dkQQ9SP}*kkVo>}mtmDIdx+ z$UTZDods9fcLMgLf$EeG<%#Pa#gm1CY4%%yeQlsRo?vq5l%InaT{{&23a~vF$;AdJ{^$oPuK{Ps|DYSN zPX%w6I$!0Mf%Fx>VMx>agq^eSWxL`JWbaf%h}{pudFqW}IFcQ)Rnpf@Wm^16*wIM- z0Jr^~k1W->1X)TXOWOh$*kc+qP&j{?+vcTPSNNQSEOT7po3^q^yvA$i0XY;Otu3ak z5Oa4ZUS_sSkqjF)Q H^vxc{cP$3JVXp*fy#eTyuRFf0u}AUd|DY%Ba{;@`Ky}K8 z^38!gDwohd*>?c;xPj`F59PZJdlYZ?4|>pk1F$a*RHu9>-wxQR&JCa`{G%CrF(bq* zJD?_TNG6W$?7Ebd1^)-4&^qG>O~t|uXm_^ zc-p6ee3r?;lohJOvqN#W%)S)KpBpw)7pNF^gKkC23UMz@rc*3emaqlewj$4`;O$i_ z+v~WJ<|2BpYG#tFk6r3Q)oKm?Qb26l#mIr+AI}cOx4P`KJ%|kO(G6tE3h|w+u=5iE z?L$F!5y%q_h$$a<(kjOT!#Df?ld|7>#Tl%Io}109O*@2XFc?D7MzkvioA z`F8If#q(mg&AxyY8K_SAP##C`Q9Ow+m}AcbY^j0jln>=SgguIP3o*a60d}^5>XZ-V zb~&Y ze*$;Z`JO6t%E$5rj}FB*kL`f~jW9s!3>>~=YEK5W)^K#EGML26rt~B_0L2&CQR`5D zpxwuS-)!wu1jJk%qJacq65rr;6G+CI_1|qF2X_tz6#L$NkA0C zKfq{z1#0)bUgMd%07HL+m45coNL!&F!4g8(ib?XXAlZXKtulC~cBspH;^bsp*HilQ z%M+>QOYkHS@iIkRAR_qJXY58$HyIIZc#vPM&}yl0E-SnTgzF53En~H+t&|w4R_GLg z^3TQFcY*Mbfy!L7TippEUArs$k6`@OFm=k;(7TulI@HTSNKqGH-wYo;=yl2m@~_(O zQQV@>z0n>5SgC<(-(;Yei-}s_)vf|$wSnoBfrWVDut#xkGWS+{GhllSRHu9>_b&G+ z9?<4qYyT9mdks{leCRMhcPqZ!RnNc<-1dR6ko|2G|{#$#Qg_+bn|t} zhw??PJ&LE%1!L^v0GncK9q+fyA@x0$7}I+%0+lv z8Xv6$o$|4KD}J|%6I+#H7XdfJV0FsJwn`Ov;i90?UJBS+1Jx-XdXn_+Q>z4eHef$A zP@VFjyz9PO@jw@+!S*kJd)Q!g%E$6Fc(>wVEe>?;SAqN7V0FsJ@-%n1n!N<>@YsMI z+K2n!_-HNYl#k`By})9g#GBCe7~sMNt5ZIfuR$Y@t-{naL)kUJZ7^7!^060--S8&| z`~TBE53rvYs80D%{v_cZwSmx~_OAeY!a#M(hw^6!_o({`9caG^*jEOsQ$CbG9=Kca z@-r?++ubk5%ar(NCFqoo}7a#N>>s!5=OfeU9d^nZ-e%Y z0qc}sJl}N2F4jrilbiA;w{|quo`=j) zBY+K+`aejTuGK|~KX_nc!O#W&Yz2L%!83)wrZSQBxs=nvl_31qu<6EksDG@2i_ehX zFJ`n_%`e1wlf&~A|3?tsFd6CAA#!ONIDZ56Tf>oQqeJn6jGcBV+J=vAJYB5R{imdP zy8j15-BBQf4Umzr8|rqDszcqK>i1g#T?>MH{<1@D+lh^Zqii{c*{R+m{|B01fNX{@ zM=?7UPiO3#HJ|4JhA*cvI~5OTY#y~hJ`WHKUk+rjfrk#=sd!Rj^W?>iiyenqBrbMj zS03ROPhfT`9^Kd@FEhw@-E4@U-%X65-xmuPqWE2aZ_Goa7mqdSSI3sh^o&B}X#%gFO2 zq|SR_KA={JzoHAnu0XbT0sPiv(}>&i3UCVzR;PR{UqHbo3<6)g1Yx6NR6%E$5*nB9smdf;6U`(og3G+3STv3wJx zL-B91+4lkTyaDQz59Hr3>rgxT0{A{a|1vjP-JQNAz`uvKLzTmoyI;8Gi$t2O^lidp zmHCIx>@Sc%bVXtllVa>wMgY?r{DDarla6@8Ss9{}}TgGo?ce`z!| z2@Uj@Kb8#(`xJ81KUDVD$kOdfuTY)x?cok-PmuEa12oJ4DIbd9ABeUmfjY}@xF!JS zr2*h90(E6)4*xW^y%yB7k~j%1+M|wcgZ+PM?*rlngVHI#a=f9vNAZ4j{`>a*fW2U# zI^{!o|9Yq5`LW&gN8)7YN{y4DD@}GX{FP=q3(#@+=ni4(U`|GUojG)~I2rzYuU!G) zN|Q~e{HpL5P4_7tR&Tjjy@`LEi`C!oPrnc^p6pW=_*-O49Y;!#vWSbu8<3E{MXLW8 zgZvu!C2BavR3WCUOVoIzcEZ10qSnD^`4<}T6DDe4dS=K@?~~rWCr-GtEIWOCXhNtw z6IC2wg+j-JhtkI>JC$?=ddfH#gw26ei_~7Ac9moblc|}?P7j4V{1L;{deK>eAD(6LbJ7GEE$f}N=sou z_@yh8GsTnISCdMzNx-!-Kf~l~mW_*cE(yIu8OQoxCnFP#LlhzXr?rC+#gr4$B;A6% zM6y?b{)PxWdc*;VM0SG~Fz`S!23R6d_u?Q^CDS(rKFU|=U_%r=*SN(L8nR^f@y7|n z^tsO%l9e@bgU=W?9Q{ID93DV|S{z||5LICx79|q!bG^oPq=!cuZi9HE5DTc){SeUN|npdo1KfHHymmWQzW%mVJZrRYc0&_1!HKqghsf?%=J!Wh3t8j_jqhUjL-F0o07A8rgEAl)3m&zSo-Efv}YqIHr4#M@k;OR*`PkA2q44;eECd%bPag;<9XDZLVaZGYto#j!)OVFgxHWao{yTA^} zo|)M%qzB$PDn(3^>UFel9b-PFngJbQ77VZOmW+q#Iu}*<@iKLnl z(^)<63E+e9PM+Q)Y?D3%Po=&|KN3%c23q*2;q9@u;q}cmjqSD3;Wft{H@sxnSp4YR zfyCh}>*KLxPW{NSqlY%uH@9yXx~jR|%Y6`_D|dKpbR}+{9aMT0uf!!X^q0o^mBUxn z)C{j5om3L)=+!wX)9_9;k}Bixywt3&Zewd}TAJ(XR}EWDy^t1(w^gH6AV6!Vq~SwT z)s2lUHP!K!HkZq9jZsQjSskmdiNxY<_05!ptVxu3O^t|)#cNT0W{_qBiB5^d8zYVN zvA8Q#3n50Q>ekn44so^7we3;;RVQ7^@r|v~`sTV8W{Ym9iMGb;TblW$Il4ZQSnU*$ z+MA+nsI6%zXlPVZeNBCQBV^-iO>1j}B7F>6gv!^qfR8mSlGSZ&Xje(sM(cE1w5lPJ zEJhkZLcG3-l}1LbF`d?BM%K5qv4K#p){bVHG_o7DLO@O1#@0A=2o(N{MQc_O zzlI%M6=mn(zv{+St<`PSO)jvhx-E`PA^okczA+wcV;>V3Yj!d9O|6ZrC;n@ykJacD z6i7X;imz@Pigs4FH?pHp+ledNA!cZO^YP4JO)H%V(#%XQQ z>Ub1CT3XdwT@$q;i|34;#`?F+n>Vh^>!mSO(fFd()$y|Vv#Vm(`kGkl%C-ip5q7sO zDMwM!-1c~DdwgD7%Z80bMQ#xgUMxB1&0f6*riC(QSH+8pBGYLp5m;fg+%L7Ls3MA% z&ye;P6<0)KvFcUP`PI#Q&V=zw$X%k&>$V<_5?dQQll1udi;bKP8IVf>Bg5r@AS6 zVs&GCbY69RTdb_!+B`eDaY0K<)#{eExOE7b6FvQnA5Y20Cu?YAsW(8UvfXRS#?(e( zJS`i`=B**JDppjC#x+K(8zLC$wP;mhpNy@F)<`4ESEGi-BaE~~_3_oykgK`9wS0AW z<%lx;R}x!a-C8!kYGlMpP)w87sMign+-|6c(&;x2vn%GKBj&L)TH~mqsRkQ0vAsD4 zMMrD<(ODgDHMhhg(Uv+ZS({c{bR7&l8u1FY;!P0@7OOPI+@2$oj+||55|~=wN-DN$MHjZDT%S)U;?wMW2;Yu^Qfzb8$=h+sIG5})>?Jz>uW_;ReY4VrNeBe zXL93O+heO?t2GTY<>H8ij%aU-E~;;hPHnHNi?;c##u)F^>50PvEzl#+wd^X?H5w~x zu9YEz;gRGHEeMOWLNBe6l^Y{58Kaws!;@dEHtT`)d*{`V31AKt;Bp!?Tu}1 zK?7LaI%`2&b#n{~ThLNW!EMo4v~6895^an&MVsTXNOe3?*VfV;mnxZ#FX}XKR+o*b zuB}DpSlRs5*34-9#FqM68LOhQ=15H}(%KfSiDGzlk~C`G?1&ztRU2dRXj9SXY4xqE zqiu0a=HX~F+$eq;DRI#Gj8#x_-N zh`56xq7^c?wHl6AdsGWPv&b@~VC1f9X@l=*G9xMG)sxLRbbV^zF>9kRBZeE%vUxRY zEMrui6yB-p;PXt^iJ~#7l+@K@1V9FDELIYkA8j2&AKzBJlH;PfyrztUPVA+wrloZw zex0?M!51c@=9(t4P2Wot9ni&NE2=llYpmwL$;fWJwMK^2KKR^#{Kn<6sG%IoH|#23ck>2(l*Ah*03p~&3k#*M7k|6Hwc zh;}ehx7WnW=Am9t9V$1ky{Xmp*Qc%tlB?2sjb{>M?J8 zTyYURlPj*Yrl!5A9qyu~t!Tt_{1J#)yh_h-XiS2oA39oUlyI#`_wV|#2+u=^aePl(F5(cvw1H6~(lKxl5Z1Od z&1vUMh@PL((vCmD0~CT7#1xoARz_FVH#4TFkJZ9VR<*UXx1y$W81a_IS}(q6K@TM< zv{TSmG)8X?wGr3d#%cxh66BN}}v%1Y{Y1M&kzjcTZ3gIuLCoCNSRABCEL(p$ct*%8p6i0{% zU&rNsVx$j^nnCK3N^)10B&t zYsE3TW>Vjb@GDNElo+roHl{6#D5VC$O@d*Jffs9OYpQNE(Rw*1h*%jXWtgLmu#gvh zTw5KlMswG#kJVH+*GVZ@>*?53wk)9Sfu9;s&2bC~v`Ioft-HQqlcKQLKTQjRu z{FZDhMMVpn>uBVRdAYtDtrdV3-dJh4)MX7b&!r0~xW0EJ{T#II;GX zuq6yUtuoA;Ubw8=K?P{u_w=${@O5gi>tshax^tZjX|J!==&t&Hr4_N0WHDpLr@Nxj ziXfYR&kUL{BgZW0FlQBZQg^4|Zgp}1%6g9ypM2Q%Rk)>?(~PpSUw8Y?q!ejD&o=OLr%imNrf8cRc@h?YD$c9piJc(f@Vl zW#lSsyO`oQTwpF{|;%meQZvg#$`&SJoqlS8@*ijecU0(b%Lvehh>yx zp~tba;W{E>S36S5g=J(l zHf`Dv(aY$K)+Q@Yf(Pt@z+(I`QyUKa6v7XGYh-icqRJburEROQ&CE%d0^s6X{=-V4 zCSkJBUg+n9bP$%*R#x>o;FXK_p)XdLmD1`R;)$;GX^eq(1v zu&Tw}^#5TrG<6yce&Y@!K1|r5jYR6O$Lwx2{LhnKQxjDtkq!6C>%F-Oq=R(BVbm1e zuttkC`IF++qLSp3gtGZ-tVTvJNjCOhDQC3a2`-yA+nu^h$^Vs@kvf=Rcl*KZ8VPut z+*M+tR*FiJckAfQipCr;PnDI8;^H3%8yn?B<9}J%*3~yQMz9KmH!S1o4jWwuOj3Fm zTMkzA97O-4EyfGe3QfRvoV6J-^7LqpoaDG?DTX@~YaDJe>UGWmJ6-Fsy^I;yz$cp2 zB(bQ3Wx@B{qDY4uR>oVf4c&wVAYwDC(|X2Kp`Qsw6M`lg$}!rxt3(7l z?rH{yDG8x~HeiJGE>4y%*d)>?tzsdv^++FH)7a9?gCN;^T$8*jpD^M7yD(AaFz(&T!ANVP(bj3) zg_huL?ws(+mNzlF;?1$n_xFF}A9^cPa{GF=VozK7Lf&0Ehbb ztleQ6uy*4phld;7QjlZadIW+9%TWtGJDaMH^-k%Eiw?R`1UwBvd%FL6i$(@7_ZaH9 zJ7eMKJ<^0d4Fr_fM^EyoN!EJUQ{h-nh46O8Wh*U2*YK!%354Bvo>yauE$7ct`|qcA z*|kXC+b#P~J|x*V{ww!U;_hN$dvZfvTN9&5Y-o!>9MF$s?5!u?NJ|}^${P5DmAre9 zTxPMqs5FKc<77}&q+=V|Tc!Y*OMDzRB(RvSYnivss%vbimX!$?!+JAaPKane+}UD5 zzV(<}0f!OEnSBcm0&Sbc-2FO4LGV4BtK`~AQt%<s|WqY1BMk(XzNE`Hu$e`xMjj2e>@8Y(up6Ajh4!8zECY zFQs5xp!4c6Ihr4dw)+PY@II2ux0s?4s5<Lik4R#zVXpIH zR?=>?f2iyoy=oOFt{u_E=Jp!)59M6h>j$~j1iMJwIhYx3)@PCWssPSG54c4Z^4q%^moR4~4sYoxG+T}t#evbZWFv_Q_xL&ztFDs?mSbv6 z!cxMYg%kVJ4{;77wr_2uC&R@gF*I-2<3JnfbSSsFY@C^-^;G8fMQ3w5q_Z{FL`SY~ z-^fi!smu498tON=6YBvt2#V!)lPop3au(O4FOtCeEkwWbF*V_SF_#@-xr#KS&AtE4 zO)yQ;TH?N8Q#%*K*ydW}&O2oJhJ-78hq%Rs3*1~yb6t;x4A%9`m@tEmJ#g!d1G2GY z{hXF&PM>Za;n#SNI)adt*FwDWD!5l|DyBbtb2yBM*IUM}ZEukY;~-KF!>F+JzfSuu zlmD=H25{%XJ-PDTKTMQ+>YWC88SaX?XK>iZb+47`(>%GTK*gH!|0^vd4vIsJIZP%J z!I=UM+Q1^$H!?m!a4|CJ_8$&B^g%#O-&WJNXe8W(S=AisZ2@hA-bmHk)}|K!_I`iS z2>)ysYt%I;-e2Fz`2TM%URVij!z7S&Vfnx)P93PGfJ=^feVxj)M1R_29(XcT6zRV#XmN=Lm_nkUa;?J&diNFcZ@Wo);#>=@1D9USBzsAZ zk`vu)wIb-Oln_L0FdoA!#CXbUn1L6c1v zL>J_~99x-WXsur?DRg(P3d)YOGiuhNld~mVSk)C5mSC;gcfin|{rdJEuJ*jL1`g`q zbI8H?uN1Tp<$*)`_y$=$n`?}B)LC?sk&_BqWQS?eq~ekJasW!#w6M};^>nmM4+rnXTOs;%neP9+ae zsjes~kaIFxryTd4Jzb31QWI3+J4IDvJ?e-C&L3yg*yY}@HtiuyBql;4*TO*pwZVtk zfyCX3y60@COWxSOa5T=K%KDRspRLY6QnA*eKURBdQpaT)pbp$dSVGESPHXX`Pqx&t zyGifpOfE#E03i|Eu(#x#Hl8_I4u~r;u2O%*a&Ad z{chQG?XAreFjvAxE^9i&{v*QBmf_aXk+Dql=QO{;S-S}0N|r-@Ygp)yDojUO&ePv63*ESj#C))u->Y`a5- z#B(H;s^G{Y$B-It@Iy6Vx_E#xXcWARmR$-jv0|(gj39=N)LAe zlw1mm^;+0R3?6j>w*c89FYIi#m+ZQ$IA zIA!h|Bx3Mra?3$eL_Dg56xJbiDR|^+iJT^d*HX4&Djz6Zr89`7kQR~Sv=~MP)bQMi zW5Vrdcz0X6ge!>ou-SsdIw!-5oD8!!zy=pFyP#f!+{qi=8;U$x>KK71_0CM87DI}q zJz=F=CDzVJD3RNXYe}1u*?HH=YJVYG#^U%}hHM%-zPLmOs9RP_!j5H&u!(zf!=bPZ zxhRT4WC|z@ocWd=Fn4i#GB?8-f4wVb8NiC5kL-=SOLSt(Y=(;smD~|Hh>i0b*g3-r z!xP#*1#)3WJonvZFfnhJisQuk+`paaPWjcMH+K}I$9bif`;4Y{cVm*?xvrZ;E<+S$ zt&?k!j<*+CrvSC77i+WBmG!PMFI;M+6!vSWmssm}p-K?m09CcG(SOS<+?%TrB~xCR zutyQjUgYmFz?zJWrFWR%8jtxKQGlX4RX0rMRZ)q)4mi zsADPiM6B%|`=F9k!w4l;i{VMD-($s7Y7Yq*>@l50G9~AnG-BICjRt0WCCk`We9nHj!7bGzbNPie;Tm(7SFEje$7lkbQ2pYZFdQU~QpL&3Ux9vL9#; zoG)9$dhc7A`@$qE!u-_R+2B}Y9`$C!g_c%ttWWTu_r+3DsvT^;$N_FSg<;Q$or)1& z^P^5lp*gSCLx{69aSZwq6fksuh^e21i5Y&8)%UA`Oc_T|D+G5hW9#qRvTDqH)oNE{ zz(p{%2;J~=^cqz*17IJ4dn3#*+Ym*~%?c|^!<(8|B~0(agmku6_A&tqYGzM3y=dsg?t3 zd4-THgFbfYcOEQ@g9A}Ckh2fYAYv(**dC_Wx;iP_cjB8qNr9;h7OW6`6k#t+>HA>C zB1;IA35G4a2%#8`64h?{tB&%Fuom96adVIdZ))y^VThP4Lqw^^6q(exn)9ek88~5P zK+QKIo}IU?Av*JcnzK%q;1{!Rw|cz%QpZ=&vP3oAnL?|+q^_0QeLU3CFsPNJ-m9~A zp#3H_YFt?nZnG>ST?yF2w;^@cvdwKfWbj4Jwpftv8b-AHLdWeK1+3z zb?Y|t#(+L~CmoT?AWYo^bO(4`f_fm~osHW0LjR83dV7NBSbhlc!glDRy z4Xk3S(=BQgP?cBfH`%g9)sCDa$+fCeR?|GA%us9tkLSS|Mw$)yt7=>CK@dps$w*@L)sJ5U9*e51(P zCm1pjTT|$+M`z{16s#&`JNIgI{Lv$>WdG6+I_0O%$l?S=p}py}M|crMoiW)7ty@#Tt}1$MSH<7&Atwmb zA+8hs7geWr9tq+@fF6FJx6IlWO9=0058Q2An;43!K*pe|2v0#Cw6@jAkEks`|7 zI?kf>%+T5uwk$ssS+hG%4rRJ%I9;V()(14cSbCp`tnESVx`wXET#-oSjfKjVns>pz zsz^@Nq~5lef@uv#VAZpt4Mo_Z5R-3O!^_g-#7y2>q%~Sw)H*0SI=YXMCBJ==8@js1 zu$bYM&_-G$MweIYf7R&9!2|R<(-MV*%Nub>)_wj~YLtC`LC)DjoeIJX@Aj#h2xH*@ z!w8lvp>%-vgq-{Eqfr{gI5k2J(>qXdsY7mkN{ZU9df|=FULy_1E{#|&cE9XY^je6B z^vNA`7N`bN;S{da$k#*U=)w~0!F!J3s0D+pki_utL9}RP9+Tea9XgsWhI$zm0k9^H zX~uX6KP@wv-dHFdTS)Lc#+{KB(L4BbISu2iD)q8S*10uk`j_mZuqj> z?&VPZFuzb^rmT*`w!NfsipeRb{}u0?_(nZ8=}fYnmuuht)fl9VAwcog7+DCr7IrGn zbje9vYosW%3AOiV*Gs3W)k0WfS2cFjO28?bRX9!{R=~r|XkccBz|;)$AZnO3lSD3~ zkI-v+R4zw}%H9+xl08IwSX4ox_*9?Zvgy0OIVKMR${?i|TN7YOkrpHkYe&M`kJEvm zF{4^2NjFSBsTnV(AVUiAkC?gDN~&rpfjwaiZrCB!>ovO=qMlHy%^*E^I6QEnd?mgr9^N!?~?cFht!A8Xjs6&#*MSF5S*fhw0CyQq&0 z$Vok?ZQE3Q4y8k8YWwk>GVl*%D5I{F0}Yrg6M>wB3$s zu|FARvq~9kb<1t+wQ__nDA*Zurrk)|Yh4Z}2JS5^d#19#B@L8%`PBi*VwY!*1bjaS z8N(}v~v^TbePr=uWO6K^cXeSGUsLKI?xC+lIe_tPNk{Egh#C5DLZU9 z43Y&Ck*ZQ2e2+4|FV)I0=GU|fpoe`?IuL-xBkqG()m#xBtjo2QyV3R96V(_CdK&JnHKaLrD}aQ#Pz)anb_(BK1wOl z&Hz``F;&sCZLJCFoJUrQpGK+Lb}~wP=S_k^-Ck2J%AJT$HMpx_9SzbWD_La7Jq% zDUp*$uD(J}ZbJdsHuWft-8p)p^bATZ+gncFL^yqDYr;g)!NRdG8rpHbCUX##6~@+V zi=M8}=E(xmU5W=(H#`O}-M*xsR>KfUS4$!a=>wMTu8I>?oZyHZ-4(@&VJ)WLmL^2a zv>R6ysn0~|BVcYTeNLTpf~v(_AzW{{b?o8Nl_@Uwr(rNBanCZPAf>%2vsbR~2+;s-&7rX$%$JE+yfmla$^z)0 z4D8$6+N^MT{s>EKblmp)2y<|e>-&CT8~c`IRawAtDIKU~ZF)E7j_jL^5KUh6x=@yP ze`D{|afRb^PragWTtU&P$izvxry?nna?cgrpi?1%z^97Fo?0|<)T#J7S?)v#vrg4J z^ljU=@7$qFhfapG&eA#LF)1qQdCH`yr6=hq-$4xNHrlG>kz$cJ;yDiWveHS1=A9N` zN3asdC1d>uLm!Zwn+4DbyLe{F?IbltIH*XMyH zng_5v$t!>yLJC(+iB&S{)>}!lw~f4tRk%pPQVcQnaX6iyx-p1$2-F&svZ^+)8^vai zr*)jAcZrlXh1@uxQ%hupF*8Ptog`Etl?u|14B8eTb1r+ zFFo}V4jp6-$-Zpd9MreoobLrHli{w$Ib5t!$kHQ{9X6e;@cpFpbe9?gx~QkBG^H4^Kbb1HTCf~U5k?65;V(Cia+ z5?LRQ9giJIe(cD#9Hn4pQdz8)n{|1(OMsB(#Kxv zIK*>)FNT1^Rg?9qSQH%8IIg~_EJfyu^=T1?YD*f9FQDQWUwTAIxR`p>D<0)_M12m7 zZo|V4n|K00p#ERvuu6qbHI^{ZCk?&T`ioa$^~pISBP!4G{X)?gMg*NAjiMis-jRY; zA397dB}79XDoFSkW2t*2iX`=>Q7Sc5xuglMHK47tIk-qqpNov11yg9-Pzf`z0?Nf_ zz{jYSkheIU9IeHCH(ZA2)>Gs;QWZv#Y(I)>Gn#%xF^-Bu9c!=qw3IraLW^WAVnr^O2jKh%sktDzL6sh z*C*UPK19=^ff+P0^)ODGKa<&enAU(^DI+pYLqDLJVOu_!;C#5<6SG>Z^$$cneC+TE z5%#fRjK+)w&Gw z1^oeYXZG6(t8CxZ(EN9I%He8y>GCNOtG=o!Ri05a1;)n5GbTJgs{8i=1BVRn+dsRX zPXx^PbYThh4PCaW4npiM23p~lZCy^}7g7#-qX8qdcceR@UO`W4w6^h~X!R3xt9LAO z%07WUTB$7UYo%DXMR&=|Llg2Oy_EH=VliYD4HrA@xm1XvaLsLtSPR$e&wNBMWl_i3 zl)bebp#YiegV~Oe?$BiuP{}*QIzDS>1Vsj2Q{(7D`m? z(y7(D7H0n)6YA(Glvc1Ut~`lWUsGLA91GIk!CxwHQQg7=hD+Tnt$;w-1iGqwU!|3%7M=XJ(D5*nag~EFG{j zy#^U-cocO`=Wa4iJ98~K^(rO&Q?HnaD&eHEE2nCN`>=*SN3Gg@9eXP4GzPR2v6C>y z`g}MBG12169jy;qd3Uzez}qF$)3`nPp5DnLor2o`=#uf{Ar=(%2}>zg&(7@zt>q@g zE|pHFwDz^>m$9$Y21*uV`x&|M<>h1J!O*9}G4uDPDv}yf_+DzXa? z5DC3UL&8&q!;dIMubfKGjfH|TH0JiBR=tHxz0?jx_}s2zq}`Ifmf;9z+}Cg(wQF)z`Rr8IR2p|QnboFq9lM)aN_s`+E}M$3!&q)B9hgfR=bm%U>8WjU zM&hFZC0e1neR_%dmEO5DJ)=X%%(j@Yj~G9(IK3^-pl6({Uowmi_&_LZ+<-Vaqd3mG z!uMs0jSgzT+F@i-kW@%()pDDTDbceM9T!t=yhyw?%$h=109 z;@_L|tY6NvcDPmFxo!086=Q5X!!VA(J&BwANqF7y=k{;!Jj2-Ia%epp5cb~hPZ~xu z+_V0(-a8LBT+WT=r7scPJCEfDhsAmjg)2;ei z{uMvuub8yn>wH#>(GB;k|E%|>;f6ch0=(z`&-!&FZn~ml$a_K8i`IL>Sl9ijJ!6at z{7%MS68cXb|D9oSCUtev&gyRLh@PiE%H5b2f2%EjI5M!k0ra3 zXOkC@myuVISCe;<^T@}^7s*%2H^|N8x8zPzicsQ_M7Ac+Bn!!F$ywxmTnv7t;n|IY2-QNK=NX8ELlWOCvPVoAQzG^kSoYn$@S#t z<>Wi$-^mcUgFF&#NWyPMo=)~8N0NDDIe81YfLuhrM!rRULvABYgr({sc>>vv^pX9@ zTr!`WK?caD$t7eJ`8N3hxt*+!u1La9Bm0s?B9xQo1T}--1jddy;*~Tr!`W zK?cYt$=As*$!|&N_#~VJvK4tEc^2s-FC|BlQ^_*&KJpQACAo(Docss5m#lZVjz>%K z1oAA>M-C$|C$A>2Bkw04B`e7gSr3Dnr1x<06f&J0K<1DW$tmQWT7XOL%R_^T|PEF?lWdIQa~@nf!$O zlQc0fiofm1PGk;w30X>(laG*3kZ+Qk$X`jLq4qzW>`IO%uOx3L?;&3!-y(k|eT>h%6^>Azvh4CO;;>B>yB$OgL2jlAXwY z=o+az6PKxq*D2{GE)&>) zM6y3Qgq%c9BOf9kBiEDfklVqB+n-=AoIy7WRSd`P{o_m1W zdyyl^N#tDeKJs~TIr$E`ncPPHL>|#v$D=XXmP{x6lY_}ZvV^>iyo-E+TtRLoKPGpP ze~>MY*WsT;rjtF$A>;_MfV`HxiJVJ5LOx5bB3~yrk{^*jk`2>zJkBJCktO7{$ zqKmXddp50FdARpk5R$K=oCZ)C$0b+|{9r;%ro zL&;0YYsl-#2gwEGI`W@n{7KsX2ITSNDP%9QFFAr7M@}balJm&N$qKTH{FwZT{Ds^@ zwrr#0a{}3i96(-4UPazP-b=nft|Z?kH`D$Mhmn)WspLK6L*yE=iu{JGCgVElaO#sMk?qMGas-)AP9|?4 zgXCT0qvW&XOJo)K9{D->FES-v$EPisP7WZ4kXMnD$$Q9$$kpUp@?-K#axZCS=Tp|-=a83?*N}ITi^%2VXJlMw?N1sxki3GNPCiVoCby8g z$!1-&KWCDcl2?;=kSoad$nVL7)3p2J$TP@EW@_F)Q@(uFuwyN;mDkBbiMWlI7$Aavk|K8GE{Re>B;V>_QG8bI9>z5g8zF zC!ZvrBi|-NWPNNH$hzb-@_I5z-a{@RpCeb3uald}FUjx8UrDpO4(CX+1$i>rne0jS zCx?-_zz{GV%&?5;>K;hkS@!MZQXYLH>i> zOPalPJX(;)lRe16B4f_g;WQ;P$n(fi zDMXn`3A-^W~ka7KVc+JV<$!zjc@=Ee*@e3kr| z+(kAV!f?oey~NSxv?b)#219 zk0Vbadyp5CBgh-b0Qo4nmi(0b7nyQ_4(AlI7kLp`Le3$dCs&Z4k>8LUEC*&To>7~p!vOU?A>`o3NCz3akkCV@k zZ<1e;v6pH8Ta#y!y~ttY6!IQ&3Hc^jO*R;={X3C7lN?MIkbd%EawYjL`8}C_J{e z=90IN50DGVHRRjm$K+1(m{E*B*^TT$UPu;^lgT;c)8rcRD>6jJjMn}qlBbaAWkaIax`5PX12Dj?w-cPo6>!AulG&$y>F-)3Y>au9hTc>{S9`84?gxsCjZJT6cB z+m9Sd7LaquXUQt^3o_;k?LLt_ne0doC2{^k$-%BA?;ux@ACg~@yT~K1)b36pGs%AB zFmenzlbl69Mm|kek{igM$Y06!`8vEzavX^dDyaC+CGRKSBsYho%(Z$-oR%8z{iyTAVLOx2aBsY=& zBx6dnf5(s=$V_q^SwP-RK1i-5UngTHY5x+*)5v_XjC_=QncPfnC+knv{-lv-kQbAa z$eHBr_g^} zuwkbBolV|Ft|HfxUz6XF$=7IiO~@|fndGJ9XmSP_AeWI<8wK|*=$@9rU z_d(qOUOIP z2gudrI`TX6NAjpr9ZoAUjciZ$B1e&aasj!TTtj|F?jjpqr~N;MJe?d)P9kq3pCi|k zUz3MV*ZwpmTaagw!^n~34dfH#^W+BdJ2K&V?Qa^{le~~DB&U;ikxR+<$$yYL$=DmT zzsY11GL<}u>`0zT_9kbSYxgBHHLoLYAzvU@lW&k8kUPmg$p$xRf7*~4&OFlq8PQFgQ zNB%;}Avf7aZ9`^|e{=t9r9E17czF1_CJk0ha627khhZekSob``9(aUPzXZbI1qD<>ag6m*nqc+dH)XoylHg0eL&Qn*4~|O2*C6 z?hhwBkX^|fayU7iyqSE8TuOdGeo4m8)&3`u?a9-~3(1k>400B^m|RJIOnyTq+^PLP zlI%pDNnS>dBmLwZc@CLN7Lv2cd&!r`*T{d6JIIE2YyX>* zXOVr#JhF(qoqUP>mi&o4@*eHqv1A*vGdYO7fqa;Jiu{P&Ngi>p_U|;ZCz(r@lMBe# z$QSO@?p`OqBX^Qb?$^&#$zEhXvVgpryqBC$t|d2++sI$YqaM)y`^bFqCUOb+GWjOC zn~Z%>yKhc*A%~Ecku%AM$*0KI$US7ehqQkukY|&_$RctYc@Oz0xsH6BY&K8(*MS^J z4kMo@SCN%uJp=Ac9P<@xBpnJ*P33>-ncXrnI%b~MwOeXxddH3(UH^9Jl9`%%T4v{t z8DMJa<%eD8>z5T169b?0e=#^o?EEr}u6Ii)hLNfMZDZ_+{XSNne~v%l7vxvu*W_06 z8}c9IKgn;&5cwThO>QH% zOtK5vl{}s7PRbGe9=z^F4gj-xJ&3#vyqwn~z)`#&4UXaUSTK**SAhAv9#0mMSCK_z z2|1aZLS9QwBd-Im=k*QX3|^OmGkJXzc{6znIg6Z4-cHUT?o>s-ynY+p$m@5(_jvso_yw=O z1i$9>R`4IZ{wEmX^>^SlUVjh%!0R30PrUva{1>l(0eAB{E>^b_6IAvA&}I(Dbu#a# zfDL)w2t10{O+aNo0Pi1->tlJpIoOidt-#}W-5N~e^$FxjWE=7nvMt%3JeBN7W{{o8 z&SV#|E7^@agX~V8MV?LeBzuv)NgsJG*@rxjJfG}O4j{A1zmbE>f<0&*C65qSxD zDLI_HoE%AxB6GhGsqjs znWUc#kU{cR@;34gaxQrncn`1d10Ue^L*T>sdz8NykdKp3kWZ0Mlh2aRkuQ)-$rs5L z;7j;h&EKzpYw))gf3NXg75F;--o)Pq{Jn#}ck%Zg{?PP{&EyB@e z#I@h<*}He|^%8;+ye$#`$^(DOS|G6sKMf#J1Br1xcS;hfKXm7?JkoW+pF(EGtB5%cHkRe5#m85_?sgYmf1>%n&-Wsi zXo{4m73D8fl>Z+2%|!Q`pXfKG2FYJw2?!?oL?1_2fbJI04jMk~Jbe39DgpY-bX*$?^ zEIK_^n`urhoRm9pOn%{H%VYV1sR7%&iv6(ziVrpzZfktbD_n1AUjuQU8vzb!iu0hQ3SOHFh_MVszNO)6&pag*#}h97M?R zGH)ml{Q%z0-ru|4fFsmk%Y)1q)fdQEfVWcI*`&q=S9(`I_2iRJ z?)vK8?}F#;O|K~XEjIa_HSP>l<3%uc_r;f8id>Hnrqv5w|LQs^tgzazs(VPr?uaE8 zEK^-rJyW^Oa>|+IUA7K|w^p~ASB#tsBsrJ3larq|A@||Nx|Z}yuc$(;>4;x}-f6{> ziePbCbF1zIUs7RBO=}*Use(hn`-}08&n|rVS@v40za49vRqMQNco$*x%k5-J;3eqI zFS+=#;g{;+(Epl0q6^F4y?bLCb%PA#lI9Cz48KT2*2+Jwy!wx%H0ZM{l+Fjcvg&-u zw&H8$VB}OCf_yl=GRAmZvf#_GeAs7wTYnJsO}VXIee36~ZRW_Vp}rk#K18i=y4^K* zmpI0wfEtI&DiZzm0z(r61xfyQ{Xe8v{QOkRrkG90zum@FRyE6!T$*zg{rAw|{87 z30c44&q{RiB`Y;Bv`wI(U4)FeTu13C)%g~ry4)lMhBgjlHAB0R46U*YTiMfF>L?MBa#n=r*g6Rj-wR|TyI1+$!hc2~avZ=Cf&X#1ag z_e!^%7~0CK_|QkVLXkBeWI_%#E5?L`>-iYDu29#i3sc2t|8vOmbX;BX^bB_nF@HGx z+IbqW#>}ps>vmeb_7G+6H+JTJY-jGfcIHBWhs=d&aAk~%>(|xwcQQUisiRKKs^?s0 zWd??J4;1vMSuvAmV#iu93z>YWa(Lfv?2#(9RL(1{epTfP-f~>1DqYab9h$f})$1b3 z(%erS9hSw>e9-}3})E_x2N_7u&0V?#H)#Dqkg-4fk+|AKOm|4 zOMQ{*ud03>^|#IWCS;*yF(xEBOJmGuVvP@C=(8s{ zWv~D0J^uC8pZ*ozU-|i0efghj4_Gy-CfMEGy*Ifnrt%k?P!OCT0 z?0t=CY8ZFPfKaO#C;d0YSapi_KauALPCnLhJeva#RVE(bcsAJ@WNJO0o#u5BHlA69 z<{j6@>TxYte4>sdrV(6b&#u1l-!Qn{5G#Y*IyJaqqvG=z6L)sRn7IB;-Crhy+X0Mj zO|5iUEL*paQEpR>QLdtnqugKN{*}+p?CGz1_21Esbf4`RBd4Zi>+W~5M+9A7kvwY# zdK$Ka*@1d0-AQSCvm0aZmZgqwj-NskM{XV8Q1+e;CA!`n^xZ9PZwcT{ ztmn!qMZ}A(P(5>b+n=Q85i%DLQC!LUR%t-C>6y?3eT!V7Ir$xZPLn+I6+}a&Do`>< zybny9ZIxPig@1Q)-%3el6*UeM8wSqjl%nsvE(d5?eyJZ z6;r@B+q$&e%5%FItKYNSz3;EAuEgI4>&D&qQQ?{b{#pGv?mUX>IN-$g2EJ0bGTwML z#{4iII!R66jK>!~%%|gxS+U1H7!M5t^IvhspRwl4@x~KzsI4!>$;0(>`DvWo-5Muv z+!HTz0IR-U;;ygL5(6bEy7K7e%=S2=q9mo#x5P+Z=3BzatCso)2X^=OU#u!JYgu_k z>1M0d2k?lu(ePgmo{P#nUss34Rt}X{Oj)4w^@41F&O+rC*U0edX4@;@Ld(UBisTt0 zFbG(F*-y~x_;b_~+k1aiz;W5FDtS)DO}-`Nza-B{$9v+_2~vz`d_Gjh#eQr;Y`KS0Zj<&T}kFyctJl^S?qd> z{0ODtsVg?2@hTJTz^ZTa`<7U#Tq!CS0sO98?dtc^H&wrb zN}SQ=Ex4W+YvRi(t76T6#v52RSD@&S@xR?!{ptbElUDE{(q@h`g2@=rkZEE^@A zsJcg|^9+{n;cE+pQzN{PBDq|?MIN)9g5{F8{_>5UdtKGN_dWOese5mE?p?0#t@GR~ zR`iEVJ6rx;I!C;!u})2%xdmrgw11LMsea{a zaOwTxD7aNZ5b+vvD4^3St%5x#2bn;*J8`byl^=8GtKb(#34Wjze6W16yn6t~f+{<;Hj|2|43$gQiLd1)QlMPLLuH^UTvcH1A`O(gf1&%G94PlxgQZ&}(ADZK z)I{6w@Pe>ftt+w0<=ih+q_>7e8gW(eKHN^M&d=}(NZD`bem+aUByMU$Arxl(cR}f2RDOzFM54H?{8sg3=?{wO!AsSm_zE>MoMJ>54K>3-}sK(+n=X z8r^I3e3BNbo1E2&xDq5z13A+JB{L#q)s4G;-@8{OCG?YZWhJV-t+=$Su5W(OH&3@K zzi*-I{=9(d6IDbp+>|eu3~;nKalI1sy>Go8ELT%1wBAK{!QFaQ zCl%Iu%d;g@&<9Hy*m0=Q2d{1{udQAzFD+FatxR>7snMRP&6F1- z^sShN)#yefO@X=1mAlk1cd9wgz(8nK7^kdMmIdZssN7u=$zAuz?xb7-b9*ayeImKr ziAY-E1(%MN7p=|NP=DDsTNNSa5m2pn$+09@DWT(Oxd2x|EvowOc3YWVG z%N-S7mk90_x!le7yQ5t$6M(?nsj5$#9@eKR|Nf3CkySQ~zjkCNpIsS*58jvPO_DnEKCKYB;h^#w$M(Bl#gmro#PDjvPO}RetP{ zf0yo*-pJL1sItY0T*nXhD%CSWmVdT;@7_w)0*ui2xYmQhqF?szogLKcSAFML+(DFr zlXRaHx^NfYogF#~mvYF(2sMWXv-SJm<7RLfZu0%pFwD5zd-gW0q=r(Y#d0PVdPQ=^ z`cdHi(Zcm(%3UVPZ^ zRlj-tFP7hx+;%8eUAT8#&>fI9N~l558X5y?LhJl;PxibMJx&#EUp&)l?;PK=?g*4G zl>D*Xsd)^4S-I-OUJYDfv6ms%avwTXx?Vl??_Yr>o_AVc*Iz7Xee*)?q`dKtjO2dw zoSq3n^;#|!=c=K!GPFaA-OfifLb&$TJdp~mlXsmBvOlXocU;Q+fnyWX8JelQu3qW9 zq((lkpA+yBlNOZT$zK_o>$)YK9&V{lS7$&_u5oLy^HzTdfI|Oreg~yl85*ZthvnyB*Lzp1LJsu^_v=*UFw{mv|C0T$&^Bp*m7$*%5Wn5( z!dp4K^$KS;Y~_xe`Tm@FaK2Hws{VWRRx454bfR9QcdF7^72pxvv?LR^!1e9&k~`(s zJ1@-LqCF}If9F!yJB#%@=ecgFI*Hn@CXZIYCx>|=6}9?ftWEwIcTyiLUSiDhmc}D7 z=I$28vKVtgOB@q4?{8^*7GutBiKBbwEiH{3W6eif8M9-}-7SrUvF6t;jW1%&jV+Da z$XJNd#_&8&Ay!ps+#=qjt>yI;@HqGs+#)sy)c=}{L z^V3x0t9s@esm6|a9mR))7AsPX?Fr@+sfIt%oRez2ooHU4YJ8D64o}~y-y+b;xaTkl z{n5kZ{tt(lds`W|H!y#1WjxTpe65vH)xccU%Gln(T-wUGFUfqem9a9({IP}caZ-n` zS{SPiH`g9x>^$5oKiXJyggLXhvGoXZQFG(QWOHG2;^xy2ofUL|A3^}m>BJxJ$d*2_0 zkJ^vOD=13ME0{DQKW}s@{w=|Ii+#BnU6`w5SX44$LgB>X)S?lSaD3yy+~gOI7%h(W z6Tcc^O_-RAkJnEqDOQO$&dn{zoj9UcQhGp9zA|^psS`#_#Mu($O6pkc3vyH9BPUMO z(Ua^Ec@uF=q!`CNQpe{NA-_kBOGU=xa7tek%UB#UK}jL&)HSl9IIn0-9x|tRTyE;v zyh*tQsdgAehS4*BY~jSb;&J1%t$>SqjVQ`J-FYdswS<3qYX7{VA~_H_xU3Av;45P{LDZkvdUaSeT0V=jV(6 zQQdo7jV~!GP92$>Iy!GsUXcWrI&w;Cr+vDgppN6D=JGsFQEGl}kz~e*g4C|5<3~(U z)f!$F<&G+um|Ls*EahKtQgJGxUN{*!je@VK^H3F^Ci=Z&wMZj z$Kjy>R6|?v|593zk2uE)z0I1(R#UKxlt2xXx+EDw0(oPDIDn}tOoKQES&$Z+SXs?@>d;`W`^O)YH9~N7D=;}|FmvU_-U%Z)U?s) z(DMU5;?p-x?|Mq|oL6HuBKQ>C92b7Gu_g1Ay~XZOndz~!tm1fyERHmGw<0W?xyK_w zdw_M4;#OyYtRF*aSE%-2T=sKaCT<%>4o#+GXdOFDWdp5l?mMR8g?D^*TdDc-PB#Bb{@QLw?hq>bf^ zgdrk2Ck*Qedr+TI<%^d$R16)tiv1Yn&?eYtClZ!&MgZ>_C8fC44(A)NW0IoJI3$;k zg%`Np(LVN&T)qSE;#Q{X*5UfCuC7}!=q7J!tg{!PDPix6jUM~` z~eYp4^nFYinjnch>~esxzX2`?tORY&mDLRK0CwU>n!l@Z>~#($0JP1m5oG zy`9F}ncmx~xgwHXUAIFQA@3mnxUc#*{JTiYuc~+A`bD`T%@p#WZu+H{9A&(ai1ezf zT?q*N3t}btebrw71SBXVGGmvDap)@kww|{S`+YrrV?y0;blc^L#yrSh>d8^7*Ak7l zW6UjyFpgv{OEhkYHJ?v3o{Tl0Of*);nvW%lg7p0N;IA&O-F?LR-3JOhURq@DB$ zTpce@MZ)fS`Z#`K=$2F0dbwh)780Qb*;^Er+-JVU9~2H1)Nz%lDki%sSzaq*@O{GVsGwC!{ND z%aR(R>O?+9c&8vQ#JwbYtWH!K&(;oC@3d1`wx0f1^(5k@?aZDGFmk%mciUAwbOrJT z5i9P0;E~deMZ$4MDl`UpAae{=gjQ6fZe8Mc&8Ut+usYvVUFQ?*0Hp+a?F^2KIpd1m zlM@2x?J0k~^hme&fhKrf86SH_0B5XsG95o9mv2V_NvNtm?K4zQcvVruv-+{7R(J^r zuNy+T3n58GjFI4=ROFgSg(ng<*$Cc&e+=nw-N`?q4(>u1%Rr{PD@cF)p_=_IzT3v+ z8TTU`%#+bkxk8bSstgZ2N0#g_C#0K|VOe#- zV78xK(oI+hU}R`sn<3`}DGxQ|B%+(=Kq6g)GvsVU+Vzklh77gG){x_Uvjuu)8FHG3 z4>=NwGvsuQG~_InAxCD4GUPlOKIGWFfR$d%1nos7?u8FIvP5C6s7v$IoLWW7 zHRQM=rG^~Dd%tD5|6wW3&Rfqg;U1QfZ=8jatIe2n7D{mcW0C~v39Jrdk{EzQ&(K_r zN%bTRQHMaZhA3lFUEGCEmoZ6C)XsH}Nn&C);+Q0MYdvEUqU{-#BGg4>k6MplifCJ@ zsxFBXtXS@i7_68LJ`}+oNCRLGszz!xK8;(UdI%YxF7-sFR+Zl_Q_tEglqchpOq7yu z9gD&U6-kNIVZ73Ax;rD8ZRJWo$#$ODoujIAp)U3iX1n&Y_tY;muwSq}@xIVFe2i-z z6Pj6bjC;1`7*|imxEh02^dU=)aY&FY-m}&()!#;U^iK8tvt^j8e!TjQ>Ma=Ih7QLl z^-iq$QnX2SJ)_5W7iH%K+OK_W8cx*2dT=6mliEuOVH5} zkfb|;wPfq%nn$#=Y(bJTM54AUEumBOdS_aJ$VA%8v<3{9prv{Va_)!@NO?c=?igd0 zGEsvVI{!sjrRS&hMhI#tYuA5|42NfkjI#fCw2R+WD2t! zmp*zq1YX8kD{M!2mptQVM8wJW7m@NtY<2b?arMJ)2b(+&=1Jo0Lb}~~vG_XM*W_D8 zm0EHH@v?mlT_86rajS=)Npl6>*d>_5?S_m~Gw7|KANz*`9Qh7yjB8?Zvm(fbr^wRo9$=B$eosIsg01V)vXCKhj{CKhVSK*#@QDQFc| z23BqHl*PyYfwE{UWpRZ$KgPH*#tg(54=HOYs`IT~ZTjDw5^D!7(VvwP7}_jQ&>R}% z;b!};Rjr3jDJ$ha+NM;{)nz!ATbrikm`F*n>XX&-(2tzZ+r(E7N>JPoRDQ0Erd7rm zuf)jRkEGPgl(mz6_awE+vE-RD1+Pu6{hRBKib6mgJW<4-oHv z2em*YCfk`iNF@tQTWD3@Y46@^)HoyM&WDGi!;Ivm&DfHhM z#OD{Rl>ur4{+B}bz2)kxq)J%#*GIX(F6=&R57`cI&@pPw-svCiIT@@SjfQ zR9V+YO=V@Mhx8Gl<7I8IH|Bybo9{O;cE+0<8W=&-tZZOBZkn$&FkUguHx4tF)HC6xvL5{Wv7WiT zz7b3?|5@L7EW!MuzEP22epuhwl3;F4G&Urf@bUA+PtpGcBzy7wjct;plu#eS@ka?J zb&qq1#-EuYaInXpbMZ@$Ke3V+Uy`mF_CnXL7Bbwa5ov#e!Y49dStF7oOHyh0w~t6t zB6i@mxay!rBcnyqA@#e0>jPK&j8?b3=nsD=@iNWal1oO}O#sdlFuKLEZ1an7yV`G9Ds&9M? z`EsK1X`%@qe@Oh7^y@VTqsS{-tjM|s2E@Z!f42?ABmE!1`s|a|B)0tfk|tGIqA_DY zmMpO3GM0oCrtM*H9#XV_1csz#LhAJyl&C&}Y%wt~6<-d++{c;?*)BI$zac*9|8$(X zt0^b7;HF|PpF4TbPe`*uLUV5eH+pg^V#*;n04KYnNjGIBR%X>l3`JgNI6Zv5xg6AIF*TPM7+PdC$`TtQDsB9w9!Vm)w>COzy|JyT1+5W=px!V>2*++2Bz|Xe zw^vrXrAgHl{}X4DS8PntL*96DS&wwyk7Qe)8tuY z&^B5*G$$v=zkb(u{`G5iw>tUNV0^=vSG&ENT>b(cN&%!IB0(SQ<}8#@EaAG6IA~K< zRwa|Ts90DULs4Q;9zvVMS$**i{s(=_VJ*kyw^J;>je(pkfs#*ZScF&wAFKjW5`$D& zfD%3#;)^8z^w10`aR&bDc--o4Bfw&V|f z8iCd7khE3TWYMJJV`Ud(=gb|WC2S`O)lQi50(ww4T@2%3mA-kriW)O^HUl%lF^Hrr6#2{NN%aUyB@roPJ!;0hpOIGmCH4})jfXlj7bRJ?)B9}X2$?;@4r;sRhI9; zzcDfd23KzsPZ?LIfs{)U0?H%z7?8ZIT#O3bq$3eIWq3ylB5dfhQzk{FdIopO-j|!| zm8x>NcBO0=1X-x96oOv@gCC?a*>ws@@Sw*}qaDB(B3c9;ae;uN`^*=v}bV`2dI;(o#U>~GY zd(>Mz%2_Nj8fd#q##@V<^or#5j9o&dZ#g=i_2NyHPkI!?KW!Cz5MM=b^(ROg8f=ov zB;B7ww5Zw{tB$9gp=;M!1>0%Uwx~Y5yTANy$tB&Fiu7?>lH{zFBpJXim!h_NpK=Kl zmiWSRHRr8B|MlLuw1Og__Y7xB>~jAcL}hsdD7_Ap;pLs+B8?YC3aV+X>32YPe;-u^s!D zDyOPj2rN~tRptaw+KGZmXPEujTRl}j zW{2)~Jres&-{GlxM0+@oxZalM^MCa|zXZRnNXm0LQRQ~uMHPXn-b||3aMcU)+_%u_ zW6JM`rqc>^7)F)qMsQ)EGb&#t3Q(9Y`R0dSluO;Vvyzk+6x$VkJ%sqEJ`YteDat%G zbn(CBC2Rv(9fI!6F>1?>k*lUlL;6%!i)?SI&zJoSE&a0+F0UoTxno?V8oITJWdH)`g4V`f+X=$X&O z-ab)cI9)uw*1k!P8i+@F9+@L1xlUKyhd|A)joNC;kV1Auy zyq_RO&b~@8mmMcI-QGFQcq-8hwl@Br824yv+72@v^L5QGqbB!d!T?vE+!j zds`WmN0^_c8FwX{-=-PwCY#HSHTEROm9;WvrJRKO@1&UjXlZOsF@H@n?mW`G=>+5L zBhC9xFn&BTZgWfHg@)!WX+~Ki^Px23(MIN?G~>laNc1}}@0MnK(MU4q`$i27aRSRS0(dM5mj7N`_^z9YPZF7$`H?=UH zJ5~}lx4C&2uA7_7V2G}{>2G1&(88SA!g#p_Ufg&*{+XGEe_-q_zN_9Sjw+ka4EXRd z*+5P+e5f*z)7+1b>gJ@v#D%|cJ!i(CKfjsPPG&tG-5&W(<(_iP)%3(w_g3<#<_9?= ze`9uNz@;c0!2Ah<>3|PnbwnveMX9kwX-GX;6v@|abCLo**5fx`w7*7cZ2+i9geIY) zyM3)*7!aY-fTTc9yd)Je*8!NVHVzDem5C+@2Vd%x*=u0Xdi<6X<#;)s&C33Or>*&? zQ|I~QXY~R!t>$CQs#xQ(7_%(asK!TVW93^YxPDdX{8?ISH8nnEYeBy0+YfOI&YmZ~ zh9(AQZ&4SSW~wZmvbwrTBs(zl!a%_#D2*^Z%H)}11H)Sq_?T+8%We0-(B6T9K5n;a zStSPME#bb(yR7cPvaWJ7t1HJKeDSmn-yeqWldtmnoa%~CluxyG_PRhK?6S6EV9y~<>V^6YD?YSgr>?AG9IBP&E7BzbaG z9n7+|52~NizC%)^at@VBg=SZ!>SY+kq`GINdaKXdxU2L#c1pm?aH?*=>oIqbt4uW) zlB>j!7`K{wD!q|U(Jk#qUVtuqG*WS)3PS;CIzoYtP%ct4Z z*ISpNWB#|)OshV2wd-T1T^|!webhB`o?SCHtD1SMs+qG?&HO%2te4Ww^$SR z%i~PEvr%g1!JSG%y$L^+#I`M#P5&ECC(Vm7)`=>!N~hZj>w&NRTvKHV5YZhZwl>c( z&ay4~{T0G~a!D3gk^URdRhweX&OVK1Qq#K(8c{I1aQuLh@gs954uL&Y9~|!AeR^hJ zvG_SC_ljJYI4v04cfjD`85xo7;QD;&om_9{j+P*z{^t(ciElUG)uVDJh%wdh_&M*S zcZU5`F_qhM;@A=~&#S_T>|Z)EK)u@=CTg>k#a_G}<=xByg~fdxo4-EKd+vm|;*#mL zRhxdAvRf+|3=^`-Uac#<=x!>~|)wR>!pT>mumG(@pTW=Vco2mce*6Tg5$mz@I z9M!(BD_!E&?Vl6>ZrREr?fJP=B%)FBy<_&oyh%upddqsp@gu!s&%p!I2ac2~=uLw= z&hBf+tyTXsI=bsW$~mjBq(D_rE4;|=Gde}F8Jyn5wjm7Pa*9-KxBPO#kLtcgxkU*- z1Gc6oj4mvkXc-yqB@r*$cRsknXS;_LVzFB7@yY9l<0idJ%{QZ!U8hbuUnBXitQ;3f zM`PuSl}1-sU3>Wk4Th2B+=5ZLy#5drq7leaL1zzB&cb|8=5~QCt5b41f}1pQI~N z+M?aBYdHUt?*7~JN6Ix)*<%07n9sj`<)3>lwXgT~^-S_8Qa#w08|#_7u0RuLZ}^|} zUR}8ne%AJ{u3;RgyN+-me~03~+NMq3I~3v7#*agpzS@NM?|kRKz5V}RZ@*Umw!c2k z8r$ZfGRWVB_*=w3G4l}ZzeACKmf!zv{oq?s+I*xwL*A7?c?L0EjXx`m|4s&y($)r= zr>(uScP!^6@i9jqi8;!NpBYBy(-5?)*Ni>Vk73kr5_sTT zLGTpyYgP}1TQ5#hQceCD6E;R@akO(YhP4Y z_kqG|zbI5D4G?!#?G)CZukiX63UBxo-khiK){6=oHY>cnQ{kP41I78qbl|Wii7`2f z^K}=ak#hHUc;)}G_TGU}RNedd+}TYw3A-eL0HH4|HH3s3dJj!{5v2)) z5IOW9tCW1sG zCf`Tk2fFILSX& zO|ixC%pFzWg&?v()d-Lx3#3$S$De9#@Dmq{kaPQnCgVA<0@a^kI!1ZI45J`bj6zQ& zLpzVEiOMw!6Zhp(UjzA(IZTBCFCm?Kkvgb@KWxCtTFU7gTNGkdv|AGxD6IUjuYAm< zP!GJL=qsjn057Ngc0VtM}-vw zJ*b0Oq!wF?VJ)^2oi0{sB9hfgqBj&fb`!~lo1s*^AqETIyK{FN#xfiRny29KaC5lJ z9vOpZ$crt07ce7m5Z%~!tj8V=mIqMT0ZXiW9pH)Z_YI>7ge?gyp;n10XeHn28dLCB zZV>hf0+pTwaORg~hA{@h={De%LI!%h0QA}uYw-__DEe}st8Io6NW%!@`?_|t26qEE zVT011x=~|__e431ndzqtgTCAYN383egk6bCY`6z=VeoIjk*GTHTU#jEXdWyaP&3ve zgaDNZg-ac0E1K%=5$#BQz)ft5QMw8KBqKJ{d}@_OyV!_!QHp7lO3#Fe66)9?O_~nU zToPxq@-$jT^*W=`H9)oyT>w#VwN)-kvp z9KOdZ4r^0o;<|y7rfQrpj4uJ{PR?9(V3pa18O1kHz5FrGnIDIH*{w&YU+1EWN80-0 zDknFiOz$JWXRF(=U)#Z1dtRwRjX$T-F{^cR@HFDwS^5iA9t7_M2bYnEI}2Z;&ML!L z>EPnOR8>qJKk{FyR-zAcgxpV#xW}DQvP?b%-38SZBgh#*H?iqxaX7jjN>=y;#N!Iz z05X0D313yPTDPo>32&;=ee|G^FeDW@zN=KxDA>oQgPK%~vsauSZc-bKo6qj#mn< zISFR+bc-_>_!x&HZL2v|%}w_#&I`a-Ivk0=#Hv$~S9f#JBHd@zyTJF`97DtX%vE#v zVO6-o_Ps(_29)xBhNK(5p=Mop$#7La0ea+UYk0gFf#4MFTwZ8$6Ya!fA0qD==Cx9W zF^<|50aYU`!-9qvnE3z?A>0;Fr=a#B#H8OaLgEuS~-<&qi1!4CGfG?T#dRs8QS8Y6W;G}V=&DhE2 z%Jc9#+=p2YTedJTgyef@Zu%6Yav-FHkc`CA?U6@>tIAO;k2b)cBu6SQ>F5yT@r(Ma z7}N(qJTg>0srW3Y2V8wIu&8;!7TLIwIGyudIhPkzz85 zu-;DsI&Z_eyC({#h3hXj)_&yN2mTv5GL^{KQNGs*!`IVwF~c$wof88;HpxYs5z25^ z8+-~q!_)LeRJA-g`xlUZQ zIIjWU5qVIdx4}C3S9gv!Z5H%+@Ughj(ae4tC=5S<0mU1Mm<`7%Ry&2P>ngzlO z4oUE2o<+p|_zT8%acUFbcN~f?CMmv_?wrRg&d0#N4&h`irWiEUt|J!v4={7YJf@gp zwx2s=q(v+NQgR5^E1|0ZTFJ5^%)s$*>}mES=3#@b~U+gaLKGKdK) zYzIV1FsuHXZD^NEhi(4aGTR!Y-l4?o1*{SF6ncOR#1p`r@35shbckQ)xYs_cT6fFr zdXV0Ah+>gDBTTV_3ZtGx$Jb!~`51PVh7lDr{IuPV^5iy*1Z>%=C~L{{gpVC>WzY!B z?vG(-FF`{1>+3C*QJ_EfKUAy|)C<3G$YQSp^U!11*-MZfUb?=eavAi8k5LIOI(0n_ z3HPR0Dp8n(`B{tXg_dG)XE`=D+%v#ZsRQ~`k5S1URMW#x+I@8>=<^<f#8HsOv0XUZ@Hwr88en9U9;hL8L=l9&e z5LXG6sjdLJ9)vri|Hoc8a}Tv#eFP|HUfWftYNV?giDdgyJjXCaumGwwnAIFMhvBTm z#-1Tb7O^czJsqNBR$Gky&8+dPMH~y#T!$#t&YXLJ?s+-DT>-=MjxW*$igjgJ;N)9oLqg_kD z(bb-*@LGs1K^wafo!u%9xcWvy> zEJ3BQULy;Rx`8T+EI2wA!&YR$@z2W7)P?dhZN2V7- zZz?|v)8uE-RQXxFMt)v7DnH9Vk)IXUGUI>4>fT-HH^(orP9#$hvf% zzxOBaF|F?=9A(hS+hk2}CWi z#s7>Yq~l~aNc!4R?|%idoE#1DG#k=R=4ajHAFc2bbueo&sLN+m`K1!B75aCp`+l5` z9Du`R{P&ev7bgn^>7P+($$VV0{XzZ65*6x{jD!Cu-m-BQ>Yjpwhl<>YLPLw<;72)# zFHAfBpH&2qoY>-HaBOJlBUJ>FvbNNlmr#+#=nR!?nRVMFh4(r9N5nJbYYQ|bcTY&} zstA}4%jDyNnD1@bUdf~a`QKu;5V z%tsqOqf|jKN`#83cQ!iF%kvNVRpgb z!-_O{(l&*#6escf3DAx<-~JX?Mc{?G4A80|+_fv<+~$KmI$+H`fDRFsQYYodOytjR zF3APW^AKONA+LmY;?63-i<-B_;9eM_!~6}n>9=b@YA0#HesBWj(r`fefR%P|s^}U@ zDvdR&zp=UHbC7C-(9|JmBTrx$^bay!tATd|Hps!n2zN%(gLgohWPWxNq^Tgh@EB5* z|B6Wu_{&WAOJn?Hz3`V6z+aY@zbp}dS?m1mj*6__qvKG6y;ufs=_g@LAdm46V9fcK z*2iwV)RO-YhIju2rrrJuSkd|?G96+5It}SD^xZ!=0lP_silIVG3Hm|ojpmf45RV|+ z!XXcWi&A8Zy_i8b)z<}XlxAQuJ@AV{Z-fPkxu0PF$HngANxpqEp;5%}RXsBioV z-Iwa!fTr0D3w*}}NcFJ*X4s&m&dY!P1Gma+^%X$ha2OrwY+%}5FwPXms){xa0zF9v zOXk&#jNM>ds@GH7_zLJ#f*s|K-g;W2HaTv5%e*vILp^Orn zVbgy%_L5;V0Me4EN98@PAAhhigex{$ifQ!iT7ta1=w0Kc`C-F98p+#q%P!QCq}$ zU8)8|skYc#lbG)()Pp9}cBw7^GabThK;HUbS=8rntg~qDQZqqYF|s$o?gl zS_3&geWJ71BW*J8y%g)#^+nV?xaxhtXKadB)RTC9(tpm?V>R%bz0)EjpA$b`|Pt(5uF&xlX!n&-9ouFMYY{EiIdoiF_2lxK3Ei21|Q8pxuN;J88@fXtxRL{wiwV zBZw~(68G8J47tnT9}<=u7YWpTV83OP8ZI{vX0N9fXMiAWRM=1-oK0uVfc{@AJr$Q)_v%bvcuN_`s4>J7pjPdIq6C`mKx!pJ_Apg`&Y!T^V) zo8-sWfq$tg;Izz~3~XLDycX70#eP@UYXDybY`u*eNiSjUE#@)H_W-mH;v+#Qb}^s` z)$T(;7a_iDL%KbJ{v{TP0kfTXeygrX)0Kcx51S5~EUhQR;bylBFj)qKI-#VX$)pyu zVX~O(3S!u74^~+|uqxT`MqPoob@kf;yg9Ir+3<}xNB7V06zT@NKd=$m@X^bG&-Z+cg@!p7 z*o)clecfTdzw2{M=jJA0dqZ$9?+ZU}eOqxBcoi$1#*91~Wev-N*&w2L&nCD~=ih>* zaq&LuQGr;dzkqZG9|CmOn1`99_@JDi#9@mc#h#*tLjw?0wuRmaK)m;;k7Z6pgO-q} zWYCNeHwlM0MK;P~HS9dSWXZ%GHW!XvqKQAU1KE% z&%mme0j;rN-F|^gEP4YQO7+3%B68RR^q9@i=cXk(tN>&4pqFti6v%A{C0|qOMqpA1 z?Cg$kbNv^17#dm%q~XZGIp&HVn#Ru-XyS*}h#yv%tnC>xaylt-;R}O2?$?hQF6XY} zsze?N3^Om+@que3tGtZ-z*qD{M}FY?BDAc2a5QjZg`^qzfv?|?G#B@QZ|2n}hnGkK zx87>VG?(^)+ss8jI2yQfOVV7}2fmecy*!v2xJ%zuzIPf!{=2$^f<9njFS3nli_}o+ zZ-^o*SYq!N(tf8Q(}dD^{tI9ghj18>_Xb!NwF8b5#8!$@Pk{EML%l;=3GFeE2VPSu z1M*=umSquNVzp}`90OO)1^l8-@rt@E;sal){)d5Y0=Cz|9Z&QsJy5{>9<$U!_@mB& z^qEbx;DDKqnp{EnA)wy~|3nXE86HS94OEk8$5b?oyx4R_X}GGn8I3F2$$+X77HwIE z2kM$%&Bk*{G~OBz21QF-!%fYZC2&{9`F&Rz%{cqJUGw>c3J{z@4$8W@KcEfZw&;J0qHOz z3_r<1uipcvYZV%IH2t3k{H4cnVqMFy6q-)XTfp~{LkF}SS>p%txk?}(^Alj7hvHno z2NGNx;j3ix5b&R*1YHqIZC4S~$|bHcu2*Brl8Y?j15I6hwpwPY1FuVtbSMqCaqW87 zGVv6k?zRadk&F1iQ?9wwE$vZ&CIqzw?%|5eVQIevXhl$)H+};{T&q6A6${qFJAn2D zwFMsK+R+==NeQ0^^tq!gX8?hju3Z5@-$VS!)|8%X$TB~$$@S&~;5n-x60qq~$uhsh zz)vvkN#95WQrkwo6j>&?%n$tIDvV}Q?Lf!~B}qha*wAbE60`E-%t9bu#mReo+H}h4Hwvys$u}kf{Jf7#{^v;l(2QXQ7t9+l|tLfWy+F=H-cLxbsw1r;xCm zkr{d|Z561^(JfDL^@paFP!F@w(X@n=ahRdLMMu;y0rNMyApw6G6eAgyOxfDPSw z((2eGh5GI=)M$ttC2!_t6u2>$?8a&^Xa#9mgWA;Um&DWx%ha4~rkI78V)=})=Nf@s za@#pbbzAKWw$(cqj@WJW?kyyxttd0X&X!>&nRlUvwi;%?cUNG-2Fh!yScDmhTSs}2 zuu#dBD-EN-0gOf}&j?jr(?+Qzo0cWO@bqe7a1(}+TU@1UZVA=paohr}e55T=&uQ9A zYHBu`&iS?Oq?u}mrn%L|Y&2Q2hm{T|t><-sY>$s^lGPqvPzWgwb2AETUQ2dk^%sr` z(y|7%sg|#csd5;=Xeu7RPKBUpnT43DL%n**d2rtYl>AJTs;BBB9skpLKt`iVd$B(6 z%psy1qKW;2b|JFCqMa!2KNv)IrA6oLnf!yqF{5=*MH5R&MQ!Q&^g%CbOE(C9< z5jF8NIJWq^ZBS+TMA}ZxgXAS!>iv&E9kCWJ-AS#7_-z}qmX8fb0_xluLwFS+>LhmO zN%<9u-j+xi$wKM==^BhGq};>qSBLVnQ06`jE4|ZEQ(`42N>~J&c;+nwiuW=dsoQ-A zc!TF-Vo{ZVH*`2u6QYsK6<6tDU9jY(qUr)pPx9!IQMchmpi|SQ0vQ46j8F@#AEWNn zF5t|pe+8UZfWIEXv4XiNh(5lQ7dEIWcx9^b<+5U>&{@mWEP&cCcJ@0YYe_QqJS6K) zXa{NMy-3!lv;rUFmtm;lpaqx{UeAq&F8HB-O5k(-c)(5lc)%_FT)=JpT)?;bVS(@X zctFnd{-cb7m&VP(5YpZ-cq`vq4X()!Z&bhs1kANMj|~{!CbI+PfTVf;U%CPBl;~#w zN;lNc09XOD9_BY=i@yMd6EOQBIc`h6R|K*G<`Tp=Y$zmPR>MFaAnFlzZul2}9g5zG zII;uAwF-+>QVIbs?NH_lMF-5b{g#z_fZLEl&%B*M2??0{88Fiu_;82A%!OzN%72hI!R(IY!xiYy1R9@2M1EwFy?) zHWbn-sc+!Jjir)P&|xO^9}@M6bl@5&I@DkIsP8 z1NeXtPL^rM$17xEMKI8+vSa7f$2`sfwd{#LICD37d93WoVN9|e%AT6YB%7h^>A6gD zATIk+XC$Lp{IZ`8!$82xMOUzS*R$l?kuq{{>?(Wy^Ea{dcM$R{n1fE)EB8<*x#5CV zBy2=;Kr4IoJO&9GN+c>**`jM;J}Z0u>!El;0ogQmfE-=60{D7=W2}T7TlB;TldErK z?@obO9#oo7wCGwVe!q?{E zleioVNX0k6On@zZufV)%o^abt!?b#sa5X@6f-vulC)_o+-UbZ5>IA48VaYgA;D_eT z%edH2?U8`^j;z4?-ghEzohSTit}11jSO$ER%`r6mmsuLHnAij8mrq*pO0;5R@fGx4c%b$IKWuY?r>Mag@v#nk>?~o`JWwc8jnC{^E2Zm4oRyL! z|MyBsMyI$!>tLaD&23E{J9YBOAbaXOjViQPz?USgr_L{#wx`Zf@MHqE_^(;v_6m4D zBuj0n_gjIisdEFwJ8URq>YRgtF9nD?h22F`zK5c>HB$D}xv&!Al#~b9{q9h@2t`kw zzha6JD={dcADejQO#mfi>bx}xW~u;BbvRTLqCIsEn2FvDq2l)w(#WGn_S9LY4vnR2yqp#IC4^5v^bW&}sKdNzt8alcAo4Ad zH4f5j!hRsFiDZ!)F4J=~6E_9ip3x8F$3GE25uOI8@T0;{9>EX(4qy##ceum)4;cYw z*wquHgvG!em)E^5jz{j=b@AhNR~U!S0$f^*$1tm9G{t@5Le-xI&8T_w7Kf-&hEc8o z& z1^l*2zyO-mnQ)shtOb&~6E*y|;YHGuvex(WYdlHMybHP8Xv?RX|H9UeI~R+6W+!s& zT@Rcdn;jMUdrsYzo*jh_+ORxqAi=QOY6_JgadTIhl8RFz> zlDLC`H}K;VD?|IC6kmvyPaP|g%9sRFl6X)TT)_@moo{4J@n#fQsdWKfjPzf9-@0IG7H@ajeQE4?Tdqtxfox%Ezk==#*65=c$E(xLQC#`18 zjc_b$WD6ENNe7AWOHo00jYjp*Ta%a32tOW`)mk%Jd&Cww8mg1}CC28YjxIuX93`je zyp$n~9^l9KBX&=Y7>p~rdxhtij`6>O0ky(>rsMp_F>qH{z;wL7Xf>ptXS$HT&Z|f-WZLh)b`j~t6_76B z|2`MeONyeHWsKD3SkomHl6vOHv7|bT)chD%lOts8;J31ZRUy60Xq00fv|guaenTr* zhZfxV1*jikMe^HP*|k&s!vOy!c@}I1T-sJrQgK!Tv$Yx>#>AEM7sa*6q|9=04@#YM zSTzRJ$$^+cbu;JG!z3J6EkPI^N=Pk_DJ3bN6mKaZCvLoAAhindvx?QVJ4DqQ(XLGa zeo6U&Uw#bUs2pasr1$7GzY&(jJVi!omob26OON2k!=%R=sf*u-w4q4(EwNx(txA3Q z6l$#uU2Q=)=(8AYRB#L6#+35gWB-DCB2JU15#~3^G%VdoyVM+0WO7Hze6^i9#+`GR zv6CiC2j$1h#HS8MbY=#`SGi|{@Ox(3TN*TChK&d6Qv4zOvjg+Uh+cOW@Ez`X%+H@? zReq*1(42}tg!x&tU`-e?6%qGIH57jc^D=5sTUS)-4c7iiRTp(V)WLPbzLXcxb;XNj zi$Wl)VFTzgNq1Bn@V6g>cXC%Y5pHgNW6h<^n1T#89<;ZBxh}k$>u&G93gxHq-*T|i zNhb03ZeBg?)Dn@Yd&rw%~68PhTT_L%A_HfK7{-yTy>#V44K_dm4{=@v{E@?%UlDz;?W z?;o-d=~hga@Gr(RU9mM?F5};WVW(mnrpx--dVZ3WUDm@elxyCeN1(~15g z=}14tbb0?$EQ=~W!*r7WVkXi(m`?U@zln4j(-r(_^go^HivH>wvCm+-lAq_G75gz= z**_}*=}e}p_@3FOtsN6de zzkCJFU#1*9PN!L;+p~QJ801o&A``|aWz0DuQ@x|f~W*YpT5%-mc z+$TS#^5{4A>npw5{uqX>#UIOb1fKib3jVl4u-P)&eg^yQ^nvfh$;pI1 zqex9#3RbxE=sASA1OIvaJd;|z7{Giortl2) z>yIz&d0At!Gg8x0PnEmL5|uCUiGnq1o>YjRXF166y*@qe6~)M5jTN0}w1;T&g}>~0 z&j1$ol^>aW3sB-HdoemzI|IT5shpmpv9hQp4gLmqN*yDbzSi z*XUc~dsq^_OBlrUaMb7uhLg$%IL+`K!|ZTsp^pH6EN#h`4+S?Gxyqx&FR;XX6;V&F z94oB~skIw$M^-fNI%rtN?bMbSJSyjR@zw(GL}a7TD4J;zAo zy^8GaHR_28xbkI=rM!pnFZfNCeJiJD-rESmMx%?g`!>gKz6O~EiJpe@%BoLu&pSkX zJ5om&i({2<*LF}|rhsovYGu~Dk@_>ban)DlJB8B;>0rA7H>!3MDPOGA6(S0acA`gB zUB;T^yOu#j=M;S)8t_f-N#}c*IybQ!^Upn?l@)&o^Zm>$&P1=f2>2iFiSo70tjb52 za~s7U!qps@M@Ex5>9~IJ)`BCr)b$2tSGO9`6%0=&Si@zt&v2e)q`7m#q?*9Ht9zcp z2NDjTS>0-idY#PmXllbVt{<45l&%;TJ$*1Rx;$Tu0Le23rww7Alep>~Zsef>L;1&j zgZ-L;PzqWUjj%Jy39wk*gZK{zqQ3X-_kj0laukY7 z6dhMFaIhdY(bpGRGWOL0@NyZHmu1FeYYMd%Xbnhh&RmiQ%mMbww%0wMWy6_xgoj?d40xrZ+;?;y$X;8#1p6(HB8jM+#CVil zec2MDga7J!FdlL?!TXh%yVXyO7@+~Wz_A@hcwjp?fPg&{ZJH-fFhTAix3WDfDHH^A)2uomVsv#R7FTMZ<)zEQMaJdSFtB{Obm>75(d`*vA_dY05h2QCHU5JY+#v5FGk zAi--KeCGx&Uqts59ZCv_PX?=A<(!@(8l|h|f1?E&)sMf+-TJ8HYcGM*1bDj;j@_`y3-O`@bLkH_lN35)H>`Ra z4LcK3r(tEX_OUVJYM}$7VLNw2!&2Zhtk|;}Rtjk~tdz!T*jGm5t{n`k8`wQ$zAlVP z-u28YYs1cb2b?fwflYIyVM(+bmbXd8R(WumIy|s%Z`IS4nN0XSI| z^;+7^0JRRnUt>^;EUR*jvf#de20QT39Iaqc%ua#uIRe{rDr-(i{0ezS?pAqTx3XRb ze4DMTdrD&NgW&8{^${y#=Opm+p`4@!RlymeN-RTW-vaxcIP>uqI))Y+jGZCh-;AuP z@}oQp5uhrz2hL2fX<~8Ve2-irbE`xjmLZ&NssgV?jo-r*~o&=)3d^Y!f zAg6|)mt)o75=VytonY&FUqh!fo-JG-w4cpXp_xK^1(erG6Muy!_kbf`RJT`Ht{wn> z)aDq8X;^?nu2rv~PjRwTUjVvIm|l8yNlM{3vVij7MJHo1ir+}xClO^v&R72zwYRe|e z&UoOnvf1e#56%YFs*q)874SE+*%{jaoNbCxAyst@_$S#o86Sf)UlqYZM9O&w_ye0` zB!030@OoA2j%6ae7tV&UWpQ`J5*GVYRjN7apc*hQ!$a>_FII)}u5RRFwYa!dsJ38s zq9s<2G4jG^fS-$~Yt?1aEL37-XLbEW7#$DVBAcp1GH7^IuJ^zktVU&6C0HNIl;Ab0 zeDfSUiQ1%!gI4V$WEOSGT+E?czv>;eO>t~i)tVImblN-%BW_jg%d0s0NFJ()Q1b1L zsI5vyc=;Sh)LZHxwQA48Xc4tbsgh|}jbV$Agi~G`F%kqjpi~3MTRK=Y2o`oqsqT;u zcCaf)9Oc1lVfegKlK{@O33}8^EcyW06;%VnI43H#7WhVT^3Zl-EksDvm+ELETDOG)G&*KdB0}EbZ}traId4dAF$F z)s;`I$#yxQ)sD7?|4=0m*wQ$A0UZu%^KFnQJPckB55m*)&j4Ku!hBUD%4HU8Y(>*= zfc^@?2bux)nBNb>$q#B-RCP1rp2hhR_?>JVKGqV|$~<02FG`ewQ;rCp8rJkFsEL&DyszWWO7(s zujcR!C~BZt7-1j-Of%peLOG*b_Ze+OjW+uqgunfO4JRJ#LP^&Hurb{{^&#*%z?Njg zM?DREvDx4}@QuKBX2X}i4}87J`*i9gu=CmQaf^WOF%t>{{}$L!*>HZ3FzP+?+F{@k z7(jAk)BdrF4J^_*+f{F1$cWnKS&oI2Dfy zqLivIpg=bGo_f9v+5?KJHlT)t#Wj2Q+XWXyyDOkxgjsF+O}nU{6vip7%}YL09Bq5} zd*(CiByt&`RgShj{1w1bMjB@iphH1zYxrB#0`I`l^UHv)24QRX`v3#C^wwVi{TYO< z;jeXDYxv949|>&Qb9?xkA7KrDRRGl_teeCd{%WnX^6mhrvjf}1U#0bMYY4=X2uUOb zBf=j3F1!oU5)fWr^TWd(pIk;CG8HOCtMemG@ungVYh%CU#P_0!>RUtrG?4|XAE_``g! zW&>NC4Y!8Bde?w&0Jb9=ZVi8raE_r)06Uirw}!tV+kxK!_G32O8vb&=2Hb-IBo{XA zAFG(dA9@joKN(Sc9QEQNa)A?FWC~7>{QD8A(Ty2ThCk{O(oHxyy8T>hMK|TTIKqEo z3DV6-_vWK+bTRcTvYE!Lo?vzIilTmzU*o0JVqhB_oF?UDLX+xpGL5cu?Hl;KAEZzJ z7crUt84z7R*JdkbzXkDolH0O=1zLUk1Lq?#I-ys2>Cfu_Jiqi$2IF>^PZ*AumA zpn7v))3qotnuwKdj2n%KJtn%5;?X;qhB3b26hs^r9hgy{@t{dZDu%DytoCbt9F0=! z3lV0uv1f2JT8<*kYC~G$XpDLRmF+brY}taJ=q5@oj(iHk_B9v+>Ujv3VT*5o#`iYG z&PX5--CU_RA%EAwn6Z)h9I93Ig;2e3Bf7bb1UetxN~s$F?h|C=c-i(A)={ayAornQ z8Vh#Ci39dR`6(qOR{=1RY?d`kN9G5izk0j1J^lgjMh+WUcWS=QsBictvA&}Rs|jcZ za~N0?Y-`$|N%QXl&r}t$#Npiq*0;F~oVWg$MIXy-_(=4zV&l3*OJ}K%1-#W+X0fDB zXSoAQKhoNK`X`v(SMS!*zSoF00@Bjc?*UQq~59B>Z*Xk_EMJ@Dm zAYVDC)miTJMxH-G`nQc(bzyauoT$J2*mO0$2@mbgavW!jW_du>Lt%6lR=QE|OjEot zG6H8eU!rVYwI^I6d?m1g?;?VY!j!AM;lm)AN*jYufXBN(`YzNIm2(yd%>ga4VJns= zubM`a?`o5GffoE_CrwhWc7?wW$r2;4YbxFOdM?YtZi+o zA`ru4Z1H1hYch65VaipHuss6x6ki&M@ zoM|fIERcd>>yeF|cbYM7A-@db8k_9h#db*C@&UM&!aQxPF1HW(DTl)=UV17i-*)5( zL#eQOsn+!M4M@K`#B3AlH1$mq>=q0ArHN(Nj0qDT3ZMf0*y0(+#x%8?`L_uhf(ck= zMKi`DyoTU(Baa31vKV^44tg|A%_;%i>0zs)oIJduI|+Jo9bH*UOv=xN;}|*Jq=ts?L%qpWPBX?YyZ|_5$+PU$nhxHu@D7*=EM76;wE(AG7TzL^Nve^jXjv!U z1mO(_XDoTFFywpUB6v+b#|m0K*NiDAycOWA$~-`EL1m)?%M0fl+m7zG%;PD68`toX?;WHsH%n=cWk?%kn(q`LrNbcrC z2=xZs#d38N-U3x>304{@4VC#34huzKlu2o=xL(Ac8OGzFjXay^EfkANw+>bnb%v(E+dCZkVvJ@#Olhu$ehpvx0vqk%P9HQ9 zdFr3?glcrvGPDS!mq~mEP8*5k;c!X|m7H$D+W_&y;u@Z*zRL&WM<`$+?V)EBtG?dD zPjPBK8nbP|yeNOlA-(1(1&OuhNFb2%9>xmDa$t)O9EW1&AgnFa7ci;{*h0(lEcK{0 zR8Fe0lkoUeAuw=RpAD%}$sBYM>c+Sg4G=2oQN$~Ya5M(lEkTGGDxGpQ48#c}r?XWC zu#_5@2jLm}sF~1bmAW$-^0v zj7#V3LlZ0Jg6s8o%Co@2)g)KgZ)K^cmp~{J4 z^@J_7tQz(B1l%!5=cwy&)Sc4MRC93X8Pf#Ld%ku-$y56VdWYwq6?_#TvFJSH@wBIRc}7vF6MtqSnvS{GRE~vL=LWIiurXLkM-(Z#DQL~PHg-PthZ2t zsb4@a#=_>07{j!y)70!;V6;*@(KW5{-J~H^9K=c_{|>Sq+NB#!QwQ%sqm3Gb4rpn( zM580v{r|0@?+GPl7KB!Nl^Ji9U>cZnY_^ej`WE1h>Rb!E{D3w%@HEw>Gw@F82AWGQ zWnjvbOg{wYjKiB$5uMo8Ma{zCi?9e2%6-5J1Dh_%eHJI!6DKv;42@^h#B-t%E*eF^ zZumbmg1X*L@1Z^?CBF^>{namMKxF9=13jR;z%d}V-JC4F;=uv*4Vk!uQzwG|&_dW6 zq6+48N*N*cw!zjXj=lfGK)DJq@T@9$Q$KSAha$zmf1n(P*vL``kMTf!F=nY&Pr}ML z)zoyXM2VG3kFgLeS1=_5q0wu63Ifv|_Y<@{Z^xi|JbgS2`3Eau-jj^*cYF3?E(-IU z$Fvmg2_V!xo=4qqHszUD1^0nGvFk8Idz$7#U3un4VwpC$L*tG{tf#^?T(|Jt?Sb<- z&r)36i}SqR7z2){_!>M$;W1vojN^H(AByW)eiBPtPvd&{6o%)IJs8??ZSFeVN-j15 zxlM{g6M7$uPv-@&r*Qr;#0aa*TXS9$2Ysvqzd2X&MCk1qcrfaH@W&(HS=i#!FvNNLKxEWC zi+La{-{B5`mjim!frEF(`hQ8sO8%>%Yn-twh z4txtVA^Ld>tq7!=gVuFj0h-t|4L-Dhv=b32k+@lRY5;Kg;w<<8KqEupR@Bo$#e3joh0b~H}G^UaLL$jRtE*y3McY;bXFMPuy*bO2QbP(uf1;p7Hz zaA&dW6=7U<0yD#52ct*F?)2To!9nb@^QdXyEpWJ5Vt2uW<3fuP+9pumA#E)4*0Edm zX~fIY%^s(Da|-nWXg3|IN~}N2hchBNm3T>L(L$RK%1VbOeh4@Dy8yzZ_0x^4 z5PS!medMt!jAVYgJFLx03@t3BItS!42dz7d0orcByFl(k`Wq2(LkH+&45nf27uE!v z12L2rTNXI8M@azUTuB?r8iEx!oy2JbgDb2HW-R3y&bXl3qG49%KdUB?M>Dq-nW90=*|3AR)jwTlScFwc^J$869(+)t!#uC z|KBt1bZowl=OR5weSl1F(!W$_dS!46Z53}@07mkX0O)hSTxzxFpHSf|bMc)7eMG00 zZ7hMs6OL5@I!csAjpx+rc7W##R2$-!*s8ae(MM-1Id*wf$u(Yf#R@U6V+D@{{;L{$ zUteg9i@(D;B24ih7K7;cY4zN@1VIG9{+k#U(jBQg0r)C;I7XYh(H1S%&o zio+J~p^?NY4p~6!2fbQV3tQ0b`;K zZwo?}Yo1cINrhek@{+p$B!2pUFfP=JM2qA(O>s(9>($UVoN>lvc&L?7*&eDUZO1-g z_*n7tRk7J1){|?^>O8pLV8b;zIw@t(Qn>l*=r=*Kfo>Fo4P^G;EMz|C1ItU(g5>fb z*3o3%o5(^={z1s~5#Y8PT|neJ@UYCd&qC(12bPa}gXGyDF4bfXGg-)-l|Y`l59G4C zfbW2KIJ;%bXah{pHt$Pt?qoMA_7vAHFlt0smcoRtM^rBUxPW+i2S8zc+$d zNCvGkD(x81LbIbW8kAN2aNsU<7?VwOg1-Ep@CzouXr)va=nTLXKO7t{wRGgq*CR;| z)#y`YsM%mF#bysBLYClY4%n{4;7}6R7LAW#bRF8=8b)On`2S-V^}=R3Z1I!ntjx3j z$1vKslNGLwpwgUbGofZA>tXZ)V){88t6o6*+D4sWRG{e)FTrM)U9y!N?{3j$XGjFg zE|aN`Z4o#81!?eZgXG@%#25*)8gg)$;J?Xux3v`bMilCjyo z30ZvG3YhH@>f5;XSS7?oPmo(Ce?c*i+(S~;{%DMFSSkOkO=o=+76d!cul9$C-N3pw1ja=k~HkdJVnjaM5-38|t z@|de0Hc<*bV2rDQkdIq^2M>E$B{+d(eKB0+p`aeLb!i`G}xDrNX#b-pnw{fc~c>3sSRp{kl zRR}dFJ2AHSp|m2WkFIv>QEdz|w6;rFRlukjWQ}YITTf2GO2A^dh1CU&o(}7Im3#=a z&Xd1&XkkK|=unKbz9(7a$&~Y2LY|fI&#p^9u6-o2xI3V5kV;ip+?wKOmm#pdV0wrqwp?85gDcd{J9)hglpkZEpg!Z+k}-1Tyw#*WnpVO0jBuFcY+ zl6hkfvJe~Q%{2$oQxBx1l@4m+cq0B@_;A%4q&bS?>FphIWWK^w7h z88-tCxK;BgX2C*?Z@MM4;~06ciaHL}Kf&;T5&r>>yr;1L!FgJP!B^LKkd`hB0v_uL69i zBrBC4@)9q+FjPNPXVUS>ZDxr8pkJyXiJvn^Bdym8D7rtVd_Tl_xI-0E?EX>> z#nBY9U&>a6f?rdMfUS1$6~QXp#42P3sBJcESK%2SR&*j-QgaFiQc{9YI{w6wkoK$2ujWpQI< z{+VUkeZWQx43DCNTkxseFgkT&sE^`F9${{B~fCf?OImlnIF-zPq zO09)xt1Y$$+22>g7JXL-Y{bsK&{-IEoidqyt{0KL9S%kKwE1#lLTB=n|{zRxJ#^?7yt3^Kd^P66j8RG1jq?HI_WD{6+1q_knXSsi=0Ze5Jklw2Ig z1(`A!mtFhSWtdPd$a7+gk3#u$^XaAX`+QH$TGN?AO#-bhsWGgI>mzFzK=Mw%i z;HKMr<9XG`jch-#v>%#oW5W*XE z3Pvu{P)qvO9y=qW%Mj!@_`(b)zi=)o)i2nE!B9N^A23UvdR_SJlxt2gJi;#tZaJH8 zWIizxHU!}5iR5SX86TH`K0-eFn3jw~Z}oiai)%r(Ry^e>u3kV*fM_-?jG`NQVe{!| z*nSd1^|FoF{qgtG_~2g32QChm#w)PKouLvaPdVvQr=f6*N)wz?@iLgcxjG9~Xku*FYfMsu(;5(uO$ zcd53JcXcqybrQdRk+Ra|xei@3CW>yWG1yIacoMO=5Qy0*m zXRb0%OjB_?p|RR^8*5tY7JOyVxD56kN8{F!pho-4&{*p#g%zfyQAIQ&QNTDBQVM06 zztj)pb*^XOxiutI6>W#t0o1E5lUyk>5e@%1a50*&W62>u3~Z4 z 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

    Oq(|4>452^A@o4$q0)aJ2C>{VFR(M3CF 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

    bMVc+!c=daL0Xw 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

  • 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�~Jr7Ao1KH`r)iO;VJxN!357# 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